b9e0884e by 冯轩

Merge branch 'feature/fsm-contract' into feature/uat-tmp

2 parents 3474c20c 4c67581e
...@@ -62,6 +62,7 @@ class Finder: ...@@ -62,6 +62,7 @@ class Finder:
62 }, 62 },
63 "page_3": {"合同编号": self.item, 63 "page_3": {"合同编号": self.item,
64 "还款计划表": self.item, 64 "还款计划表": self.item,
65 "车辆代理商": self.item,
65 }, 66 },
66 "page_4": {"合同编号": self.item, 67 "page_4": {"合同编号": self.item,
67 "附加产品融资贷款本金总金额明细": self.item, 68 "附加产品融资贷款本金总金额明细": self.item,
...@@ -71,6 +72,7 @@ class Finder: ...@@ -71,6 +72,7 @@ class Finder:
71 "page_6": {"合同编号": self.item, 72 "page_6": {"合同编号": self.item,
72 }, 73 },
73 } 74 }
75 if self.is_asp:
74 self.init_result["page_7"] = {"合同编号": self.item, 76 self.init_result["page_7"] = {"合同编号": self.item,
75 } 77 }
76 self.init_result["page_8"] = {"合同编号": self.item, 78 self.init_result["page_8"] = {"合同编号": self.item,
...@@ -90,6 +92,25 @@ class Finder: ...@@ -90,6 +92,25 @@ class Finder:
90 "日期": self.item, 92 "日期": self.item,
91 }, 93 },
92 } 94 }
95 else:
96 self.init_result["page_7"] = {"合同编号": self.item,
97 "主借人签字": {"签字": self.item,
98 "日期": self.item,
99 },
100 "共借人签字": {"签字": self.item,
101 "日期": self.item,
102 },
103 "保证人1签字": {"签字": self.item,
104 "日期": self.item,
105 },
106 "保证人2签字": {"签字": self.item,
107 "日期": self.item,
108 },
109 "见证人签字": {"签字": self.item,
110 "日期": self.item,
111 },
112 }
113
93 114
94 def get_top_iou(self, poly, ocr_result): 115 def get_top_iou(self, poly, ocr_result):
95 """传入一个多边形, 找到与之最匹配的多边形 116 """传入一个多边形, 找到与之最匹配的多边形
...@@ -398,6 +419,39 @@ class Finder: ...@@ -398,6 +419,39 @@ class Finder:
398 seller['words'] = text 419 seller['words'] = text
399 return seller 420 return seller
400 421
422 def get_cldls(self):
423 seller = self.item.copy()
424 # 先找到 key
425 anchor_bbox = None
426 for block in self.pdf_info['2']['blocks']:
427 if anchor_bbox is not None:
428 break
429 if block['type'] != 0:
430 continue
431 for line in block['lines']:
432 if anchor_bbox is not None:
433 break
434 for span in line['spans']:
435 bbox, text = span['bbox'], span['text']
436 if text.strip() == '车辆代理商':
437 anchor_bbox = bbox
438 # print(anchor_bbox)
439 # 当找到了 key, 则根据 key 去匹配 value
440 if anchor_bbox:
441 half_width = self.pdf_info['2']['width'] * 0.5
442 for block in self.pdf_info['2']['blocks']:
443 if block['type'] != 0:
444 continue
445 for line in block['lines']:
446 for span in line['spans']:
447 bbox, text = span['bbox'], span['text']
448 if anchor_bbox[2]<np.mean(bbox[::2])<half_width and \
449 anchor_bbox[1]<np.mean(bbox[1::2])<anchor_bbox[3]:
450 seller['position'] = bbox
451 seller['words'] = text
452 return seller
453 return seller
454
401 def get_borrower_collection_account(self): 455 def get_borrower_collection_account(self):
402 account = self.item.copy() 456 account = self.item.copy()
403 account_name = self.item.copy() 457 account_name = self.item.copy()
...@@ -885,6 +939,9 @@ class Finder: ...@@ -885,6 +939,9 @@ class Finder:
885 repayment_schedule_table = self.get_repayment_schedule() 939 repayment_schedule_table = self.get_repayment_schedule()
886 # print(repayment_schedule_table) 940 # print(repayment_schedule_table)
887 self.init_result['page_3']['还款计划表'] = repayment_schedule_table 941 self.init_result['page_3']['还款计划表'] = repayment_schedule_table
942 # 车辆代理商
943 cldls = self.get_cldls()
944 self.init_result['page_3']['车辆代理商'] = cldls
888 ####################################### 945 #######################################
889 # Page 4 946 # Page 4
890 # 找合同编号 947 # 找合同编号
...@@ -907,6 +964,8 @@ class Finder: ...@@ -907,6 +964,8 @@ class Finder:
907 contract_no = self.get_contract_no(page_num='5') 964 contract_no = self.get_contract_no(page_num='5')
908 # print(contract_no) 965 # print(contract_no)
909 self.init_result['page_6']['合同编号'] = contract_no 966 self.init_result['page_6']['合同编号'] = contract_no
967
968 if self.is_asp:
910 # Page 7 969 # Page 7
911 # 找合同编号 970 # 找合同编号
912 contract_no = self.get_contract_no(page_num='6') 971 contract_no = self.get_contract_no(page_num='6')
...@@ -944,6 +1003,41 @@ class Finder: ...@@ -944,6 +1003,41 @@ class Finder:
944 # print(signature_name, signature_date) 1003 # print(signature_name, signature_date)
945 self.init_result['page_8']['见证人签字']['签字'] = signature_name 1004 self.init_result['page_8']['见证人签字']['签字'] = signature_name
946 self.init_result['page_8']['见证人签字']['日期'] = signature_date 1005 self.init_result['page_8']['见证人签字']['日期'] = signature_date
1006 else:
1007 # Page 7
1008 # 找合同编号
1009 contract_no = self.get_contract_no(page_num='6')
1010 self.init_result['page_7']['合同编号'] = contract_no
1011 signature_name, signature_date = self.get_last_page_signature(page_num='6',
1012 top='合同编号', bottom='共同借款人')
1013 if signature_name['words'] == None:
1014 signature_name, signature_date = self.get_last_page_signature(page_num='6',
1015 top='合同编号', bottom='共同借款人(抵押人)')
1016 # print(signature_name, signature_date)
1017 self.init_result['page_7']['主借人签字']['签字'] = signature_name
1018 self.init_result['page_7']['主借人签字']['日期'] = signature_date
1019 signature_name, signature_date = self.get_last_page_signature(page_num='6',
1020 top='共同借款人', bottom='保证人1')
1021 if signature_name['words'] == None:
1022 signature_name, signature_date = self.get_last_page_signature(page_num='6',
1023 top='共同借款人(抵押人)', bottom='保证人1')
1024 # print(signature_name, signature_date)
1025 self.init_result['page_7']['共借人签字']['签字'] = signature_name
1026 self.init_result['page_7']['共借人签字']['日期'] = signature_date
1027 signature_name, signature_date = self.get_last_page_signature(page_num='6',
1028 top='保证人1', bottom='保证人2')
1029 self.init_result['page_7']['保证人1签字']['签字'] = signature_name
1030 self.init_result['page_7']['保证人1签字']['日期'] = signature_date
1031 signature_name, signature_date = self.get_last_page_signature(page_num='6',
1032 top='保证人2', bottom='在本人面前亲笔签署本合同')
1033 self.init_result['page_7']['保证人2签字']['签字'] = signature_name
1034 self.init_result['page_7']['保证人2签字']['日期'] = signature_date
1035 signature_name, signature_date = self.get_last_page_signature(page_num='6',
1036 top='在本人面前亲笔签署本合同', bottom='以下无正文')
1037 # print(signature_name, signature_date)
1038 self.init_result['page_7']['见证人签字']['签字'] = signature_name
1039 self.init_result['page_7']['见证人签字']['日期'] = signature_date
1040
947 1041
948 # 重新定制输出 1042 # 重新定制输出
949 new_results = {"is_asp": self.is_asp, 1043 new_results = {"is_asp": self.is_asp,
......
...@@ -51,6 +51,7 @@ class Finder: ...@@ -51,6 +51,7 @@ class Finder:
51 "合同编号(正文)": self.item, 51 "合同编号(正文)": self.item,
52 "车辆识别代码": self.item, 52 "车辆识别代码": self.item,
53 "车辆卖方(经销商)": self.item, 53 "车辆卖方(经销商)": self.item,
54 "车辆代理商": self.item,
54 "车辆原始销售价格(《机动车销售统一发票》所列金额)": self.item, 55 "车辆原始销售价格(《机动车销售统一发票》所列金额)": self.item,
55 "车辆附加产品明细表": self.item, 56 "车辆附加产品明细表": self.item,
56 "融资成本总额": self.item, 57 "融资成本总额": self.item,
...@@ -696,11 +697,13 @@ class Finder: ...@@ -696,11 +697,13 @@ class Finder:
696 signature_name['position'] = bbox 697 signature_name['position'] = bbox
697 return signature_name, signature_date 698 return signature_name, signature_date
698 699
699 def get_electronic_signature(self, top, bottom): 700 def get_electronic_signature(self, top, bottom, t_pno=None):
700 signature = self.item.copy() 701 signature = self.item.copy()
701 anchor_top = None 702 anchor_top = None
702 anchor_bottom = None 703 anchor_bottom = None
703 for pno in self.pdf_info: 704 for pno in self.pdf_info:
705 if t_pno is not None and pno != t_pno:
706 continue
704 for block in self.pdf_info[pno]['blocks']: 707 for block in self.pdf_info[pno]['blocks']:
705 if block['type'] != 0: 708 if block['type'] != 0:
706 continue 709 continue
...@@ -709,10 +712,15 @@ class Finder: ...@@ -709,10 +712,15 @@ class Finder:
709 bbox, text = span['bbox'], span['text'] 712 bbox, text = span['bbox'], span['text']
710 if top in text: 713 if top in text:
711 anchor_top = bbox[1] 714 anchor_top = bbox[1]
712 if bottom in text: 715 elif bottom in text and anchor_top is not None and bbox[3] > anchor_top:
713 anchor_bottom = bbox[3] 716 anchor_bottom = bbox[3]
714 if anchor_top is not None and anchor_bottom is not None: 717 if anchor_top is not None and anchor_bottom is not None:
718 # print('in')
719 # print(anchor_top)
720 # print(anchor_bottom)
715 for pno in self.pdf_info: 721 for pno in self.pdf_info:
722 if t_pno is not None and pno != t_pno:
723 continue
716 for block in self.pdf_info[pno]['blocks']: 724 for block in self.pdf_info[pno]['blocks']:
717 if block['type'] != 0: 725 if block['type'] != 0:
718 continue 726 continue
...@@ -1005,7 +1013,7 @@ class Finder: ...@@ -1005,7 +1013,7 @@ class Finder:
1005 words = text.split(':')[-1] 1013 words = text.split(':')[-1]
1006 _id['position'] = bbox 1014 _id['position'] = bbox
1007 _id['page'] = pno 1015 _id['page'] = pno
1008 _id['words'] = words 1016 _id['words'] = words.strip()
1009 return name, _id 1017 return name, _id
1010 1018
1011 def get_key_value_position(self, key): 1019 def get_key_value_position(self, key):
...@@ -1243,6 +1251,9 @@ class Finder: ...@@ -1243,6 +1251,9 @@ class Finder:
1243 if seller['words'] == None: 1251 if seller['words'] == None:
1244 seller = self.get_key_value(key='车辆卖方:') 1252 seller = self.get_key_value(key='车辆卖方:')
1245 self.init_result['车辆卖方(经销商)'] = seller 1253 self.init_result['车辆卖方(经销商)'] = seller
1254 # 找到车辆代理商
1255 cldls = self.get_key_value(key='车辆代理商', page_num='4')
1256 self.init_result['车辆代理商'] = cldls
1246 # 找到 —— 车辆原始销售价格 1257 # 找到 —— 车辆原始销售价格
1247 vehicle_price = self.get_key_value(key='车辆原始销售价格(《机动车销售统一发票》所列金额):') 1258 vehicle_price = self.get_key_value(key='车辆原始销售价格(《机动车销售统一发票》所列金额):')
1248 self.init_result['车辆原始销售价格(《机动车销售统一发票》所列金额)'] = vehicle_price 1259 self.init_result['车辆原始销售价格(《机动车销售统一发票》所列金额)'] = vehicle_price
...@@ -1264,7 +1275,7 @@ class Finder: ...@@ -1264,7 +1275,7 @@ class Finder:
1264 account = self.get_key_value(key='银行账号:', page_num='4') 1275 account = self.get_key_value(key='银行账号:', page_num='4')
1265 self.init_result['收款银行账户-银行账号'] = account 1276 self.init_result['收款银行账户-银行账号'] = account
1266 bank = self.get_key_value(key='开户银行:', page_num='4') 1277 bank = self.get_key_value(key='开户银行:', page_num='4')
1267 self.init_result['承租人收款账户-开户行'] = bank 1278 self.init_result['收款银行账户-开户行'] = bank
1268 # 找承租人扣款账户户名、银行账号、银行 1279 # 找承租人扣款账户户名、银行账号、银行
1269 name = self.get_key_value(key='户名:', page_num='5') 1280 name = self.get_key_value(key='户名:', page_num='5')
1270 self.init_result['银行账户-户名'] = name 1281 self.init_result['银行账户-户名'] = name
...@@ -1277,65 +1288,65 @@ class Finder: ...@@ -1277,65 +1288,65 @@ class Finder:
1277 # 承租人姓名、签章 1288 # 承租人姓名、签章
1278 if is_cdfl == False: 1289 if is_cdfl == False:
1279 name = self.get_key_value(key='承租人姓名:') 1290 name = self.get_key_value(key='承租人姓名:')
1280 electronic_signature = self.get_electronic_signature(top='承租人姓名:', bottom='保证人1姓名:') 1291 electronic_signature = self.get_electronic_signature(top='承租人姓名:', bottom='保证人1姓名:', t_pno='5')
1281 1292
1282 if name["words"] == None: 1293 if name["words"] == None:
1283 name = self.get_key_value(key='承租人一姓名:') 1294 name = self.get_key_value(key='承租人一姓名:')
1284 electronic_signature = self.get_electronic_signature(top='承租人一姓名:', bottom='共同承租人名称:') 1295 electronic_signature = self.get_electronic_signature(top='承租人一姓名:', bottom='共同承租人名称:', t_pno='5')
1285 1296
1286 self.init_result['签字页-承租人姓名'] = name 1297 self.init_result['签字页-承租人姓名'] = name
1287 self.init_result['签字页-承租人签章'] = electronic_signature 1298 self.init_result['签字页-承租人签章'] = electronic_signature
1288 # 保证人1姓名、签章 1299 # 保证人1姓名、签章
1289 name = self.get_key_value(key='保证人1姓名:') 1300 name = self.get_key_value(key='保证人1姓名:')
1290 electronic_signature = self.get_electronic_signature(top='保证人1姓名:', bottom='保证人2姓名:') 1301 electronic_signature = self.get_electronic_signature(top='保证人1姓名:', bottom='保证人2姓名:', t_pno='5')
1291 self.init_result['签字页-保证人1姓名'] = name 1302 self.init_result['签字页-保证人1姓名'] = name
1292 self.init_result['签字页-保证人1签章'] = electronic_signature 1303 self.init_result['签字页-保证人1签章'] = electronic_signature
1293 # 这里用的是 name["words"] == "" 1304 # 这里用的是 name["words"] == ""
1294 if name["words"] == "": 1305 if name["words"] == "":
1295 name = self.get_key_value(key='共同承租人名称:') 1306 name = self.get_key_value(key='共同承租人名称:')
1296 electronic_signature = self.get_electronic_signature(top='共同承租人名称:', bottom='保证人1姓名:') 1307 electronic_signature = self.get_electronic_signature(top='共同承租人名称:', bottom='保证人1姓名:', t_pno='5')
1297 self.init_result['签字页-共同承租人姓名'] = name 1308 self.init_result['签字页-共同承租人姓名'] = name
1298 self.init_result['签字页-共同承租人签章'] = electronic_signature 1309 self.init_result['签字页-共同承租人签章'] = electronic_signature
1299 # 保证人2姓名、签章 1310 # 保证人2姓名、签章
1300 name = self.get_key_value(key='保证人2姓名:') 1311 name = self.get_key_value(key='保证人2姓名:')
1301 electronic_signature = self.get_electronic_signature(top='保证人2姓名:', bottom='保证人3姓名:') 1312 electronic_signature = self.get_electronic_signature(top='保证人2姓名:', bottom='保证人3姓名:', t_pno='5')
1302 self.init_result['签字页-保证人2姓名'] = name 1313 self.init_result['签字页-保证人2姓名'] = name
1303 self.init_result['签字页-保证人2签章'] = electronic_signature 1314 self.init_result['签字页-保证人2签章'] = electronic_signature
1304 # if判断条件对应3_3版本 1315 # if判断条件对应3_3版本
1305 if name["words"] == "": 1316 if name["words"] == "":
1306 name = self.get_key_value(key='保证人1姓名:') 1317 name = self.get_key_value(key='保证人1姓名:')
1307 electronic_signature = self.get_electronic_signature(top='保证人1姓名:', bottom='保证人2姓名:') 1318 electronic_signature = self.get_electronic_signature(top='保证人1姓名:', bottom='保证人2姓名:', t_pno='5')
1308 self.init_result['签字页-保证人1姓名'] = name 1319 self.init_result['签字页-保证人1姓名'] = name
1309 self.init_result['签字页-保证人1签章'] = electronic_signature 1320 self.init_result['签字页-保证人1签章'] = electronic_signature
1310 # 保证人3姓名、签章 1321 # 保证人3姓名、签章
1311 name = self.get_key_value(key='保证人3姓名:') 1322 name = self.get_key_value(key='保证人3姓名:')
1312 electronic_signature = self.get_electronic_signature(top='保证人3姓名:', bottom='日期:') 1323 electronic_signature = self.get_electronic_signature(top='保证人3姓名:', bottom='日期:', t_pno='5')
1313 self.init_result['签字页-保证人3姓名'] = name 1324 self.init_result['签字页-保证人3姓名'] = name
1314 self.init_result['签字页-保证人3签章'] = electronic_signature 1325 self.init_result['签字页-保证人3签章'] = electronic_signature
1315 # if判断条件对应3_3版本 1326 # if判断条件对应3_3版本
1316 if name["words"] == None: 1327 if name["words"] == None:
1317 name = self.get_key_value(key='保证人2姓名:') 1328 name = self.get_key_value(key='保证人2姓名:')
1318 electronic_signature = self.get_electronic_signature(top='保证人2姓名:', bottom='日期:') 1329 electronic_signature = self.get_electronic_signature(top='保证人2姓名:', bottom='日期:', t_pno='5')
1319 self.init_result['签字页-保证人2姓名'] = name 1330 self.init_result['签字页-保证人2姓名'] = name
1320 self.init_result['签字页-保证人2签章'] = electronic_signature 1331 self.init_result['签字页-保证人2签章'] = electronic_signature
1321 else: 1332 else:
1322 name = self.get_key_value(key='承租人一姓名:') 1333 name = self.get_key_value(key='承租人一姓名:')
1323 electronic_signature = self.get_electronic_signature(top='承租人一姓名:', bottom='共同承租人名称:') 1334 electronic_signature = self.get_electronic_signature(top='承租人一姓名:', bottom='共同承租人名称:', t_pno='5')
1324 self.init_result['签字页-承租人姓名'] = name 1335 self.init_result['签字页-承租人姓名'] = name
1325 self.init_result['签字页-承租人签章'] = electronic_signature 1336 self.init_result['签字页-承租人签章'] = electronic_signature
1326 1337
1327 name = self.get_key_value(key='共同承租人名称:') 1338 name = self.get_key_value(key='共同承租人名称:')
1328 electronic_signature = self.get_electronic_signature(top='共同承租人名称:', bottom='保证人1姓名:') 1339 electronic_signature = self.get_electronic_signature(top='共同承租人名称:', bottom='保证人1姓名:', t_pno='5')
1329 self.init_result['签字页-共同承租人姓名'] = name 1340 self.init_result['签字页-共同承租人姓名'] = name
1330 self.init_result['签字页-共同承租人签章'] = electronic_signature 1341 self.init_result['签字页-共同承租人签章'] = electronic_signature
1331 1342
1332 name = self.get_key_value(key='保证人1姓名:') 1343 name = self.get_key_value(key='保证人1姓名:')
1333 electronic_signature = self.get_electronic_signature(top='保证人1姓名:', bottom='保证人2姓名:') 1344 electronic_signature = self.get_electronic_signature(top='保证人1姓名:', bottom='保证人2姓名:', t_pno='5')
1334 self.init_result['签字页-保证人1姓名'] = name 1345 self.init_result['签字页-保证人1姓名'] = name
1335 self.init_result['签字页-保证人1签章'] = electronic_signature 1346 self.init_result['签字页-保证人1签章'] = electronic_signature
1336 1347
1337 name = self.get_key_value(key='保证人2姓名:') 1348 name = self.get_key_value(key='保证人2姓名:')
1338 electronic_signature = self.get_electronic_signature(top='保证人2姓名:', bottom='保证人3姓名:') 1349 electronic_signature = self.get_electronic_signature(top='保证人2姓名:', bottom='保证人3姓名:', t_pno='5')
1339 self.init_result['签字页-保证人2姓名'] = name 1350 self.init_result['签字页-保证人2姓名'] = name
1340 self.init_result['签字页-保证人2签章'] = electronic_signature 1351 self.init_result['签字页-保证人2签章'] = electronic_signature
1341 1352
...@@ -1404,12 +1415,12 @@ class Finder: ...@@ -1404,12 +1415,12 @@ class Finder:
1404 self.init_result_2['融资租赁期限'] = lease_term 1415 self.init_result_2['融资租赁期限'] = lease_term
1405 # 签字页抵押人姓名和签章 1416 # 签字页抵押人姓名和签章
1406 name = self.get_key_value(key='抵押人姓名:') 1417 name = self.get_key_value(key='抵押人姓名:')
1407 electronic_signature = self.get_electronic_signature(top='抵押权人盖章', bottom='抵押人配偶姓名:') 1418 electronic_signature = self.get_electronic_signature(top='抵押权人盖章', bottom='抵押人配偶姓名:', t_pno='1')
1408 self.init_result_2['签字页-抵押人姓名'] = name 1419 self.init_result_2['签字页-抵押人姓名'] = name
1409 self.init_result_2['签字页-抵押人签章'] = electronic_signature 1420 self.init_result_2['签字页-抵押人签章'] = electronic_signature
1410 # 签字页抵押人配偶姓名和签章 1421 # 签字页抵押人配偶姓名和签章
1411 name = self.get_key_value(key='抵押人配偶姓名:') 1422 name = self.get_key_value(key='抵押人配偶姓名:')
1412 electronic_signature = self.get_electronic_signature(top='抵押人配偶姓名:', bottom='日期') 1423 electronic_signature = self.get_electronic_signature(top='抵押人配偶姓名:', bottom='日期', t_pno='1')
1413 self.init_result_2['签字页-抵押人配偶姓名'] = name 1424 self.init_result_2['签字页-抵押人配偶姓名'] = name
1414 self.init_result_2['签字页-抵押人配偶签章'] = electronic_signature 1425 self.init_result_2['签字页-抵押人配偶签章'] = electronic_signature
1415 return self.init_result_2 1426 return self.init_result_2
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -6,6 +6,7 @@ class HMHRetriever: ...@@ -6,6 +6,7 @@ class HMHRetriever:
6 def __init__(self): 6 def __init__(self):
7 self.words_str = 'words' 7 self.words_str = 'words'
8 self.position_str = 'location' 8 self.position_str = 'location'
9 self.fix_hava_str = '有'
9 self.default_position = [0, 0, 0, 0] 10 self.default_position = [0, 0, 0, 0]
10 self.search_fields_list = [ 11 self.search_fields_list = [
11 ('借款/承租人姓名', ''), 12 ('借款/承租人姓名', ''),
...@@ -51,7 +52,8 @@ class HMHRetriever: ...@@ -51,7 +52,8 @@ class HMHRetriever:
51 for name_date_tuple in name_date_list: 52 for name_date_tuple in name_date_list:
52 if len(name_date_tuple) == 2: 53 if len(name_date_tuple) == 2:
53 result[self.search_fields_list[4][0]] = { 54 result[self.search_fields_list[4][0]] = {
54 self.words_str: '{0} {1}'.format(name_date_tuple[0].replace('\u3000', '').strip(), name_date_tuple[1]), 55 # self.words_str: '{0} {1}'.format(name_date_tuple[0].replace('\u3000', '').strip(), name_date_tuple[1]),
56 self.words_str: self.fix_hava_str,
55 self.position_str: bbox 57 self.position_str: bbox
56 } 58 }
57 is_find_name_date = True 59 is_find_name_date = True
......
Styling with Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!