!10419 Merge branch 'dev' of <a href="https://gitee.com/jinan-pengyusen-data/gzth">https://gitee.com/jinan-pengyusen-data/gzth</a> into dev_wang
Merge pull request !10419 from 李鹏宇/dev_wang
This commit is contained in:
@@ -44,26 +44,26 @@ class PropertyStatementsWizard(models.Model):
|
||||
for rx in range(4, sh.nrows):
|
||||
row = sh.row(rx)
|
||||
self.property_bank_statements_dj_data(row, your_own_account)
|
||||
elif self.selection_bank in ('gs', 'xy'):
|
||||
# 工商银行(兴源格式):xlsx文件,数据从第2行(索引1)开始
|
||||
import openpyxl, io
|
||||
wb = openpyxl.load_workbook(io.BytesIO(file_content))
|
||||
ws = wb.active
|
||||
for i, row_cells in enumerate(ws.iter_rows(values_only=True)):
|
||||
if i < 1: # 跳过表头行
|
||||
continue
|
||||
self.property_bank_statements_xy_data_openpyxl(row_cells)
|
||||
else:
|
||||
first_round = True
|
||||
book = xlrd.open_workbook(file_contents=file_content)
|
||||
sh = book.sheet_by_index(0)
|
||||
for rx in range(1, sh.nrows):
|
||||
row = sh.row(rx)
|
||||
if self.selection_bank == 'gs':
|
||||
if first_round:
|
||||
first_round = False
|
||||
continue
|
||||
if self.selection_bank == 'js':
|
||||
self.property_bank_statements_jh_data(row)
|
||||
elif self.selection_bank == 'sh':
|
||||
self.property_bank_statements_sh_data(row)
|
||||
elif self.selection_bank == 'ms':
|
||||
self.property_bank_statements_ms_data(row)
|
||||
elif self.selection_bank == 'gs':
|
||||
self.property_bank_statements_gc_data(row)
|
||||
# elif self.selection_bank == 'xy':
|
||||
# self.property_bank_statements_xy_data(row)
|
||||
|
||||
count_after = self.env['property.bank.statements'].search_count([])
|
||||
_logger.info('[银行流水导入] 银行=%s 导入前总条数=%d 导入后总条数=%d 新增=%d', self.selection_bank, count_before, count_after, count_after - count_before)
|
||||
@@ -465,6 +465,76 @@ class PropertyStatementsWizard(models.Model):
|
||||
# if not existing_record:
|
||||
# self.env['property.bank.statements'].create(bank_data)
|
||||
|
||||
def property_bank_statements_xy_data_openpyxl(self, row):
|
||||
"""工商银行(兴源)openpyxl版本解析,row为元组,列结构:
|
||||
0:交易时间, 1:对方单位, 2:摘要, 4:转入金额(贷时取), 7:借贷标志,
|
||||
8:发生额(借时取), 9:对方账号, 16:本方账号, 22:对方行名, 31:顺序号
|
||||
"""
|
||||
def get_val(idx):
|
||||
v = row[idx] if len(row) > idx and row[idx] is not None else ''
|
||||
return str(v).strip()
|
||||
|
||||
time_val = get_val(0)
|
||||
if time_val and time_val != 'None':
|
||||
try:
|
||||
start_time = datetime.strptime(time_val, '%Y-%m-%d %H:%M:%S')
|
||||
except Exception:
|
||||
start_time = None
|
||||
else:
|
||||
start_time = None
|
||||
|
||||
direction_val = get_val(7)
|
||||
if direction_val == '贷':
|
||||
lending_direction = 'loan'
|
||||
amount_str = get_val(4).replace(',', '') # E列:转入金额
|
||||
elif direction_val == '借':
|
||||
lending_direction = 'borrow'
|
||||
amount_str = get_val(8).replace(',', '') # I列:发生额
|
||||
else:
|
||||
return
|
||||
|
||||
try:
|
||||
original_amount = float(amount_str)
|
||||
except Exception:
|
||||
return
|
||||
if not original_amount:
|
||||
return
|
||||
|
||||
name = get_val(9) # 对方账号
|
||||
name_account = get_val(1) # 对方单位
|
||||
remake = get_val(2) # 摘要
|
||||
bank_branch = get_val(22) # 对方行名
|
||||
your_own_account = get_val(16)
|
||||
serial_number = get_val(31) # 顺序号
|
||||
|
||||
your_own_unit = self.classify_by_last_four(your_own_account)
|
||||
company_id = self._get_company_by_unit(your_own_unit)
|
||||
if not company_id:
|
||||
return
|
||||
|
||||
dedup_key = serial_number if serial_number and serial_number != '0' else (time_val + name)
|
||||
existing_record = self.env['property.bank.statements'].search(
|
||||
[('serial_number', '=', dedup_key)], limit=1
|
||||
)
|
||||
bank_data = {
|
||||
'name': name,
|
||||
'name_account': name_account,
|
||||
'serial_number': dedup_key,
|
||||
'your_own_account': your_own_account,
|
||||
'your_own_unit': your_own_unit,
|
||||
'bank_branch': bank_branch,
|
||||
'original_amount': original_amount,
|
||||
'lending_direction': lending_direction,
|
||||
'start_time': start_time - timedelta(hours=8) if start_time else False,
|
||||
'remake': remake,
|
||||
'company_id': company_id.id,
|
||||
'bank_state': 'not_reconciled',
|
||||
}
|
||||
if not existing_record:
|
||||
self.env['property.bank.statements'].create(bank_data)
|
||||
else:
|
||||
existing_record.write(bank_data)
|
||||
|
||||
def _get_company_by_unit(self, unit_name):
|
||||
"""根据简称匹配 yuthon.property.company 配置,再匹配 res.company"""
|
||||
if not unit_name:
|
||||
|
||||
Reference in New Issue
Block a user