@@ -168,28 +168,40 @@ def update_item_mapping(doc):
168
168
):
169
169
return
170
170
171
- log = frappe .get_doc (
172
- "e-Invoice Log" ,
173
- {"reference_name" : doc .name , "reference_doctype" : "Purchase Invoice" },
171
+ item_mapping = frappe .get_all (
172
+ "e-Invoice Mapping" ,
173
+ filters = {
174
+ "erpnext_value" : ["=" , "" ],
175
+ "item_row_name" : ["in" , [item .name for item in doc .items ]],
176
+ },
177
+ fields = ["item_row_name" , "rate" , "erpnext_fieldname" ],
174
178
)
175
179
176
- item_mapping = {}
177
- for item in doc . items :
178
- key = ( item . name , flt ( item . rate , precision = 2 ))
179
- item_mapping [ key ] = { "item_code" : item . item_code , "uom" : item . uom }
180
+ mapped_items = {
181
+ ( item . item_row_name , flt ( item . rate , precision = 2 ), item . erpnext_fieldname )
182
+ for item in item_mapping
183
+ }
180
184
181
- for item in log .item_mapping :
182
- key = (item .item_row_name , flt (item .rate , precision = 2 ))
185
+ def update_mapping (item , fieldname ):
186
+ frappe .db .set_value (
187
+ "e-Invoice Mapping" ,
188
+ {
189
+ "item_row_name" : item .name ,
190
+ "rate" : item .rate ,
191
+ "erpnext_fieldname" : fieldname ,
192
+ },
193
+ "erpnext_value" ,
194
+ item .get ("item_code" if fieldname == "item_name" else fieldname ),
195
+ )
183
196
184
- if key in item_mapping :
185
- mapped_item = item_mapping [ key ]
197
+ for item in doc . items :
198
+ rate = flt ( item . rate , precision = 2 )
186
199
187
- if item .erpnext_fieldname == "item_name" :
188
- item .erpnext_value = mapped_item .get ("item_code" )
189
- else :
190
- item .erpnext_value = mapped_item .get ("uom" )
200
+ for fieldname in ["item_name" , "uom" ]:
201
+ key = (item .name , rate , fieldname )
191
202
192
- log .save (ignore_permissions = True )
203
+ if key in mapped_items :
204
+ update_mapping (item , fieldname )
193
205
194
206
195
207
def get_dashboard_data (data ):
@@ -210,7 +222,6 @@ def get_dashboard_data(data):
210
222
"e-Waybill Log" ,
211
223
"Integration Request" ,
212
224
"GST Inward Supply" ,
213
- "e-Invoice Log" ,
214
225
)
215
226
216
227
return data
@@ -420,15 +431,15 @@ def map_keys(source, target, section):
420
431
return data
421
432
422
433
423
- def create_purchase_invoice (supplier , company , invoice ):
434
+ def create_purchase_invoice (supplier , company , invoice_info ):
424
435
invoice_data = {
425
436
"doctype" : "Purchase Invoice" ,
426
437
"supplier" : supplier ,
427
438
"company" : company ,
428
439
"due_date" : frappe .utils .nowdate (),
429
440
}
430
- invoice ["bill_date" ] = getdate (invoice ["bill_date" ])
431
- invoice_data .update (invoice )
441
+ invoice_info ["bill_date" ] = getdate (invoice_info ["bill_date" ])
442
+ invoice_data .update (invoice_info )
432
443
433
444
doc = frappe .get_doc (invoice_data )
434
445
doc .update (
@@ -486,30 +497,38 @@ def get_mapped_data(mappings, fieldname):
486
497
}
487
498
488
499
def log_unmapped_item (fieldname , item ):
489
- e_invoice_log .append (
490
- "item_mapping" ,
500
+ frappe .get_doc (
491
501
{
502
+ "doctype" : "e-Invoice Mapping" ,
492
503
"party" : supplier ,
493
504
"party_type" : "Supplier" ,
494
505
"erpnext_fieldname" : fieldname ,
495
506
"e_invoice_value" : item .get (fieldname ),
496
507
"rate" : item .rate ,
497
508
"item_row_name" : item .name ,
498
- },
499
- )
509
+ }
510
+ ). save ( ignore_permissions = True )
500
511
501
512
mappings = frappe .get_all (
502
513
"e-Invoice Mapping" ,
503
- filters = {"party" : supplier },
514
+ filters = {"party" : supplier , "erpnext_value" : [ "!=" , "" ] },
504
515
fields = ["e_invoice_value" , "erpnext_value" , "erpnext_fieldname" ],
505
516
)
506
517
507
518
mapped_items = get_mapped_data (mappings , "item_name" )
508
519
mapped_uoms = get_mapped_data (mappings , "uom" )
509
520
521
+ items = frappe .get_all (
522
+ "Item" ,
523
+ filters = {"item_code" : ["in" , list (mapped_items .values ())]},
524
+ fields = ["item_code" , "item_name" ],
525
+ )
526
+ item_names = {item .item_code : item .item_name for item in items }
527
+
510
528
for item in doc .items :
511
529
if item_code := mapped_items .get (item .item_name ):
512
530
item .item_code = item_code
531
+ item .item_name = item_names .get (item_code )
513
532
else :
514
533
log_unmapped_item ("item_name" , item )
515
534
0 commit comments