diff --git a/erpnext/accounts/doctype/accounts_settings/accounts_settings.json b/erpnext/accounts/doctype/accounts_settings/accounts_settings.json index a02e591ed5..c5b3e5b969 100644 --- a/erpnext/accounts/doctype/accounts_settings/accounts_settings.json +++ b/erpnext/accounts/doctype/accounts_settings/accounts_settings.json @@ -15,6 +15,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "default": "1", "description": "If enabled, the system will post accounting entries for inventory automatically.", "fieldname": "auto_accounting_for_stock", @@ -41,6 +42,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "Accounting entry frozen up to this date, nobody can do / modify entry except role specified below.", "fieldname": "acc_frozen_upto", "fieldtype": "Date", @@ -66,6 +68,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "Users with this role are allowed to set frozen accounts and create / modify accounting entries against frozen accounts", "fieldname": "frozen_accounts_modifier", "fieldtype": "Link", @@ -92,6 +95,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "column_break_4", "fieldtype": "Column Break", "hidden": 0, @@ -116,6 +120,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "Role that is allowed to submit transactions that exceed credit limits set.", "fieldname": "credit_controller", "fieldtype": "Link", @@ -142,6 +147,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "check_supplier_invoice_uniqueness", "fieldtype": "Check", "hidden": 0, @@ -162,6 +168,32 @@ "search_index": 0, "set_only_once": 0, "unique": 0 + }, + { + "allow_on_submit": 0, + "bold": 0, + "collapsible": 0, + "columns": 0, + "fieldname": "make_payment_via_journal_entry", + "fieldtype": "Check", + "hidden": 0, + "ignore_user_permissions": 0, + "ignore_xss_filter": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Make Payment via Journal Entry", + "length": 0, + "no_copy": 0, + "permlevel": 0, + "precision": "", + "print_hide": 0, + "print_hide_if_no_value": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0, + "unique": 0 } ], "hide_heading": 0, @@ -175,8 +207,8 @@ "issingle": 1, "istable": 0, "max_attachments": 0, - "modified": "2016-07-14 14:32:06.056888", - "modified_by": "Administrator", + "modified": "2016-10-05 16:13:10.978208", + "modified_by": "rohitw1991@gmail.com", "module": "Accounts", "name": "Accounts Settings", "owner": "Administrator", @@ -191,6 +223,7 @@ "export": 0, "if_owner": 0, "import": 0, + "is_custom": 0, "permlevel": 0, "print": 1, "read": 1, diff --git a/erpnext/accounts/doctype/sales_invoice/pos.py b/erpnext/accounts/doctype/sales_invoice/pos.py index 6f958f51ff..c07e25d515 100644 --- a/erpnext/accounts/doctype/sales_invoice/pos.py +++ b/erpnext/accounts/doctype/sales_invoice/pos.py @@ -240,6 +240,6 @@ def save_invoice(e, si_doc, name): def make_scheduler_log(e, sales_invoice): scheduler_log = frappe.new_doc('Scheduler Log') + scheduler_log.method = "erpnext.accounts.doctype.sales_invoice.pos.make_invoice" scheduler_log.error = e - scheduler_log.sales_invoice = sales_invoice scheduler_log.save(ignore_permissions=True) \ No newline at end of file diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index e245875468..3d2f16b4b5 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -26,6 +26,9 @@ class AccountsController(TransactionBase): return self.__company_currency + def onload(self): + self.get("__onload").make_payment_via_journal_entry = frappe.db.get_single_value('Accounts Settings', 'make_payment_via_journal_entry') + def validate(self): if self.get("_action") and self._action != "update_after_submit": self.set_missing_values(for_validate=True) diff --git a/erpnext/controllers/selling_controller.py b/erpnext/controllers/selling_controller.py index b9b94f512a..3f4d12d20b 100644 --- a/erpnext/controllers/selling_controller.py +++ b/erpnext/controllers/selling_controller.py @@ -23,6 +23,7 @@ class SellingController(StockController): self.grand_total) def onload(self): + super(SellingController, self).onload() if self.doctype in ("Sales Order", "Delivery Note", "Sales Invoice"): for item in self.get("items"): item.update(get_bin_details(item.item_code, diff --git a/erpnext/controllers/status_updater.py b/erpnext/controllers/status_updater.py index 7be6acdf8a..157c385661 100644 --- a/erpnext/controllers/status_updater.py +++ b/erpnext/controllers/status_updater.py @@ -301,12 +301,7 @@ class StatusUpdater(Document): ref_doc = frappe.get_doc(ref_dt, ref_dn) ref_doc.db_set("per_billed", per_billed) - - if frappe.get_meta(ref_dt).get_field("billing_status"): - if per_billed < 0.001: billing_status = "Not Billed" - elif per_billed >= 99.99: billing_status = "Fully Billed" - else: billing_status = "Partly Billed" - ref_doc.db_set('billing_status', billing_status) + ref_doc.set_status(update=True) def get_tolerance_for(item_code, item_tolerance={}, global_tolerance=None): """ diff --git a/erpnext/docs/assets/img/accounts/account-settings.png b/erpnext/docs/assets/img/accounts/account-settings.png index 943aa3d055..dfe2abed43 100644 Binary files a/erpnext/docs/assets/img/accounts/account-settings.png and b/erpnext/docs/assets/img/accounts/account-settings.png differ diff --git a/erpnext/docs/assets/img/accounts/journal-entry.png b/erpnext/docs/assets/img/accounts/journal-entry.png index d4a4e21fc2..c6a2a642cf 100644 Binary files a/erpnext/docs/assets/img/accounts/journal-entry.png and b/erpnext/docs/assets/img/accounts/journal-entry.png differ diff --git a/erpnext/docs/user/manual/en/accounts/index.txt b/erpnext/docs/user/manual/en/accounts/index.txt index d7c405acc5..6ba9337587 100644 --- a/erpnext/docs/user/manual/en/accounts/index.txt +++ b/erpnext/docs/user/manual/en/accounts/index.txt @@ -3,6 +3,7 @@ opening-accounts sales-invoice point-of-sale-pos-invoice purchase-invoice +payments journal-entry payment-entry multi-currency-accounting diff --git a/erpnext/docs/user/manual/en/accounts/payments.md b/erpnext/docs/user/manual/en/accounts/payments.md new file mode 100644 index 0000000000..7e5aab3a9a --- /dev/null +++ b/erpnext/docs/user/manual/en/accounts/payments.md @@ -0,0 +1,48 @@ +Payment can be made against following transactions. + + 1. Sales Invoice. + 2. Purchase Invoice. + 3. Sales Order (Advance Payment) + 4. Purchase Order (Advance Payment) + +In ERPNext, there is two options through which user can capture the payment + + 1. Payment Entry(Default). + 2. Journal Entry. + +## Payment Entry + +####Step 1: Make Payment + +On submitting a document against which Payment Entry can be made, you will find Make Payment button. + +Making Payment + +####Step 2: Payment Entry + +Making Payment + +For more details about payment entry [check here.](https://frappe.github.io/erpnext/user/manual/en/accounts/payment-entry) + +## Journal Entry + +To make paymant using journal entry, check below steps + +####Step 1: Activate Payment via Journal Entry + +Goto Accounts Settings > checked Make Payment via Journal Entry + +Making Payment + +####Step 2: Make Payment + +On submitting a document against which Journal Entry can be made, you will find Make Payment button. + +Making Payment + +####Step 3: Journal Entry + +Save and submit the journal entry to record the payament against the invoice +Making Payment + +For more details about journal entry [check here.](https://frappe.github.io/erpnext/user/manual/en/accounts/journal-entry) \ No newline at end of file diff --git a/erpnext/hr/doctype/expense_claim/expense_claim.js b/erpnext/hr/doctype/expense_claim/expense_claim.js index bcd8bc09b0..8b3c45140c 100644 --- a/erpnext/hr/doctype/expense_claim/expense_claim.js +++ b/erpnext/hr/doctype/expense_claim/expense_claim.js @@ -129,9 +129,6 @@ cur_frm.cscript.calculate_total = function(doc,cdt,cdn){ doc.total_sanctioned_amount = 0; $.each((doc.expenses || []), function(i, d) { doc.total_claimed_amount += d.claim_amount; - if(d.sanctioned_amount==null) { - d.sanctioned_amount = d.claim_amount; - } doc.total_sanctioned_amount += d.sanctioned_amount; }); @@ -144,17 +141,6 @@ cur_frm.cscript.calculate_total_amount = function(doc,cdt,cdn){ cur_frm.cscript.calculate_total(doc,cdt,cdn); } -cur_frm.cscript.claim_amount = function(doc,cdt,cdn){ - cur_frm.cscript.calculate_total(doc,cdt,cdn); - - var child = locals[cdt][cdn]; - refresh_field("sanctioned_amount", child.name, child.parentfield); -} - -cur_frm.cscript.sanctioned_amount = function(doc,cdt,cdn){ - cur_frm.cscript.calculate_total(doc,cdt,cdn); -} - cur_frm.cscript.on_submit = function(doc, cdt, cdn) { if(cint(frappe.boot.notification_settings && frappe.boot.notification_settings.expense_claim)) { cur_frm.email_doc(frappe.boot.notification_settings.expense_claim_message); @@ -172,6 +158,25 @@ erpnext.expense_claim = { } } +frappe.ui.form.on("Expense Claim Detail", { + claim_amount: function(frm, cdt, cdn) { + var child = locals[cdt][cdn]; + var doc = frm.doc; + + if(!child.sanctioned_amount){ + frappe.model.set_value(cdt, cdn, 'sanctioned_amount', child.claim_amount) + } + + cur_frm.cscript.calculate_total(doc,cdt,cdn); + }, + + sanctioned_amount: function(frm, cdt, cdn) { + var doc = frm.doc; + cur_frm.cscript.calculate_total(doc,cdt,cdn); + } +}) + + frappe.ui.form.on("Expense Claim", "employee_name", function(frm) { erpnext.expense_claim.set_title(frm); }); diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 55f7b4af3b..36014e7bca 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -332,3 +332,5 @@ execute:frappe.reload_doctype("Salary Slip") execute:frappe.db.sql("update `tabSalary Slip` set posting_date=creation") erpnext.patches.v7_1.update_portal_roles erpnext.patches.v7_1.set_total_amount_currency_in_je +finally:erpnext.patches.v7_0.update_timesheet_communications +erpnext.patches.v7_0.update_status_of_zero_amount_sales_order diff --git a/erpnext/patches/v7_0/set_portal_settings.py b/erpnext/patches/v7_0/set_portal_settings.py index 3d884fbc77..d9b6400260 100644 --- a/erpnext/patches/v7_0/set_portal_settings.py +++ b/erpnext/patches/v7_0/set_portal_settings.py @@ -9,9 +9,9 @@ from erpnext.setup.setup_wizard import domainify def execute(): for dt in ("assessment", "announcement", "course", "fees"): frappe.reload_doc("schools", "doctype", dt) - + frappe.reload_doc('website', 'doctype', 'portal_menu_item') - + frappe.get_doc('Portal Settings').sync_menu() if 'schools' in frappe.get_installed_apps(): diff --git a/erpnext/patches/v7_0/update_status_of_zero_amount_sales_order.py b/erpnext/patches/v7_0/update_status_of_zero_amount_sales_order.py new file mode 100644 index 0000000000..9b2b24785a --- /dev/null +++ b/erpnext/patches/v7_0/update_status_of_zero_amount_sales_order.py @@ -0,0 +1,7 @@ +from __future__ import unicode_literals +import frappe + +def execute(): + for data in frappe.get_all('Sales Order', fields = ["name"], filters = [["docstatus", "=", "1"], ["grand_total", "=", "0"]]): + sales_order = frappe.get_doc('Sales Order', data.name) + sales_order.set_status(update=True, update_modified = False) \ No newline at end of file diff --git a/erpnext/patches/v7_0/update_timesheet_communications b/erpnext/patches/v7_0/update_timesheet_communications new file mode 100644 index 0000000000..203471ea8f --- /dev/null +++ b/erpnext/patches/v7_0/update_timesheet_communications @@ -0,0 +1,27 @@ +from __future__ import unicode_literals +import frappe + +def execute(): + if frappe.db.table_exists("Time Log"): + timesheet = frappe.db.sql("""SELECT ts.name AS name, tl.name AS timelogname, + tl.modified AS modified, tl.modified_by AS modified_by, tl.creation AS creation, tl.owner AS owner + FROM + `tabTimesheet` ts, `tabTimesheet Detail` tsd, `tabTime Log` tl + WHERE + tsd.parent = ts.name AND tl.from_time = tsd.from_time AND tl.to_time = tsd.to_time + AND tl.hours = tsd.hours AND tl.billing_rate = tsd.billing_rate AND tsd.idx=1 + AND tl.docstatus < 2""", as_dict=1) + + for data in timesheet: + frappe.db.sql(""" update `tabTimesheet` set creation = %(creation)s, + owner = %(owner)s, modified = %(modified)s, modified_by = %(modified_by)s + where name = %(name)s""", data) + + frappe.db.sql(""" + update + tabCommunication + set + reference_doctype = "Timesheet", reference_name = %(timesheet)s + where + reference_doctype = "Time Log" and reference_name = %(timelog)s + """, {'timesheet': data.name, 'timelog': data.timelogname}, auto_commit=1) diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js index a928a9a6b3..0244cf31ca 100644 --- a/erpnext/public/js/controllers/transaction.js +++ b/erpnext/public/js/controllers/transaction.js @@ -979,7 +979,7 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({ make_payment_entry: function() { return frappe.call({ - method: "erpnext.accounts.doctype.payment_entry.payment_entry.get_payment_entry", + method: cur_frm.cscript.get_method_for_payment(), args: { "dt": cur_frm.doc.doctype, "dn": cur_frm.doc.name @@ -990,5 +990,18 @@ erpnext.TransactionController = erpnext.taxes_and_totals.extend({ // cur_frm.refresh_fields() } }); + }, + + get_method_for_payment: function(){ + method = "erpnext.accounts.doctype.payment_entry.payment_entry.get_payment_entry" + if(cur_frm.doc.__onload && cur_frm.doc.__onload.make_payment_via_journal_entry){ + if(in_list(['Sales Invoice', 'Purchase Invoice'], cur_frm.doc.doctype)){ + method = "erpnext.accounts.doctype.journal_entry.journal_entry.get_payment_entry_against_invoice" + }else { + method= "erpnext.accounts.doctype.journal_entry.journal_entry.get_payment_entry_against_order" + } + } + + return method } }); \ No newline at end of file diff --git a/erpnext/setup/doctype/notification_control/notification_control.js b/erpnext/setup/doctype/notification_control/notification_control.js index c8e199bf46..7f58ede1df 100644 --- a/erpnext/setup/doctype/notification_control/notification_control.js +++ b/erpnext/setup/doctype/notification_control/notification_control.js @@ -9,7 +9,9 @@ frappe.ui.form.on("Notification Control", { frm.set_value("custom_message", frm.doc[frm.events.get_fieldname(frm)]); }, set_message: function(frm) { - frm.set_value(frm.events.get_fieldname(frm), frm.doc.custom_message); + if(frm.doc.select_transaction && frm.doc.select_transaction !== "") { + frm.set_value(frm.events.get_fieldname(frm), frm.doc.custom_message); + } frm.save(); }, get_fieldname: function(frm) { diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py index 454fc70981..e9d4cb3fef 100644 --- a/erpnext/stock/doctype/item/item.py +++ b/erpnext/stock/doctype/item/item.py @@ -567,7 +567,7 @@ class Item(WebsiteGenerator): existing_allow_negative_stock = frappe.db.get_value("Stock Settings", None, "allow_negative_stock") frappe.db.set_value("Stock Settings", None, "allow_negative_stock", 1) - for warehouse in frappe.db.sql("select name from `tabWarehouse`"): + for warehouse in frappe.db.sql("select name from `tabWarehouse` where is_group = 0"): repost_stock(new_name, warehouse[0]) frappe.db.set_value("Stock Settings", None, "allow_negative_stock", existing_allow_negative_stock) diff --git a/erpnext/translations/fr.csv b/erpnext/translations/fr.csv index 6292472a8d..577bdf7fa3 100644 --- a/erpnext/translations/fr.csv +++ b/erpnext/translations/fr.csv @@ -413,7 +413,7 @@ DocType: Employee,Single,Unique DocType: Account,Cost of Goods Sold,Coût des marchandises vendues DocType: Purchase Invoice,Yearly,Annuel apps/erpnext/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +225,Please enter Cost Center,S'il vous plaît entrer Centre de coûts -DocType: Journal Entry Account,Sales Order,Bon de commande +DocType: Journal Entry Account,Sales Order,commande client apps/erpnext/erpnext/accounts/report/gross_profit/gross_profit.py +68,Avg. Selling Rate,Moy. Taux de vente DocType: Assessment,Examiner Name,Nom de l'examinateur apps/erpnext/erpnext/utilities/transaction_base.py +149,Quantity cannot be a fraction in row {0},La quantité ne peut pas être une fraction à la ligne {0} @@ -1007,7 +1007,7 @@ apps/erpnext/erpnext/patches/v4_0/create_price_list_if_missing.py +18,Standard B DocType: GL Entry,Against,Contre DocType: Item,Default Selling Cost Center,Coût des marchandises vendues DocType: Sales Partner,Implementation Partner,Partenaire de mise en œuvre -apps/erpnext/erpnext/controllers/selling_controller.py +231,Sales Order {0} is {1},Bon de commande {0} est {1} +apps/erpnext/erpnext/controllers/selling_controller.py +231,Sales Order {0} is {1},commande client {0} est {1} DocType: Opportunity,Contact Info,Information de contact apps/erpnext/erpnext/config/stock.py +299,Making Stock Entries,Faire des entrées stock DocType: Packing Slip,Net Weight UOM,Unité de mesure Poids Net @@ -1152,7 +1152,7 @@ DocType: Item,Lead Time in days,Délai en jours ,Accounts Payable Summary,Le résumé des comptes à payer apps/erpnext/erpnext/accounts/doctype/gl_entry/gl_entry.py +196,Not authorized to edit frozen Account {0},N'êtes pas autorisé à modifier le compte gelé {0} DocType: Journal Entry,Get Outstanding Invoices,Obtenez les factures impayées -apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.py +62,Sales Order {0} is not valid,Bon de commande {0} invalide +apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.py +62,Sales Order {0} is not valid,commande client {0} invalide apps/erpnext/erpnext/setup/doctype/company/company.py +185,"Sorry, companies cannot be merged","Désolé , les entreprises ne peuvent pas être fusionnés" apps/erpnext/erpnext/stock/doctype/material_request/material_request.py +139,"The total Issue / Transfer quantity {0} in Material Request {1} \ cannot be greater than requested quantity {2} for Item {3}",La quantité Problème / transfert total {0} dans Material Request {1} \ ne peut pas être supérieure à la quantité demandée {2} pour le poste {3} @@ -1607,7 +1607,7 @@ DocType: Authorization Control,Authorization Control,Contrôle d'autorisatio apps/erpnext/erpnext/controllers/buying_controller.py +300,Row #{0}: Rejected Warehouse is mandatory against rejected Item {1},Row # {0}: Entrepôt Rejeté est obligatoire contre Item rejeté {1} apps/erpnext/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.js +731,Payment,Paiement DocType: Production Order Operation,Actual Time and Cost,Temps réel et coût -apps/erpnext/erpnext/stock/doctype/material_request/material_request.py +54,Material Request of maximum {0} can be made for Item {1} against Sales Order {2},Demande de Matériel d'un maximum de {0} peut être faite pour l'article {1} par rapport au bon de commande {2} +apps/erpnext/erpnext/stock/doctype/material_request/material_request.py +54,Material Request of maximum {0} can be made for Item {1} against Sales Order {2},Demande de Matériel d'un maximum de {0} peut être faite pour l'article {1} par rapport au commande client {2} DocType: Employee,Salutation,Titre DocType: Pricing Rule,Brand,Marque DocType: Course,Course Abbreviation,Abréviation de cours @@ -1883,7 +1883,7 @@ apps/erpnext/erpnext/public/js/setup_wizard.js +52,"e.g. ""Build tools for build DocType: Quality Inspection,In Process,En cours DocType: Authorization Rule,Itemwise Discount,Remise (par Article) apps/erpnext/erpnext/config/accounts.py +69,Tree of financial accounts.,Arbre des comptes financiers. -apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +334,{0} against Sales Order {1},{0} contre le bon de commande de vente {1} +apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +334,{0} against Sales Order {1},{0} contre le commande client de vente {1} DocType: Account,Fixed Asset,Actifs immobilisés apps/erpnext/erpnext/config/stock.py +304,Serialized Inventory,Inventaire sérialisé DocType: Activity Type,Default Billing Rate,Prix facturation par défaut @@ -2182,7 +2182,7 @@ DocType: Homepage,Homepage,Page d'accueil DocType: Purchase Receipt Item,Recd Quantity,Quantité reçue apps/erpnext/erpnext/schools/doctype/program_enrollment/program_enrollment.py +54,Fee Records Created - {0},Records Fee Créé - {0} DocType: Asset Category Account,Asset Category Account,Catégorie d'actif compte -apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.py +103,Cannot produce more Item {0} than Sales Order quantity {1},Ne peut pas produire plus d'article {0} que de la qté du bon de commande {1} +apps/erpnext/erpnext/manufacturing/doctype/production_order/production_order.py +103,Cannot produce more Item {0} than Sales Order quantity {1},Ne peut pas produire plus d'article {0} que de la qté du commande client {1} apps/erpnext/erpnext/accounts/doctype/journal_entry/journal_entry.py +504,Stock Entry {0} is not submitted,Entrée stock {0} est pas soumis DocType: Payment Reconciliation,Bank / Cash Account,Banque et liquidités DocType: Tax Rule,Billing City,Ville de facturation @@ -2532,7 +2532,7 @@ apps/erpnext/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py DocType: Program Enrollment Tool,Get Students,Obtenez étudiants DocType: Serial No,Under Warranty,Sous garantie apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.js +490,[Error],[Erreur] -DocType: Sales Order,In Words will be visible once you save the Sales Order.,En Toutes Lettres. Sera visible une fois que vous enregistrerez le bon de commande. +DocType: Sales Order,In Words will be visible once you save the Sales Order.,En Toutes Lettres. Sera visible une fois que vous enregistrerez le commande client. ,Employee Birthday,Anniversaire de l'employé apps/erpnext/erpnext/controllers/status_updater.py +175,Limit Crossed,Limite Crossed apps/erpnext/erpnext/setup/setup_wizard/industry_type.py +55,Venture Capital,Capital Risque @@ -2769,7 +2769,7 @@ apps/erpnext/erpnext/setup/doctype/item_group/item_group.py +59,"An item exists apps/erpnext/erpnext/accounts/page/pos/pos.js +1190,Please select customer,S'il vous plaît sélectionner client DocType: C-Form,I,I DocType: Company,Asset Depreciation Cost Center,Asset Centre Amortissements -DocType: Sales Order Item,Sales Order Date,Date du bon de Commande +DocType: Sales Order Item,Sales Order Date,Date du commande client DocType: Sales Invoice Item,Delivered Qty,Qté livrée DocType: Production Planning Tool,"If checked, all the children of each production item will be included in the Material Requests.","Si elle est cochée, tous les enfants de chaque élément de production seront inclus dans les demandes de matériel." apps/erpnext/erpnext/stock/doctype/warehouse/warehouse.py +86,Warehouse {0}: Company is mandatory,Entrepôt {0}: Société est obligatoire @@ -3459,7 +3459,7 @@ DocType: Task,Total Expense Claim (via Expense Claim),Frais totaux (via Note de apps/erpnext/erpnext/accounts/report/sales_register/sales_register.py +69,Customer Id,Client Id apps/erpnext/erpnext/hr/doctype/employee_attendance_tool/employee_attendance_tool.js +176,Mark Absent,Marquer absent DocType: Journal Entry Account,Exchange Rate,Taux de change -apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +471,Sales Order {0} is not submitted,Bon de commande {0} n'a pas été transmis +apps/erpnext/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +471,Sales Order {0} is not submitted,commande client {0} n'a pas été transmis DocType: Homepage,Tag Line,Tag ligne DocType: Fee Component,Fee Component,Component Fee apps/erpnext/erpnext/buying/doctype/purchase_order/purchase_order.js +857,Add items from,Ajouter des articles de