Files
ncf_manager/sequence.py
T

224 lines
11 KiB
Python

# This file is part of ncf_manager module for Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
from string import Template
import time
from sql import Literal, For
from trytond.exceptions import UserError
from trytond.model.exceptions import ValidationError
from trytond.model import ModelView, ModelSQL, DeactivableMixin, fields, Check
from trytond.pyson import Eval, And
from trytond.transaction import Transaction
from trytond.pool import Pool, PoolMeta
from trytond.i18n import gettext
from trytond import backend
class Sequence(metaclass=PoolMeta):
__name__ = 'ir.sequence'
from_number = fields.Integer('From Number',
states={
'required': Eval('prefix').in_(['B01', 'B02', 'B03', 'B04',
'B11', 'B12', 'B13', 'B14', 'B15', 'B16', 'B17', 'E31',
'E32', 'E33', 'E34', 'E41', 'E43', 'E44', 'E45', 'E46', 'E47']),
'invisible': ~Eval('prefix').in_(['B01', 'B02', 'B03', 'B04',
'B11', 'B12', 'B13', 'B14', 'B15', 'B16', 'B17', 'E31',
'E32', 'E33', 'E34', 'E41', 'E43', 'E44', 'E45', 'E46', 'E47'])
}, depends=['prefix'])
until_number = fields.Integer('Until Number',
states={
'required': Eval('prefix').in_(['B01', 'B02', 'B03', 'B04',
'B11', 'B12', 'B13', 'B14', 'B15', 'B16', 'B17', 'E31',
'E32', 'E33', 'E34', 'E41', 'E43', 'E44', 'E45', 'E46', 'E47']),
'invisible': ~Eval('prefix').in_(['B01', 'B02', 'B03', 'B04',
'B11', 'B12', 'B13', 'B14', 'B15', 'B16', 'B17', 'E31',
'E32', 'E33', 'E34', 'E41', 'E43', 'E44', 'E45', 'E46', 'E47'])
}, depends=['prefix'])
approved_qty = fields.Function(fields.Integer('Approved Quantity',
states={
'invisible': ~Eval('prefix').in_(['B01', 'B02', 'B03', 'B04',
'B11', 'B12', 'B13', 'B14', 'B15', 'B16', 'B17', 'E31',
'E32', 'E33', 'E34', 'E41', 'E43', 'E44', 'E45', 'E46', 'E47'])
}), 'on_change_with_approved_qty')
expiration_date = fields.Date('Expiration Date',
states={
'required': Eval('prefix').in_(['B01', 'B03',
'B11', 'B12', 'B13', 'B14', 'B15', 'B16', 'B17', 'E31',
'E33', 'E41', 'E43', 'E44', 'E45', 'E46', 'E47']),
'invisible': ~Eval('prefix').in_(['B01', 'B02', 'B03', 'B04',
'B11', 'B12', 'B13', 'B14', 'B15', 'B16', 'B17', 'E31',
'E32', 'E33', 'E34', 'E41', 'E43', 'E44', 'E45', 'E46', 'E47'])
}, depends=['prefix'])
remaining_qty = fields.Function(fields.Integer('Remaining Quantity',
states={
'invisible': ~Eval('prefix').in_(['B01', 'B02', 'B03', 'B04',
'B11', 'B12', 'B13', 'B14', 'B15', 'B16', 'B17', 'E31',
'E32', 'E33', 'E34', 'E41', 'E43', 'E44', 'E45', 'E46', 'E47'])
}), 'on_change_with_remaining_qty')
@fields.depends('sequence_type')
def on_change_with_name(self, name=None):
if not self.sequence_type or not self.sequence_type.name:
return None
if self.sequence_type.name == 'Factura de Crédito Fiscal':
return 'Factura de Crédito Fiscal'
elif self.sequence_type.name == 'Factura de Consumo':
return 'Factura de Consumo'
elif self.sequence_type.name == 'Nota de Débito':
return 'Nota de Débito'
elif self.sequence_type.name == 'Nota de Crédito':
return 'Nota de Crédito'
elif self.sequence_type.name == 'Comprobante de Compras':
return 'Comprobante de Compras'
elif self.sequence_type.name == 'Registro Único de Ingreso':
return 'Registro Único de Ingreso'
elif self.sequence_type.name == 'Comprobante para Gasto Menor':
return 'Comprobante para Gasto Menor'
elif self.sequence_type.name == 'Comprobante de Regímen Especial':
return 'Comprobante de Regímen Especial'
elif self.sequence_type.name == 'Comprobante Gubernamental':
return 'Comprobante Gubernamental'
elif self.sequence_type.name == 'Comprobante para exportaciones':
return 'Comprobante para exportaciones'
elif self.sequence_type.name == 'Comprobante para Pagos al Exterior':
return 'Comprobante para Pagos al Exterior'
elif self.sequence_type.name == 'Factura de Crédito Fiscal Electrónica':
return 'Factura de Crédito Fiscal Electrónica'
elif self.sequence_type.name == 'Factura de Consumo Electrónica':
return 'Factura de Consumo Electrónica'
elif self.sequence_type.name == 'Nota de Débito Electrónica':
return 'Nota de Débito Electrónica'
elif self.sequence_type.name == 'Nota de Crédito Electrónica':
return 'Nota de Crédito Electrónica'
elif self.sequence_type.name == 'Compras Electrónico':
return 'Compras Electrónico'
elif self.sequence_type.name == 'Gastos Menores Electrónico':
return 'Gastos Menores Electrónico'
elif self.sequence_type.name == 'Regímenes Especiales Electrónico':
return 'Regímenes Especiales Electrónico'
elif self.sequence_type.name == 'Gubernamental Electrónico':
return 'Gubernamental Electrónico'
elif self.sequence_type.name == 'Exportación Electrónico':
return 'Exportación Electrónico'
elif self.sequence_type.name == 'Pagos al Exterior Electrónico':
return 'Pagos al Exterior Electrónico'
@fields.depends('sequence_type')
def on_change_with_prefix(self, name=None):
if not self.sequence_type or not self.sequence_type.name:
return None
if self.sequence_type.name == 'Factura de Crédito Fiscal':
return 'B01'
elif self.sequence_type.name == 'Factura de Consumo':
return 'B02'
elif self.sequence_type.name == 'Nota de Débito':
return 'B03'
elif self.sequence_type.name == 'Nota de Crédito':
return 'B04'
elif self.sequence_type.name == 'Comprobante de Compras':
return 'B11'
elif self.sequence_type.name == 'Registro Único de Ingreso':
return 'B12'
elif self.sequence_type.name == 'Comprobante para Gasto Menor':
return 'B13'
elif self.sequence_type.name == 'Comprobante de Regímen Especial':
return 'B14'
elif self.sequence_type.name == 'Comprobante Gubernamental':
return 'B15'
elif self.sequence_type.name == 'Comprobante para exportaciones':
return 'B16'
elif self.sequence_type.name == 'Comprobante para Pagos al Exterior':
return 'B17'
elif self.sequence_type.name == 'Factura de Crédito Fiscal Electrónica':
return 'E31'
elif self.sequence_type.name == 'Factura de Consumo Electrónica':
return 'E32'
elif self.sequence_type.name == 'Nota de Débito Electrónica':
return 'E33'
elif self.sequence_type.name == 'Nota de Crédito Electrónica':
return 'E34'
elif self.sequence_type.name == 'Compras Electrónico':
return 'E41'
elif self.sequence_type.name == 'Gastos Menores Electrónico':
return 'E43'
elif self.sequence_type.name == 'Regímenes Especiales Electrónico':
return 'E44'
elif self.sequence_type.name == 'Gubernamental Electrónico':
return 'E45'
elif self.sequence_type.name == 'Exportación Electrónico':
return 'E46'
elif self.sequence_type.name == 'Pagos al Exterior Electrónico':
return 'E47'
@fields.depends('sequence_type')
def on_change_with_padding(self, name=None):
if not self.sequence_type or not self.sequence_type.name:
return 0
if self.sequence_type.name == 'Factura de Crédito Fiscal':
return 8
elif self.sequence_type.name == 'Factura de Consumo':
return 8
elif self.sequence_type.name == 'Nota de Débito':
return 8
elif self.sequence_type.name == 'Nota de Crédito':
return 8
elif self.sequence_type.name == 'Comprobante de Compras':
return 8
elif self.sequence_type.name == 'Registro Único de Ingreso':
return 8
elif self.sequence_type.name == 'Comprobante para Gasto Menor':
return 8
elif self.sequence_type.name == 'Comprobante de Regímen Especial':
return 8
elif self.sequence_type.name == 'Comprobante Gubernamental':
return 8
elif self.sequence_type.name == 'Comprobante para exportaciones':
return 8
elif self.sequence_type.name == 'Comprobante para Pagos al Exterior':
return 8
elif self.sequence_type.name == 'Factura de Crédito Fiscal Electrónica':
return 10
elif self.sequence_type.name == 'Factura de Consumo Electrónica':
return 10
elif self.sequence_type.name == 'Nota de Débito Electrónica':
return 10
elif self.sequence_type.name == 'Nota de Crédito Electrónica':
return 10
elif self.sequence_type.name == 'Compras Electrónico':
return 10
elif self.sequence_type.name == 'Gastos Menores Electrónico':
return 10
elif self.sequence_type.name == 'Regímenes Especiales Electrónico':
return 10
elif self.sequence_type.name == 'Gubernamental Electrónico':
return 10
elif self.sequence_type.name == 'Exportación Electrónico':
return 10
elif self.sequence_type.name == 'Pagos al Exterior Electrónico':
return 10
@fields.depends('from_number', 'until_number')
def on_change_with_approved_qty(self, name=None):
if self.from_number and self.until_number:
return self.until_number - self.from_number + 1
@fields.depends('number_next', 'until_number')
def on_change_with_remaining_qty(self, name=None):
if self.until_number and self.number_next:
return self.until_number - self.number_next + 1
class SequenceStrict(Sequence):
"Sequence Strict"
__name__ = 'ir.sequence.strict'
_table = None # Needed to reset Sequence._table
_strict = True