# 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