125 lines
4.5 KiB
Python
125 lines
4.5 KiB
Python
from odoo import models, fields, api, _, SUPERUSER_ID
|
|
from odoo.exceptions import UserError, ValidationError
|
|
from dateutil.relativedelta import relativedelta
|
|
from datetime import datetime, time, timedelta
|
|
import xlrd
|
|
import base64
|
|
import pandas as pd
|
|
import re
|
|
|
|
class PropertyStatementsWizard(models.Model):
|
|
_name = 'property.statements.wizard'
|
|
_description = '银行流水向导弹窗'
|
|
|
|
selection_bank = fields.Selection([('js', '建设银行'), ('gs', '工商银行')], string="选择银行")
|
|
excel_file = fields.Binary(string="上传Excel表")
|
|
excel_name = fields.Char(string="文件名")
|
|
|
|
def confirm(self):
|
|
"""
|
|
导入excel文件,按行读取数据并处理
|
|
"""
|
|
if not self.excel_file:
|
|
raise ValidationError('请上传文件。')
|
|
book = xlrd.open_workbook(file_contents=base64.decodebytes(self.excel_file))
|
|
sh = book.sheet_by_index(0)
|
|
for rx in range(1, sh.nrows):
|
|
row = sh.row(rx)
|
|
if self.selection_bank == 'js':
|
|
self.property_bank_statements_jh_data(row)
|
|
elif self.selection_bank == 'gs':
|
|
self.property_bank_statements_gc_data(row)
|
|
|
|
def property_bank_statements_jh_data(self, row):
|
|
contract_ids = self.env['property.lease.contract']
|
|
if row[2].value:
|
|
formatted_date = self.convert_date_format(row[2].value)
|
|
start_time = pd.to_datetime(formatted_date)
|
|
else:
|
|
start_time = None
|
|
|
|
if row[10].value:
|
|
formatted_date = self.convert_date_format1(row[10].value)
|
|
journal_date = pd.to_datetime(formatted_date)
|
|
else:
|
|
journal_date = None
|
|
|
|
name = row[8].value
|
|
company_id = self.env['yuthon.property.company'].search([('name', '=', row[1].value)])
|
|
name_account = row[7].value
|
|
voucher_type = row[15].value
|
|
voucher_type_dict = {'电子转账凭证': 'electronic_transfer', '电汇凭证': 'telegraphic_transfer'}
|
|
voucher_type = voucher_type_dict.get(voucher_type)
|
|
remake = row[12].value
|
|
original_amount = row[4].value
|
|
bank_branch = row[9].value
|
|
account_code = row[13].value
|
|
number = row[16].value
|
|
extract = row[11].value
|
|
property_ids = []
|
|
bank_data = {
|
|
'name': name,
|
|
'contract_ids':[(6, 0, contract_ids.ids)] if contract_ids else [],
|
|
'property_ids':[(6, 0, property_ids)],
|
|
'company_id': company_id.id,
|
|
'start_time': start_time,
|
|
'name_account': name_account,
|
|
'voucher_type': voucher_type,
|
|
'original_amount':original_amount,
|
|
'journal_date':journal_date,
|
|
'bank_branch':bank_branch,
|
|
'extract':extract,
|
|
'account_code':account_code,
|
|
'number':number,
|
|
'remake':remake,
|
|
}
|
|
if float(row[4].value) != 0:
|
|
self.env['property.bank.statements'].create(bank_data)
|
|
else:
|
|
pass
|
|
|
|
def convert_date_format(self,date_str):
|
|
pattern = r'(\d{4})(\d{2})(\d{2}) (\d{2}:\d{2}:\d{2})'
|
|
return re.sub(pattern, r'\1/\2/\3 \4', date_str)
|
|
|
|
def convert_date_format1(self,date_str):
|
|
pattern = r'(\d{4})(\d{2})(\d{2})'
|
|
return re.sub(pattern, r'\1/\2/\3', date_str)
|
|
|
|
def property_bank_statements_gc_data(self, row):
|
|
message = row[18].value
|
|
if row[2].value:
|
|
start_time = pd.to_datetime(row[2].value)
|
|
else:
|
|
start_time = None
|
|
name_account = row[3].value
|
|
name = row[4].value
|
|
purpose = row[5].value
|
|
extract = row[6].value
|
|
remake = row[7].value
|
|
original_amount = row[8].value.replace(',', '')
|
|
bank_number = row[12].value
|
|
if row[13].value:
|
|
journal_date = pd.to_datetime(row[13].value)
|
|
else:
|
|
journal_date = None
|
|
number = row[15].value
|
|
bank_name = row[21].value
|
|
bank_data = {
|
|
'name': name,
|
|
'bank_name':bank_name,
|
|
'start_time': start_time,
|
|
'name_account': name_account,
|
|
'original_amount': original_amount,
|
|
'journal_date': journal_date,
|
|
'number': number,
|
|
'remake': remake,
|
|
'bank_number':bank_number,
|
|
'purpose':purpose,
|
|
'extract':extract,
|
|
'message':message,
|
|
}
|
|
if original_amount:
|
|
self.env['property.bank.statements'].create(bank_data)
|
|
else:
|
|
pass |