Merge pull request #21061 from anupamvs/customer-doctype-issue
fix: Adding proper error message
diff --git a/erpnext/accounts/doctype/account/chart_of_accounts/verified/de_kontenplan_SKR04_with_account_number.json b/erpnext/accounts/doctype/account/chart_of_accounts/verified/de_kontenplan_SKR04_with_account_number.json
index ff95c5a..3fc109b 100644
--- a/erpnext/accounts/doctype/account/chart_of_accounts/verified/de_kontenplan_SKR04_with_account_number.json
+++ b/erpnext/accounts/doctype/account/chart_of_accounts/verified/de_kontenplan_SKR04_with_account_number.json
@@ -2433,29 +2433,26 @@
"Erl\u00f6se aus Verk\u00e4ufen Sachanlageverm\u00f6gen (bei Buchgewinn)": {
"account_number": "4849"
},
- "Erl\u00f6se aus Verk\u00e4ufen immaterieller VG (bei Buchgewinn) (Gruppe)": {
- "is_group": 1,
- "Erl\u00f6se aus Verk\u00e4ufen immaterieller VG (bei Buchgewinn)": {
- "account_number": "4850"
- },
- "Erl\u00f6se aus Verk\u00e4ufen Finanzanlagen (bei Buchgewinn)": {
- "account_number": "4851"
- },
- "Erl\u00f6se aus Verk\u00e4ufen Finanzanlagen (inl\u00e4ndische Kap.Ges., bei Buchgewinn)": {
- "account_number": "4852"
- },
- "Anlagenabg\u00e4nge Sachanlagen (Restbuchwert bei Buchvergewinn)": {
- "account_number": "4855"
- },
- "Anlagenabg\u00e4nge immaterielle VG (Restbuchwert bei Buchgewinn)": {
- "account_number": "4856"
- },
- "Anlagenabg\u00e4nge Finanzanlagen (Restbuchwert bei Buchgewinn)": {
- "account_number": "4857"
- },
- "Anlagenabg\u00e4nge Finanzanlagen (inl\u00e4ndische Kap.Ges., Restbuchwert bei Buchgewinn)": {
- "account_number": "4858"
- }
+ "Erl\u00f6se aus Verk\u00e4ufen immaterieller VG (bei Buchgewinn)": {
+ "account_number": "4850"
+ },
+ "Erl\u00f6se aus Verk\u00e4ufen Finanzanlagen (bei Buchgewinn)": {
+ "account_number": "4851"
+ },
+ "Erl\u00f6se aus Verk\u00e4ufen Finanzanlagen (inl\u00e4ndische Kap.Ges., bei Buchgewinn)": {
+ "account_number": "4852"
+ },
+ "Anlagenabg\u00e4nge Sachanlagen (Restbuchwert bei Buchvergewinn)": {
+ "account_number": "4855"
+ },
+ "Anlagenabg\u00e4nge immaterielle VG (Restbuchwert bei Buchgewinn)": {
+ "account_number": "4856"
+ },
+ "Anlagenabg\u00e4nge Finanzanlagen (Restbuchwert bei Buchgewinn)": {
+ "account_number": "4857"
+ },
+ "Anlagenabg\u00e4nge Finanzanlagen (inl\u00e4ndische Kap.Ges., Restbuchwert bei Buchgewinn)": {
+ "account_number": "4858"
},
"Ertr\u00e4ge aus Zuschreibungen des Sachanlageverm\u00f6gens": {
"account_number": "4910",
@@ -2578,20 +2575,17 @@
"Entnahme von Gegenst\u00e4nden ohne USt": {
"account_number": "4605"
},
- "Verwendung von Gegenst\u00e4nden f. Zwecke au\u00dferhalb des Unternehmens 7 % USt (Gruppe)": {
- "is_group": 1,
- "Verwendung von Gegenst\u00e4nden f. Zwecke au\u00dferhalb des Unternehmens 7 % USt": {
- "account_number": "4630"
- },
- "Verwendung von Gegenst\u00e4nden f. Zwecke au\u00dferhalb des Unternehmens ohne USt": {
- "account_number": "4637"
- },
- "Verwendung von Gegenst\u00e4nden f. Zwecke au\u00dferhalb des Unternnehmens ohne USt (Telefon-Nutzung)": {
- "account_number": "4638"
- },
- "Verwendung von Gegenst\u00e4nden f. Zwecke au\u00dferhalb des Unternehmens ohne USt (Kfz-Nutzung)": {
- "account_number": "4639"
- }
+ "Verwendung von Gegenst\u00e4nden f. Zwecke au\u00dferhalb des Unternehmens 7 % USt": {
+ "account_number": "4630"
+ },
+ "Verwendung von Gegenst\u00e4nden f. Zwecke au\u00dferhalb des Unternehmens ohne USt": {
+ "account_number": "4637"
+ },
+ "Verwendung von Gegenst\u00e4nden f. Zwecke au\u00dferhalb des Unternnehmens ohne USt (Telefon-Nutzung)": {
+ "account_number": "4638"
+ },
+ "Verwendung von Gegenst\u00e4nden f. Zwecke au\u00dferhalb des Unternehmens ohne USt (Kfz-Nutzung)": {
+ "account_number": "4639"
},
"Verwendung von Gegenst\u00e4nden f. Zwecke au\u00dferhalb des Unternehmens 19 % USt (Gruppe)": {
"is_group": 1,
@@ -2629,14 +2623,11 @@
"Unentgeltliche Zuwendung von Gegenst\u00e4nden ohne USt": {
"account_number": "4689"
},
- "Nicht steuerbare Ums\u00e4tze (Innenums\u00e4tze) (Gruppe)": {
- "is_group": 1,
- "Nicht steuerbare Ums\u00e4tze (Innenums\u00e4tze)": {
- "account_number": "4690"
- },
- "Umsatzsteuerverg\u00fctungen, z.B. nach \u00a7 24 UStG": {
- "account_number": "4695"
- }
+ "Nicht steuerbare Ums\u00e4tze (Innenums\u00e4tze)": {
+ "account_number": "4690"
+ },
+ "Umsatzsteuerverg\u00fctungen, z.B. nach \u00a7 24 UStG": {
+ "account_number": "4695"
},
"Au\u00dferordentliche Ertr\u00e4ge (Gruppe)": {
"is_group": 1,
@@ -2646,41 +2637,35 @@
"Au\u00dferordentliche Ertr\u00e4ge finanzwirksam": {
"account_number": "7401"
},
- "Au\u00dferordentliche Ertr\u00e4ge nicht finanzwirksam (Gruppe)": {
- "is_group": 1,
- "Au\u00dferordentliche Ertr\u00e4ge nicht finanzwirksam": {
- "account_number": "7450"
- },
- "Ertr\u00e4ge durch Verschmelzung und Umwandlung": {
- "account_number": "7451"
- },
- "Ertr\u00e4ge durch den Verkauf von bedeutenden Beteiligungen": {
- "account_number": "7452"
- },
- "Ert\u00e4ge durch den Verkauf von bedeutenden Grundst\u00fccken": {
- "account_number": "7453"
- },
- "Gewinn aus der Ver\u00e4u\u00dferung oder der Aufgabe von Gesch\u00e4ftsaktivit\u00e4ten nach Steuern": {
- "account_number": "7454"
- }
+ "Au\u00dferordentliche Ertr\u00e4ge nicht finanzwirksam": {
+ "account_number": "7450"
},
- "Au\u00dferordentliche Ertr\u00e4ge aus der Anwendung von \u00dcbergangsvorschriften (Gruppe)": {
- "is_group": 1,
- "Au\u00dferordentliche Ertr\u00e4ge aus der Anwendung von \u00dcbergangsvorschriften": {
- "account_number": "7460"
- },
- "Au\u00dferordentliche Ertr\u00e4ge: Zuschreibung f. Sachanlageverm\u00f6gen": {
- "account_number": "7461"
- },
- "Au\u00dferordentliche Ertr\u00e4ge: Zuschreibung f. Finanzanlageverm\u00f6gen": {
- "account_number": "7462"
- },
- "Au\u00dferordentliche Ertr\u00e4ge: Wertpapiere im Umlaufverm\u00f6gen": {
- "account_number": "7463"
- },
- "Au\u00dferordentliche Ertr\u00e4ge: latente Steuern": {
- "account_number": "7464"
- }
+ "Ertr\u00e4ge durch Verschmelzung und Umwandlung": {
+ "account_number": "7451"
+ },
+ "Ertr\u00e4ge durch den Verkauf von bedeutenden Beteiligungen": {
+ "account_number": "7452"
+ },
+ "Ert\u00e4ge durch den Verkauf von bedeutenden Grundst\u00fccken": {
+ "account_number": "7453"
+ },
+ "Gewinn aus der Ver\u00e4u\u00dferung oder der Aufgabe von Gesch\u00e4ftsaktivit\u00e4ten nach Steuern": {
+ "account_number": "7454"
+ },
+ "Au\u00dferordentliche Ertr\u00e4ge aus der Anwendung von \u00dcbergangsvorschriften": {
+ "account_number": "7460"
+ },
+ "Au\u00dferordentliche Ertr\u00e4ge: Zuschreibung f. Sachanlageverm\u00f6gen": {
+ "account_number": "7461"
+ },
+ "Au\u00dferordentliche Ertr\u00e4ge: Zuschreibung f. Finanzanlageverm\u00f6gen": {
+ "account_number": "7462"
+ },
+ "Au\u00dferordentliche Ertr\u00e4ge: Wertpapiere im Umlaufverm\u00f6gen": {
+ "account_number": "7463"
+ },
+ "Au\u00dferordentliche Ertr\u00e4ge: latente Steuern": {
+ "account_number": "7464"
}
}
},
@@ -2718,40 +2703,43 @@
},
"Erl\u00f6sschm\u00e4lerungen aus im Inland steuerpfl. EU-Lieferungen 16 % USt": {
"account_number": "4729"
+ }
+ },
+ "Gew\u00e4hrte Skonti (Gruppe)": {
+ "is_group": 1,
+ "Gew. Skonti": {
+ "account_number": "4730"
},
- "Gew\u00e4hrte Skonti (Gruppe)": {
- "is_group": 1,
- "Gew. Skonti": {
- "account_number": "4730"
- },
- "Gew. Skonti 7 % USt": {
- "account_number": "4731"
- },
- "Gew. Skonti 19 % USt": {
- "account_number": "4736"
- },
- "Gew. Skonti aus Lieferungen von Mobilfunkger./Schaltkr., f. die der Leistungsempf. die Ust. schuldet": {
- "account_number": "4738"
- },
- "Gew. Skonti aus Leistungen, f. die der Leistungsempf. die Umsatzsteuer nach \u00a7 13b UStG schuldet": {
- "account_number": "4741"
- },
- "Gew. Skonti aus Erl\u00f6sen aus im anderen EU-Land steuerpfl. Leistungen, f. die der Leistungsempf. die Ust. schuldet": {
- "account_number": "4742"
- },
- "Gew. Skonti aus steuerfreien innergem. Lieferungen \u00a7 4 Nr. 1b UStG": {
- "account_number": "4743"
- },
- "Gew. Skonti aus im Inland steuerpfl. EU-Lieferungen": {
- "account_number": "4745"
- },
- "Gew. Skonti aus im Inland steuerpfl. EU-Lieferungen 7% USt": {
- "account_number": "4746"
- },
- "Gew. Skonti aus im Inland steuerpfl. EU-Lieferungen 19% USt": {
- "account_number": "4748"
- }
+ "Gew. Skonti 7 % USt": {
+ "account_number": "4731"
},
+ "Gew. Skonti 19 % USt": {
+ "account_number": "4736"
+ },
+ "Gew. Skonti aus Lieferungen von Mobilfunkger./Schaltkr., f. die der Leistungsempf. die Ust. schuldet": {
+ "account_number": "4738"
+ },
+ "Gew. Skonti aus Leistungen, f. die der Leistungsempf. die Umsatzsteuer nach \u00a7 13b UStG schuldet": {
+ "account_number": "4741"
+ },
+ "Gew. Skonti aus Erl\u00f6sen aus im anderen EU-Land steuerpfl. Leistungen, f. die der Leistungsempf. die Ust. schuldet": {
+ "account_number": "4742"
+ },
+ "Gew. Skonti aus steuerfreien innergem. Lieferungen \u00a7 4 Nr. 1b UStG": {
+ "account_number": "4743"
+ },
+ "Gew. Skonti aus im Inland steuerpfl. EU-Lieferungen": {
+ "account_number": "4745"
+ },
+ "Gew. Skonti aus im Inland steuerpfl. EU-Lieferungen 7% USt": {
+ "account_number": "4746"
+ },
+ "Gew. Skonti aus im Inland steuerpfl. EU-Lieferungen 19% USt": {
+ "account_number": "4748"
+ }
+ },
+ "Gew\u00e4hrte Boni (Gruppe)": {
+ "is_group": 1,
"Gew\u00e4hrte Boni 7 % USt": {
"account_number": "4750"
},
@@ -2864,103 +2852,79 @@
"account_number": "6398"
}
},
- "Versicherungen (Gruppe)": {
- "is_group": 1,
- "Versicherungen": {
- "account_number": "6400"
- },
- "Versicherungen f. Geb\u00e4ude, die zum Betriebsverm\u00f6gen geh\u00f6ren": {
- "account_number": "6405"
- },
- "Netto-Pr\u00e4mie f. R\u00fcckdeckung k\u00fcnftiger Versorgungsleistungen": {
- "account_number": "6410"
- },
- "Beitr\u00e4ge": {
- "account_number": "6420"
- },
- "Sonstige Abgaben": {
- "account_number": "6430"
- },
- "Steuerlich abzugsf\u00e4hige Versp\u00e4tungszuschl\u00e4ge und Zwangsgelder": {
- "account_number": "6436"
- },
- "Steuerlich nicht abzugsf\u00e4hige Versp\u00e4tungszuschl\u00e4ge und Zwangsgelder": {
- "account_number": "6437"
- },
- "Ausgleichsabgabe i. S. d. Schwerbehindertengesetzes": {
- "account_number": "6440"
- },
- "Reparaturen und Instandhaltung von Bauten": {
- "account_number": "6450"
- },
- "Reparaturen und Instandhaltung von technischenAnlagen und Maschinen": {
- "account_number": "6460"
- },
- "Reparaturen und Instandhaltung von anderen Anlagen und Betriebs- und Gesch\u00e4ftsausstattung": {
- "account_number": "6470"
- },
- "Zuf\u00fchrung zu Aufwandsr\u00fcckstellungen": {
- "account_number": "6475"
- },
- "Reparaturen und Instandhaltung von anderen Anlagen": {
- "account_number": "6485"
- },
- "Sonstige Reparaturen und Instandhaltungen": {
- "account_number": "6490"
- },
- "Wartungskosten f. Hard- und Software": {
- "account_number": "6495"
- },
- "Mietleasing (bewegliche Wirtschaftsg\u00fcter)": {
- "account_number": "6498"
- }
+ "Versicherungen": {
+ "account_number": "6400"
+ },
+ "Versicherungen f. Geb\u00e4ude, die zum Betriebsverm\u00f6gen geh\u00f6ren": {
+ "account_number": "6405"
+ },
+ "Netto-Pr\u00e4mie f. R\u00fcckdeckung k\u00fcnftiger Versorgungsleistungen": {
+ "account_number": "6410"
+ },
+ "Beitr\u00e4ge": {
+ "account_number": "6420"
+ },
+ "Sonstige Abgaben": {
+ "account_number": "6430"
+ },
+ "Steuerlich abzugsf\u00e4hige Versp\u00e4tungszuschl\u00e4ge und Zwangsgelder": {
+ "account_number": "6436"
+ },
+ "Steuerlich nicht abzugsf\u00e4hige Versp\u00e4tungszuschl\u00e4ge und Zwangsgelder": {
+ "account_number": "6437"
+ },
+ "Ausgleichsabgabe i. S. d. Schwerbehindertengesetzes": {
+ "account_number": "6440"
+ },
+ "Reparaturen und Instandhaltung von Bauten": {
+ "account_number": "6450"
+ },
+ "Reparaturen und Instandhaltung von technischenAnlagen und Maschinen": {
+ "account_number": "6460"
+ },
+ "Reparaturen und Instandhaltung von anderen Anlagen und Betriebs- und Gesch\u00e4ftsausstattung": {
+ "account_number": "6470"
+ },
+ "Zuf\u00fchrung zu Aufwandsr\u00fcckstellungen": {
+ "account_number": "6475"
+ },
+ "Reparaturen und Instandhaltung von anderen Anlagen": {
+ "account_number": "6485"
+ },
+ "Sonstige Reparaturen und Instandhaltungen": {
+ "account_number": "6490"
+ },
+ "Wartungskosten f. Hard- und Software": {
+ "account_number": "6495"
+ },
+ "Mietleasing (bewegliche Wirtschaftsg\u00fcter)": {
+ "account_number": "6498"
},
"Fahrzeugkosten (Gruppe)": {
"is_group": 1,
"Fahrzeugkosten": {
"account_number": "6500"
},
- "Kfz-Versicherungen (Gruppe)": {
- "is_group": 1,
- "Kfz-Versicherungen": {
- "account_number": "6520"
- }
+ "Kfz-Versicherungen": {
+ "account_number": "6520"
},
- "Laufende Kfz-Betriebskosten (Gruppe)": {
- "is_group": 1,
- "Laufende Kfz-Betriebskosten": {
- "account_number": "6530"
- }
+ "Laufende Kfz-Betriebskosten": {
+ "account_number": "6530"
},
- "Kfz-Reparaturen (Gruppe)": {
- "is_group": 1,
- "Kfz-Reparaturen": {
- "account_number": "6540"
- }
+ "Kfz-Reparaturen": {
+ "account_number": "6540"
},
- "Garagenmiete (Gruppe)": {
- "is_group": 1,
- "Garagenmiete": {
- "account_number": "6550"
- }
+ "Garagenmiete": {
+ "account_number": "6550"
},
- "Mietleasing Kfz (Gruppe)": {
- "is_group": 1,
- "Mietleasing Kfz": {
- "account_number": "6560"
- }
+ "Mietleasing Kfz": {
+ "account_number": "6560"
},
- "Sonstige Kfz-Kosten (Gruppe)": {
- "is_group": 1,
- "Sonstige Kfz-Kosten": {
- "account_number": "6570"
- }
+ "Sonstige Kfz-Kosten": {
+ "account_number": "6570"
},
- "Mautgeb\u00fchren (Gruppe)": {
- "is_group": 1,
- "Mautgeb\u00fchren": {
- "account_number": "6580"
- }
+ "Mautgeb\u00fchren": {
+ "account_number": "6580"
},
"Kfz-Kosten f. betrieblich genutzte zum Privatverm\u00f6gen geh\u00f6rende Kraftfahrzeuge": {
"account_number": "6590"
@@ -3022,20 +2986,23 @@
"Nicht abzugsf\u00e4hige Betriebsausgaben aus Werbe- und Repr\u00e4sentationskosten": {
"account_number": "6645"
},
- "Reisekosten Arbeitnehmer": {
- "account_number": "6650"
- },
- "Reisekosten Arbeitnehmer \u00dcbernachtungsaufwand": {
- "account_number": "6660"
- },
- "Reisekosten Arbeitnehmer Fahrtkosten": {
- "account_number": "6663"
- },
- "Reisekosten Arbeitnehmer Verpflegungsmehraufwand": {
- "account_number": "6664"
- },
- "Kilometergelderstattung Arbeitnehmer": {
- "account_number": "6668"
+ "Reisekosten Arbeitnehmer (Gruppe)": {
+ "is_group": 1,
+ "Reisekosten Arbeitnehmer": {
+ "account_number": "6650"
+ },
+ "Reisekosten Arbeitnehmer \u00dcbernachtungsaufwand": {
+ "account_number": "6660"
+ },
+ "Reisekosten Arbeitnehmer Fahrtkosten": {
+ "account_number": "6663"
+ },
+ "Reisekosten Arbeitnehmer Verpflegungsmehraufwand": {
+ "account_number": "6664"
+ },
+ "Kilometergelderstattung Arbeitnehmer": {
+ "account_number": "6668"
+ }
},
"Reisekosten Unternehmer (Gruppe)": {
"is_group": 1,
diff --git a/erpnext/manufacturing/doctype/bom/bom.js b/erpnext/manufacturing/doctype/bom/bom.js
index 3acaee4..4f08bbc 100644
--- a/erpnext/manufacturing/doctype/bom/bom.js
+++ b/erpnext/manufacturing/doctype/bom/bom.js
@@ -135,6 +135,7 @@
frappe.call({
method: "erpnext.manufacturing.doctype.work_order.work_order.make_work_order",
args: {
+ bom_no: frm.doc.name,
item: frm.doc.item,
qty: data.qty || 0.0,
project: frm.doc.project
diff --git a/erpnext/manufacturing/doctype/job_card/job_card.js b/erpnext/manufacturing/doctype/job_card/job_card.js
index bc8c229..8c7876d 100644
--- a/erpnext/manufacturing/doctype/job_card/job_card.js
+++ b/erpnext/manufacturing/doctype/job_card/job_card.js
@@ -20,7 +20,7 @@
}
}
- if (frm.doc.docstatus == 0 && frm.doc.for_quantity > frm.doc.total_completed_qty
+ if (frm.doc.docstatus == 0 && (frm.doc.for_quantity > frm.doc.total_completed_qty || !frm.doc.for_quantity)
&& (!frm.doc.items.length || frm.doc.for_quantity == frm.doc.transferred_qty)) {
frm.trigger("prepare_timer_buttons");
}
@@ -59,10 +59,14 @@
let completed_time = frappe.datetime.now_datetime();
frm.trigger("hide_timer");
- frappe.prompt({fieldtype: 'Float', label: __('Completed Quantity'),
- fieldname: 'qty', reqd: 1, default: frm.doc.for_quantity}, data => {
- frm.events.complete_job(frm, completed_time, data.qty);
- }, __("Enter Value"), __("Complete"));
+ if (frm.doc.for_quantity) {
+ frappe.prompt({fieldtype: 'Float', label: __('Completed Quantity'),
+ fieldname: 'qty', reqd: 1, default: frm.doc.for_quantity}, data => {
+ frm.events.complete_job(frm, completed_time, data.qty);
+ }, __("Enter Value"), __("Complete"));
+ } else {
+ frm.events.complete_job(frm, completed_time, 0);
+ }
}).addClass("btn-primary");
}
},
diff --git a/erpnext/manufacturing/doctype/job_card/job_card.json b/erpnext/manufacturing/doctype/job_card/job_card.json
index 156acce..7661fff 100644
--- a/erpnext/manufacturing/doctype/job_card/job_card.json
+++ b/erpnext/manufacturing/doctype/job_card/job_card.json
@@ -99,8 +99,7 @@
"fieldname": "for_quantity",
"fieldtype": "Float",
"in_list_view": 1,
- "label": "Qty To Manufacture",
- "reqd": 1
+ "label": "Qty To Manufacture"
},
{
"fieldname": "wip_warehouse",
@@ -122,6 +121,7 @@
"options": "Employee"
},
{
+ "allow_bulk_edit": 1,
"fieldname": "time_logs",
"fieldtype": "Table",
"label": "Time Logs",
@@ -290,7 +290,7 @@
}
],
"is_submittable": 1,
- "modified": "2019-12-03 13:08:57.926201",
+ "modified": "2020-03-27 13:36:35.417502",
"modified_by": "Administrator",
"module": "Manufacturing",
"name": "Job Card",
diff --git a/erpnext/manufacturing/doctype/job_card/job_card.py b/erpnext/manufacturing/doctype/job_card/job_card.py
index 029db1c..f8c60f2 100644
--- a/erpnext/manufacturing/doctype/job_card/job_card.py
+++ b/erpnext/manufacturing/doctype/job_card/job_card.py
@@ -191,12 +191,9 @@
if not self.time_logs:
frappe.throw(_("Time logs are required for job card {0}").format(self.name))
- if self.total_completed_qty <= 0.0:
- frappe.throw(_("Total completed qty must be greater than zero"))
-
- if self.total_completed_qty != self.for_quantity:
- frappe.throw(_("The total completed qty({0}) must be equal to qty to manufacture({1})")
- .format(frappe.bold(self.total_completed_qty),frappe.bold(self.for_quantity)))
+ if self.for_quantity and self.total_completed_qty != self.for_quantity:
+ frappe.throw(_("The total completed qty({0}) must be equal to qty to manufacture({1})"
+ .format(frappe.bold(self.total_completed_qty),frappe.bold(self.for_quantity))))
def update_work_order(self):
if not self.work_order:
@@ -205,27 +202,34 @@
for_quantity, time_in_mins = 0, 0
from_time_list, to_time_list = [], []
- for d in frappe.get_all('Job Card',
- filters = {'docstatus': 1, 'operation_id': self.operation_id}):
- doc = frappe.get_doc('Job Card', d.name)
- for_quantity += doc.total_completed_qty
- time_in_mins += doc.total_time_in_mins
- for time_log in doc.time_logs:
- if time_log.from_time:
- from_time_list.append(time_log.from_time)
- if time_log.to_time:
- to_time_list.append(time_log.to_time)
+ data = frappe.get_all('Job Card',
+ fields = ["sum(total_time_in_mins) as time_in_mins", "sum(total_completed_qty) as completed_qty"],
+ filters = {"docstatus": 1, "work_order": self.work_order,
+ "workstation": self.workstation, "operation": self.operation})
+
+ if data and len(data) > 0:
+ for_quantity = data[0].completed_qty
+ time_in_mins = data[0].time_in_mins
if for_quantity:
+ time_data = frappe.db.sql("""
+ SELECT
+ min(from_time) as start_time, max(to_time) as end_time
+ FROM `tabJob Card` jc, `tabJob Card Time Log` jctl
+ WHERE
+ jctl.parent = jc.name and jc.work_order = %s
+ and jc.workstation = %s and jc.operation = %s and jc.docstatus = 1
+ """, (self.work_order, self.workstation, self.operation), as_dict=1)
+
wo = frappe.get_doc('Work Order', self.work_order)
for data in wo.operations:
- if data.name == self.operation_id:
+ if data.workstation == self.workstation and data.operation == self.operation:
data.completed_qty = for_quantity
data.actual_operation_time = time_in_mins
- data.actual_start_time = min(from_time_list) if from_time_list else None
- data.actual_end_time = max(to_time_list) if to_time_list else None
+ data.actual_start_time = time_data[0].start_time if time_data else None
+ data.actual_end_time = time_data[0].end_time if time_data else None
wo.flags.ignore_validate_update_after_submit = True
wo.update_operation_status()
diff --git a/erpnext/manufacturing/doctype/work_order/work_order.py b/erpnext/manufacturing/doctype/work_order/work_order.py
index 71a62e4..a124b1f 100644
--- a/erpnext/manufacturing/doctype/work_order/work_order.py
+++ b/erpnext/manufacturing/doctype/work_order/work_order.py
@@ -648,7 +648,7 @@
return res
@frappe.whitelist()
-def make_work_order(item, qty=0, project=None):
+def make_work_order(bom_no, item, qty=0, project=None):
if not frappe.has_permission("Work Order", "write"):
frappe.throw(_("Not permitted"), frappe.PermissionError)
@@ -657,6 +657,7 @@
wo_doc = frappe.new_doc("Work Order")
wo_doc.production_item = item
wo_doc.update(item_details)
+ wo_doc.bom_no = bom_no
if flt(qty) > 0:
wo_doc.qty = flt(qty)
diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js
index fc4541a..4397fe4 100644
--- a/erpnext/public/js/controllers/transaction.js
+++ b/erpnext/public/js/controllers/transaction.js
@@ -362,12 +362,17 @@
['serial_no', 'batch_no', 'barcode'].forEach(field => {
if (data[field] && frappe.meta.has_field(row_to_modify.doctype, field)) {
+
+ let value = (row_to_modify[field] && field === "serial_no")
+ ? row_to_modify[field] + '\n' + data[field] : data[field];
+
frappe.model.set_value(row_to_modify.doctype,
- row_to_modify.name, field, data[field]);
+ row_to_modify.name, field, value);
}
});
scan_barcode_field.set_value('');
+ refresh_field("items");
});
}
return false;
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.js b/erpnext/stock/doctype/stock_entry/stock_entry.js
index 3af3524..3bb9415 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.js
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.js
@@ -310,12 +310,12 @@
method: "erpnext.stock.get_item_details.get_serial_no",
args: {"args": args},
callback: function(r) {
- if (!r.exe){
+ if (!r.exe && r.message){
frappe.model.set_value(cdt, cdn, "serial_no", r.message);
- }
- if (callback) {
- callback();
+ if (callback) {
+ callback();
+ }
}
}
});
@@ -623,10 +623,15 @@
if(r.message) {
var d = locals[cdt][cdn];
$.each(r.message, function(k, v) {
- frappe.model.set_value(cdt, cdn, k, v); // qty and it's subsequent fields weren't triggered
+ if (v) {
+ frappe.model.set_value(cdt, cdn, k, v); // qty and it's subsequent fields weren't triggered
+ }
});
refresh_field("items");
- erpnext.stock.select_batch_and_serial_no(frm, d);
+
+ if (!d.serial_no) {
+ erpnext.stock.select_batch_and_serial_no(frm, d);
+ }
}
}
});