trytond-account_payment_es_.../payment.py

189 lines
7.4 KiB
Python

## coding: utf-8
# This file is part of account_payment_es_csb_32 module for Tryton.
# The COPYRIGHT file at the top level of this repository contains
# the full copyright notices and license terms.
from trytond.model import fields
from trytond.pool import PoolMeta
from trytond.pyson import Eval
import logging
try:
from retrofix import Record, write, c32
except ImportError:
logger = logging.getLogger(__name__)
message = ('Unable to import retrofix library.\n'
'Please install it before install this module.')
logger.error(message)
raise Exception(message)
__all__ = [
'Journal',
'Group',
]
__metaclass__ = PoolMeta
class Journal:
__name__ = 'account.payment.journal'
csb_32_grantor = fields.Char('Grantor', states={
'required': Eval('process_method') == 'csb32',
})
@classmethod
def __setup__(cls):
super(Journal, cls).__setup__()
if ('csb32', 'CSB 32') not in cls.process_method.selection:
cls.process_method.selection.extend([
('csb32', 'CSB 32'),
])
@classmethod
def view_attributes(cls):
return super(Journal, cls).view_attributes() + [
('//group[@id="csb_19"]', 'states', {
'invisible': Eval('process_method') != 'csb32',
})]
class Group:
__name__ = 'account.payment.group'
def set_default_csb32_payment_values(self):
values = self.set_default_payment_values()
values['grantor_identifier'] = values['payment_journal'].csb_32_grantor
if not values['province'] or not values['city']:
self.raise_user_error('configuration_error',
error_description='company_without_complete_address',
error_description_args=(values['name'],))
values['record_count'] = 0
values['payment_count'] = 0
values['document_number'] = 0
for receipt in values['receipts']:
if not receipt['vat_code']:
self.raise_user_error('configuration_error',
error_description='party_without_vat_code',
error_description_args=(receipt['party'].name,))
if not receipt['address']:
self.raise_user_error('configuration_error',
error_description='party_without_address',
error_description_args=(receipt['party'].name,))
if not receipt['province']:
self.raise_user_error('configuration_error',
error_description='party_without_province',
error_description_args=(receipt['party'].name,))
return values
@classmethod
def process_csb32(cls, group):
def set_file_header_record():
record = Record(c32.FILE_HEADER_RECORD)
record.record_code = '02'
record.data_code = '65'
record.file_date = values['creation_date']
record.number = values['number']
record.bank_code = values['bank_account'][0:4]
record.bank_office = values['bank_account'][4:8]
return write([record])
def set_order_header_record():
record = Record(c32.ORDER_HEADER_RECORD)
record.record_code = '11'
record.data_code = '65'
record.file_date = values['creation_date']
record.order_number = '0001'
record.grantor_identifier = values['grantor_identifier']
record.truncated = '1'
record.account_payment_1 = values['bank_account']
record.account_payment_2 = values['bank_account']
record.account_payment_3 = values['bank_account']
return write([record])
def set_individual_1_record():
record = Record(c32.INDIVIDUAL_1_RECORD)
record.record_code = '25'
record.data_code = '65'
record.document_number = str(values['document_number']).zfill(15)
record.file_date = values['creation_date']
record.order_number = '0001'
record.province_code = values['province']
record.ine = values['ine_code']
record.city = values['city']
record.amount = receipt['amount']
record.date_due = receipt['maturity_date']
return write([record])
def set_individual_2_record():
record = Record(c32.INDIVIDUAL_2_RECORD)
record.record_code = '26'
record.data_code = '65'
record.document_number = str(values['document_number']).zfill(15)
# 1: 'bill of exchange', 2: 'receipt', 3: 'promissory note'
record.document_type = '2'
# Mandatory for 'bill of exchange' and 'promissory note'
record.send_date = values['creation_date']
# Code of accepted: 1: accepted, 2: not accepted
record.accept_code = '2'
# 0: No fees, 1: Expenses, 9: Order expressly notarial protest
record.expenses_clause = '0'
record.account = receipt['bank_account']
record.sender_name = values['party'].name
record.receiver_name = receipt['party'].name
record.additional_information = ''
return write([record])
def set_individual_3_record():
record = Record(c32.INDIVIDUAL_3_RECORD)
record.record_code = '27'
record.data_code = '65'
record.document_number = str(values['document_number']).zfill(15)
record.receiver_address = receipt['address'].street
record.receiver_zip = receipt['address'].zip
record.receiver_city = receipt['address'].city
record.receiver_province_code = receipt['province']
record.receiver_ine = '0000000'
record.receiver_nif = receipt['vat_code']
return write([record])
def set_order_footer_record():
record = Record(c32.ORDER_FOOTER_RECORD)
record.record_code = '71'
record.data_code = '65'
record.file_date = values['creation_date']
record.order_number = '0001'
record.amount = values['amount']
record.record_count = str(values['record_count'])
record.payment_count = str(values['payment_count'])
return write([record])
def set_file_footer_record():
record = Record(c32.FILE_FOOTER_RECORD)
record.record_code = '98'
record.data_code = '65'
record.amount = values['amount']
record.order_count = '00001'
record.record_count = str(values['record_count'])
record.payment_count = str(values['payment_count'])
return write([record])
values = Group.set_default_csb32_payment_values(group)
text = set_file_header_record()
values['record_count'] += 1
text += set_order_header_record()
values['record_count'] += 1
for receipt in values['receipts']:
values['document_number'] += 1
text += set_individual_1_record()
values['record_count'] += 1
text += set_individual_2_record()
values['record_count'] += 1
text += set_individual_3_record()
values['record_count'] += 1
values['payment_count'] += 1
text += set_order_footer_record()
values['record_count'] += 2
text += set_file_footer_record()
group.attach_file(text)