From b96c014daf77aea33afdd9cf4de16f69453902ee Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 7 Oct 2014 11:25:04 +0530 Subject: [PATCH 01/30] Stock Reconciliation logic simplified --- erpnext/public/js/stock_analytics.js | 14 +- erpnext/startup/report_data_map.py | 3 +- erpnext/stock/doctype/bin/bin.py | 33 ++--- .../stock_ledger_entry/stock_ledger_entry.py | 2 +- .../stock_reconciliation.py | 120 +++--------------- .../stock/page/stock_balance/stock_balance.js | 9 +- erpnext/stock/stock_ledger.py | 19 ++- 7 files changed, 75 insertions(+), 125 deletions(-) diff --git a/erpnext/public/js/stock_analytics.js b/erpnext/public/js/stock_analytics.js index d4f43e98b9..84c0386c57 100644 --- a/erpnext/public/js/stock_analytics.js +++ b/erpnext/public/js/stock_analytics.js @@ -138,9 +138,17 @@ erpnext.StockAnalytics = erpnext.StockGridReport.extend({ item.valuation_method : sys_defaults.valuation_method; var is_fifo = valuation_method == "FIFO"; - var diff = me.get_value_diff(wh, sl, is_fifo); + if(sl.voucher_type=="Stock Reconciliation") { + var diff = (sl.qty_after_transaction * sl.valuation_rate) - item.closing_qty_value; + } else { + var diff = me.get_value_diff(wh, sl, is_fifo); + } } else { - var diff = sl.qty; + if(sl.voucher_type=="Stock Reconciliation") { + var diff = sl.qty_after_transaction - item.closing_qty_value; + } else { + var diff = sl.qty; + } } if(posting_datetime < from_date) { @@ -150,6 +158,8 @@ erpnext.StockAnalytics = erpnext.StockGridReport.extend({ } else { break; } + + item.closing_qty_value += diff; } } }, diff --git a/erpnext/startup/report_data_map.py b/erpnext/startup/report_data_map.py index ce71310ad9..81d378cd18 100644 --- a/erpnext/startup/report_data_map.py +++ b/erpnext/startup/report_data_map.py @@ -78,7 +78,8 @@ data_map = { "Stock Ledger Entry": { "columns": ["name", "posting_date", "posting_time", "item_code", "warehouse", "actual_qty as qty", "voucher_type", "voucher_no", "project", - "ifnull(incoming_rate,0) as incoming_rate", "stock_uom", "serial_no"], + "ifnull(incoming_rate,0) as incoming_rate", "stock_uom", "serial_no", + "qty_after_transaction", "valuation_rate"], "order_by": "posting_date, posting_time, name", "links": { "item_code": ["Item", "name"], diff --git a/erpnext/stock/doctype/bin/bin.py b/erpnext/stock/doctype/bin/bin.py index 3f74c5c7d3..0244213a96 100644 --- a/erpnext/stock/doctype/bin/bin.py +++ b/erpnext/stock/doctype/bin/bin.py @@ -11,27 +11,27 @@ class Bin(Document): def validate(self): if self.get("__islocal") or not self.stock_uom: self.stock_uom = frappe.db.get_value('Item', self.item_code, 'stock_uom') - + self.validate_mandatory() - + self.projected_qty = flt(self.actual_qty) + flt(self.ordered_qty) + \ flt(self.indented_qty) + flt(self.planned_qty) - flt(self.reserved_qty) - + def validate_mandatory(self): qf = ['actual_qty', 'reserved_qty', 'ordered_qty', 'indented_qty'] for f in qf: - if (not getattr(self, f, None)) or (not self.get(f)): + if (not getattr(self, f, None)) or (not self.get(f)): self.set(f, 0.0) - + def update_stock(self, args): self.update_qty(args) - + if args.get("actual_qty"): from erpnext.stock.stock_ledger import update_entries_after - + if not args.get("posting_date"): args["posting_date"] = nowdate() - + # update valuation and qty after transaction for post dated entry update_entries_after({ "item_code": self.item_code, @@ -39,21 +39,24 @@ class Bin(Document): "posting_date": args.get("posting_date"), "posting_time": args.get("posting_time") }) - + def update_qty(self, args): # update the stock values (for current quantities) - - self.actual_qty = flt(self.actual_qty) + flt(args.get("actual_qty")) + if args.get("voucher_type")=="Stock Reconciliation": + self.actual_qty = args.get("qty_after_transaction") + else: + self.actual_qty = flt(self.actual_qty) + flt(args.get("actual_qty")) + self.ordered_qty = flt(self.ordered_qty) + flt(args.get("ordered_qty")) self.reserved_qty = flt(self.reserved_qty) + flt(args.get("reserved_qty")) self.indented_qty = flt(self.indented_qty) + flt(args.get("indented_qty")) self.planned_qty = flt(self.planned_qty) + flt(args.get("planned_qty")) - + self.projected_qty = flt(self.actual_qty) + flt(self.ordered_qty) + \ flt(self.indented_qty) + flt(self.planned_qty) - flt(self.reserved_qty) - + self.save() - + def get_first_sle(self): sle = frappe.db.sql(""" select * from `tabStock Ledger Entry` @@ -62,4 +65,4 @@ class Bin(Document): order by timestamp(posting_date, posting_time) asc, name asc limit 1 """, (self.item_code, self.warehouse), as_dict=1) - return sle and sle[0] or None \ No newline at end of file + return sle and sle[0] or None diff --git a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py index 0e92b5d471..1bb189bd74 100644 --- a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py +++ b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py @@ -44,7 +44,7 @@ class StockLedgerEntry(Document): formatdate(self.posting_date), self.posting_time)) def validate_mandatory(self): - mandatory = ['warehouse','posting_date','voucher_type','voucher_no','actual_qty','company'] + mandatory = ['warehouse','posting_date','voucher_type','voucher_no','company'] for k in mandatory: if not self.get(k): frappe.throw(_("{0} is required").format(self.meta.get_label(k))) diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py index 40a980debb..f39829de98 100644 --- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py @@ -129,7 +129,6 @@ class StockReconciliation(StockController): def insert_stock_ledger_entries(self): """ find difference between current and expected entries and create stock ledger entries based on the difference""" - from erpnext.stock.utils import get_valuation_method from erpnext.stock.stock_ledger import get_previous_sle row_template = ["item_code", "warehouse", "qty", "valuation_rate"] @@ -141,105 +140,27 @@ class StockReconciliation(StockController): for row_num, row in enumerate(data[data.index(self.head_row)+1:]): row = frappe._dict(zip(row_template, row)) row["row_num"] = row_num - previous_sle = get_previous_sle({ - "item_code": row.item_code, - "warehouse": row.warehouse, - "posting_date": self.posting_date, - "posting_time": self.posting_time - }) - # check valuation rate mandatory - if row.qty not in ["", None] and not row.valuation_rate and \ - flt(previous_sle.get("qty_after_transaction")) <= 0: + if row.qty in ("", None) or row.valuation_rate in ("", None): + previous_sle = get_previous_sle({ + "item_code": row.item_code, + "warehouse": row.warehouse, + "posting_date": self.posting_date, + "posting_time": self.posting_time + }) + + if row.qty in ("", None): + row.qty = previous_sle.get("qty_after_transaction") + + if row.valuation_rate in ("", None): + row.valuation_rate = previous_sle.get("valuation_rate") + + if row.qty and not row.valuation_rate: frappe.throw(_("Valuation Rate required for Item {0}").format(row.item_code)) - change_in_qty = row.qty not in ["", None] and \ - (flt(row.qty) - flt(previous_sle.get("qty_after_transaction"))) + self.insert_entries(row) - change_in_rate = row.valuation_rate not in ["", None] and \ - (flt(row.valuation_rate) - flt(previous_sle.get("valuation_rate"))) - - if get_valuation_method(row.item_code) == "Moving Average": - self.sle_for_moving_avg(row, previous_sle, change_in_qty, change_in_rate) - - else: - self.sle_for_fifo(row, previous_sle, change_in_qty, change_in_rate) - - def sle_for_moving_avg(self, row, previous_sle, change_in_qty, change_in_rate): - """Insert Stock Ledger Entries for Moving Average valuation""" - def _get_incoming_rate(qty, valuation_rate, previous_qty, previous_valuation_rate): - if previous_valuation_rate == 0: - return flt(valuation_rate) - else: - if valuation_rate in ["", None]: - valuation_rate = previous_valuation_rate - return (qty * valuation_rate - previous_qty * previous_valuation_rate) \ - / flt(qty - previous_qty) - - if change_in_qty: - # if change in qty, irrespective of change in rate - incoming_rate = _get_incoming_rate(flt(row.qty), flt(row.valuation_rate), - flt(previous_sle.get("qty_after_transaction")), flt(previous_sle.get("valuation_rate"))) - - row["voucher_detail_no"] = "Row: " + cstr(row.row_num) + "/Actual Entry" - self.insert_entries({"actual_qty": change_in_qty, "incoming_rate": incoming_rate}, row) - - elif change_in_rate and flt(previous_sle.get("qty_after_transaction")) > 0: - # if no change in qty, but change in rate - # and positive actual stock before this reconciliation - incoming_rate = _get_incoming_rate( - flt(previous_sle.get("qty_after_transaction"))+1, flt(row.valuation_rate), - flt(previous_sle.get("qty_after_transaction")), - flt(previous_sle.get("valuation_rate"))) - - # +1 entry - row["voucher_detail_no"] = "Row: " + cstr(row.row_num) + "/Valuation Adjustment +1" - self.insert_entries({"actual_qty": 1, "incoming_rate": incoming_rate}, row) - - # -1 entry - row["voucher_detail_no"] = "Row: " + cstr(row.row_num) + "/Valuation Adjustment -1" - self.insert_entries({"actual_qty": -1}, row) - - def sle_for_fifo(self, row, previous_sle, change_in_qty, change_in_rate): - """Insert Stock Ledger Entries for FIFO valuation""" - previous_stock_queue = json.loads(previous_sle.get("stock_queue") or "[]") - previous_stock_qty = sum((batch[0] for batch in previous_stock_queue)) - previous_stock_value = sum((batch[0] * batch[1] for batch in \ - previous_stock_queue)) - - def _insert_entries(): - if previous_stock_queue != [[row.qty, row.valuation_rate]]: - # make entry as per attachment - if flt(row.qty): - row["voucher_detail_no"] = "Row: " + cstr(row.row_num) + "/Actual Entry" - self.insert_entries({"actual_qty": row.qty, - "incoming_rate": flt(row.valuation_rate)}, row) - - # Make reverse entry - if previous_stock_qty: - row["voucher_detail_no"] = "Row: " + cstr(row.row_num) + "/Reverse Entry" - self.insert_entries({"actual_qty": -1 * previous_stock_qty, - "incoming_rate": previous_stock_qty < 0 and - flt(row.valuation_rate) or 0}, row) - - - if change_in_qty: - if row.valuation_rate in ["", None]: - # dont want change in valuation - if previous_stock_qty > 0: - # set valuation_rate as previous valuation_rate - row.valuation_rate = previous_stock_value / flt(previous_stock_qty) - - _insert_entries() - - elif change_in_rate and previous_stock_qty > 0: - # if no change in qty, but change in rate - # and positive actual stock before this reconciliation - - row.qty = previous_stock_qty - _insert_entries() - - def insert_entries(self, opts, row): + def insert_entries(self, row): """Insert Stock Ledger Entries""" args = frappe._dict({ "doctype": "Stock Ledger Entry", @@ -253,9 +174,10 @@ class StockReconciliation(StockController): "stock_uom": frappe.db.get_value("Item", row.item_code, "stock_uom"), "voucher_detail_no": row.voucher_detail_no, "fiscal_year": self.fiscal_year, - "is_cancelled": "No" + "is_cancelled": "No", + "qty_after_transaction": row.qty, + "valuation_rate": row.valuation_rate }) - args.update(opts) self.make_sl_entries([args]) # append to entries @@ -295,7 +217,7 @@ class StockReconciliation(StockController): if not self.expense_account: msgprint(_("Please enter Expense Account"), raise_exception=1) - elif not frappe.db.sql("""select * from `tabStock Ledger Entry`"""): + elif not frappe.db.sql("""select name from `tabStock Ledger Entry` limit 1"""): if frappe.db.get_value("Account", self.expense_account, "report_type") == "Profit and Loss": frappe.throw(_("Difference Account must be a 'Liability' type account, since this Stock Reconciliation is an Opening Entry")) diff --git a/erpnext/stock/page/stock_balance/stock_balance.js b/erpnext/stock/page/stock_balance/stock_balance.js index 1083414725..c2ffc3701b 100644 --- a/erpnext/stock/page/stock_balance/stock_balance.js +++ b/erpnext/stock/page/stock_balance/stock_balance.js @@ -104,8 +104,13 @@ erpnext.StockBalance = erpnext.StockAnalytics.extend({ item.valuation_method : sys_defaults.valuation_method; var is_fifo = valuation_method == "FIFO"; - var qty_diff = sl.qty; - var value_diff = me.get_value_diff(wh, sl, is_fifo); + if(sl.voucher_type=="Stock Reconciliation") { + var qty_diff = sl.qty_after_trasaction - item.closing_qty; + var value_diff = (sl.valuation_rate * sl.qty_after_trasaction) - item.closing_value; + } else { + var qty_diff = sl.qty; + var value_diff = me.get_value_diff(wh, sl, is_fifo); + } if(sl_posting_date < from_date) { item.opening_qty += qty_diff; diff --git a/erpnext/stock/stock_ledger.py b/erpnext/stock/stock_ledger.py index 3717bf1595..03bbf2f138 100644 --- a/erpnext/stock/stock_ledger.py +++ b/erpnext/stock/stock_ledger.py @@ -95,14 +95,23 @@ def update_entries_after(args, verbose=1): qty_after_transaction += flt(sle.actual_qty) continue + if sle.serial_no: valuation_rate = get_serialized_values(qty_after_transaction, sle, valuation_rate) - elif valuation_method == "Moving Average": - valuation_rate = get_moving_average_values(qty_after_transaction, sle, valuation_rate) - else: - valuation_rate = get_fifo_values(qty_after_transaction, sle, stock_queue) + qty_after_transaction += flt(sle.actual_qty) - qty_after_transaction += flt(sle.actual_qty) + else: + if sle.voucher_type=="Stock Reconciliation": + valuation_rate = sle.valuation_rate + qty_after_transaction = sle.qty_after_transaction + stock_queue = [[qty_after_transaction, valuation_rate]] + else: + if valuation_method == "Moving Average": + valuation_rate = get_moving_average_values(qty_after_transaction, sle, valuation_rate) + else: + valuation_rate = get_fifo_values(qty_after_transaction, sle, stock_queue) + + qty_after_transaction += flt(sle.actual_qty) # get stock value if sle.serial_no: From bfa7f171bddf771ece6167788d588b137215ef74 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 7 Oct 2014 12:17:31 +0530 Subject: [PATCH 02/30] Stock reconciliation sl entries --- erpnext/stock/doctype/bin/bin.py | 12 +++++++++++- .../doctype/stock_ledger_entry/stock_ledger_entry.py | 3 +++ .../stock_reconciliation/stock_reconciliation.py | 1 - erpnext/stock/report/stock_ledger/stock_ledger.py | 7 ++----- erpnext/stock/stock_ledger.py | 2 +- 5 files changed, 17 insertions(+), 8 deletions(-) diff --git a/erpnext/stock/doctype/bin/bin.py b/erpnext/stock/doctype/bin/bin.py index 0244213a96..d094bc2fce 100644 --- a/erpnext/stock/doctype/bin/bin.py +++ b/erpnext/stock/doctype/bin/bin.py @@ -43,7 +43,17 @@ class Bin(Document): def update_qty(self, args): # update the stock values (for current quantities) if args.get("voucher_type")=="Stock Reconciliation": - self.actual_qty = args.get("qty_after_transaction") + if args.get('is_cancelled') == 'No': + self.actual_qty = args.get("qty_after_transaction") + else: + qty_after_transaction = frappe.db.get_value("""select qty_after_transaction + from `tabStock Ledger Entry` + where item_code=%s and warehouse=%s + and not (voucher_type='Stock Reconciliation' and voucher_no=%s) + order by posting_date desc limit 1""", + (self.item_code, self.warehouse, args.get('voucher_no'))) + + self.actual_qty = flt(qty_after_transaction[0][0]) if qty_after_transaction else 0.0 else: self.actual_qty = flt(self.actual_qty) + flt(args.get("actual_qty")) diff --git a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py index 1bb189bd74..7fdd440f2e 100644 --- a/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py +++ b/erpnext/stock/doctype/stock_ledger_entry/stock_ledger_entry.py @@ -49,6 +49,9 @@ class StockLedgerEntry(Document): if not self.get(k): frappe.throw(_("{0} is required").format(self.meta.get_label(k))) + if self.voucher_type != "Stock Reconciliation" and not self.actual_qty: + frappe.throw(_("Actual Qty is mandatory")) + def validate_item(self): item_det = frappe.db.sql("""select name, has_batch_no, docstatus, is_stock_item from tabItem where name=%s""", self.item_code, as_dict=True)[0] diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py index f39829de98..2aa9ab61c6 100644 --- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py @@ -172,7 +172,6 @@ class StockReconciliation(StockController): "voucher_no": self.name, "company": self.company, "stock_uom": frappe.db.get_value("Item", row.item_code, "stock_uom"), - "voucher_detail_no": row.voucher_detail_no, "fiscal_year": self.fiscal_year, "is_cancelled": "No", "qty_after_transaction": row.qty, diff --git a/erpnext/stock/report/stock_ledger/stock_ledger.py b/erpnext/stock/report/stock_ledger/stock_ledger.py index 4c5458dbb2..44f32c9751 100644 --- a/erpnext/stock/report/stock_ledger/stock_ledger.py +++ b/erpnext/stock/report/stock_ledger/stock_ledger.py @@ -13,16 +13,13 @@ def execute(filters=None): data = [] for sle in sl_entries: item_detail = item_details[sle.item_code] - voucher_link_icon = """""" \ - % ("/".join(["#Form", sle.voucher_type, sle.voucher_no]),) data.append([sle.date, sle.item_code, item_detail.item_name, item_detail.item_group, item_detail.brand, item_detail.description, sle.warehouse, item_detail.stock_uom, sle.actual_qty, sle.qty_after_transaction, (sle.incoming_rate if sle.actual_qty > 0 else 0.0), sle.valuation_rate, sle.stock_value, sle.voucher_type, sle.voucher_no, - voucher_link_icon, sle.batch_no, sle.serial_no, sle.company]) + sle.batch_no, sle.serial_no, sle.company]) return columns, data @@ -31,7 +28,7 @@ def get_columns(): _("Brand") + ":Link/Brand:100", _("Description") + "::200", _("Warehouse") + ":Link/Warehouse:100", _("Stock UOM") + ":Link/UOM:100", _("Qty") + ":Float:50", _("Balance Qty") + ":Float:100", _("Incoming Rate") + ":Currency:110", _("Valuation Rate") + ":Currency:110", _("Balance Value") + ":Currency:110", - _("Voucher Type") + "::110", _("Voucher #") + "::100", _("Link") + "::30", _("Batch") + ":Link/Batch:100", + _("Voucher Type") + "::110", _("Voucher #") + ":Dynamic Link/Voucher Type:100", _("Batch") + ":Link/Batch:100", _("Serial #") + ":Link/Serial No:100", _("Company") + ":Link/Company:100"] def get_stock_ledger_entries(filters): diff --git a/erpnext/stock/stock_ledger.py b/erpnext/stock/stock_ledger.py index 03bbf2f138..db65cd4a29 100644 --- a/erpnext/stock/stock_ledger.py +++ b/erpnext/stock/stock_ledger.py @@ -27,7 +27,7 @@ def make_sl_entries(sl_entries, is_amended=None): if sle.get('is_cancelled') == 'Yes': sle['actual_qty'] = -flt(sle['actual_qty']) - if sle.get("actual_qty"): + if sle.get("actual_qty") or sle.voucher_type=="Stock Reconciliation": sle_id = make_entry(sle) args = sle.copy() From bb19b91ef988303e95b41fa024b71ed57b828984 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 7 Oct 2014 15:02:58 +0530 Subject: [PATCH 03/30] stock reco fixes --- erpnext/stock/doctype/bin/bin.py | 2 +- .../stock_reconciliation.json | 5 +- .../stock/report/stock_ageing/stock_ageing.py | 51 +++++++++++-------- erpnext/stock/stock_ledger.py | 1 - 4 files changed, 33 insertions(+), 26 deletions(-) diff --git a/erpnext/stock/doctype/bin/bin.py b/erpnext/stock/doctype/bin/bin.py index d094bc2fce..e3269e87e2 100644 --- a/erpnext/stock/doctype/bin/bin.py +++ b/erpnext/stock/doctype/bin/bin.py @@ -26,7 +26,7 @@ class Bin(Document): def update_stock(self, args): self.update_qty(args) - if args.get("actual_qty"): + if args.get("actual_qty") or args.get("voucher_type") == "Stock Reconciliation": from erpnext.stock.stock_ledger import update_entries_after if not args.get("posting_date"): diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.json b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.json index daba967a58..8434f600d1 100644 --- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.json +++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.json @@ -1,5 +1,5 @@ { - "allow_copy": 1, + "allow_copy": 1, "autoname": "SR/.######", "creation": "2013-03-28 10:35:31", "description": "This tool helps you to update or fix the quantity and valuation of stock in the system. It is typically used to synchronise the system values and what actually exists in your warehouses.", @@ -7,6 +7,7 @@ "doctype": "DocType", "fields": [ { + "default": "Today", "fieldname": "posting_date", "fieldtype": "Date", "in_filter": 0, @@ -118,7 +119,7 @@ "idx": 1, "is_submittable": 1, "max_attachments": 1, - "modified": "2014-05-26 03:05:54.024413", + "modified": "2014-10-07 12:43:52.825575", "modified_by": "Administrator", "module": "Stock", "name": "Stock Reconciliation", diff --git a/erpnext/stock/report/stock_ageing/stock_ageing.py b/erpnext/stock/report/stock_ageing/stock_ageing.py index fc4786123e..fb5e9f9bfd 100644 --- a/erpnext/stock/report/stock_ageing/stock_ageing.py +++ b/erpnext/stock/report/stock_ageing/stock_ageing.py @@ -4,10 +4,10 @@ from __future__ import unicode_literals import frappe from frappe import _ -from frappe.utils import date_diff +from frappe.utils import date_diff, flt def execute(filters=None): - + columns = get_columns() item_details = get_fifo_queue(filters) to_date = filters["to_date"] @@ -16,35 +16,40 @@ def execute(filters=None): fifo_queue = item_dict["fifo_queue"] details = item_dict["details"] if not fifo_queue: continue - + average_age = get_average_age(fifo_queue, to_date) earliest_age = date_diff(to_date, fifo_queue[0][1]) latest_age = date_diff(to_date, fifo_queue[-1][1]) - - data.append([item, details.item_name, details.description, details.item_group, + + data.append([item, details.item_name, details.description, details.item_group, details.brand, average_age, earliest_age, latest_age, details.stock_uom]) - + return columns, data - + def get_average_age(fifo_queue, to_date): batch_age = age_qty = total_qty = 0.0 for batch in fifo_queue: batch_age = date_diff(to_date, batch[1]) age_qty += batch_age * batch[0] total_qty += batch[0] - + return (age_qty / total_qty) if total_qty else 0.0 - + def get_columns(): - return [_("Item Code") + ":Link/Item:100", _("Item Name") + "::100", _("Description") + "::200", - _("Item Group") + ":Link/Item Group:100", _("Brand") + ":Link/Brand:100", _("Average Age") + ":Float:100", + return [_("Item Code") + ":Link/Item:100", _("Item Name") + "::100", _("Description") + "::200", + _("Item Group") + ":Link/Item Group:100", _("Brand") + ":Link/Brand:100", _("Average Age") + ":Float:100", _("Earliest") + ":Int:80", _("Latest") + ":Int:80", _("UOM") + ":Link/UOM:100"] - + def get_fifo_queue(filters): item_details = {} + prev_qty = 0.0 for d in get_stock_ledger_entries(filters): item_details.setdefault(d.name, {"details": d, "fifo_queue": []}) fifo_queue = item_details[d.name]["fifo_queue"] + + if d.voucher_type == "Stock Reconciliation": + d.actual_qty = flt(d.qty_after_transaction) - flt(prev_qty) + if d.actual_qty > 0: fifo_queue.append([d.actual_qty, d.posting_date]) else: @@ -52,7 +57,7 @@ def get_fifo_queue(filters): while qty_to_pop: batch = fifo_queue[0] if fifo_queue else [0, None] if 0 < batch[0] <= qty_to_pop: - # if batch qty > 0 + # if batch qty > 0 # not enough or exactly same qty in current batch, clear batch qty_to_pop -= batch[0] fifo_queue.pop(0) @@ -61,12 +66,14 @@ def get_fifo_queue(filters): batch[0] -= qty_to_pop qty_to_pop = 0 + prev_qty = d.qty_after_transaction + return item_details - + def get_stock_ledger_entries(filters): - return frappe.db.sql("""select - item.name, item.item_name, item_group, brand, description, item.stock_uom, - actual_qty, posting_date + return frappe.db.sql("""select + item.name, item.item_name, item_group, brand, description, item.stock_uom, + actual_qty, posting_date, voucher_type, qty_after_transaction from `tabStock Ledger Entry` sle, (select name, item_name, description, stock_uom, brand, item_group from `tabItem` {item_conditions}) item @@ -77,19 +84,19 @@ def get_stock_ledger_entries(filters): order by posting_date, posting_time, sle.name"""\ .format(item_conditions=get_item_conditions(filters), sle_conditions=get_sle_conditions(filters)), filters, as_dict=True) - + def get_item_conditions(filters): conditions = [] if filters.get("item_code"): conditions.append("item_code=%(item_code)s") if filters.get("brand"): conditions.append("brand=%(brand)s") - + return "where {}".format(" and ".join(conditions)) if conditions else "" - + def get_sle_conditions(filters): conditions = [] if filters.get("warehouse"): conditions.append("warehouse=%(warehouse)s") - - return "and {}".format(" and ".join(conditions)) if conditions else "" \ No newline at end of file + + return "and {}".format(" and ".join(conditions)) if conditions else "" diff --git a/erpnext/stock/stock_ledger.py b/erpnext/stock/stock_ledger.py index db65cd4a29..b7c2074003 100644 --- a/erpnext/stock/stock_ledger.py +++ b/erpnext/stock/stock_ledger.py @@ -83,7 +83,6 @@ def update_entries_after(args, verbose=1): entries_to_fix = get_sle_after_datetime(previous_sle or \ {"item_code": args["item_code"], "warehouse": args["warehouse"]}, for_update=True) - valuation_method = get_valuation_method(args["item_code"]) stock_value_difference = 0.0 From adeb976a1bc693b75dc44423cdaa8ac88c1f5a31 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 6 Oct 2014 11:53:52 +0530 Subject: [PATCH 04/30] Block negative stock in perpetual inventory --- .../accounts_settings/accounts_settings.py | 3 ++ .../doctype/sales_invoice/sales_invoice.py | 14 +++--- erpnext/accounts/general_ledger.py | 3 +- erpnext/controllers/stock_controller.py | 50 +++++++++++++++---- .../stock_reconciliation.py | 4 +- .../doctype/stock_settings/stock_settings.py | 14 ++++-- erpnext/stock/stock_ledger.py | 4 +- 7 files changed, 63 insertions(+), 29 deletions(-) diff --git a/erpnext/accounts/doctype/accounts_settings/accounts_settings.py b/erpnext/accounts/doctype/accounts_settings/accounts_settings.py index f0890dd439..7280322a68 100644 --- a/erpnext/accounts/doctype/accounts_settings/accounts_settings.py +++ b/erpnext/accounts/doctype/accounts_settings/accounts_settings.py @@ -14,6 +14,9 @@ class AccountsSettings(Document): frappe.db.set_default("auto_accounting_for_stock", self.auto_accounting_for_stock) if cint(self.auto_accounting_for_stock): + if cint(frappe.db.get_value("Stock Settings", None, "allow_negative_stock")): + frappe.throw(_("Negative stock is not allowed in case of Perpetual Inventory, please disable it from Stock Settings")) + # set default perpetual account in company for company in frappe.db.sql("select name from tabCompany"): frappe.get_doc("Company", company[0]).save() diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index a2bf78c449..31f7113c37 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -7,7 +7,7 @@ import frappe.defaults from frappe.utils import cint, cstr, flt from frappe import _, msgprint, throw from erpnext.accounts.party import get_party_account, get_due_date -from erpnext.controllers.stock_controller import update_gl_entries_after +from erpnext.controllers.stock_controller import update_gl_entries_after, block_negative_stock from frappe.model.mapper import get_mapped_doc from erpnext.controllers.selling_controller import SellingController @@ -456,8 +456,8 @@ class SalesInvoice(SellingController): self.make_sl_entries(sl_entries) - def make_gl_entries(self, repost_future_gle=True): - gl_entries = self.get_gl_entries() + def make_gl_entries(self, repost_future_gle=True, allow_negative_stock=False): + gl_entries = self.get_gl_entries(allow_negative_stock=allow_negative_stock) if gl_entries: from erpnext.accounts.general_ledger import make_gl_entries @@ -476,7 +476,7 @@ class SalesInvoice(SellingController): items, warehouses = self.get_items_and_warehouses() update_gl_entries_after(self.posting_date, self.posting_time, warehouses, items) - def get_gl_entries(self, warehouse_account=None): + def get_gl_entries(self, warehouse_account=None, allow_negative_stock=False): from erpnext.accounts.general_ledger import merge_similar_entries gl_entries = [] @@ -485,7 +485,7 @@ class SalesInvoice(SellingController): self.make_tax_gl_entries(gl_entries) - self.make_item_gl_entries(gl_entries) + self.make_item_gl_entries(gl_entries, allow_negative_stock) # merge gl entries before adding pos entries gl_entries = merge_similar_entries(gl_entries) @@ -520,7 +520,7 @@ class SalesInvoice(SellingController): }) ) - def make_item_gl_entries(self, gl_entries): + def make_item_gl_entries(self, gl_entries, allow_negative_stock=False): # income account gl entries for item in self.get("entries"): if flt(item.base_amount): @@ -537,7 +537,7 @@ class SalesInvoice(SellingController): # expense account gl entries if cint(frappe.defaults.get_global_default("auto_accounting_for_stock")) \ and cint(self.update_stock): - gl_entries += super(SalesInvoice, self).get_gl_entries() + gl_entries += super(SalesInvoice, self).get_gl_entries(allow_negative_stock=allow_negative_stock) def make_pos_gl_entries(self, gl_entries): if cint(self.is_pos) and self.cash_bank_account and self.paid_amount: diff --git a/erpnext/accounts/general_ledger.py b/erpnext/accounts/general_ledger.py index 211476822f..073ef8a5af 100644 --- a/erpnext/accounts/general_ledger.py +++ b/erpnext/accounts/general_ledger.py @@ -97,8 +97,7 @@ def validate_account_for_auto_accounting_for_stock(gl_map): for entry in gl_map: if entry.account in aii_accounts: - frappe.throw(_("Account: {0} can only be updated via \ - Stock Transactions").format(entry.account), StockAccountInvalidTransaction) + frappe.throw(_("Account: {0} can only be updated via Stock Transactions").format(entry.account), StockAccountInvalidTransaction) def delete_gl_entries(gl_entries=None, voucher_type=None, voucher_no=None, diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py index 575525399f..304ded2390 100644 --- a/erpnext/controllers/stock_controller.py +++ b/erpnext/controllers/stock_controller.py @@ -8,10 +8,10 @@ from frappe import msgprint, _ import frappe.defaults from erpnext.controllers.accounts_controller import AccountsController -from erpnext.accounts.general_ledger import make_gl_entries, delete_gl_entries +from erpnext.accounts.general_ledger import make_gl_entries, delete_gl_entries, process_gl_map class StockController(AccountsController): - def make_gl_entries(self, repost_future_gle=True): + def make_gl_entries(self, repost_future_gle=True, allow_negative_stock=False): if self.docstatus == 2: delete_gl_entries(voucher_type=self.doctype, voucher_no=self.name) @@ -19,16 +19,19 @@ class StockController(AccountsController): warehouse_account = get_warehouse_account() if self.docstatus==1: - gl_entries = self.get_gl_entries(warehouse_account) + gl_entries = self.get_gl_entries(warehouse_account, allow_negative_stock) make_gl_entries(gl_entries) if repost_future_gle: items, warehouses = self.get_items_and_warehouses() - update_gl_entries_after(self.posting_date, self.posting_time, warehouses, items, warehouse_account) + update_gl_entries_after(self.posting_date, self.posting_time, warehouses, items, + warehouse_account, allow_negative_stock) def get_gl_entries(self, warehouse_account=None, default_expense_account=None, - default_cost_center=None): - from erpnext.accounts.general_ledger import process_gl_map + default_cost_center=None, allow_negative_stock=False): + + block_negative_stock(allow_negative_stock) + if not warehouse_account: warehouse_account = get_warehouse_account() @@ -46,12 +49,17 @@ class StockController(AccountsController): self.check_expense_account(detail) + stock_value_difference = flt(sle.stock_value_difference, 2) + if not stock_value_difference: + valuation_rate = get_valuation_rate(sle.item_code, sle.warehouse, sle.posting_date) + stock_value_difference = flt(sle.qty)*flt(valuation_rate) + gl_list.append(self.get_gl_dict({ "account": warehouse_account[sle.warehouse], "against": detail.expense_account, "cost_center": detail.cost_center, "remarks": self.get("remarks") or "Accounting Entry for Stock", - "debit": flt(sle.stock_value_difference, 2) + "debit": stock_value_difference })) # to target warehouse / expense account @@ -60,7 +68,7 @@ class StockController(AccountsController): "against": warehouse_account[sle.warehouse], "cost_center": detail.cost_center, "remarks": self.get("remarks") or "Accounting Entry for Stock", - "credit": flt(sle.stock_value_difference, 2) + "credit": stock_value_difference })) elif sle.warehouse not in warehouse_with_no_account: warehouse_with_no_account.append(sle.warehouse) @@ -214,7 +222,8 @@ class StockController(AccountsController): return serialized_items -def update_gl_entries_after(posting_date, posting_time, for_warehouses=None, for_items=None, warehouse_account=None): +def update_gl_entries_after(posting_date, posting_time, for_warehouses=None, for_items=None, + warehouse_account=None, allow_negative_stock=False): def _delete_gl_entries(voucher_type, voucher_no): frappe.db.sql("""delete from `tabGL Entry` where voucher_type=%s and voucher_no=%s""", (voucher_type, voucher_no)) @@ -228,12 +237,12 @@ def update_gl_entries_after(posting_date, posting_time, for_warehouses=None, for for voucher_type, voucher_no in future_stock_vouchers: existing_gle = gle.get((voucher_type, voucher_no), []) voucher_obj = frappe.get_doc(voucher_type, voucher_no) - expected_gle = voucher_obj.get_gl_entries(warehouse_account) + expected_gle = voucher_obj.get_gl_entries(warehouse_account, allow_negative_stock) if expected_gle: if not existing_gle or not compare_existing_and_expected_gle(existing_gle, expected_gle): _delete_gl_entries(voucher_type, voucher_no) - voucher_obj.make_gl_entries(repost_future_gle=False) + voucher_obj.make_gl_entries(repost_future_gle=False, allow_negative_stock=allow_negative_stock) else: _delete_gl_entries(voucher_type, voucher_no) @@ -285,3 +294,22 @@ def get_warehouse_account(): warehouse_account = dict(frappe.db.sql("""select master_name, name from tabAccount where account_type = 'Warehouse' and ifnull(master_name, '') != ''""")) return warehouse_account + +def block_negative_stock(allow_negative_stock=False): + if cint(frappe.defaults.get_global_default("auto_accounting_for_stock")) and not allow_negative_stock: + if cint(frappe.db.get_value("Stock Settings", None, "allow_negative_stock")): + frappe.throw(_("Negative stock is not allowed in case of Perpetual Inventory, please disable it from Stock Settings")) + +def get_valuation_rate(item_code, warehouse, posting_date): + last_valuation_rate = frappe.db.sql("""select valuation_rate + from `tabStock Ledger Entry` + where item_code = %s and warehouse = %s + and ifnull(qty_after_transaction, 0) > 0 and posting_date < %s + order by posting_date desc limit 1""", (item_code, warehouse, posting_date)) + + valuation_rate = flt(last_valuation_rate[0][0]) if last_valuation_rate else 0 + + if not valuation_rate: + valuation_rate = frappe.db.get_value("Item Price", {"item_code": item_code, "buying": 1}, "price") + + return valuation_rate diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py index 2aa9ab61c6..8e837e275c 100644 --- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py @@ -203,12 +203,12 @@ class StockReconciliation(StockController): "posting_time": self.posting_time }) - def get_gl_entries(self, warehouse_account=None): + def get_gl_entries(self, warehouse_account=None, allow_negative_stock=False): if not self.cost_center: msgprint(_("Please enter Cost Center"), raise_exception=1) return super(StockReconciliation, self).get_gl_entries(warehouse_account, - self.expense_account, self.cost_center) + self.expense_account, self.cost_center, allow_negative_stock=allow_negative_stock) def validate_expense_account(self): if not cint(frappe.defaults.get_global_default("auto_accounting_for_stock")): diff --git a/erpnext/stock/doctype/stock_settings/stock_settings.py b/erpnext/stock/doctype/stock_settings/stock_settings.py index b505394f1b..95ace86b79 100644 --- a/erpnext/stock/doctype/stock_settings/stock_settings.py +++ b/erpnext/stock/doctype/stock_settings/stock_settings.py @@ -6,18 +6,20 @@ from __future__ import unicode_literals import frappe from frappe import _ - +from frappe.utils import cint from frappe.model.document import Document class StockSettings(Document): def validate(self): - for key in ["item_naming_by", "item_group", "stock_uom", - "allow_negative_stock"]: + if cint(self.allow_negative_stock) and cint(frappe.defaults.get_global_default("auto_accounting_for_stock")): + frappe.throw(_("Negative stock is not allowed in case of Perpetual Inventory")) + + for key in ["item_naming_by", "item_group", "stock_uom", "allow_negative_stock"]: frappe.db.set_default(key, self.get(key, "")) - + from erpnext.setup.doctype.naming_series.naming_series import set_by_naming_series - set_by_naming_series("Item", "item_code", + set_by_naming_series("Item", "item_code", self.get("item_naming_by")=="Naming Series", hide_name_field=True) stock_frozen_limit = 356 @@ -25,3 +27,5 @@ class StockSettings(Document): if submitted_stock_frozen > stock_frozen_limit: self.stock_frozen_upto_days = stock_frozen_limit frappe.msgprint (_("`Freeze Stocks Older Than` should be smaller than %d days.") %stock_frozen_limit) + + diff --git a/erpnext/stock/stock_ledger.py b/erpnext/stock/stock_ledger.py index b7c2074003..e8a84c2ab1 100644 --- a/erpnext/stock/stock_ledger.py +++ b/erpnext/stock/stock_ledger.py @@ -36,9 +36,9 @@ def make_sl_entries(sl_entries, is_amended=None): "is_amended": is_amended }) update_bin(args) + if cancel: - delete_cancelled_entry(sl_entries[0].get('voucher_type'), - sl_entries[0].get('voucher_no')) + delete_cancelled_entry(sl_entries[0].get('voucher_type'), sl_entries[0].get('voucher_no')) def set_as_cancel(voucher_type, voucher_no): frappe.db.sql("""update `tabStock Ledger Entry` set is_cancelled='Yes', From 6c48ef781b2e5647bdfa8fc0d7e7c476633f9b87 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 8 Oct 2014 11:00:38 +0530 Subject: [PATCH 05/30] Utility: Repost stock ledger entries and gl entries for all stock transactions --- erpnext/controllers/stock_controller.py | 13 ++++----- .../landed_cost_voucher.py | 4 +-- .../purchase_receipt/purchase_receipt.py | 11 +++++--- .../stock/doctype/stock_entry/stock_entry.py | 2 +- .../stock_reconciliation.py | 8 +++--- .../stock/page/stock_balance/stock_balance.js | 6 +++-- erpnext/utilities/repost_stock.py | 27 +++++++++++++++++++ 7 files changed, 52 insertions(+), 19 deletions(-) diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py index 304ded2390..8c5bcac407 100644 --- a/erpnext/controllers/stock_controller.py +++ b/erpnext/controllers/stock_controller.py @@ -19,7 +19,7 @@ class StockController(AccountsController): warehouse_account = get_warehouse_account() if self.docstatus==1: - gl_entries = self.get_gl_entries(warehouse_account, allow_negative_stock) + gl_entries = self.get_gl_entries(warehouse_account, allow_negative_stock=allow_negative_stock) make_gl_entries(gl_entries) if repost_future_gle: @@ -30,7 +30,7 @@ class StockController(AccountsController): def get_gl_entries(self, warehouse_account=None, default_expense_account=None, default_cost_center=None, allow_negative_stock=False): - block_negative_stock(allow_negative_stock) + # block_negative_stock(allow_negative_stock) if not warehouse_account: warehouse_account = get_warehouse_account() @@ -52,7 +52,7 @@ class StockController(AccountsController): stock_value_difference = flt(sle.stock_value_difference, 2) if not stock_value_difference: valuation_rate = get_valuation_rate(sle.item_code, sle.warehouse, sle.posting_date) - stock_value_difference = flt(sle.qty)*flt(valuation_rate) + stock_value_difference = flt(sle.actual_qty)*flt(valuation_rate) gl_list.append(self.get_gl_dict({ "account": warehouse_account[sle.warehouse], @@ -126,7 +126,8 @@ class StockController(AccountsController): def get_stock_ledger_details(self): stock_ledger = {} - for sle in frappe.db.sql("""select warehouse, stock_value_difference, voucher_detail_no + for sle in frappe.db.sql("""select warehouse, stock_value_difference, + voucher_detail_no, item_code, posting_date, actual_qty from `tabStock Ledger Entry` where voucher_type=%s and voucher_no=%s""", (self.doctype, self.name), as_dict=True): stock_ledger.setdefault(sle.voucher_detail_no, []).append(sle) @@ -237,7 +238,7 @@ def update_gl_entries_after(posting_date, posting_time, for_warehouses=None, for for voucher_type, voucher_no in future_stock_vouchers: existing_gle = gle.get((voucher_type, voucher_no), []) voucher_obj = frappe.get_doc(voucher_type, voucher_no) - expected_gle = voucher_obj.get_gl_entries(warehouse_account, allow_negative_stock) + expected_gle = voucher_obj.get_gl_entries(warehouse_account, allow_negative_stock=allow_negative_stock) if expected_gle: if not existing_gle or not compare_existing_and_expected_gle(existing_gle, expected_gle): @@ -310,6 +311,6 @@ def get_valuation_rate(item_code, warehouse, posting_date): valuation_rate = flt(last_valuation_rate[0][0]) if last_valuation_rate else 0 if not valuation_rate: - valuation_rate = frappe.db.get_value("Item Price", {"item_code": item_code, "buying": 1}, "price") + valuation_rate = frappe.db.get_value("Item Price", {"item_code": item_code, "buying": 1}, "price_list_rate") return valuation_rate diff --git a/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py b/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py index b4fa9712f9..3046c5e921 100644 --- a/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py +++ b/erpnext/stock/doctype/landed_cost_voucher/landed_cost_voucher.py @@ -97,10 +97,10 @@ class LandedCostVoucher(Document): # update stock & gl entries for cancelled state of PR pr.docstatus = 2 - pr.update_stock() + pr.update_stock_ledger() pr.make_gl_entries_on_cancel() # update stock & gl entries for submit state of PR pr.docstatus = 1 - pr.update_stock() + pr.update_stock_ledger() pr.make_gl_entries() diff --git a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py index a7fa6bb88e..fc35222bb0 100644 --- a/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py +++ b/erpnext/stock/doctype/purchase_receipt/purchase_receipt.py @@ -130,7 +130,7 @@ class PurchaseReceipt(BuyingController): if not d.prevdoc_docname: frappe.throw(_("Purchase Order number required for Item {0}").format(d.item_code)) - def update_stock(self): + def update_stock_ledger(self): sl_entries = [] stock_items = self.get_stock_items() @@ -234,7 +234,7 @@ class PurchaseReceipt(BuyingController): self.update_ordered_qty() - self.update_stock() + self.update_stock_ledger() from erpnext.stock.doctype.serial_no.serial_no import update_serial_nos_after_submit update_serial_nos_after_submit(self, "purchase_receipt_details") @@ -267,7 +267,7 @@ class PurchaseReceipt(BuyingController): self.update_ordered_qty() - self.update_stock() + self.update_stock_ledger() self.update_prevdoc_status() pc_obj.update_last_purchase_rate(self, 0) @@ -283,8 +283,11 @@ class PurchaseReceipt(BuyingController): def get_rate(self,arg): return frappe.get_doc('Purchase Common').get_rate(arg,self) - def get_gl_entries(self, warehouse_account=None): + def get_gl_entries(self, warehouse_account=None, allow_negative_stock=False): from erpnext.accounts.general_ledger import process_gl_map + from erpnext.controllers.stock_controller import block_negative_stock + + block_negative_stock(allow_negative_stock) stock_rbnb = self.get_company_default("stock_received_but_not_billed") expenses_included_in_valuation = self.get_company_default("expenses_included_in_valuation") diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py index 4f3480c0bb..4cc96bfec7 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/stock_entry.py @@ -527,7 +527,7 @@ class StockEntry(StockController): } }, bom_no=self.bom_no) - self.get_stock_and_rate() + self.e() def get_bom_raw_materials(self, qty): from erpnext.manufacturing.doctype.bom.bom import get_bom_items_as_dict diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py index 8e837e275c..6c3c395d88 100644 --- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py @@ -22,7 +22,7 @@ class StockReconciliation(StockController): self.validate_expense_account() def on_submit(self): - self.insert_stock_ledger_entries() + self.update_stock_ledger() self.make_gl_entries() def on_cancel(self): @@ -126,7 +126,7 @@ class StockReconciliation(StockController): except Exception, e: self.validation_messages.append(_("Row # ") + ("%d: " % (row_num)) + cstr(e)) - def insert_stock_ledger_entries(self): + def update_stock_ledger(self): """ find difference between current and expected entries and create stock ledger entries based on the difference""" from erpnext.stock.stock_ledger import get_previous_sle @@ -155,8 +155,8 @@ class StockReconciliation(StockController): if row.valuation_rate in ("", None): row.valuation_rate = previous_sle.get("valuation_rate") - if row.qty and not row.valuation_rate: - frappe.throw(_("Valuation Rate required for Item {0}").format(row.item_code)) + # if row.qty and not row.valuation_rate: + # frappe.throw(_("Valuation Rate required for Item {0}").format(row.item_code)) self.insert_entries(row) diff --git a/erpnext/stock/page/stock_balance/stock_balance.js b/erpnext/stock/page/stock_balance/stock_balance.js index c2ffc3701b..7405227116 100644 --- a/erpnext/stock/page/stock_balance/stock_balance.js +++ b/erpnext/stock/page/stock_balance/stock_balance.js @@ -105,12 +105,14 @@ erpnext.StockBalance = erpnext.StockAnalytics.extend({ var is_fifo = valuation_method == "FIFO"; if(sl.voucher_type=="Stock Reconciliation") { - var qty_diff = sl.qty_after_trasaction - item.closing_qty; - var value_diff = (sl.valuation_rate * sl.qty_after_trasaction) - item.closing_value; + var qty_diff = sl.qty_after_transaction - (item.temp_closing_qty || 0.0); + var value_diff = (sl.valuation_rate * sl.qty_after_transaction) - (item.temp_closing_value || 0.0); } else { var qty_diff = sl.qty; var value_diff = me.get_value_diff(wh, sl, is_fifo); } + item.temp_closing_qty += qty_diff; + item.temp_closing_value += value_diff; if(sl_posting_date < from_date) { item.opening_qty += qty_diff; diff --git a/erpnext/utilities/repost_stock.py b/erpnext/utilities/repost_stock.py index 4c145487d8..9c3bf1d0e9 100644 --- a/erpnext/utilities/repost_stock.py +++ b/erpnext/utilities/repost_stock.py @@ -209,3 +209,30 @@ def reset_serial_no_status_and_warehouse(serial_nos=None): frappe.db.sql("""update `tabSerial No` set warehouse='' where status in ('Delivered', 'Purchase Returned')""") +def repost_all_stock_vouchers(): + vouchers = frappe.db.sql("""select distinct voucher_type, voucher_no + from `tabStock Ledger Entry` order by posting_date, posting_time, name""") + + rejected = [] + i = 0 + for voucher_type, voucher_no in vouchers: + i += 1 + print voucher_type, voucher_no + try: + for dt in ["Stock Ledger Entry", "GL Entry"]: + frappe.db.sql("""delete from `tab%s` where voucher_type=%s and voucher_no=%s"""% + (dt, '%s', '%s'), (voucher_type, voucher_no)) + + doc = frappe.get_doc(voucher_type, voucher_no) + if voucher_type=="Stock Entry" and doc.purpose in ["Manufacture", "Repack"]: + doc.get_stock_and_rate(force=1) + doc.update_stock_ledger() + doc.make_gl_entries() + if i%100 == 0: + frappe.db.commit() + except: + rejected.append([voucher_type, voucher_no]) + pass + + print rejected + From 8923801881285375ef520b2f412e83c6b8afe629 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 8 Oct 2014 13:20:31 +0530 Subject: [PATCH 06/30] Update stock_entry.py --- erpnext/stock/doctype/stock_entry/stock_entry.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py index 4cc96bfec7..4f3480c0bb 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/stock_entry.py @@ -527,7 +527,7 @@ class StockEntry(StockController): } }, bom_no=self.bom_no) - self.e() + self.get_stock_and_rate() def get_bom_raw_materials(self, qty): from erpnext.manufacturing.doctype.bom.bom import get_bom_items_as_dict From 074e73a0ddc43d214b9314a0e35111f850177e7c Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Wed, 8 Oct 2014 14:16:33 +0530 Subject: [PATCH 07/30] [translations] updated via translator --- erpnext/translations/ar.csv | 70 ++-- erpnext/translations/el.csv | 10 +- erpnext/translations/es.csv | 780 ++++++++++++++++++------------------ erpnext/translations/fr.csv | 231 +++++------ erpnext/translations/hi.csv | 26 +- erpnext/translations/ja.csv | 2 +- erpnext/translations/th.csv | 26 +- erpnext/translations/tr.csv | 2 +- 8 files changed, 577 insertions(+), 570 deletions(-) diff --git a/erpnext/translations/ar.csv b/erpnext/translations/ar.csv index b942f4c1be..c031928b66 100644 --- a/erpnext/translations/ar.csv +++ b/erpnext/translations/ar.csv @@ -34,7 +34,7 @@ "Add / Edit"," إضافة / تحرير < / A>" "

Default Template

Uses Jinja Templating and all the fields of Address (including Custom Fields if any) will be available

{{ address_line1 }}<br>{% if address_line2 %}{{ address_line2 }}<br>{% endif -%}{{ city }}<br>{% if state %}{{ state }}<br>{% endif -%}{% if pincode %} PIN:  {{ pincode }}<br>{% endif -%}{{ country }}<br>{% if phone %}Phone: {{ phone }}<br>{% endif -%}{% if fax %}Fax: {{ fax }}<br>{% endif -%}{% if email_id %}Email: {{ email_id }}<br>{% endif -%}
","

افتراضي قالب

ويستخدم جنجا القولبة و كافة الحقول من العنوان ( بما في ذلك الحقول المخصصة إن وجدت) وسوف تكون متاحة

 على  {{}} address_line1 
{٪ إذا address_line2٪} {{}} address_line2
{ ENDIF٪ -٪} {{المدينة}}
{٪ إذا الدولة٪} {{الدولة}} {
٪ ENDIF -٪} {٪ إذا كان الرقم السري٪} PIN: {{}} الرقم السري {
٪ ENDIF -٪} {{البلد}}
{٪ إذا كان الهاتف٪} الهاتف: {{هاتف}} {
ENDIF٪ -٪} {٪ إذا الفاكس٪} فاكس: {{}} الفاكس
{٪ ENDIF -٪} {٪٪ إذا email_id} البريد الإلكتروني: {{}} email_id
؛ {٪ ENDIF -٪} " A Customer Group exists with same name please change the Customer name or rename the Customer Group,يوجد مجموعة العملاء مع نفس الاسم الرجاء تغيير اسم العميل أو إعادة تسمية المجموعة العملاء -A Customer exists with same name,العملاء من وجود نفس الاسم مع +A Customer exists with same name,يوجد في قائمة العملاء عميل بنفس الاسم A Lead with this email id should exist,وينبغي أن يكون هذا المعرف الرصاص مع البريد الإلكتروني موجود A Product or Service,منتج أو خدمة A Supplier exists with same name,وهناك مورد موجود مع نفس الاسم @@ -47,7 +47,7 @@ Absent,غائب Acceptance Criteria,معايير القبول Accepted,مقبول Accepted + Rejected Qty must be equal to Received quantity for Item {0},يجب أن يكون مقبول مرفوض + الكمية مساوية ل كمية تلقى القطعة ل {0} -Accepted Quantity,قبلت الكمية +Accepted Quantity,كمية مقبولة Accepted Warehouse,قبلت مستودع Account,حساب Account Balance,رصيد حسابك @@ -65,12 +65,12 @@ Account with child nodes cannot be converted to ledger,حساب مع العقد Account with existing transaction can not be converted to group.,حساب مع الصفقة الحالية لا يمكن تحويلها إلى المجموعة. Account with existing transaction can not be deleted,حساب مع الصفقة الحالية لا يمكن حذف Account with existing transaction cannot be converted to ledger,حساب مع الصفقة الحالية لا يمكن تحويلها إلى دفتر الأستاذ -Account {0} cannot be a Group,حساب {0} لا يمكن أن تكون المجموعة -Account {0} does not belong to Company {1},حساب {0} لا تنتمي إلى شركة {1} +Account {0} cannot be a Group,حساب {0} لا يمكن أن يكون مجموعة +Account {0} does not belong to Company {1},حساب {0} لا ينتمي إلى شركة {1} Account {0} does not belong to company: {1},حساب {0} لا تنتمي إلى الشركة: {1} Account {0} does not exist,حساب {0} غير موجود Account {0} has been entered more than once for fiscal year {1},حساب {0} تم إدخال أكثر من مرة للعام المالي {1} -Account {0} is frozen,حساب {0} يتم تجميد +Account {0} is frozen,حساب {0} مجمد Account {0} is inactive,حساب {0} غير نشط Account {0} is not valid,حساب {0} غير صالح Account {0} must be of type 'Fixed Asset' as Item {1} is an Asset Item,"حساب {0} يجب أن تكون من النوع ' الأصول الثابتة ""كما البند {1} هو البند الأصول" @@ -85,7 +85,7 @@ Accounting,المحاسبة "Accounting entry frozen up to this date, nobody can do / modify entry except role specified below.",قيد محاسبي المجمدة تصل إلى هذا التاريخ، لا أحد يمكن أن تفعل / تعديل إدخال باستثناء دور المحددة أدناه. Accounting journal entries.,المحاسبة إدخالات دفتر اليومية. Accounts,حسابات -Accounts Browser,حسابات متصفح +Accounts Browser,متصفح الحسابات Accounts Frozen Upto,حسابات مجمدة لغاية Accounts Payable,ذمم دائنة Accounts Receivable,حسابات القبض @@ -95,13 +95,13 @@ Active: Will extract emails from ,نشط: سيتم استخراج رسائل ا Activity,نشاط Activity Log,سجل النشاط Activity Log:,النشاط المفتاح: -Activity Type,النشاط نوع +Activity Type,نوع النشاط Actual,فعلي Actual Budget,الميزانية الفعلية Actual Completion Date,تاريخ الإنتهاء الفعلي -Actual Date,تاريخ الفعلية +Actual Date,التاريخ الفعلي Actual End Date,تاريخ الإنتهاء الفعلي -Actual Invoice Date,الفعلي تاريخ الفاتورة +Actual Invoice Date,التاريخ الفعلي للفاتورة Actual Posting Date,تاريخ النشر الفعلي Actual Qty,الكمية الفعلية Actual Qty (at source/target),الكمية الفعلية (في المصدر / الهدف) @@ -112,7 +112,7 @@ Actual Start Date,تاريخ البدء الفعلي Add,إضافة Add / Edit Taxes and Charges,إضافة / تعديل الضرائب والرسوم Add Child,إضافة الطفل -Add Serial No,إضافة رقم المسلسل +Add Serial No,إضافة رقم تسلسلي Add Taxes,إضافة الضرائب Add Taxes and Charges,إضافة الضرائب والرسوم Add or Deduct,إضافة أو خصم @@ -131,7 +131,7 @@ Address Line 2,العنوان سطر 2 Address Template,قالب عنوان Address Title,عنوان عنوان Address Title is mandatory.,عنوان عنوانها إلزامية. -Address Type,عنوان نوع +Address Type,نوع العنوان Address master.,عنوان رئيسي. Administrative Expenses,المصاريف الإدارية Administrative Officer,موظف إداري @@ -217,7 +217,7 @@ Amount to Bill,تصل إلى بيل An Customer exists with same name,موجود على العملاء مع نفس الاسم "An Item Group exists with same name, please change the item name or rename the item group",وجود فريق المدينة مع نفس الاسم، الرجاء تغيير اسم العنصر أو إعادة تسمية المجموعة البند "An item exists with same name ({0}), please change the item group name or rename the item",عنصر موجود مع نفس الاسم ( {0} ) ، الرجاء تغيير اسم المجموعة البند أو إعادة تسمية هذا البند -Analyst,المحلل +Analyst,محلل Annual,سنوي Another Period Closing Entry {0} has been made after {1},دخول أخرى الفترة الإنتهاء {0} أحرز بعد {1} Another Salary Structure {0} is active for employee {0}. Please make its status 'Inactive' to proceed.,"هيكل الرواتب أخرى {0} نشطة للموظف {0} . يرجى التأكد مكانتها ""غير نشطة "" والمضي قدما." @@ -266,15 +266,15 @@ Atleast one of the Selling or Buying must be selected,يجب تحديد الاق Atleast one warehouse is mandatory,واحدة على الاقل مستودع إلزامي Attach Image,إرفاق صورة Attach Letterhead,نعلق رأسية -Attach Logo,نعلق شعار -Attach Your Picture,نعلق صورتك +Attach Logo,إرفاق صورة الشعار/العلامة التجارية +Attach Your Picture,إرفاق صورتك Attendance,الحضور Attendance Date,تاريخ الحضور Attendance Details,تفاصيل الحضور Attendance From Date,الحضور من تاريخ Attendance From Date and Attendance To Date is mandatory,الحضور من التسجيل والحضور إلى تاريخ إلزامي Attendance To Date,الحضور إلى تاريخ -Attendance can not be marked for future dates,لا يمكن أن تكون علامة لحضور تواريخ مستقبلية +Attendance can not be marked for future dates,لا يمكن أن ىكون تاريخ الحضور تاريخ مستقبلي Attendance for employee {0} is already marked,الحضور للموظف {0} تم وضع علامة بالفعل Attendance record.,سجل الحضور. Authorization Control,إذن التحكم @@ -287,13 +287,13 @@ Automatically extract Job Applicants from a mail box , Automatically extract Leads from a mail box e.g.,استخراج الشراء تلقائيا من صندوق البريد على سبيل المثال Automatically updated via Stock Entry of type Manufacture/Repack,تحديثها تلقائيا عن طريق إدخال الأسهم الصنع نوع / أعد حزم Automotive,السيارات -Autoreply when a new mail is received,عندما رد تلقائي تلقي بريد جديد +Autoreply when a new mail is received,رد تلقائي عند تلقي بريد جديد Available,متاح Available Qty at Warehouse,الكمية المتاحة في مستودع Available Stock for Packing Items,الأسهم المتاحة للتعبئة وحدات "Available in BOM, Delivery Note, Purchase Invoice, Production Order, Purchase Order, Purchase Receipt, Sales Invoice, Sales Order, Stock Entry, Timesheet",المتاحة في BOM ، تسليم مذكرة ، شراء الفاتورة ، ترتيب الإنتاج، طلب شراء ، شراء استلام ، فاتورة المبيعات ، ترتيب المبيعات ، اسهم الدخول و الجدول الزمني Average Age,متوسط ​​العمر -Average Commission Rate,متوسط ​​سعر جنة +Average Commission Rate,متوسط ​​العمولة Average Discount,متوسط ​​الخصم Awesome Products,المنتجات رهيبة Awesome Services,خدمات رهيبة @@ -331,9 +331,9 @@ Bank Clearance Summary,بنك ملخص التخليص Bank Draft,البنك مشروع Bank Name,اسم البنك Bank Overdraft Account,حساب السحب على المكشوف المصرفي -Bank Reconciliation,البنك المصالحة -Bank Reconciliation Detail,البنك المصالحة تفاصيل -Bank Reconciliation Statement,بيان التسويات المصرفية +Bank Reconciliation,تسوية البنك +Bank Reconciliation Detail,تفاصيل تسوية البنك +Bank Reconciliation Statement,بيان تسوية البنك Bank Voucher,البنك قسيمة Bank/Cash Balance,بنك / النقد وما في حكمه Banking,مصرفي @@ -405,8 +405,8 @@ Bundle items at time of sale.,حزمة البنود في وقت البيع. Business Development Manager,مدير تطوير الأعمال Buying,شراء Buying & Selling,شراء وبيع -Buying Amount,شراء المبلغ -Buying Settings,شراء إعدادات +Buying Amount,مبلغ الشراء +Buying Settings,إعدادات الشراء "Buying must be checked, if Applicable For is selected as {0}",يجب أن يتم التحقق الشراء، إذا تم تحديد مطبق للك {0} C-Form,نموذج C- C-Form Applicable,C-نموذج قابل للتطبيق @@ -1025,7 +1025,7 @@ Extract Emails,استخراج رسائل البريد الإلكتروني FCFS Rate,FCFS قيم Failed: ,فشل: Family Background,الخلفية العائلية -Fax,بالفاكس +Fax,فاكس Features Setup,ميزات الإعداد Feed,أطعم Feed Type,إطعام نوع @@ -1041,7 +1041,7 @@ Financial / accounting year.,المالية / المحاسبة العام. Financial Analytics,تحليلات مالية Financial Services,الخدمات المالية Financial Year End Date,تاريخ نهاية السنة المالية -Financial Year Start Date,السنة المالية تاريخ بدء +Financial Year Start Date,تاريخ بدء السنة المالية Finished Goods,السلع تامة الصنع First Name,الاسم الأول First Responded On,أجاب أولا على @@ -1059,7 +1059,7 @@ Food,غذاء For Company,لشركة For Employee,لموظف For Employee Name,لاسم الموظف -For Price List,ل ائحة الأسعار +For Price List,لائحة الأسعار For Production,للإنتاج For Reference Only.,للإشارة فقط. For Sales Invoice,لفاتورة المبيعات @@ -1823,7 +1823,7 @@ Notify by Email on creation of automatic Material Request,إبلاغ عن طري Number Format,عدد تنسيق Offer Date,عرض التسجيل Office,مكتب -Office Equipments,معدات المكاتب +Office Equipments,أدوات المكتب Office Maintenance Expenses,مصاريف صيانة المكاتب Office Rent,مكتب للإيجار Old Parent,العمر الرئيسي @@ -1840,7 +1840,7 @@ Open Production Orders,أوامر مفتوحة الانتاج Open Tickets,تذاكر مفتوحة Opening (Cr),افتتاح (الكروم ) Opening (Dr),افتتاح ( الدكتور ) -Opening Date,فتح تاريخ +Opening Date,تاريخ الفتح Opening Entry,فتح دخول Opening Qty,فتح الكمية Opening Time,يفتح من الساعة @@ -1854,7 +1854,7 @@ Operation {0} is repeated in Operations Table,عملية {0} يتكرر في ج Operation {0} not present in Operations Table,عملية {0} غير موجودة في جدول العمليات Operations,عمليات Opportunity,فرصة -Opportunity Date,الفرصة تاريخ +Opportunity Date,تاريخ الفرصة Opportunity From,فرصة من Opportunity Item,فرصة السلعة Opportunity Items,فرصة الأصناف @@ -1914,9 +1914,9 @@ Packing Slip,زلة التعبئة Packing Slip Item,التعبئة الإغلاق زلة Packing Slip Items,التعبئة عناصر زلة Packing Slip(s) cancelled,زلة التعبئة (ق ) إلغاء -Page Break,الصفحة استراحة -Page Name,الصفحة اسم -Paid Amount,دفع المبلغ +Page Break,فاصل الصفحة +Page Name,اسم الصفحة +Paid Amount,المبلغ المدفوع Paid amount + Write Off Amount can not be greater than Grand Total,المبلغ المدفوع + شطب المبلغ لا يمكن أن يكون أكبر من المجموع الكلي Pair,زوج Parameter,المعلمة @@ -3128,7 +3128,7 @@ Users with this role are allowed to create / modify accounting entry before froz Users with this role are allowed to set frozen accounts and create / modify accounting entries against frozen accounts,يسمح للمستخدمين مع هذا الدور لضبط الحسابات المجمدة و إنشاء / تعديل القيود المحاسبية على حسابات مجمدة Utilities,خدمات Utility Expenses,مصاريف فائدة -Valid For Territories,صالحة للالأقاليم +Valid For Territories,صالحة للأقاليم Valid From,صالحة من Valid Upto,صالحة لغاية Valid for Territories,صالحة للالأقاليم @@ -3237,7 +3237,7 @@ Write Off Voucher,شطب قسيمة Wrong Template: Unable to find head row.,قالب الخطأ: تعذر العثور على صف الرأس. Year,عام Year Closed,مغلق العام -Year End Date,نهاية التاريخ العام +Year End Date,تاريخ نهاية العام Year Name,اسم العام Year Start Date,تاريخ بدء العام Year of Passing,اجتياز سنة @@ -3261,8 +3261,8 @@ You have entered duplicate items. Please rectify and try again.,لقد دخلت You may need to update: {0},قد تحتاج إلى تحديث : {0} You must Save the form before proceeding,يجب حفظ النموذج قبل الشروع Your Customer's TAX registration numbers (if applicable) or any general information,عميلك أرقام التسجيل الضريبي (إن وجدت) أو أي معلومات عامة -Your Customers,الزبائن -Your Login Id,تسجيل الدخول اسم المستخدم الخاص بك +Your Customers,العملاء +Your Login Id,تسجيل الدخول - اسم المستخدم الخاص بك Your Products or Services,المنتجات أو الخدمات الخاصة بك Your Suppliers,لديك موردون Your email address,عنوان البريد الإلكتروني الخاص بك diff --git a/erpnext/translations/el.csv b/erpnext/translations/el.csv index d918cf0266..4e1e05f8a7 100644 --- a/erpnext/translations/el.csv +++ b/erpnext/translations/el.csv @@ -41,8 +41,8 @@ A Product or Service,Ένα Προϊόν ή Υπηρεσία A Supplier exists with same name,Ένας προμηθευτής υπάρχει με το ίδιο όνομα A symbol for this currency. For e.g. $,Ένα σύμβολο για το νόμισμα αυτό. Για παράδειγμα $ AMC Expiry Date,AMC Ημερομηνία Λήξης -Abbr,Abbr -Abbreviation cannot have more than 5 characters,Συντομογραφία δεν μπορεί να έχει περισσότερα από 5 χαρακτήρες +Abbr,Συντ. +Abbreviation cannot have more than 5 characters,Μια συντομογραφία δεν μπορεί να έχει περισσότερα από 5 χαρακτήρες Above Value,Πάνω Value Absent,Απών Acceptance Criteria,Κριτήρια αποδοχής @@ -50,9 +50,9 @@ Accepted,Δεκτός Accepted + Rejected Qty must be equal to Received quantity for Item {0},Αποδεκτές + Απορρίπτεται Ποσότητα πρέπει να είναι ίση με Ελήφθη ποσότητα για τη θέση {0} Accepted Quantity,ΠΟΣΟΤΗΤΑ Accepted Warehouse,Αποδεκτές αποθήκη -Account,λογαριασμός -Account Balance,Υπόλοιπο λογαριασμού -Account Created: {0},Ο λογαριασμός Δημιουργήθηκε : {0} +Account,Λογαριασμός +Account Balance,Υπόλοιπο Λογαριασμού +Account Created: {0},Ο λογαριασμός δημιουργήθηκε : {0} Account Details,Στοιχεία Λογαριασμού Account Head,Επικεφαλής λογαριασμού Account Name,Όνομα λογαριασμού diff --git a/erpnext/translations/es.csv b/erpnext/translations/es.csv index 192e373f8a..356691928d 100644 --- a/erpnext/translations/es.csv +++ b/erpnext/translations/es.csv @@ -59,10 +59,10 @@ Account Name,Nombre de la Cuenta Account Type,Tipo de Cuenta "Account balance already in Credit, you are not allowed to set 'Balance Must Be' as 'Debit'","Balance de la cuenta ya en Crédito, no le está permitido establecer 'Balance Debe Ser' como 'Débito'" "Account balance already in Debit, you are not allowed to set 'Balance Must Be' as 'Credit'","Balance de la cuenta ya en Débito, no le está permitido establecer ""Balance Debe Ser"" como ""Crédito""" -Account for the warehouse (Perpetual Inventory) will be created under this Account.,Cuenta para el almacén ( inventario permanente ) se creará en esta Cuenta. +Account for the warehouse (Perpetual Inventory) will be created under this Account.,Cuenta para el almacén ( Inventario Permanente ) se creará en esta Cuenta. Account head {0} created,Cabeza de cuenta {0} creado Account must be a balance sheet account,La cuenta debe ser una cuenta de balance -Account with child nodes cannot be converted to ledger,Cuenta con nodos hijos no se puede convertir en el libro mayor +Account with child nodes cannot be converted to ledger,Cuenta con nodos hijos no se puede convertir a cuentas del libro mayor Account with existing transaction can not be converted to group.,Cuenta con transacción existente no se puede convertir al grupo. Account with existing transaction can not be deleted,Cuenta con transacción existente no se puede eliminar Account with existing transaction cannot be converted to ledger,Cuenta con la transacción existente no se puede convertir en el libro mayor @@ -74,7 +74,7 @@ Account {0} has been entered more than once for fiscal year {1},Cuenta {0} se ha Account {0} is frozen,Cuenta {0} está congelada Account {0} is inactive,Cuenta {0} está inactiva Account {0} is not valid,Cuenta {0} no es válida -Account {0} must be of type 'Fixed Asset' as Item {1} is an Asset Item,Cuenta {0} debe ser de tipo 'Activos Fijos' como Artículo {1} es un Elemento de Activo +Account {0} must be of type 'Fixed Asset' as Item {1} is an Asset Item,Cuenta {0} debe ser de tipo 'Activos Fijos' porque Artículo {1} es un Elemento de Activo Fijo Account {0}: Parent account {1} can not be a ledger,Cuenta {0}: Cuenta Padre {1} no puede ser un libro de contabilidad Account {0}: Parent account {1} does not belong to company: {2},Cuenta {0}: Cuenta Padre {1} no pertenece a la compañía: {2} Account {0}: Parent account {1} does not exist,Cuenta {0}: Cuenta Padre {1} no existe @@ -83,7 +83,7 @@ Account: {0} can only be updated via \ Stock Transactions,Cuenta: {0} sólo Accountant,Contador Accounting,Contabilidad "Accounting Entries can be made against leaf nodes, called","Los comentarios de Contabilidad se pueden hacer contra los nodos hoja , llamada" -"Accounting entry frozen up to this date, nobody can do / modify entry except role specified below.","Asiento contable congelado hasta la fecha , nadie puede hacer / modificar la entrada , excepto el papel se especifica a continuación ." +"Accounting entry frozen up to this date, nobody can do / modify entry except role specified below.","Asiento contable congelado hasta la fecha , nadie puede hacer / modificar la entrada , excepto el roll que se especifica a continuación ." Accounting journal entries.,Entradas de diario de contabilidad. Accounts,Cuentas Accounts Browser,Navegador de Cuentas @@ -111,7 +111,7 @@ Actual Qty: Quantity available in the warehouse.,Cantidad Actual: Cantidad dispo Actual Quantity,Cantidad Real Actual Start Date,Fecha de Comienzo Real Add,Añadir -Add / Edit Taxes and Charges,Añadir / Editar las tasas y cargos +Add / Edit Taxes and Charges,Añadir / Editar Impuestos y Cargos Add Child,Añadir Hijo Add Serial No,Añadir Serial No Add Taxes,Añadir impuestos @@ -379,11 +379,11 @@ Birthday,Cumpleaños Block Date,Bloquear Fecha Block Days,Bloquear Días Block leave applications by department.,Bloquee aplicaciones de permiso por departamento. -Blog Post,Blog -Blog Subscriber,Blog suscriptor +Blog Post,Entrada al Blog +Blog Subscriber,Suscriptor del Blog Blood Group,Grupos Sanguíneos -Both Warehouse must belong to same Company,Tanto Almacén debe pertenecer a una misma empresa -Box,caja +Both Warehouse must belong to same Company,Ambos Almacenes deben pertenecer a una misma empresa +Box,Caja Branch,Rama Brand,Marca Brand Name,Marca @@ -391,7 +391,7 @@ Brand master.,Master Marca . Brands,Marcas Breakdown,desglose Broadcasting,radiodifusión -Brokerage,corretaje +Brokerage,Corretaje Budget,Presupuesto Budget Allocated,Presupuesto asignado Budget Detail,Detalle del Presupuesto @@ -399,9 +399,9 @@ Budget Details,Presupuesto detalles Budget Distribution,Presupuesto de Distribución Budget Distribution Detail,Detalle Presupuesto Distribución Budget Distribution Details,Detalles Presupuesto de Distribución -Budget Variance Report,Presupuesto Varianza Reportar +Budget Variance Report,Informe de Varianza en el Presupuesto Budget cannot be set for Group Cost Centers,El presupuesto no se puede establecer para Centros de costes del Grupo -Build Report,Informe Construir +Build Report,Construir Informe Bundle items at time of sale.,Agrupe elementos en el momento de la venta. Business Development Manager,Gerente de Desarrollo de Negocios Buying,Compra @@ -423,16 +423,16 @@ CENVAT Service Tax Cess 2,Servicio CENVAT Impuesto Cess 2 Calculate Based On,Calcular basado en Calculate Total Score,Calcular Puntaje Total Calendar Events,Calendario de Eventos -Call,llamada -Calls,llamadas -Campaign,campaña +Call,Llamada +Calls,Llamadas +Campaign,Campaña Campaign Name,Nombre de la campaña -Campaign Name is required,El nombre es necesario Campaña -Campaign Naming By,Naming Campaña Por -Campaign-.####,Campaña . # # # # +Campaign Name is required,Es necesario ingresar el nombre de la Campaña +Campaign Naming By,Nombramiento de la Campaña Por +Campaign-.####,Campaña-.#### Can be approved by {0},Puede ser aprobado por {0} "Can not filter based on Account, if grouped by Account","No se puede filtrar en función de la cuenta , si se agrupan por cuenta" -"Can not filter based on Voucher No, if grouped by Voucher","No se puede filtrar en función de la hoja no , si agrupados por Bono" +"Can not filter based on Voucher No, if grouped by Voucher","No se puede filtrar en función del número de hoja, si agrupados por Bono" Can refer row only if the charge type is 'On Previous Row Amount' or 'Previous Row Total',"Puede referirse fila sólo si el tipo de carga es 'On anterior Importe Fila ""o"" Anterior Fila Total """ Cancel Material Visit {0} before cancelling this Customer Issue,Cancelar material Visita {0} antes de cancelar esta edición al Cliente Cancel Material Visits {0} before cancelling this Maintenance Visit,Cancelar Visitas Materiales {0} antes de cancelar el Mantenimiento Visita @@ -460,7 +460,7 @@ Cannot select charge type as 'On Previous Row Amount' or 'On Previous Row Total' Cannot select charge type as 'On Previous Row Amount' or 'On Previous Row Total' for valuation. You can select only 'Total' option for previous row amount or previous row total,"No se puede seleccionar el tipo de carga como 'On Fila Anterior Importe ' o ' En Fila Anterior Total "" para la valoración. Sólo puede seleccionar la opción ""Total"" para la cantidad fila anterior o siguiente de filas total" Cannot set as Lost as Sales Order is made.,No se puede definir tan perdido como está hecha de órdenes de venta . Cannot set authorization on basis of Discount for {0},No se puede establecer la autorización sobre la base de Descuento para {0} -Capacity,capacidad +Capacity,Capacidad Capacity Units,Unidades de Capacidad Capital Account,cuenta de Capital Capital Equipments,Equipos de capitales @@ -468,8 +468,8 @@ Carry Forward,llevar adelante Carry Forwarded Leaves,Llevar Hojas reenviados Case No(s) already in use. Try from Case No {0},Case No. (s ) ya en uso. Trate de Caso n {0} Case No. cannot be 0,Caso No. No puede ser 0 -Cash,efectivo -Cash In Hand,Efectivo disponible +Cash,Efectivo +Cash In Hand,Efectivo Disponible Cash Voucher,Bono Cash Cash or Bank Account is mandatory for making payment entry,Dinero en efectivo o cuenta bancaria es obligatoria para la toma de entrada de pago Cash/Bank Account,Cuenta de Caja / Banco @@ -479,11 +479,11 @@ Change UOM for an Item.,Cambie UOM para un artículo . Change the starting / current sequence number of an existing series.,Cambie el inicio / número de secuencia actual de una serie existente . Channel Partner,Channel Partner Charge of type 'Actual' in row {0} cannot be included in Item Rate,Cargo del tipo ' real ' en la fila {0} no puede ser incluido en el Punto de Cambio -Chargeable,cobrable +Chargeable,Cobrable Charity and Donations,Caridad y Donaciones Chart Name,Nombre del diagrama Chart of Accounts,Plan General de Contabilidad -Chart of Cost Centers,Gráfico de Centros de Coste +Chart of Cost Centers,Gráfico de Centros de Costos Check how the newsletter looks in an email by sending it to your email.,Comprobar cómo el boletín se ve en un correo electrónico mediante el envío a su correo electrónico . "Check if recurring invoice, uncheck to stop recurring or put proper End Date","Compruebe si se repite la factura , desmarque para detener recurrente o poner fin propio Fecha" "Check if you need automatic recurring invoices. After submitting any sales invoice, Recurring section will be visible.","Compruebe si necesita facturas recurrentes automáticos. Después de la presentación de cualquier factura de venta , sección recurrente será visible." @@ -493,45 +493,45 @@ Check this if you want to show in website,Seleccione esta opción si desea que a Check this to disallow fractions. (for Nos),Active esta opción para no permitir fracciones. ( para refs ) Check this to pull emails from your mailbox,Active esta opción para tirar de correos electrónicos de su buzón Check to activate,Compruebe para activar -Check to make Shipping Address,Revise para asegurarse de dirección del envío +Check to make Shipping Address,Seleccione para hacer ésta la de dirección de envío Check to make primary address,Verifique que la dirección primaria -Chemical,químico +Chemical,Químico Cheque,Cheque Cheque Date,Cheque Fecha Cheque Number,Número de Cheque Child account exists for this account. You can not delete this account.,Cuenta Child existe para esta cuenta. No es posible eliminar esta cuenta. -City,ciudad +City,Ciudad City/Town,Ciudad / Pueblo Claim Amount,Reclamación Importe Claims for company expense.,Las reclamaciones por los gastos de la empresa. Class / Percentage,Clase / Porcentaje -Classic,clásico +Classic,Clásico Clear Table,Borrar la tabla Clearance Date,Liquidación Fecha Clearance Date not mentioned,Liquidación La fecha no se menciona Clearance date cannot be before check date in row {0},Fecha de Liquidación no puede ser antes de la fecha de verificación de la fila {0} Click on 'Make Sales Invoice' button to create a new Sales Invoice.,"Haga clic en el botón ' Hacer la factura de venta ""para crear una nueva factura de venta ." Click on a link to get options to expand get options , -Client,cliente +Client,Cliente Close Balance Sheet and book Profit or Loss.,Cerrar Balance General y el libro de pérdidas y ganancias . -Closed,cerrado +Closed,Cerrado Closing (Cr),Cierre (Cr) Closing (Dr),Cierre (Dr) Closing Account Head,Cierre Head Cuenta Closing Account {0} must be of type 'Liability',Cuenta {0} de cierre debe ser de tipo ' Responsabilidad ' -Closing Date,fecha tope +Closing Date,Fecha de Cierre Closing Fiscal Year,Cerrando el Año Fiscal Closing Qty,Cantidad de Clausura Closing Value,Valor de Cierre CoA Help,CoA Ayuda -Code,código +Code,Código Cold Calling,Llamadas en frío -Color,color +Color,Color Column Break,Salto de columna Comma separated list of email addresses,Lista separada por comas de direcciones de correo electrónico separados -Comment,comentario +Comment,Comentario Comments,Comentarios -Commercial,comercial +Commercial,Comercial Commission,comisión Commission Rate,Comisión de Tarifas Commission Rate (%),Comisión de Cambio (% ) @@ -542,14 +542,14 @@ Communication HTML,Comunicación HTML Communication History,Historia de Comunicación Communication log.,Registro de Comunicación. Communications,Comunicaciones -Company,empresa +Company,Empresa Company (not Customer or Supplier) master.,Company (no cliente o proveedor ) maestro. Company Abbreviation,Abreviatura de la empresa Company Details,Datos de la empresa Company Email,Empresa Email "Company Email ID not found, hence mail not sent","Empresa Email ID no se encuentra, por lo tanto, no envíe por correo enviado" Company Info,Información de la empresa -Company Name,nombre de compañía +Company Name,Nombre de compañía Company Settings,Configuración de la compañía Company is missing in warehouses {0},Compañía no se encuentra en los almacenes {0} Company is required,Se requiere Compañía @@ -557,14 +557,16 @@ Company registration numbers for your reference. Example: VAT Registration Numbe Company registration numbers for your reference. Tax numbers etc.,"Los números de registro de la empresa para su referencia . Números fiscales, etc" "Company, Month and Fiscal Year is mandatory","Company, mes y del año fiscal es obligatoria" Compensatory Off,compensatorio -Complete,completo +Complete,Completar Complete Setup,Instalación completa Completed,terminado Completed Production Orders,Órdenes de fabricación completadas -Completed Qty,Completado Cantidad +Completed Qty,"Cantidad Completada +" Completion Date,Fecha de Terminación Completion Status,Estado de finalización -Computer,ordenador +Computer,"Computador +" Computers,Computadoras Confirmation Date,Confirmación Fecha Confirmed orders from Customers.,Pedidos en firme de los clientes. @@ -572,30 +574,31 @@ Consider Tax or Charge for,Considere impuesto ni un cargo por Considered as Opening Balance,Considerado como balance de apertura Considered as an Opening Balance,Considerado como un saldo inicial Consultant,consultor -Consulting,Consulting +Consulting,Consuloría Consumable,consumible Consumable Cost,Costo de consumibles Consumable cost per hour,Costo de consumibles por hora Consumed Qty,consumido Cantidad Consumer Products,Productos de Consumo -Contact,contacto +Contact,Contacto Contact Control,Contactar con el Control Contact Desc,Contactar con la descripción -Contact Details,Datos de contacto +Contact Details,Datos del Contacto Contact Email,Correo electrónico de contacto -Contact HTML,Contactar con HTML -Contact Info,Contacto +Contact HTML,"HTML del Contacto +" +Contact Info,Información del Contacto Contact Mobile No,Contacto Móvil No Contact Name,Nombre de contacto Contact No.,Contacto No. Contact Person,persona de Contacto Contact Type,Tipo de contacto -Contact master.,Contacto amo. +Contact master.,Contacto (principal). Contacts,Contactos -Content,contenido +Content,Contenido Content Type,Tipo de contenido Contra Voucher,Contra Voucher -Contract,contrato +Contract,Contrato Contract End Date,Fin del contrato Fecha Contract End Date must be greater than Date of Joining,Fin del contrato Fecha debe ser mayor que Fecha de acceso Contribution (%),Contribución (% ) @@ -611,8 +614,9 @@ Convert to Ledger,Convertir a Ledger Converted,convertido Copy From Item Group,Copiar de Grupo Tema Cosmetics,productos cosméticos -Cost Center,Centro de Costo -Cost Center Details,Centro de coste detalles +Cost Center,Centro de Costos +Cost Center Details,"Detalles del Centro de Costos +" Cost Center Name,Costo Nombre del centro Cost Center is required for 'Profit and Loss' account {0},"Se requiere de centros de coste para la cuenta "" Pérdidas y Ganancias "" {0}" Cost Center is required in row {0} in Taxes table for type {1},Se requiere de centros de coste en la fila {0} en la tabla Impuestos para el tipo {1} @@ -621,14 +625,14 @@ Cost Center with existing transactions can not be converted to ledger,Centro de Cost Center {0} does not belong to Company {1},Centro de coste {0} no pertenece a la empresa {1} Cost of Goods Sold,Costo de las Ventas Costing,Costeo -Country,país +Country,País Country Name,Nombre del país Country wise default Address Templates,Plantillas País sabia dirección predeterminada "Country, Timezone and Currency","País , Zona horaria y moneda" Create Bank Voucher for the total salary paid for the above selected criteria,Cree Banco Vale para el salario total pagado por los criterios seleccionados anteriormente Create Customer,Crear cliente Create Material Requests,Crear solicitudes de material -Create New,Crear nuevo +Create New,Crear Nuevo Create Opportunity,Crear Oportunidad Create Production Orders,Crear órdenes de producción Create Quotation,Cree Cotización @@ -639,12 +643,12 @@ Create Stock Ledger Entries when you submit a Sales Invoice,Crear Ledger entrada Create rules to restrict transactions based on values.,Crear reglas para restringir las transacciones basadas en valores . Created By,Creado por Creates salary slip for above mentioned criteria.,Crea nómina de los criterios antes mencionados. -Creation Date,Fecha de creación +Creation Date,Fecha de Creación Creation Document No,Creación del documento No Creation Document Type,Tipo de creación de documentos Creation Time,Momento de la creación Credentials,cartas credenciales -Credit,crédito +Credit,Crédito Credit Amt,crédito Amt Credit Card,Tarjeta de Crédito Credit Card Voucher,Vale la tarjeta de crédito @@ -653,7 +657,7 @@ Credit Days,días de Crédito Credit Limit,Límite de Crédito Credit Note,Nota de Crédito Credit To,crédito Para -Currency,moneda +Currency,Divisa Currency Exchange,Cambio de divisas Currency Name,Nombre de Divisa Currency Settings,Configuración de Moneda @@ -669,10 +673,10 @@ Current Liabilities,pasivo exigible Current Stock,Stock actual Current Stock UOM,Stock actual UOM Current Value,Valor actual -Custom,costumbre +Custom,Personalizar Custom Autoreply Message,Mensaje de autorespuesta personalizado Custom Message,Mensaje personalizado -Customer,cliente +Customer,Cliente Customer (Receivable) Account,Cliente ( por cobrar ) Cuenta Customer / Item Name,Nombre del cliente / artículo Customer / Lead Address,Cliente / Dirección de plomo @@ -695,7 +699,7 @@ Customer Issue,Problema al Cliente Customer Issue against Serial No.,Problema al cliente contra el número de serie Customer Name,Nombre del cliente Customer Naming By,Naming Cliente Por -Customer Service,servicio al cliente +Customer Service,Servicio al Cliente Customer database.,Base de datos de clientes . Customer is required,Se requiere al Cliente Customer master.,Maestro de clientes . @@ -713,11 +717,11 @@ Customize,Personalizar Customize the Notification,Personalice la Notificación Customize the introductory text that goes as a part of that email. Each transaction has a separate introductory text.,Personalizar el texto de introducción que va como una parte de ese correo electrónico. Cada transacción tiene un texto introductorio separada. DN Detail,Detalle DN -Daily,diario +Daily,Diario Daily Time Log Summary,Resumen diario Hora de registro Database Folder ID,Base de Datos de Identificación de carpetas Database of potential customers.,Base de datos de clientes potenciales. -Date,fecha +Date,Fecha Date Format,Formato de la fecha Date Of Retirement,Fecha de la jubilación Date Of Retirement must be greater than Date of Joining,Fecha de la jubilación debe ser mayor que Fecha de acceso @@ -777,10 +781,10 @@ Default settings for accounting transactions.,Los ajustes por defecto para las t Default settings for buying transactions.,Ajustes por defecto para la compra de las transacciones . Default settings for selling transactions.,Los ajustes por defecto para la venta de las transacciones . Default settings for stock transactions.,Los ajustes por defecto para las transacciones bursátiles. -Defense,defensa +Defense,Defensa "Define Budget for this Cost Center. To set budget action, see
Company Master","Definir Presupuesto para este centro de coste . Para configurar la acción presupuestaria, ver Company Maestro < / a>" -Del,Del -Delete,borrar +Del,Sup. +Delete,Eliminar Delete {0} {1}?,Eliminar {0} {1} ? Delivered,liberado Delivered Items To Be Billed,Material que se adjunta a facturar @@ -807,37 +811,37 @@ Department,departamento Department Stores,Tiendas por Departamento Depends on LWP,Depende LWP Depreciation,depreciación -Description,descripción +Description,Descripción Description HTML,Descripción HTML Designation,designación Designer,diseñador Detailed Breakup of the totals,Breakup detallada de los totales Details,Detalles -Difference (Dr - Cr),Diferencia ( Dr - Cr) -Difference Account,cuenta Diferencia +Difference (Dr - Cr),Diferencia ( Db - Cr) +Difference Account,Cuenta para la Diferencia "Difference Account must be a 'Liability' type account, since this Stock Reconciliation is an Opening Entry","Cuenta diferencia debe ser una cuenta de tipo ' Responsabilidad ' , ya que esta Stock reconciliación es una entrada de Apertura" Different UOM for items will lead to incorrect (Total) Net Weight value. Make sure that Net Weight of each item is in the same UOM.,UOM diferente para elementos dará lugar a incorrecto ( Total) Valor neto Peso . Asegúrese de que peso neto de cada artículo esté en la misma UOM . -Direct Expenses,gastos directos -Direct Income,Ingreso directo -Disable,inhabilitar -Disable Rounded Total,Desactivar Total redondeado +Direct Expenses,Gastos Directos +Direct Income,Ingreso Directo +Disable,Inhabilitar +Disable Rounded Total,Desactivar Total Redondeado Disabled,discapacitado Discount %,Descuento% Discount %,Descuento% Discount (%),Descuento (% ) Discount Amount,Cantidad de Descuento "Discount Fields will be available in Purchase Order, Purchase Receipt, Purchase Invoice","Los campos descuento estará disponible en orden de compra, recibo de compra , factura de compra" -Discount Percentage,Descuento de porcentaje +Discount Percentage,Porcentaje de Descuento Discount Percentage can be applied either against a Price List or for all Price List.,Porcentaje de descuento puede ser aplicado ya sea en contra de una lista de precios o para toda la lista de precios. Discount must be less than 100,El descuento debe ser inferior a 100 Discount(%),Descuento (% ) Dispatch,despacho Display all the individual items delivered with the main items,Ver todas las partidas individuales se suministran con los elementos principales Distribute transport overhead across items.,Distribuir por encima transporte a través de artículos. -Distribution,distribución +Distribution,Distribución Distribution Id,Id Distribución -Distribution Name,Distribución Nombre -Distributor,distribuidor +Distribution Name,Nombre del Distribución +Distributor,Distribuidor Divorced,divorciado Do Not Contact,No entre en contacto Do not show any symbol like $ etc next to currencies.,No volver a mostrar cualquier símbolo como $ etc junto a monedas. @@ -850,30 +854,30 @@ Do you really want to UNSTOP this Material Request?,¿De verdad quiere destapar Do you really want to stop production order: , Doc Name,Nombre del documento Doc Type,Tipo Doc. -Document Description,documento Descripción -Document Type,Tipo de documento +Document Description,Descripción del Documento +Document Type,Tipo de Documento Documents,Documentos -Domain,dominio +Domain,Dominio Don't send Employee Birthday Reminders,No envíe Empleado Birthday Reminders -Download Materials Required,Descarga Materiales necesarios -Download Reconcilation Data,Descarga reconciliación de datos +Download Materials Required,Descargar Materiales Necesarios +Download Reconcilation Data,Descarga Reconciliación de Datos Download Template,Descargar Plantilla Download a report containing all raw materials with their latest inventory status,Descargar un informe con todas las materias primas con su estado actual inventario "Download the Template, fill appropriate data and attach the modified file.","Descarga la plantilla , rellenar los datos correspondientes y adjuntar el archivo modificado." -"Download the Template, fill appropriate data and attach the modified file.All dates and employee combination in the selected period will come in the template, with existing attendance records","Descarga la plantilla, rellenar los datos correspondientes y adjuntar el archivo modificado. Todas las fechas y combinación empleado en el período seleccionado vendrán en la plantilla, con los registros de asistencia existentes" -Draft,borrador +"Download the Template, fill appropriate data and attach the modified file.All dates and employee combination in the selected period will come in the template, with existing attendance records","Descarga la plantilla, rellenar los datos correspondientes y adjuntar el archivo modificado. Todas las fechas y combinaciones de empleados en el período seleccionado vendrán en la plantilla, con los registros de asistencia existentes" +Draft,Borrador Dropbox,Dropbox Dropbox Access Allowed,Dropbox Acceso mascotas -Dropbox Access Key,Dropbox clave de acceso -Dropbox Access Secret,Dropbox Acceso Secreto +Dropbox Access Key,Clave de Acceso de Dropbox +Dropbox Access Secret,Acceso Secreto de Dropbox Due Date,Fecha de vencimiento Due Date cannot be after {0},Fecha de vencimiento no puede ser posterior a {0} Due Date cannot be before Posting Date,Fecha de vencimiento no puede ser anterior Fecha de publicación Duplicate Entry. Please check Authorization Rule {0},"Duplicate Entry. Por favor, consulte Autorización Rule {0}" Duplicate Serial No entered for Item {0},Duplicar Serial No entró a la partida {0} -Duplicate entry,Duplicate entry +Duplicate entry,Entrada Duplicada Duplicate row {0} with same {1},Duplicar fila {0} con el mismo {1} -Duties and Taxes,Derechos e impuestos +Duties and Taxes,Derechos e Impuestos ERPNext Setup,Configuración ERPNext Earliest,Primeras Earnest Money,dinero Earnest @@ -885,7 +889,7 @@ Edit,editar Edu. Cess on Excise,Edu. Cess sobre Impuestos Especiales Edu. Cess on Service Tax,Edu. Impuesto sobre el Servicio de Impuestos Edu. Cess on TDS,Edu. Impuesto sobre el TDS -Education,educación +Education,Educación Educational Qualification,Capacitación para la Educación Educational Qualification Details,Educational Qualification Detalles Eg. smsgateway.com/api/send_sms.cgi,Eg . smsgateway.com / api / send_sms.cgi @@ -943,9 +947,9 @@ End Date,Fecha de finalización End Date can not be less than Start Date,Fecha de finalización no puede ser inferior a Fecha de Inicio End date of current invoice's period,Fecha de finalización del periodo de facturación actual End of Life,Final de la Vida -Energy,energía -Engineer,ingeniero -Enter Verification Code,Ingrese el código de verificación +Energy,Energía +Engineer,Ingeniero +Enter Verification Code,Ingrese el Código de Verificación Enter campaign name if the source of lead is campaign.,Ingrese nombre de la campaña si la fuente del plomo es la campaña . Enter department to which this Contact belongs,Introduzca departamento al que pertenece este Contacto Enter designation of this Contact,Introduzca designación de este contacto @@ -957,8 +961,8 @@ Enter the company name under which Account Head will be created for this Supplie Enter url parameter for message,Introduzca el parámetro url para el mensaje Enter url parameter for receiver nos,Introduzca el parámetro url para el receptor nos Entertainment & Leisure,Entretenimiento y Ocio -Entertainment Expenses,gastos de Entretenimiento -Entries,entradas +Entertainment Expenses,Gastos de Entretenimiento +Entries,Entradas Entries against , Entries are not allowed against this Fiscal Year if the year is closed.,"Las entradas no están permitidos en contra de este año fiscal , si el año está cerrado." Equity,equidad @@ -1026,12 +1030,12 @@ Extract Emails,extraer correos electrónicos FCFS Rate,FCFS Cambio Failed: ,Error: Family Background,antecedentes familiares -Fax,fax +Fax,Fax Features Setup,Características del programa de instalación -Feed,pienso -Feed Type,Tipo de alimentación +Feed,Fuente +Feed Type,Tipo de Fuente Feedback,feedback -Female,femenino +Female,Femenino Fetch exploded BOM (including sub-assemblies),Fetch BOM explotado (incluyendo subconjuntos ) "Field available in Delivery Note, Quotation, Sales Invoice, Sales Order","El campo disponible en la nota de entrega , la cita , la factura de venta , órdenes de venta" Files Folder ID,Carpeta de archivos ID @@ -1046,15 +1050,15 @@ Financial Year Start Date,Ejercicio Fecha de Inicio Finished Goods,productos terminados First Name,Nombre First Responded On,Primero respondió el -Fiscal Year,año fiscal +Fiscal Year,Año Fiscal Fiscal Year Start Date and Fiscal Year End Date are already set in Fiscal Year {0},Año fiscal Fecha de Inicio y Fin de ejercicio Fecha ya están establecidas en el Año Fiscal {0} Fiscal Year Start Date and Fiscal Year End Date cannot be more than a year apart.,Año fiscal Fecha de Inicio y Fin de ejercicio La fecha no puede ser más que un año de diferencia. Fiscal Year Start Date should not be greater than Fiscal Year End Date,Año fiscal Fecha de inicio no debe ser mayor de Fin de ejercicio Fecha -Fixed Asset,activos Fijos +Fixed Asset,Activos Fijos Fixed Assets,Activos Fijos Follow via Email,Siga a través de correo electrónico "Following table will show values if items are sub - contracted. These values will be fetched from the master of ""Bill of Materials"" of sub - contracted items.","La siguiente tabla se muestran los valores si los artículos son sub - contratado. Estos valores se pueden recuperar desde el maestro de la "" Lista de materiales "" de los sub - elementos contratados." -Food,comida +Food,Comida "Food, Beverage & Tobacco","Alimentos, Bebidas y Tabaco" "For 'Sales BOM' items, Warehouse, Serial No and Batch No will be considered from the 'Packing List' table. If Warehouse and Batch No are same for all packing items for any 'Sales BOM' item, those values can be entered in the main Item table, values will be copied to 'Packing List' table.","Para los artículos 'BOM Ventas', bodega, Número de Serie y Lote No se considerará a partir de la tabla de ""Packing List"". Si Almacén y lotes No son las mismas para todos los elementos de embalaje para cualquier artículo 'BOM Sales', esos valores se pueden introducir en el cuadro principal del artículo, los valores se copiarán a la mesa ""Packing List""." For Company,Para la empresa @@ -1077,8 +1081,8 @@ Fraction Units,Unidades de fracciones Freeze Stock Entries,Helada Stock comentarios Freeze Stocks Older Than [Days],Congele Acciones Older Than [ días ] Freight and Forwarding Charges,Freight Forwarding y Cargos -Friday,viernes -From,desde +Friday,Viernes +From,Desde From Bill of Materials,De la lista de materiales From Company,De Compañía From Currency,De moneda @@ -1091,11 +1095,11 @@ From Date must be before To Date,Desde la fecha debe ser antes de la fecha From Date should be within the Fiscal Year. Assuming From Date = {0},De fecha debe estar dentro del año fiscal. Suponiendo Desde Fecha = {0} From Delivery Note,De la nota de entrega From Employee,De Empleado -From Lead,De plomo +From Lead,De la iniciativa From Maintenance Schedule,Desde Programa de mantenimiento From Material Request,Desde Solicitud de material From Opportunity,De Oportunidades -From Package No.,Del N º Paquete +From Package No.,Del Paquete N º From Purchase Order,De la Orden de Compra From Purchase Receipt,Desde recibo de compra From Quotation,desde la cotización @@ -1107,7 +1111,7 @@ From and To dates required,Desde y Hasta la fecha solicitada From value must be less than to value in row {0},De valor debe ser inferior al valor de la fila {0} Frozen,congelado Frozen Accounts Modifier,Frozen Accounts modificador -Fulfilled,cumplido +Fulfilled,Cumplido Full Name,Nombre Completo Full-time,De jornada completa Fully Billed,Totalmente Facturad @@ -1178,15 +1182,15 @@ HR Manager,Gerente de Recursos Humanos HR Settings,Configuración de recursos humanos HTML / Banner that will show on the top of product list.,HTML / Banner que aparecerá en la parte superior de la lista de productos. Half Day,Medio Día -Half Yearly,semestral +Half Yearly,Semestral Half-yearly,Semestral Happy Birthday!,¡Feliz cumpleaños! -Hardware,hardware +Hardware,Hardware Has Batch No,Tiene lotes No Has Child Node,Tiene Nodo Niño Has Serial No,Tiene de serie n Head of Marketing and Sales,Director de Marketing y Ventas -Header,encabezamiento +Header,Encabezado Health Care,Cuidado de la Salud Health Concerns,Preocupaciones de salud Health Details,Detalles de la Salud @@ -1203,11 +1207,11 @@ Holiday,fiesta Holiday List,Lista de vacaciones Holiday List Name,Lista de nombres de vacaciones Holiday master.,Master de vacaciones . -Holidays,vacaciones -Home,casa +Holidays,Vacaciones +Home,Casa Host,anfitrión "Host, Email and Password required if emails are to be pulled","Host , correo electrónico y la contraseña requerida si los correos electrónicos son para ser tirado" -Hour,hora +Hour,Hora Hour Rate,Hora de Cambio Hour Rate Labour,Hora Cambio del Trabajo Hours,Horas @@ -1243,7 +1247,7 @@ If you have Sales Team and Sale Partners (Channel Partners) they can be tagged "If you have created a standard template in Sales Taxes and Charges Master, select one and click on the button below.","Si ha creado un modelo estándar de las tasas y cargos de venta principales, seleccione uno y haga clic en el botón de abajo ." "If you have long print formats, this feature can be used to split the page to be printed on multiple pages with all headers and footers on each page","Si usted tiene formatos de impresión largos , esta característica puede ser utilizada para dividir la página que se imprimirá en varias páginas con todos los encabezados y pies de página en cada página" If you involve in manufacturing activity. Enables Item 'Is Manufactured',Si usted involucra en la actividad manufacturera . Permite artículo ' está fabricado ' -Ignore,pasar por alto +Ignore,Pasar por Alto Ignore Pricing Rule,No haga caso de la Regla Precios Ignored: ,Ignorado: Image,imagen @@ -1252,7 +1256,7 @@ Implementation Partner,socio de implementación Import Attendance,Asistencia de importación Import Failed!,Import Error ! Import Log,Importar registro -Import Successful!,Importación correcta ! +Import Successful!,¡Importación correcta! Imports,Importaciones In Hours,En Horas In Process,En proceso @@ -1271,9 +1275,9 @@ In Words will be visible once you save the Sales Order.,En palabras serán visib Incentives,Incentivos Include Reconciled Entries,Incluya los comentarios conciliadas Include holidays in Total no. of Working Days,Incluya vacaciones en total no. de días laborables -Income,ingresos +Income,Ingresos Income / Expense,Ingresos / gastos -Income Account,cuenta de Ingresos +Income Account,Cuenta de Ingresos Income Booked,Ingresos Reservados Income Tax,Impuesto sobre la Renta Income Year to Date,Ingresos Año a la Fecha @@ -1287,7 +1291,7 @@ Indicates that the package is a part of this delivery (Only Draft),Indica que el Indirect Expenses,gastos indirectos Indirect Income,Ingresos Indirectos Individual,individual -Industry,industria +Industry,Industria Industry Type,Tipo de Industria Inspected By,Inspección realizada por Inspection Criteria,Criterios de Inspección @@ -1304,11 +1308,11 @@ Installation record for a Serial No.,Registro de la instalación para un número Installed Qty,Cantidad instalada Instructions,instrucciones Integrate incoming support emails to Support Ticket,Integrar los correos electrónicos de apoyo recibidas de Apoyo Ticket -Interested,interesado -Intern,interno -Internal,interno +Interested,Interesado +Intern,Interno +Internal,Interno Internet Publishing,Internet Publishing -Introduction,introducción +Introduction,Introducción Invalid Barcode,Código de barras no válido Invalid Barcode or Serial No,Código de barras de serie no válido o No Invalid Mail Server. Please rectify and try again.,Servidor de correo válida . Por favor rectifique y vuelva a intentarlo . @@ -1318,23 +1322,23 @@ Invalid quantity specified for item {0}. Quantity should be greater than 0.,Cant Inventory,inventario Inventory & Support,Soporte de Inventario y Investment Banking,Banca de Inversión -Investments,inversiones +Investments,Inversiones Invoice Date,Fecha de la factura -Invoice Details,detalles de la factura -Invoice No,Factura no -Invoice Number,Número de factura +Invoice Details,Detalles de la Factura +Invoice No,Factura N º +Invoice Number,Número de la Factura Invoice Period From,Factura Periodo Del Invoice Period From and Invoice Period To dates mandatory for recurring invoice,Factura Periodo Del Período y Factura Para las fechas obligatorias para la factura recurrente Invoice Period To,Período Factura Para -Invoice Type,Tipo Factura -Invoice/Journal Voucher Details,Factura / Diario Vale Detalles -Invoiced Amount (Exculsive Tax),Cantidad facturada ( Impuesto exculsive ) -Is Active,está activo +Invoice Type,Tipo de Factura +Invoice/Journal Voucher Details,Detalles de Factura / Comprobante de Diario +Invoiced Amount (Exculsive Tax),Cantidad facturada ( Impuesto exclusive ) +Is Active,Está Activo Is Advance,Es Avance Is Cancelled,CANCELADO Is Carry Forward,Es llevar adelante Is Default,Es por defecto -Is Encash,es convertirá en efectivo +Is Encash,Se convertirá en efectivo Is Fixed Asset Item,Es partidas del activo inmovilizado Is LWP,es LWP Is Opening,está abriendo @@ -1347,7 +1351,7 @@ Is Service Item,Es servicio de Artículo Is Stock Item,Es Stock Artículo Is Sub Contracted Item,Es subcontratación artículo Is Subcontracted,se subcontrata -Is this Tax included in Basic Rate?,¿Este Impuestos incluidos en la tarifa básica ? +Is this Tax included in Basic Rate?,¿Está incluido este Impuesto la tarifa básica ? Issue,cuestión Issue Date,Fecha de Emisión Issue Details,Detalles del problema @@ -1365,30 +1369,30 @@ Item Code is mandatory because Item is not automatically numbered,Código del ar Item Code required at Row No {0},Código del artículo requerido en la fila n {0} Item Customer Detail,Elemento Detalle Cliente Item Description,Descripción del Artículo -Item Desription,Desription artículo +Item Desription,Desription del Artículo Item Details,Detalles del artículo Item Group,Grupo de artículos Item Group Name,Nombre del grupo de artículos Item Group Tree,Artículo Grupo Árbol Item Group not mentioned in item master for item {0},Grupo El artículo no se menciona en maestro de artículos para el elemento {0} Item Groups in Details,Grupos de componentes en detalles -Item Image (if not slideshow),Item Image (si no presentación de diapositivas) +Item Image (if not slideshow),"Imagen del Artículo (si no, presentación de diapositivas)" Item Name,Nombre del elemento Item Naming By,Artículo Naming Por -Item Price,artículo Precio -Item Prices,artículo precios +Item Price,Precio del Artículo +Item Prices,Precios de los Artículos Item Quality Inspection Parameter,Artículo Calidad de parámetros de Inspección Item Reorder,artículo reorden Item Serial No,Artículo N º de serie -Item Serial Nos,Artículo de serie n +Item Serial Nos,N º de serie de los Artículo Item Shortage Report,Artículo Escasez Reportar -Item Supplier,artículo Proveedor -Item Supplier Details,Detalles del artículo Proveedor -Item Tax,Impuesto artículo -Item Tax Amount,Total de impuestos de artículos +Item Supplier,Proveedor del Artículo +Item Supplier Details,Detalles del Proveedor del artículo +Item Tax,Impuesto del artículo +Item Tax Amount,Total de impuestos de los artículos Item Tax Rate,Artículo Tasa de Impuesto Item Tax Row {0} must have account of type Tax or Income or Expense or Chargeable,Artículo Impuesto Row {0} debe tener en cuenta el tipo de impuestos o ingresos o de gastos o Imponible -Item Tax1,Tax1 artículo +Item Tax1,Impuesto1 del artículo Item To Manufacture,Artículo Para Fabricación Item UOM,artículo UOM Item Website Specification,Artículo Website Especificación @@ -1399,7 +1403,7 @@ Item is required,Se requiere de artículos Item is updated,Artículo se actualiza Item master.,Maestro de artículos . "Item must be a purchase item, as it is present in one or many Active BOMs","El artículo debe ser un artículo de la compra , ya que está presente en una o varias listas de materiales activos" -Item or Warehouse for row {0} does not match Material Request,Artículo o de almacenes para la fila {0} no coincide Solicitud de material +Item or Warehouse for row {0} does not match Material Request,Artículo o Bodega para la fila {0} no coincide Solicitud de material Item table can not be blank,Tabla de artículos no puede estar en blanco Item to be manufactured or repacked,Artículo a fabricar o embalados de nuevo Item valuation updated,Valoración Artículo actualizado @@ -1458,10 +1462,10 @@ Jobs Email Settings,Trabajos Email Journal Entries,entradas de diario Journal Entry,Entrada de diario Journal Voucher,Comprobante de Diario -Journal Voucher Detail,Detalle Diario Voucher -Journal Voucher Detail No,Detalle Diario Voucher No +Journal Voucher Detail,Detalle del Asiento de Diario +Journal Voucher Detail No,Detalle del Asiento de Diario No Journal Voucher {0} does not have account {1} or already matched,Comprobante de Diario {0} no tiene cuenta {1} o ya emparejado -Journal Vouchers {0} are un-linked,Documentos preliminares {0} están vinculados a la ONU +Journal Vouchers {0} are un-linked,Asientos de Diario {0} no están vinculados. Keep a track of communication related to this enquiry which will help for future reference.,Mantenga un registro de la comunicación en relación con esta investigación que ayudará para futuras consultas. Keep it web friendly 900px (w) by 100px (h),Manténgalo web 900px mascotas ( w ) por 100px ( h ) Key Performance Area,Área clave de rendimiento @@ -1469,29 +1473,29 @@ Key Responsibility Area,Área de Responsabilidad Clave Kg,kg LR Date,LR Fecha LR No,LR No -Label,etiqueta +Label,Etiqueta Landed Cost Item,Landed Cost artículo Landed Cost Items,Landed Partidas de gastos Landed Cost Purchase Receipt,Landed Cost recibo de compra Landed Cost Purchase Receipts,Landed Cost Recibos de compra Landed Cost Wizard,Asistente Landed Cost Landed Cost updated successfully,Landed Cost actualizado correctamente -Language,idioma -Last Name,apellido +Language,Idioma +Last Name,Apellido Last Purchase Rate,Última Compra Cambio -Latest,más reciente -Lead,plomo -Lead Details,CONTENIDO -Lead Id,Id plomo -Lead Name,Nombre de plomo -Lead Owner,propietario de plomo -Lead Source,Fuente de plomo -Lead Status,Estado de plomo +Latest,Más Reciente +Lead,Iniciativa +Lead Details,Detalle de la Iniciativa +Lead Id,Iniciativa ID +Lead Name,Nombre de la Iniciativa +Lead Owner,Propietario de la Iniciativa +Lead Source,Fuente de de la Iniciativa +Lead Status,Estado de la Iniciativa Lead Time Date,Plazo de ejecución Fecha Lead Time Days,Tiempo de Entrega Días Lead Time days is number of days by which this item is expected in your warehouse. This days is fetched in Material Request when you select this item.,Plomo día Tiempo es el número de días en que se espera que este artículo en su almacén. Este día es descabellada en Solicitud de materiales cuando se selecciona este elemento . -Lead Type,Tipo plomo -Lead must be set if Opportunity is made from Lead,El plomo se debe establecer si la oportunidad está hecha de plomo +Lead Type,Tipo de Iniciativa +Lead must be set if Opportunity is made from Lead,La iniciativa se debe establecer si la oportunidad está hecha de plomo Leave Allocation,Deja Asignación Leave Allocation Tool,Deja Herramienta de Asignación Leave Application,Deja Aplicación @@ -1505,7 +1509,7 @@ Leave Block List Date,Deja Lista de bloqueo Fecha Leave Block List Dates,Deja lista Fechas Bloque Leave Block List Name,Agregar Nombre Lista de bloqueo Leave Blocked,Deja Bloqueado -Leave Control Panel,Deja Panel de control +Leave Control Panel,Salir del Panel de Control Leave Encashed?,Deja cobrados ? Leave Encashment Amount,Deja Cobro Monto Leave Type,Deja Tipo @@ -1523,14 +1527,14 @@ Leave of type {0} cannot be longer than {1},Dejar de tipo {0} no puede tener má Leaves Allocated Successfully for {0},Hojas distribuidos con éxito para {0} Leaves for type {0} already allocated for Employee {1} for Fiscal Year {0},Hojas para el tipo {0} ya asignado para Empleado {1} para el Año Fiscal {0} Leaves must be allocated in multiples of 0.5,"Las hojas deben ser asignados en múltiplos de 0,5" -Ledger,libro mayor +Ledger,Libro Mayor Ledgers,Libros de contabilidad -Left,izquierda -Legal,legal -Legal Expenses,gastos legales -Letter Head,Cabeza Carta -Letter Heads for print templates.,Jefes de letras para las plantillas de impresión. -Level,nivel +Left,Izquierda +Legal,Legal +Legal Expenses,Gastos Legales +Letter Head,Membrete +Letter Heads for print templates.,Membretes para las plantillas de impresión. +Level,Nivel Lft,Lft Liability,responsabilidad List a few of your customers. They could be organizations or individuals.,Enumere algunos de sus clientes. Pueden ser organizaciones o individuos. @@ -1543,20 +1547,20 @@ Loading...,Loading ... Loans (Liabilities),Préstamos (pasivos ) Loans and Advances (Assets),Préstamos y anticipos (Activos ) Local,local -Login,login +Login,Iniciar Sesión Login with your new User ID,Acceda con su nuevo ID de usuario -Logo,logo -Logo and Letter Heads,Logo y Carta Jefes -Lost,perdido -Lost Reason,Razón perdido -Low,bajo -Lower Income,Ingreso bajo +Logo,Logo +Logo and Letter Heads,Logo y Membrete +Lost,Perdido +Lost Reason,Razón de la pérdida +Low,Bajo +Lower Income,Ingreso Bajo MTN Details,MTN Detalles -Main,principal +Main,Principal Main Reports,Informes principales Maintain Same Rate Throughout Sales Cycle,Mantener mismo ritmo durante todo el ciclo de ventas Maintain same rate throughout purchase cycle,Mantener mismo ritmo durante todo el ciclo de compra -Maintenance,mantenimiento +Maintenance,Mantenimiento Maintenance Date,Mantenimiento Fecha Maintenance Details,Detalles Mantenimiento Maintenance Schedule,Programa de mantenimiento @@ -1574,7 +1578,7 @@ Maintenance Visit Purpose,Mantenimiento Visita Propósito Maintenance Visit {0} must be cancelled before cancelling this Sales Order,Mantenimiento Visita {0} debe ser cancelado antes de cancelar el pedido de ventas Maintenance start date can not be before delivery date for Serial No {0},Mantenimiento fecha de inicio no puede ser antes de la fecha de entrega para la serie n {0} Major/Optional Subjects,Principales / Asignaturas optativas -Make , +Make ,Hacer Make Accounting Entry For Every Stock Movement,Hacer asiento contable para cada movimiento de acciones Make Bank Voucher,Hacer Banco Voucher Make Credit Note,Hacer Nota de Crédito @@ -1599,31 +1603,31 @@ Make Sales Invoice,Hacer la factura de venta Make Sales Order,Asegúrese de órdenes de venta Make Supplier Quotation,Hacer cita Proveedor Make Time Log Batch,Haga la hora de lotes sesión -Male,masculino +Male,Masculino Manage Customer Group Tree.,Gestione Grupo de Clientes Tree. Manage Sales Partners.,Administrar Puntos de ventas. Manage Sales Person Tree.,Gestione Sales Person árbol . Manage Territory Tree.,Gestione Territorio Tree. Manage cost of operations,Gestione costo de las operaciones Management,administración -Manager,gerente +Manager,Gerente "Mandatory if Stock Item is ""Yes"". Also the default warehouse where reserved quantity is set from Sales Order.","Obligatorio si Stock Item es "" Sí"" . También el almacén por defecto en que la cantidad reservada se establece a partir de órdenes de venta ." Manufacture against Sales Order,Fabricación contra pedido de ventas Manufacture/Repack,Fabricación / Repack Manufactured Qty,Fabricado Cantidad Manufactured quantity will be updated in this warehouse,Fabricado cantidad se actualizará en este almacén Manufactured quantity {0} cannot be greater than planned quanitity {1} in Production Order {2},Cantidad Fabricado {0} no puede ser mayor que quanitity planeado {1} en la orden de producción {2} -Manufacturer,fabricante +Manufacturer,Fabricante Manufacturer Part Number,Número de pieza Manufacturing,fabricación Manufacturing Quantity,Fabricación Cantidad Manufacturing Quantity is mandatory,Fabricación Cantidad es obligatorio -Margin,margen -Marital Status,estado civil -Market Segment,sector de mercado -Marketing,mercadeo +Margin,Margen +Marital Status,Estado Civil +Market Segment,Sector de Mercado +Marketing,Mercadeo Marketing Expenses,gastos de comercialización -Married,casado +Married,Casado Mass Mailing,Mass Mailing Master Name,Maestro Nombre Master Name is mandatory if account type is Warehouse,Maestro nombre es obligatorio si el tipo de cuenta es Almacén @@ -1657,10 +1661,10 @@ Maximum Amount,Importe máximo Maximum allowed credit is {0} days after posting date,Crédito máximo permitido es {0} días después de la fecha de publicar Maximum {0} rows allowed,Máximo {0} filas permitidos Maxiumm discount for Item {0} is {1}%,Descuento Maxiumm de elemento {0} es {1}% -Medical,médico -Medium,medio +Medical,Médico +Medium,Medio "Merging is only possible if following properties are same in both records. Group or Ledger, Root Type, Company",La fusión sólo es posible si las propiedades son las mismas en ambos registros. -Message,mensaje +Message,Mensaje Message Parameter,Parámetro Mensaje Message Sent,Mensaje enviado Message updated,Mensaje actualizado @@ -1676,33 +1680,33 @@ Min Qty,Qty del minuto Min Qty can not be greater than Max Qty,Qty del minuto no puede ser mayor que Max Und Minimum Amount,Volumen mínimo de Minimum Order Qty,Mínimo Online con su nombre -Minute,minuto +Minute,Minuto Misc Details,Otros Detalles Miscellaneous Expenses,gastos varios Miscelleneous,Miscelleneous Mobile No,Mobile No -Mobile No.,número Móvil +Mobile No.,Número Móvil Mode of Payment,Modo de Pago -Modern,moderno -Monday,lunes -Month,mes -Monthly,mensual +Modern,Moderno +Monday,Lunes +Month,Mes +Monthly,Mensual Monthly Attendance Sheet,Hoja de Asistencia Mensual Monthly Earning & Deduction,Ingresos mensuales y Deducción Monthly Salary Register,Salario mensual Registrarse -Monthly salary statement.,Nómina mensual . +Monthly salary statement.,Nómina Mensual. More Details,Más detalles More Info,Más información Motion Picture & Video,Motion Picture & Video Moving Average,media Móvil Moving Average Rate,Mover Tarifa media Mr,Sr. -Ms,ms +Ms,Sra. Multiple Item prices.,Precios de los artículos múltiples. "Multiple Price Rule exists with same criteria, please resolve \ conflict by assigning priority. Price Rules: {0}","Múltiple Precio Regla existe con los mismos criterios, por favor resuelva \ conflicto mediante la asignación de prioridad. Reglas Precio: {0}" -Music,música +Music,Música Must be Whole Number,Debe ser un número entero -Name,nombre +Name,Nombre Name and Description,Nombre y descripción Name and Employee ID,Nombre y ID de empleado "Name of new Account. Note: Please don't create accounts for Customers and Suppliers, they are created automatically from the Customer and Supplier master","Nombre de la nueva cuenta . Nota : Por favor no crear cuentas para clientes y proveedores , se crean automáticamente desde el cliente y el proveedor principal" @@ -1895,19 +1899,21 @@ P L A - Cess Portion,PLA - Porción Cess PL or BS,PL o BS PO Date,PO Fecha PO No,PO No -POP3 Mail Server,POP3 Mail Server +POP3 Mail Server,Servidor de Correo POP3 POP3 Mail Settings,Configuración de Mensajes POP3 -POP3 mail server (e.g. pop.gmail.com),Servidor de correo POP3 (por ejemplo pop.gmail.com ) +POP3 mail server (e.g. pop.gmail.com),Servidor de Correo POP3 (por ejemplo pop.gmail.com ) POP3 server e.g. (pop.gmail.com),Por ejemplo el servidor POP3 ( pop.gmail.com ) POS Setting,POS Ajuste POS Setting required to make POS Entry,POS de ajuste necesario para hacer la entrada POS POS Setting {0} already created for user: {1} and company {2},POS Ajuste {0} ya creado para el usuario: {1} y {2} empresa POS View,POS Ver PR Detail,Detalle PR -Package Item Details,Artículo Detalles del paquete -Package Items,paquete de +Package Item Details,"Detalles del Contenido del Paquete +" +Package Items,"Contenido del Paquete +" Package Weight Details,Peso del paquete Detalles -Packed Item,Embalado artículo +Packed Item,Artículo Empacado Packed quantity must equal quantity for Item {0} in row {1},Embalado cantidad debe ser igual a la cantidad de elemento {0} en la fila {1} Packing Details,Detalles del embalaje Packing List,Lista de embalaje @@ -1916,16 +1922,16 @@ Packing Slip Item,Packing Slip artículo Packing Slip Items,Albarán Artículos Packing Slip(s) cancelled,Slip ( s ) de Embalaje cancelado Page Break,Salto de página -Page Name,Nombre de la página +Page Name,Nombre de la Página Paid Amount,Cantidad pagada Paid amount + Write Off Amount can not be greater than Grand Total,Cantidad pagada + Escribir Off La cantidad no puede ser mayor que Gran Total -Pair,par -Parameter,parámetro -Parent Account,cuenta primaria +Pair,Par +Parameter,Parámetro +Parent Account,Cuenta Primaria Parent Cost Center,Centro de Costo de Padres Parent Customer Group,Padres Grupo de Clientes Parent Detail docname,DocNombre Detalle de Padres -Parent Item,artículo Padre +Parent Item,Artículo Padre Parent Item Group,Grupo de Padres del artículo Parent Item {0} must be not Stock Item and must be a Sales Item,Artículo Padre {0} debe estar Stock punto y debe ser un elemento de Ventas Parent Party Type,Tipo Partido Padres @@ -1934,26 +1940,26 @@ Parent Territory,Territorio de Padres Parent Website Page,Sitio web Padres Page Parent Website Route,Padres Website Ruta Parenttype,ParentType -Part-time,A media jornada -Partially Completed,Completó parcialmente +Part-time,Medio Tiempo +Partially Completed,Completó Parcialmente Partly Billed,Parcialmente Anunciado Partly Delivered,Parcialmente Entregado Partner Target Detail,Detalle Target Socio -Partner Type,Tipos de Partner +Partner Type,Tipos de Socios Partner's Website,Sitio Web del Socio Party,Parte Party Account,Cuenta Party Party Type,Tipo del partido Party Type Name,Tipo del partido Nombre -Passive,pasivo +Passive,Pasivo Passport Number,Número de pasaporte -Password,contraseña +Password,Contraseña Pay To / Recd From,Pagar a / Recd Desde -Payable,pagadero -Payables,Cuentas por pagar +Payable,Pagadero +Payables,Cuentas por Pagar Payables Group,Deudas Grupo -Payment Days,días de pago -Payment Due Date,Pago Fecha de vencimiento +Payment Days,Días de Pago +Payment Due Date,Pago Fecha de Vencimiento Payment Period Based On Invoice Date,Período de pago basado en Fecha de la factura Payment Reconciliation,Reconciliación Pago Payment Reconciliation Invoice,Factura Reconciliación Pago @@ -1969,40 +1975,40 @@ Payments Received,Los pagos recibidos Payments made during the digest period,Los pagos efectuados durante el período de digestión Payments received during the digest period,Los pagos recibidos durante el período de digestión Payroll Settings,Configuración de Nómina -Pending,pendiente -Pending Amount,Pendiente Monto +Pending,Pendiente +Pending Amount,Monto Pendiente Pending Items {0} updated,Elementos Pendientes {0} actualizado Pending Review,opinión pendiente Pending SO Items For Purchase Request,A la espera de SO Artículos A la solicitud de compra Pension Funds,Fondos de Pensiones -Percent Complete,Porcentaje completado +Percent Complete,Porcentaje Completado Percentage Allocation,Porcentaje de asignación de Percentage Allocation should be equal to 100%,Porcentaje de asignación debe ser igual al 100 % Percentage variation in quantity to be allowed while receiving or delivering this item.,La variación porcentual de la cantidad que se le permita al recibir o entregar este artículo. Percentage you are allowed to receive or deliver more against the quantity ordered. For example: If you have ordered 100 units. and your Allowance is 10% then you are allowed to receive 110 units.,"Porcentaje que se les permite recibir o entregar más en contra de la cantidad pedida . Por ejemplo : Si se ha pedido 100 unidades. y el subsidio es de 10 %, entonces se le permite recibir 110 unidades." -Performance appraisal.,La evaluación del desempeño . -Period,período +Performance appraisal.,Evaluación del Desempeño . +Period,Período Period Closing Voucher,Vale Período de Cierre -Periodicity,periodicidad -Permanent Address,Dirección permanente +Periodicity,Periodicidad +Permanent Address,Dirección Permanente Permanent Address Is,Dirección permanente es -Permission,permiso -Personal,personal +Permission,Permiso +Personal,Personal Personal Details,Datos Personales -Personal Email,Correo electrónico personal -Pharmaceutical,farmacéutico +Personal Email,Correo Electrónico Personal +Pharmaceutical,Farmacéutico Pharmaceuticals,Productos farmacéuticos -Phone,teléfono +Phone,Teléfono Phone No,Teléfono No Piecework,trabajo a destajo Pincode,pincode Place of Issue,Lugar de emisión Plan for maintenance visits.,Plan para las visitas de mantenimiento . -Planned Qty,Planificada Cantidad +Planned Qty,Cantidad Planificada "Planned Qty: Quantity, for which, Production Order has been raised, but is pending to be manufactured.","Planificada Cantidad : Cantidad , para lo cual, orden de producción se ha elevado , pero está a la espera de ser fabricados ." -Planned Quantity,Cantidad planificada -Planning,planificación -Plant,planta +Planned Quantity,Cantidad Planificada +Planning,Planificación +Plant,Planta Plant and Machinery,Instalaciones técnicas y maquinaria Please Enter Abbreviation or Short Name properly as it will be added as Suffix to all Account Heads.,"Por favor, introduzca Abreviatura o Nombre corto correctamente ya que se añadirá como sufijo a todos los Jefes de Cuenta." Please Update SMS Settings,Por favor actualizar la configuración de SMS @@ -2111,8 +2117,8 @@ Plot By,Terreno Por Point of Sale,Punto de Venta Point-of-Sale Setting,Point -of -Sale Marco Post Graduate,Postgrado -Postal,postal -Postal Expenses,gastos postales +Postal,Postal +Postal Expenses,Gastos Postales Posting Date,Fecha de publicación Posting Time,Hora de publicación Posting date and posting time is mandatory,Fecha de publicación y el envío tiempo es obligatorio @@ -2120,16 +2126,16 @@ Posting timestamp must be after {0},Fecha y hora de publicación deberá ser pos Potential opportunities for selling.,Posibles oportunidades para vender . Preferred Billing Address,Preferida Dirección de Facturación Preferred Shipping Address,Preferida Dirección Envío -Prefix,prefijo -Present,presente +Prefix,Prefijo +Present,Presente Prevdoc DocType,DocType Prevdoc Prevdoc Doctype,Doctype Prevdoc -Preview,avance -Previous,anterior +Preview,Vista Previa +Previous,Anterior Previous Work Experience,Experiencia laboral previa -Price,precio +Price,Precio Price / Discount,Precio / Descuento -Price List,Lista de precios +Price List,Lista de Precios Price List Currency,Lista de precios de divisas Price List Currency not selected,Lista de precios de divisas no seleccionado Price List Exchange Rate,Lista de precios Tipo de Cambio @@ -2141,8 +2147,8 @@ Price List must be applicable for Buying or Selling,Lista de precios debe ser ap Price List not selected,Lista de precios no seleccionado Price List {0} is disabled,Lista de precios {0} está deshabilitado Price or Discount,Precio o Descuento -Pricing Rule,Regla Precios -Pricing Rule Help,Regla precios Ayuda +Pricing Rule,Regla de Precios +Pricing Rule Help,Ayuda de Regla de Precios "Pricing Rule is first selected based on 'Apply On' field, which can be Item, Item Group or Brand.","Regla precios se selecciona por primera vez basado en 'Aplicar On' de campo, que puede ser elemento, elemento de grupo o Marca." "Pricing Rule is made to overwrite Price List / define discount percentage, based on some criteria.","Regla de precios está sobrescribir Precio de lista / definir porcentaje de descuento, sobre la base de algunos criterios." Pricing Rules are further filtered based on quantity.,Reglas de las tarifas se filtran más basado en la cantidad. @@ -2151,20 +2157,20 @@ Print Heading,Imprimir Rubro Print Without Amount,Imprimir sin Importe Print and Stationary,Impresión y Papelería Printing and Branding,Prensa y Branding -Priority,prioridad +Priority,Prioridad Private Equity,Private Equity Privilege Leave,Privilege Dejar Probation,libertad condicional -Process Payroll,nómina de Procesos -Produced,producido +Process Payroll,Nómina de Procesos +Produced,Producido Produced Quantity,Cantidad producida Product Enquiry,Consulta de producto -Production,producción +Production,Producción Production Order,Orden de Producción Production Order status is {0},Estado de la orden de producción es de {0} Production Order {0} must be cancelled before cancelling this Sales Order,Orden de producción {0} debe ser cancelado antes de cancelar esta orden Ventas Production Order {0} must be submitted,Orden de producción {0} debe ser presentado -Production Orders,órdenes de Producción +Production Orders,Órdenes de Producción Production Orders in Progress,Órdenes de producción en Construcción Production Plan Item,Plan de Producción de artículos Production Plan Items,Elementos del Plan de Producción @@ -2175,41 +2181,41 @@ Products,Productos "Products will be sorted by weight-age in default searches. More the weight-age, higher the product will appear in the list.","Los productos se clasifican por peso-edad en las búsquedas por defecto. Más del peso-edad , más alto es el producto aparecerá en la lista." Professional Tax,Profesional de Impuestos Profit and Loss,Pérdidas y Ganancias -Profit and Loss Statement,Ganancias y Pérdidas -Project,proyecto +Profit and Loss Statement,Estado de Pérdidas y Ganancias +Project,Proyecto Project Costing,Proyecto de Costos Project Details,Detalles del Proyecto Project Manager,Gerente de Proyectos -Project Milestone,Proyecto Milestone +Project Milestone,Hito del Proyecto Project Milestones,Hitos del Proyecto Project Name,Nombre del proyecto -Project Start Date,Proyecto Fecha de inicio +Project Start Date,Fecha de inicio del Proyecto Project Type,Tipo de Proyecto Project Value,Valor del Proyecto -Project activity / task.,Actividad del proyecto / tarea. +Project activity / task.,Actividad del Proyecto / Tarea. Project master.,Master de Proyectos. Project will get saved and will be searchable with project name given,Proyecto conseguirá guardará y se podrá buscar con el nombre de proyecto determinado Project wise Stock Tracking,Sabio proyecto Stock Tracking Project-wise data is not available for Quotation,Datos del proyecto - sabio no está disponible para la cita -Projected,proyectado -Projected Qty,proyectado Cantidad +Projected,Proyectado +Projected Qty,Cantidad Projectada Projects,Proyectos Projects & System,Proyectos y Sistema Prompt for Email on Submission of,Preguntar por el correo electrónico en la presentación de Proposal Writing,Redacción de Propuestas Provide email id registered in company,Proporcionar correo electrónico de identificación registrado en la compañía -Provisional Profit / Loss (Credit),Beneficio Provisional / Pérdida (Crédito) -Public,público +Provisional Profit / Loss (Credit),Beneficio / Pérdida (Crédito) Provisional +Public,Público Published on website at: {0},Publicado en el sitio web en: {0} -Publishing,publicación +Publishing,Publicación Pull sales orders (pending to deliver) based on the above criteria,Tire de las órdenes de venta (pendiente de entregar ) sobre la base de los criterios anteriores -Purchase,compra +Purchase,Compra Purchase / Manufacture Details,Detalles de compra / Fábricas -Purchase Analytics,Compra Analytics -Purchase Common,Compra común -Purchase Details,compra Detalles -Purchase Discounts,Compra Descuentos -Purchase Invoice,Compra factura +Purchase Analytics,Analitico de Compras +Purchase Common,Compra Común +Purchase Details,Detalles de Compra +Purchase Discounts,Descuentos sobre Compra +Purchase Invoice,Factura de Compra Purchase Invoice Advance,Compra Factura Anticipada Purchase Invoice Advances,Avances Compra Factura Purchase Invoice Item,Factura de compra del artículo @@ -2230,7 +2236,7 @@ Purchase Order number required for Item {0},Número de orden de compra se requie Purchase Order {0} is 'Stopped',Orden de Compra {0} ' Detenido ' Purchase Order {0} is not submitted,Orden de Compra {0} no se presenta Purchase Orders given to Suppliers.,Órdenes de Compra otorgados a Proveedores . -Purchase Receipt,recibo de compra +Purchase Receipt,Recibo de Compra Purchase Receipt Item,Recibo de compra del artículo Purchase Receipt Item Supplied,Recibo de compra del artículo suministrado Purchase Receipt Item Supplieds,Compra de recibos Supplieds artículo @@ -2246,10 +2252,10 @@ Purchase Return,Compra retorno Purchase Returned,compra vuelta Purchase Taxes and Charges,Impuestos de Compra y Cargos Purchase Taxes and Charges Master,Impuestos de Compra y Cargos Maestro -Purchse Order number required for Item {0},Número de orden purchse requiere para el elemento {0} -Purpose,propósito +Purchse Order number required for Item {0},Número de Orden de Compra se requiere para el elemento {0} +Purpose,Propósito Purpose must be one of {0},Propósito debe ser uno de {0} -QA Inspection,QA Inspección +QA Inspection,Control de Calidad Qty,Cantidad Qty Consumed Per Unit,Cantidad consumida por unidad Qty To Manufacture,Cant. Para Fabricación @@ -2259,14 +2265,14 @@ Qty to Order,Cantidad de pedido Qty to Receive,Cantidad a Recibir Qty to Transfer,Cantidad de Transferencia Qualification,calificación -Quality,calidad +Quality,Calidad Quality Inspection,Inspección de Calidad Quality Inspection Parameters,Parámetros de Inspección de Calidad Quality Inspection Reading,Inspección Reading Quality Quality Inspection Readings,Lecturas de Inspección de Calidad Quality Inspection required for Item {0},Inspección de la calidad requerida para el punto {0} Quality Management,Gestión de la Calidad -Quantity,cantidad +Quantity,Cantidad Quantity Requested for Purchase,Cantidad solicitada para la compra Quantity and Rate,Cantidad y Cambio Quantity and Warehouse,Cantidad y Almacén @@ -2275,10 +2281,10 @@ Quantity for Item {0} must be less than {1},Cantidad de elemento {0} debe ser me Quantity in row {0} ({1}) must be same as manufactured quantity {2},Cantidad en la fila {0} ({1} ) debe ser la misma que la cantidad fabricada {2} Quantity of item obtained after manufacturing / repacking from given quantities of raw materials,Cantidad del punto obtenido después de la fabricación / reempaque de cantidades determinadas de materias primas Quantity required for Item {0} in row {1},Cantidad requerida para el punto {0} en la fila {1} -Quarter,trimestre -Quarterly,trimestral +Quarter,Trimestre +Quarterly,Trimestral Quick Help,Ayuda Rápida -Quotation,cita +Quotation,Nota Quotation Item,Cotización del artículo Quotation Items,Cotización Artículos Quotation Lost Reason,Cita Perdida Razón @@ -2316,19 +2322,19 @@ Re-Order Qty,Re- Online con su nombre Re-order,Reordenar Re-order Level,Reordenar Nivel Re-order Qty,Reordenar Cantidad -Read,leer -Reading 1,lectura 1 -Reading 10,lectura 10 -Reading 2,lectura 2 -Reading 3,lectura 3 -Reading 4,Reading 4 -Reading 5,Reading 5 -Reading 6,lectura 6 -Reading 7,lectura 7 -Reading 8,lectura 8 -Reading 9,lectura 9 +Read,Lectura +Reading 1,Lectura 1 +Reading 10,Lectura 10 +Reading 2,Lectura 2 +Reading 3,Lectura 3 +Reading 4,Lectura 4 +Reading 5,Lectura 5 +Reading 6,Lectura 6 +Reading 7,Lectura 7 +Reading 8,Lectura 8 +Reading 9,Lectura 9 Real Estate,Bienes Raíces -Reason,razón +Reason,Razón Reason for Leaving,Razones para dejar el Reason for Resignation,Motivo de la renuncia Reason for losing,Razón por la pérdida de @@ -2400,36 +2406,36 @@ Reqd by Date,Reqd Fecha Request Type,Tipo de solicitud Request for Information,Solicitud de Información Request for purchase.,Solicitar a la venta. -Requested,requerido -Requested For,solicitados para +Requested,Requerido +Requested For,Solicitados para Requested Items To Be Ordered,Artículos solicitados será condenada Requested Items To Be Transferred,Artículos solicitados para ser transferido -Requested Qty,Solicitado Cantidad +Requested Qty,Cant. Solicitada "Requested Qty: Quantity requested for purchase, but not ordered.","Solicitado Cantidad : Cantidad solicitada para la compra, pero no ordenado ." Requests for items.,Las solicitudes de artículos. -Required By,Requerido por la -Required Date,Fecha requerida -Required Qty,Cantidad necesaria +Required By,Requerido por +Required Date,Fecha Requerida +Required Qty,Cant. Necesaria Required only for sample item.,Sólo es necesario para el artículo de muestra . Required raw materials issued to the supplier for producing a sub - contracted item.,Las materias primas necesarias emitidas al proveedor para la producción de un sub - ítem contratado . -Research,investigación +Research,Investigación Research & Development,Investigación y Desarrollo -Researcher,investigador +Researcher,Investigador Reseller,Reseller -Reserved,reservado -Reserved Qty,reservados Cantidad +Reserved,Reservado +Reserved Qty,Cant. Reservada "Reserved Qty: Quantity ordered for sale, but not delivered.","Reservados Cantidad : Cantidad a pedir a la venta , pero no entregado." -Reserved Quantity,Cantidad reservada -Reserved Warehouse,Almacén Reserved +Reserved Quantity,Cantidad Reservada +Reserved Warehouse,Almacén Reservado Reserved Warehouse in Sales Order / Finished Goods Warehouse,Almacén reservado en ventas por pedido / Finalizado Productos Almacén Reserved Warehouse is missing in Sales Order,Almacén Reservado falta de órdenes de venta Reserved Warehouse required for stock Item {0} in row {1},Almacén Reservado requerido para la acción del artículo {0} en la fila {1} Reserved warehouse required for stock item {0},Almacén Reservado requerido para la acción del artículo {0} Reserves and Surplus,Reservas y Superávit -Reset Filters,restablecer los filtros -Resignation Letter Date,Carta de renuncia Fecha -Resolution,resolución -Resolution Date,Resolución Fecha +Reset Filters,Restablecer los Filtros +Resignation Letter Date,Fecha de Carta de Renuncia +Resolution,Resolución +Resolution Date,Fecha de Resolución Resolution Details,Detalles de la resolución Resolved By,Resuelto por Rest Of The World,Resto del mundo @@ -2478,7 +2484,7 @@ SMS Settings,Ajustes de SMS SO Date,SO Fecha SO Pending Qty,SO Pendiente Cantidad SO Qty,SO Cantidad -Salary,salario +Salary,Salario Salary Information,La información sobre sueldos Salary Manager,Administrador de Salario Salary Mode,Modo Salario @@ -2486,28 +2492,28 @@ Salary Slip,Slip Salario Salary Slip Deduction,Deducción nómina Salary Slip Earning,Ganar nómina Salary Slip of employee {0} already created for this month,Nómina de empleado {0} ya creado para este mes -Salary Structure,Estructura salarial +Salary Structure,Estructura Salarial Salary Structure Deduction,Estructura salarial Deducción Salary Structure Earning,Estructura salarial Earning Salary Structure Earnings,Estructura salarial Ganancias Salary breakup based on Earning and Deduction.,Ruptura Salario basado en la ganancia y la deducción. Salary components.,Componentes salariales. Salary template master.,Plantilla maestra Salario . -Sales,venta -Sales Analytics,análisis de ventas +Sales,Venta +Sales Analytics,Análisis de Ventas Sales BOM,BOM Ventas Sales BOM Help,BOM Ventas Ayuda Sales BOM Item,BOM Sales Item Sales BOM Items,BOM Ventas Artículos Sales Browser,Navegador de Ventas -Sales Details,Detalles Ventas -Sales Discounts,Descuentos sobre ventas +Sales Details,Detalles de Ventas +Sales Discounts,Descuentos sobre Ventas Sales Email Settings,Configuración de Ventas Email -Sales Expenses,gastos de ventas +Sales Expenses,Gastos de Ventas Sales Extras,Extras Ventas Sales Funnel,Embudo de Ventas -Sales Invoice,factura de venta -Sales Invoice Advance,Factura anticipadas +Sales Invoice,Factura de Venta +Sales Invoice Advance,Factura Anticipadas Sales Invoice Item,La factura de venta de artículos Sales Invoice Items,Artículos factura de venta Sales Invoice Message,Factura Mensaje @@ -2515,7 +2521,7 @@ Sales Invoice No,Factura de venta No Sales Invoice Trends,Ventas Tendencias Factura Sales Invoice {0} has already been submitted,Factura {0} ya se ha presentado Sales Invoice {0} must be cancelled before cancelling this Sales Order,Factura {0} debe ser cancelado antes de cancelar esta orden Ventas -Sales Order,órdenes de venta +Sales Order,Ordenes de Venta Sales Order Date,Órdenes de venta Fecha Sales Order Item,Solicitar Sales Item Sales Order Items,Solicitar Sales Artículos @@ -2541,16 +2547,16 @@ Sales Return,Volver Ventas Sales Returned,Obtenidos Ventas Sales Taxes and Charges,Los impuestos y cargos de venta Sales Taxes and Charges Master,Los impuestos y cargos de venta Maestro -Sales Team,equipo de ventas +Sales Team,Equipo de Ventas Sales Team Details,Detalles del equipo de ventas Sales Team1,Team1 Ventas -Sales and Purchase,Venta y Compra +Sales and Purchase,Ventas y Compras Sales campaigns.,Campañas de ventas. -Salutation,saludo +Salutation,Saludo Sample Size,Tamaño de la muestra Sanctioned Amount,importe sancionado -Saturday,sábado -Schedule,horario +Saturday,Sábado +Schedule,Horario Schedule Date,Horario Fecha Schedule Details,Agenda Detalles Scheduled,Programado @@ -2564,7 +2570,7 @@ Score Earned,puntuación obtenida Score must be less than or equal to 5,Puntuación debe ser menor o igual a 5 Scrap %,Scrap % Seasonality for setting budgets.,Estacionalidad de establecer presupuestos. -Secretary,secretario +Secretary,Secretario Secured Loans,Préstamos Garantizados Securities & Commodity Exchanges,Valores y Bolsas de Productos Securities and Deposits,Valores y Depósitos @@ -2603,10 +2609,10 @@ Select your home country and check the timezone and currency.,Seleccione su paí "Selecting ""Yes"" will allow you to create Bill of Material showing raw material and operational costs incurred to manufacture this item.","Al seleccionar "" Sí"" le permitirá crear la lista de materiales que muestran la materia prima y los costos operativos incurridos en la fabricación de este artículo." "Selecting ""Yes"" will allow you to make a Production Order for this item.","Al seleccionar "" Sí "" permitirá que usted haga una orden de producción por este concepto." "Selecting ""Yes"" will give a unique identity to each entity of this item which can be viewed in the Serial No master.","Al seleccionar "" Sí"" le dará una identidad única a cada entidad de este artículo que se puede ver en la serie No amo." -Selling,de venta +Selling,Ventas Selling Settings,La venta de Ajustes "Selling must be checked, if Applicable For is selected as {0}","Selling debe comprobar, si se selecciona aplicable Para que {0}" -Send,enviar +Send,Enviar Send Autoreply,Enviar Respuesta automática Send Email,Enviar Email Send From,Enviar Desde @@ -2618,7 +2624,7 @@ Send To Type,Enviar a Teclear Send mass SMS to your contacts,Enviar SMS masivo a sus contactos Send to this list,Enviar a esta lista Sender Name,Nombre del remitente -Sent On,enviado Por +Sent On,Enviado Por Separate production order will be created for each finished good item.,Para la producción por separado se crea para cada buen artículo terminado. Serial No,No de orden Serial No / Batch,N º de serie / lote @@ -2642,16 +2648,16 @@ Serial Nos Required for Serialized Item {0},Serie n Necesario para artículo ser Serial Number Series,Número de Serie Serie Serial number {0} entered more than once,Número de serie {0} entraron más de una vez Serialized Item {0} cannot be updated \ using Stock Reconciliation,Artículo Serialized {0} no se puede actualizar \ mediante Stock Reconciliación -Series,serie +Series,Serie Series List for this Transaction,Lista de series para esta transacción Series Updated,Series Actualizado Series Updated Successfully,Serie actualizado correctamente Series is mandatory,Serie es obligatorio Series {0} already used in {1},Serie {0} ya se utiliza en {1} -Service,servicio +Service,Servicio Service Address,Dirección del Servicio Service Tax,Impuestos de Servicio -Services,servicios +Services,Servicios Set,conjunto "Set Default Values like Company, Currency, Current Fiscal Year, etc.","Establecer valores predeterminados , como empresa , vigencia actual año fiscal , etc" Set Item Group-wise budgets on this Territory. You can also include seasonality by setting the Distribution.,Establecer presupuestos - Grupo sabio artículo en este Territorio. También puede incluir la estacionalidad mediante el establecimiento de la Distribución . @@ -2666,20 +2672,20 @@ Setting up...,Configuración ... Settings,Configuración Settings for HR Module,Ajustes para el Módulo de Recursos Humanos "Settings to extract Job Applicants from a mailbox e.g. ""jobs@example.com""","Ajustes para extraer los solicitantes de empleo de un buzón por ejemplo, "" jobs@example.com """ -Setup,disposición -Setup Already Complete!!,Configuración ya completo ! -Setup Complete,Instalación completa +Setup,Configuración +Setup Already Complete!!,Configuración completa ! +Setup Complete,Configuración completa Setup SMS gateway settings,Configuración de puerta de enlace de configuración de SMS Setup Series,Serie de configuración Setup Wizard,Asistente de configuración Setup incoming server for jobs email id. (e.g. jobs@example.com),Configuración del servidor de correo entrante para los trabajos de identificación del email . (por ejemplo jobs@example.com ) Setup incoming server for sales email id. (e.g. sales@example.com),Configuración del servidor de correo entrante de correo electrónico de identificación de las ventas. (por ejemplo sales@example.com ) Setup incoming server for support email id. (e.g. support@example.com),Configuración del servidor de correo entrante para el apoyo de id de correo electrónico. (por ejemplo support@example.com ) -Share,cuota +Share,Cuota Share With,Comparte con Shareholders Funds,Accionistas Fondos Shipments to customers.,Los envíos a los clientes . -Shipping,envío +Shipping,Envío Shipping Account,cuenta Envíos Shipping Address,Dirección de envío Shipping Amount,Importe del envío @@ -2698,19 +2704,19 @@ Show in Website,Mostrar en Sitio Web Show rows with zero values,Mostrar filas con valores de cero Show this slideshow at the top of the page,Mostrar esta presentación de diapositivas en la parte superior de la página Sick Leave,baja por enfermedad -Signature,firma +Signature,Firma Signature to be appended at the end of every email,Firma que se adjunta al final de cada correo electrónico Single,solo Single unit of an Item.,Una sola unidad de un elemento . Sit tight while your system is being setup. This may take a few moments.,Estar tranquilos mientras el sistema está siendo configuración. Esto puede tomar un momento . Slideshow,Presentación Soap & Detergent,Jabón y Detergente -Software,software -Software Developer,desarrollador de Software +Software,Software +Software Developer,Desarrollador de Software "Sorry, Serial Nos cannot be merged","Lo sentimos , Nos de serie no se puede fusionar" "Sorry, companies cannot be merged","Lo sentimos , las empresas no se pueden combinar" -Source,fuente -Source File,archivo de origen +Source,Fuente +Source File,Archivo de Origen Source Warehouse,fuente de depósito Source and target warehouse cannot be same for row {0},Fuente y el almacén de destino no pueden ser la misma para la fila {0} Source of Funds (Liabilities),Fuente de los fondos ( Pasivo ) @@ -2735,7 +2741,7 @@ Start,comienzo Start Date,Fecha de inicio Start date of current invoice's period,Fecha del período de facturación actual Inicie Start date should be less than end date for Item {0},La fecha de inicio debe ser menor que la fecha de finalización para el punto {0} -State,estado +State,Estado Statement of Account,Estado de cuenta Static Parameters,Parámetros estáticos Status,estado @@ -2791,17 +2797,17 @@ Stub,talón Sub Assemblies,Asambleas Sub "Sub-currency. For e.g. ""Cent""","Sub -moneda. Por ejemplo, "" Cent """ Subcontract,subcontrato -Subject,sujeto +Subject,Sujeto Submit Salary Slip,Presentar nómina Submit all salary slips for the above selected criteria,Presentar todas las nóminas para los criterios seleccionados anteriormente Submit this Production Order for further processing.,Enviar esta Orden de Producción para su posterior procesamiento . Submitted,Enviado -Subsidiary,filial +Subsidiary,Filial Successful: ,Con éxito: Successfully Reconciled,Con éxito Reconciled Suggestions,Sugerencias -Sunday,domingo -Supplier,proveedor +Sunday,Domingo +Supplier,Proveedor Supplier (Payable) Account,Proveedor (A pagar ) Cuenta Supplier (vendor) name as entered in supplier master,Proveedor (vendedor ) nombre que ingresó en el maestro de proveedores Supplier > Supplier Type,Proveedor> Tipo de Proveedor @@ -2839,7 +2845,7 @@ Symbol,símbolo Sync Support Mails,Sync Soporte Mails Sync with Dropbox,Sincronización con Dropbox Sync with Google Drive,Sincronización con Google Drive -System,sistema +System,Sistema System Settings,Configuración del sistema "System User (login) ID. If set, it will become default for all HR forms.","Usuario del sistema (login ) de diámetro. Si se establece , será por defecto para todas las formas de recursos humanos." TDS (Advertisement),TDS (Publicidad) @@ -2858,10 +2864,10 @@ Target Qty,Target Cantidad Target Warehouse,destino de depósito Target warehouse in row {0} must be same as Production Order,Almacenes de destino de la fila {0} debe ser la misma que la producción del pedido Target warehouse is mandatory for row {0},Almacenes Target es obligatorio para la fila {0} -Task,tarea +Task,Tarea Task Details,Detalles de la tarea Tasks,Tareas -Tax,impuesto +Tax,Impuesto Tax Amount After Discount Amount,Total de impuestos Después Cantidad de Descuento Tax Assets,Activos por Impuestos Tax Category can not be 'Valuation' or 'Valuation and Total' as all items are non-stock items,"Categoría de impuesto no puede ser ' Valoración ' o ' de Valoración y Total ""como todos los artículos son no-acción" @@ -2870,7 +2876,7 @@ Tax and other salary deductions.,Tributaria y otras deducciones salariales. Tax detail table fetched from item master as a string and stored in this field.Used for Taxes and Charges,Tabla de detalles de impuestos recoger del maestro de artículos en forma de cadena y se almacena en este campo. Se utiliza para las tasas y cargos Tax template for buying transactions.,Plantilla de impuestos para la compra de las transacciones. Tax template for selling transactions.,Plantilla Tributaria para la venta de las transacciones. -Taxable,imponible +Taxable,Imponible Taxes,Impuestos Taxes and Charges,Impuestos y Cargos Taxes and Charges Added,Impuestos y cargos adicionales @@ -2880,10 +2886,10 @@ Taxes and Charges Deducted,Impuestos y gastos deducidos Taxes and Charges Deducted (Company Currency),Impuestos y gastos deducidos ( Compañía de divisas ) Taxes and Charges Total,Los impuestos y cargos totales Taxes and Charges Total (Company Currency),Impuestos y Cargos total ( Compañía de divisas ) -Technology,tecnología +Technology,Tecnología Telecommunications,Telecomunicaciones Telephone Expenses,gastos por servicios telefónicos -Television,televisión +Television,Televisión Template,Plantilla Template for performance appraisals.,Plantilla para las evaluaciones de desempeño . Template of terms or contract.,Plantilla de términos o contrato. @@ -2892,24 +2898,24 @@ Temporary Accounts (Liabilities),Cuentas Temporales ( Pasivo ) Temporary Assets,Activos temporales Temporary Liabilities,Pasivos temporales Term Details,Detalles plazo -Terms,condiciones +Terms,Condiciones Terms and Conditions,Términos y Condiciones Terms and Conditions Content,Términos y Condiciones de contenido -Terms and Conditions Details,Términos y Condiciones Detalles -Terms and Conditions Template,Términos y Condiciones de plantilla +Terms and Conditions Details,Detalle de Términos y Condiciones +Terms and Conditions Template,Plantilla de Términos y Condiciones Terms and Conditions1,Términos y Condiciones 1 -Terretory,Terretory -Territory,territorio +Terretory,Territorio +Territory,Territorio Territory / Customer,Localidad / Cliente Territory Manager,Gerente de Territorio Territory Name,Nombre Territorio Territory Target Variance Item Group-Wise,Territorio Target Varianza Artículo Group- Wise Territory Targets,Objetivos Territorio -Test,prueba +Test,Prueba Test Email Id,Prueba de Identificación del email Test the Newsletter,Pruebe el Boletín The BOM which will be replaced,La lista de materiales que será sustituido -The First User: You,La Primera Usuario: +The First User: You,El Primer Usuario: Usted "The Item that represents the Package. This Item must have ""Is Stock Item"" as ""No"" and ""Is Sales Item"" as ""Yes""","El artículo que representa el paquete . Este artículo debe haber "" Es Stock Item"" como "" No"" y ""¿ Punto de venta"" como "" Sí""" The Organization,La Organización "The account head under Liability, in which Profit/Loss will be booked","El director cuenta con la responsabilidad civil , en el que será reservado Ganancias / Pérdidas" @@ -2947,7 +2953,7 @@ This is an example website auto-generated from ERPNext,Este es un sitio web ejem This is the number of the last created transaction with this prefix,Este es el número de la última transacción creado con este prefijo This will be used for setting rule in HR module,Esto se utiliza para ajustar la regla en el módulo HR Thread HTML,HTML Tema -Thursday,jueves +Thursday,Jueves Time Log,Hora de registro Time Log Batch,Lote Hora de registro Time Log Batch Detail,Detalle de lotes Hora de registro @@ -2957,20 +2963,20 @@ Time Log Status must be Submitted.,Hora de registro de estado debe ser presentad Time Log for tasks.,Hora de registro para las tareas. Time Log is not billable,Hora de registro no es facturable Time Log {0} must be 'Submitted',Hora de registro {0} debe ser ' Enviado ' -Time Zone,huso horario +Time Zone,Huso Horario Time Zones,Husos horarios Time and Budget,Tiempo y Presupuesto Time at which items were delivered from warehouse,Momento en que los artículos fueron entregados desde el almacén Time at which materials were received,Momento en que se recibieron los materiales -Title,título +Title,Título Titles for print templates e.g. Proforma Invoice.,"Títulos para plantillas de impresión , por ejemplo, Factura proforma ." To,a -To Currency,Para moneda +To Currency,Para la moneda To Date,Hasta la fecha To Date should be same as From Date for Half Day leave,Hasta la fecha debe ser igual a partir de la fecha para la licencia de medio día To Date should be within the Fiscal Year. Assuming To Date = {0},Hasta la fecha debe estar dentro del año fiscal. Asumiendo la fecha = {0} To Discuss,Para Discuta -To Do List,Para hacer la lista +To Do List,Lista para hacer To Package No.,Al paquete No. To Produce,Producir To Time,Para Tiempo @@ -2979,7 +2985,7 @@ To Warehouse,Para Almacén "To add child nodes, explore tree and click on the node under which you want to add more nodes.","Para agregar nodos secundarios , explorar el árbol y haga clic en el nodo en el que desea agregar más nodos." "To assign this issue, use the ""Assign"" button in the sidebar.","Para asignar este problema, utilice el botón "" Assign"" en la barra lateral ." To create a Bank Account,Para crear una Cuenta Bancaria -To create a Tax Account,Para crear una cuenta de impuestos +To create a Tax Account,Para crear una Cuenta de impuestos "To create an Account Head under a different company, select the company and save customer.","Para crear un Jefe de Cuenta bajo una compañía diferente , seleccione la empresa y salvar a los clientes." To date cannot be before from date,Hasta la fecha no puede ser antes de la fecha de To enable Point of Sale features,Para activar punto de venta características @@ -2995,8 +3001,8 @@ To track item in sales and purchase documents based on their serial nos. This is To track items in sales and purchase documents with batch nos
Preferred Industry: Chemicals etc,Para realizar un seguimiento de los elementos de las ventas y la compra de los documentos con lotes nos
Industria preferido: Productos químicos etc < / b > To track items using barcode. You will be able to enter items in Delivery Note and Sales Invoice by scanning barcode of item.,Para realizar un seguimiento de elementos mediante código de barras. Usted será capaz de entrar en los elementos de la nota de entrega y la factura de venta mediante el escaneo de código de barras del artículo. Too many columns. Export the report and print it using a spreadsheet application.,Hay demasiadas columnas. Exportar el informe e imprimirlo mediante una aplicación de hoja de cálculo. -Tools,instrumentos -Total,total +Tools,Herramientas +Total,Total Total ({0}),Total ({0}) Total Advance,Avance total Total Amount,Importe total @@ -3005,15 +3011,15 @@ Total Amount in Words,Monto total de Palabras Total Billing This Year: ,Facturación total de este año: Total Characters,Total Jugadores Total Claimed Amount,Total Reclamado -Total Commission,total Comisión +Total Commission,Total Comisión Total Cost,Coste total -Total Credit,total del Crédito -Total Debit,débito total +Total Credit,Crédito Total +Total Debit,Débito Total Total Debit must be equal to Total Credit. The difference is {0},Débito total debe ser igual al crédito total . Total Deduction,Deducción total Total Earning,Ganar total Total Experience,Experiencia total -Total Hours,total de horas +Total Hours,Total de Horas Total Hours (Expected),Total de horas (Esperada ) Total Invoiced Amount,Total facturado Total Leave Days,Total Dejar días @@ -3035,30 +3041,30 @@ Total in words,Total en palabras Total points for all goals should be 100. It is {0},Total de puntos para todos los objetivos deben ser 100 . Es {0} Total valuation for manufactured or repacked item(s) can not be less than total valuation of raw materials,Valoración total para cada elemento (s) de la empresa o embalados de nuevo no puede ser inferior al valor total de las materias primas Total weightage assigned should be 100%. It is {0},Weightage total asignado debe ser de 100 %. Es {0} -Totals,totales +Totals,Totales Track Leads by Industry Type.,Pista conduce por tipo de industria . Track this Delivery Note against any Project,Seguir este albarán en contra de cualquier proyecto Track this Sales Order against any Project,Seguir este de órdenes de venta en contra de cualquier proyecto -Transaction,transacción +Transaction,Transacción Transaction Date,Fecha de Transacción Transaction not allowed against stopped Production Order {0},La transacción no permitida contra detenido Orden Producción {0} -Transfer,transferencia +Transfer,Transferencia Transfer Material,transferencia de material Transfer Raw Materials,Transferencia de Materias Primas -Transferred Qty,Transferido Cantidad -Transportation,transporte +Transferred Qty,Cantidad Transferida +Transportation,Transporte Transporter Info,Información Transporter -Transporter Name,transportista Nombre +Transporter Name,Nombre del Transportista Transporter lorry number,Número de camiones Transportador -Travel,viajes -Travel Expenses,gastos de Viaje +Travel,Viajes +Travel Expenses,Gastos de Viaje Tree Type,Tipo de árbol Tree of Item Groups.,Árbol de los grupos de artículos . Tree of finanial Cost Centers.,Árbol de Centros de Coste finanial . Tree of finanial accounts.,Árbol de las cuentas finanial . Trial Balance,balance de Comprobación -Tuesday,martes -Type,tipo +Tuesday,Martes +Type,Tipo Type of document to rename.,Tipo de documento para cambiar el nombre. "Type of leaves like casual, sick etc.","Tipo de hojas como casual, etc enfermo" Types of Expense Claim.,Tipos de Reclamación de Gastos . @@ -3156,13 +3162,13 @@ Voucher No,vale No Voucher Type,Tipo de Vales Voucher Type and Date,Tipo Bono y Fecha Walk In,Walk In -Warehouse,almacén -Warehouse Contact Info,Almacén Contacto +Warehouse,Almacén +Warehouse Contact Info,Información de Contacto del Almacén Warehouse Detail,Detalle de almacenes -Warehouse Name,Nombre de almacenes +Warehouse Name,Nombre del Almacén Warehouse and Reference,Almacén y Referencia Warehouse can not be deleted as stock ledger entry exists for this warehouse.,Almacén no se puede suprimir porque hay una entrada en registro de acciones para este almacén. -Warehouse can only be changed via Stock Entry / Delivery Note / Purchase Receipt,Depósito sólo se puede cambiar a través de la entrada Stock / nota de entrega / recibo de compra +Warehouse can only be changed via Stock Entry / Delivery Note / Purchase Receipt,Depósito sólo se puede cambiar a través de la Entrada de Almacén / Nota de Entrega / Recibo de Compra Warehouse cannot be changed for Serial No.,Almacén no se puede cambiar para el N º de serie Warehouse is mandatory for stock Item {0} in row {1},Warehouse es obligatoria para la acción del artículo {0} en la fila {1} Warehouse is missing in Purchase Order,Almacén falta en la Orden de Compra @@ -3185,33 +3191,33 @@ Warning: Sales Order {0} already exists against same Purchase Order number,Adver Warning: System will not check overbilling since amount for Item {0} in {1} is zero,Advertencia : El sistema no comprobará sobrefacturación desde monto para el punto {0} en {1} es cero Warranty / AMC Details,Garantía / AMC Detalles Warranty / AMC Status,Garantía / AMC Estado -Warranty Expiry Date,Garantía de caducidad Fecha +Warranty Expiry Date,Fecha de caducidad de la Garantía Warranty Period (Days),Período de garantía ( Días) Warranty Period (in days),Período de garantía ( en días) We buy this Item,Compramos este artículo We sell this Item,Vendemos este artículo -Website,sitio web -Website Description,Sitio Web Descripción +Website,Sitio Web +Website Description,Descripción del Sitio Web Website Item Group,Group Website artículo Website Item Groups,Grupos Sitios Web item Website Settings,Configuración del sitio web Website Warehouse,Almacén Web -Wednesday,miércoles -Weekly,semanal +Wednesday,Miércoles +Weekly,Semanal Weekly Off,Semanal Off Weight UOM,Peso UOM "Weight is mentioned,\nPlease mention ""Weight UOM"" too","El peso se ha mencionado, \ nPor favor, menciona "" Peso UOM "" demasiado" Weightage,weightage Weightage (%),Coeficiente de ponderación (% ) -Welcome,bienvenido -Welcome to ERPNext. Over the next few minutes we will help you setup your ERPNext account. Try and fill in as much information as you have even if it takes a bit longer. It will save you a lot of time later. Good Luck!,"Bienvenido a ERPNext . En los próximos minutos vamos a ayudarle a configurar su cuenta ERPNext . Trate de llenar toda la información que usted tiene , incluso si se necesita un poco más largo. Esto le ahorrará mucho tiempo después. ¡Buena suerte!" +Welcome,Bienvenido +Welcome to ERPNext. Over the next few minutes we will help you setup your ERPNext account. Try and fill in as much information as you have even if it takes a bit longer. It will save you a lot of time later. Good Luck!,"Bienvenido a ERPNext . En los próximos minutos vamos a ayudarle a configurar su cuenta ERPNext . Trate de llenar toda la información que usted tiene , incluso si se necesita un poco más de tiempo ahora. Esto le ahorrará mucho tiempo después. ¡Buena suerte!" Welcome to ERPNext. Please select your language to begin the Setup Wizard.,Bienvenido a ERPNext . Por favor seleccione su idioma para iniciar el asistente de configuración. What does it do?,¿Qué hace? "When any of the checked transactions are ""Submitted"", an email pop-up automatically opened to send an email to the associated ""Contact"" in that transaction, with the transaction as an attachment. The user may or may not send the email.","Cuando alguna de las operaciones controladas son "" Enviado "" , un e-mail emergente abre automáticamente al enviar un email a la asociada "" Contacto"" en esa transacción , la transacción como un archivo adjunto. El usuario puede o no puede enviar el correo electrónico." "When submitted, the system creates difference entries to set the given stock and valuation on this date.","Cuando presentado , el sistema crea asientos de diferencia para definir las acciones y la valoración dada en esta fecha." Where items are stored.,¿Dónde se almacenan los artículos . Where manufacturing operations are carried out.,Cuando las operaciones de elaboración se lleven a cabo . -Widowed,viudo +Widowed,Viudo Will be calculated automatically when you enter the details,Se calcularán automáticamente cuando entras en los detalles Will be updated after Sales Invoice is Submitted.,Se actualizará después de la factura de venta se considera sometida . Will be updated when batched.,Se actualizará cuando por lotes. @@ -3236,14 +3242,14 @@ Write Off Cost Center,Escribe Off Center Costo Write Off Outstanding Amount,Escribe Off Monto Pendiente Write Off Voucher,Escribe Off Voucher Wrong Template: Unable to find head row.,Plantilla incorrecto : no se puede encontrar la fila cabeza. -Year,año +Year,Año Year Closed,Año Cerrado Year End Date,Año Fecha de finalización -Year Name,Nombre Año +Year Name,Nombre de Año Year Start Date,Año Fecha de inicio -Year of Passing,Año de fallecimiento -Yearly,anual -Yes,sí +Year of Passing,Año de Fallecimiento +Yearly,Anual +Yes,Sí You are not authorized to add or update entries before {0},No tiene permisos para agregar o actualizar las entradas antes de {0} You are not authorized to set Frozen value,Usted no está autorizado para fijar el valor congelado You are the Expense Approver for this record. Please Update the 'Status' and Save,Usted es el aprobador de gastos para este registro. Actualice el 'Estado' y Save @@ -3279,7 +3285,7 @@ Your support email id - must be a valid email - this is where your emails will c and,y are not allowed.,no están permitidos. assigned by,asignado por -cannot be greater than 100,no puede ser mayor que 100 +cannot be greater than 100,No puede ser mayor que 100 "e.g. ""Build tools for builders""","por ejemplo "" Construir herramientas para los constructores """ "e.g. ""MC""","por ejemplo ""MC """ "e.g. ""My Company LLC""","por ejemplo ""Mi Company LLC """ diff --git a/erpnext/translations/fr.csv b/erpnext/translations/fr.csv index 99a9158398..2d3af178b7 100644 --- a/erpnext/translations/fr.csv +++ b/erpnext/translations/fr.csv @@ -35,41 +35,42 @@ "
Add / Edit"," Ajouter / Modifier < / a>" "

Default Template

Uses Jinja Templating and all the fields of Address (including Custom Fields if any) will be available

{{ address_line1 }}<br>{% if address_line2 %}{{ address_line2 }}<br>{% endif -%}{{ city }}<br>{% if state %}{{ state }}<br>{% endif -%}{% if pincode %} PIN:  {{ pincode }}<br>{% endif -%}{{ country }}<br>{% if phone %}Phone: {{ phone }}<br>{% endif -%}{% if fax %}Fax: {{ fax }}<br>{% endif -%}{% if email_id %}Email: {{ email_id }}<br>{% endif -%}
","

modèle par défaut

Utilise Jinja création de modèles et tous les domaines de l'Adresse ( y compris les champs personnalisés cas échéant) sera disponible

  {{}} address_line1 Photos  {% si address_line2%} {{}} address_line2 
{ % endif -%} {{ville}} Photos {% si l'état%} {{état}} {% endif Photos -%} {% if%} code PIN PIN: {{code PIN}} {% endif Photos -%} {{pays}} Photos {% si le téléphone%} Téléphone: {{phone}} {
% endif -%} {% if%} fax Fax: {{fax}} {% endif Photos -%} {% if%} email_id Email: {{}} email_id Photos ; {% endif -%} " A Customer Group exists with same name please change the Customer name or rename the Customer Group,BOM récursivité : {0} ne peut pas être le parent ou l'enfant de {2} -A Customer exists with same name,Une clientèle existe avec le même nom -A Lead with this email id should exist,Un responsable de cette id e-mail doit exister -A Product or Service,Nouveau N ° de série ne peut pas avoir d'entrepôt . Entrepôt doit être réglé par Stock entrée ou ticket de caisse -A Supplier exists with same name,Un Fournisseur existe avec le même nom -A symbol for this currency. For e.g. $,Un symbole de cette monnaie. Pour exemple $ +A Customer exists with same name,Un client existe avec le même nom +A Lead with this email id should exist,Un responsable de cet identifiant de courriel doit exister +A Product or Service,Un produit ou service +A Supplier exists with same name,Un fournisseur existe avec ce même nom +A symbol for this currency. For e.g. $,Un symbole pour cette monnaie. Par exemple $ AMC Expiry Date,AMC Date d'expiration Abbr,Abbr -Abbreviation cannot have more than 5 characters,Compte avec la transaction existante ne peut pas être converti en groupe. +Abbreviation cannot have more than 5 characters,L'abbréviation ne peut pas avoir plus de 5 caractères Above Value,Au-dessus de la valeur Absent,Absent Acceptance Criteria,Critères d'acceptation Accepted,Accepté -Accepted + Rejected Qty must be equal to Received quantity for Item {0},Compte {0} doit être SAMES comme débit pour tenir compte de la facture de vente en ligne {0} +Accepted + Rejected Qty must be equal to Received quantity for Item {0},"La quantité acceptée + rejetée doit être égale à la quantité reçue pour l'Item {0} +Compte {0} doit être SAMES comme débit pour tenir compte de la facture de vente en ligne {0}" Accepted Quantity,Quantité acceptés -Accepted Warehouse,Entrepôt acceptés +Accepted Warehouse,Entrepôt acceptable Account,compte Account Balance,Solde du compte Account Created: {0},Compte créé : {0} Account Details,Détails du compte -Account Head,Chef du compte +Account Head,Responsable du compte Account Name,Nom du compte Account Type,Type de compte "Account balance already in Credit, you are not allowed to set 'Balance Must Be' as 'Debit'","Le solde du compte déjà en crédit, vous n'êtes pas autorisé à mettre en 'équilibre doit être' comme 'débit'" "Account balance already in Debit, you are not allowed to set 'Balance Must Be' as 'Credit'","Le solde du compte déjà en débit, vous n'êtes pas autorisé à définir 'équilibre doit être' comme 'Crédit'" Account for the warehouse (Perpetual Inventory) will be created under this Account.,Compte de l'entrepôt ( de l'inventaire permanent ) sera créé sous ce compte . -Account head {0} created,Employé soulagé sur {0} doit être défini comme «gauche» -Account must be a balance sheet account,arrhes +Account head {0} created,Responsable du compte {0} a été crée +Account must be a balance sheet account,Le compte doit être un bilan Account with child nodes cannot be converted to ledger,Liste des prix non sélectionné Account with existing transaction can not be converted to group.,{0} n'est pas un congé approbateur valide Account with existing transaction can not be deleted,Compte avec la transaction existante ne peut pas être supprimé Account with existing transaction cannot be converted to ledger,Compte avec la transaction existante ne peut pas être converti en livre Account {0} cannot be a Group,Compte {0} ne peut pas être un groupe -Account {0} does not belong to Company {1},{0} créé +Account {0} does not belong to Company {1},Compte {0} n'appartient pas à la société {1} Account {0} does not belong to company: {1},Compte {0} n'appartient pas à l'entreprise: {1} -Account {0} does not exist,Votre adresse e-mail +Account {0} does not exist,Compte {0} n'existe pas Account {0} has been entered more than once for fiscal year {1},S'il vous plaît entrer « Répétez le jour du Mois de la« valeur de champ Account {0} is frozen,Attention: Commande {0} existe déjà contre le même numéro de bon de commande Account {0} is inactive,dépenses directes @@ -80,13 +81,13 @@ Account {0}: Parent account {1} does not belong to company: {2},Compte {0}: comp Account {0}: Parent account {1} does not exist,Compte {0}: compte de Parent {1} n'existe pas Account {0}: You can not assign itself as parent account,Compte {0}: Vous ne pouvez pas lui attribuer que compte parent Account: {0} can only be updated via \ Stock Transactions,Compte: {0} ne peut être mise à jour via \ Transactions de stock -Accountant,comptable +Accountant,Comptable Accounting,Comptabilité "Accounting Entries can be made against leaf nodes, called","Écritures comptables peuvent être faites contre nœuds feuilles , appelé" "Accounting entry frozen up to this date, nobody can do / modify entry except role specified below.","Saisie comptable gelé jusqu'à cette date, personne ne peut faire / modifier entrée sauf rôle spécifié ci-dessous." Accounting journal entries.,Les écritures comptables. Accounts,Comptes -Accounts Browser,comptes navigateur +Accounts Browser,Navigateur des comptes Accounts Frozen Upto,Jusqu'à comptes gelés Accounts Payable,Comptes à payer Accounts Receivable,Débiteurs @@ -113,28 +114,28 @@ Actual Start Date,Date de début réelle Add,Ajouter Add / Edit Taxes and Charges,Ajouter / Modifier Taxes et frais Add Child,Ajouter un enfant -Add Serial No,Ajouter N ° de série +Add Serial No,Ajouter Numéro de série Add Taxes,Ajouter impôts Add Taxes and Charges,Ajouter Taxes et frais Add or Deduct,Ajouter ou déduire -Add rows to set annual budgets on Accounts.,Ajoutez des lignes d'établir des budgets annuels des comptes. -Add to Cart,ERP open source construit pour le web -Add to calendar on this date,Ajouter au calendrier à cette date +Add rows to set annual budgets on Accounts.,Ajoutez des lignes pour établir des budgets annuels sur des comptes. +Add to Cart,Ajouter au panier +Add to calendar on this date,Ajouter cette date au calendrier Add/Remove Recipients,Ajouter / supprimer des destinataires Address,Adresse Address & Contact,Adresse et coordonnées -Address & Contacts,Adresse & Contacts +Address & Contacts,Adresse & Coordonnées Address Desc,Adresse Desc Address Details,Détails de l'adresse Address HTML,Adresse HTML Address Line 1,Adresse ligne 1 Address Line 2,Adresse ligne 2 Address Template,Adresse modèle -Address Title,Titre Adresse +Address Title,Titre de l'adresse Address Title is mandatory.,Vous n'êtes pas autorisé à imprimer ce document Address Type,Type d'adresse -Address master.,Ou créés par -Administrative Expenses,applicabilité +Address master.,Adresse principale +Administrative Expenses,Dépenses administratives Administrative Officer,de l'administration Advance Amount,Montant de l'avance Advance amount,Montant de l'avance @@ -142,7 +143,7 @@ Advances,Avances Advertisement,Publicité Advertising,publicité Aerospace,aérospatial -After Sale Installations,Après Installations Vente +After Sale Installations,Installations Après Vente Against,Contre Against Account,Contre compte Against Bill {0} dated {1},Courriel invalide : {0} @@ -197,7 +198,7 @@ Allocated amount can not greater than unadusted amount,Montant alloué ne peut p Allow Bill of Materials,Laissez Bill of Materials Allow Bill of Materials should be 'Yes'. Because one or many active BOMs present for this item,Commande {0} n'est pas valide Allow Children,permettre aux enfants -Allow Dropbox Access,Autoriser l'accès Dropbox +Allow Dropbox Access,Autoriser l'accès au Dropbox Allow Google Drive Access,Autoriser Google Drive accès Allow Negative Balance,Laissez solde négatif Allow Negative Stock,Laissez Stock Négatif @@ -219,7 +220,7 @@ An Customer exists with same name,Il existe un client avec le même nom "An Item Group exists with same name, please change the item name or rename the item group","Un groupe d'objet existe avec le même nom , s'il vous plaît changer le nom de l'élément ou de renommer le groupe de l'article" "An item exists with same name ({0}), please change the item group name or rename the item",Le compte doit être un compte de bilan Analyst,analyste -Annual,Nomenclature +Annual,Annuel Another Period Closing Entry {0} has been made after {1},Point Wise impôt Détail Another Salary Structure {0} is active for employee {0}. Please make its status 'Inactive' to proceed.,Le taux de conversion ne peut pas être égal à 0 ou 1 "Any other comments, noteworthy effort that should go in the records.","D'autres commentaires, l'effort remarquable qui devrait aller dans les dossiers." @@ -288,20 +289,20 @@ Automatically extract Job Applicants from a mail box , Automatically extract Leads from a mail box e.g.,Extraire automatiquement des prospects à partir d'une boîte aux lettres par exemple Automatically updated via Stock Entry of type Manufacture/Repack,Automatiquement mis à jour via l'entrée de fabrication de type Stock / Repack Automotive,automobile -Autoreply when a new mail is received,Autoreply quand un nouveau message est reçu +Autoreply when a new mail is received,Réponse automatique lorsqu'un nouveau message est reçu Available,disponible Available Qty at Warehouse,Qté disponible à l'entrepôt Available Stock for Packing Items,Disponible en stock pour l'emballage Articles "Available in BOM, Delivery Note, Purchase Invoice, Production Order, Purchase Order, Purchase Receipt, Sales Invoice, Sales Order, Stock Entry, Timesheet","Disponible en nomenclature , bon de livraison , facture d'achat , ordre de production, bon de commande , bon de réception , la facture de vente , Sales Order , Stock entrée , des feuilles de temps" -Average Age,moyen âge -Average Commission Rate,Taux moyen Commission -Average Discount,D'actualisation moyen -Awesome Products,"Pour suivre le nom de la marque dans la note qui suit documents de livraison , Opportunité , Demande de Matériel , article , bon de commande, bon d'achat, l'acheteur réception , offre , facture de vente , ventes BOM , Sales Order , No de série" -Awesome Services,Restrictions d'autorisation de l'utilisateur -BOM Detail No,Détail BOM Non +Average Age,âge moyen +Average Commission Rate,Taux moyen de la commission +Average Discount,Remise moyenne +Awesome Products,Produits impressionnants +Awesome Services,Services impressionnants +BOM Detail No,Numéro du détail BOM BOM Explosion Item,Article éclatement de la nomenclature BOM Item,Article BOM -BOM No,Aucune nomenclature +BOM No,Numéro BOM BOM No. for a Finished Good Item,N ° nomenclature pour un produit fini Bonne BOM Operation,Opération BOM BOM Operations,Opérations de nomenclature @@ -314,50 +315,50 @@ BOM {0} for Item {1} in row {2} is inactive or not submitted,Dépenses de voyage BOM {0} is not active or not submitted,Eléments requis BOM {0} is not submitted or inactive BOM for Item {1},BOM {0} n'est pas soumis ou inactif nomenclature pour objet {1} Backup Manager,Gestionnaire de sauvegarde -Backup Right Now,Sauvegarde Right Now +Backup Right Now,Sauvegarder immédiatement Backups will be uploaded to,Les sauvegardes seront téléchargées sur -Balance Qty,solde Quantité -Balance Sheet,Fournisseur Type maître . -Balance Value,Valeur de balance -Balance for Account {0} must always be {1},Point {0} avec Serial Non {1} est déjà installé -Balance must be,avec des grands livres -"Balances of Accounts of type ""Bank"" or ""Cash""",Date de vieillissement est obligatoire pour l'ouverture d'entrée +Balance Qty,Qté soldée +Balance Sheet,Bilan +Balance Value,Valeur du solde +Balance for Account {0} must always be {1},Solde pour le compte {0} doit toujours être {1} +Balance must be,Solde doit être +"Balances of Accounts of type ""Bank"" or ""Cash""","Solde du compte de type ""Banque"" ou ""Espèces""" Bank,Banque -Bank / Cash Account,Banque / Compte de trésorerie -Bank A/C No.,Bank A / C No. +Bank / Cash Account,Compte en Banque / trésorerie +Bank A/C No.,No. de compte bancaire Bank Account,Compte bancaire -Bank Account No.,N ° de compte bancaire +Bank Account No.,No. de compte bancaire Bank Accounts,Comptes bancaires -Bank Clearance Summary,Banque Résumé de dégagement +Bank Clearance Summary,Résumé de l'approbation de la banque Bank Draft,Projet de la Banque Bank Name,Nom de la banque -Bank Overdraft Account,Inspection de la qualité requise pour objet {0} +Bank Overdraft Account,Compte du découvert bancaire Bank Reconciliation,Rapprochement bancaire -Bank Reconciliation Detail,Détail de rapprochement bancaire -Bank Reconciliation Statement,État de rapprochement bancaire -Bank Voucher,Bon Banque -Bank/Cash Balance,Banque / Balance trésorerie -Banking,bancaire +Bank Reconciliation Detail,Détail du rapprochement bancaire +Bank Reconciliation Statement,Énoncé de rapprochement bancaire +Bank Voucher,Coupon de la banque +Bank/Cash Balance,Solde de la banque / trésorerie +Banking,Bancaire Barcode,Barcode -Barcode {0} already used in Item {1},Lettre d'information a déjà été envoyé +Barcode {0} already used in Item {1},Le code barre {0} est déjà utilisé dans l'article {1} Based On,Basé sur Basic,de base Basic Info,Informations de base Basic Information,Renseignements de base Basic Rate,Taux de base -Basic Rate (Company Currency),Taux de base (Société Monnaie) +Basic Rate (Company Currency),Taux de base (Monnaie de la Société ) Batch,Lot -Batch (lot) of an Item.,Batch (lot) d'un élément. -Batch Finished Date,Date de lot fini -Batch ID,ID du lot -Batch No,Aucun lot -Batch Started Date,Date de démarrage du lot +Batch (lot) of an Item.,Lot d'une article. +Batch Finished Date,La date finie d'un lot +Batch ID,Identifiant du lot +Batch No,Numéro du lot +Batch Started Date,Date de début du lot Batch Time Logs for billing.,Temps de lots des journaux pour la facturation. Batch-Wise Balance History,Discontinu Histoire de la balance Batched for Billing,Par lots pour la facturation Better Prospects,De meilleures perspectives -Bill Date,Bill Date -Bill No,Le projet de loi no +Bill Date,Date de la facture +Bill No,Numéro de la facture Bill No {0} already booked in Purchase Invoice {1},Centre de coûts de transactions existants ne peut pas être converti en livre Bill of Material,De la valeur doit être inférieure à la valeur à la ligne {0} Bill of Material to be considered for manufacturing,Bill of Material être considéré pour la fabrication @@ -386,22 +387,22 @@ Both Warehouse must belong to same Company,Les deux Entrepôt doit appartenir à Box,boîte Branch,Branche Brand,Marque -Brand Name,Nom de marque +Brand Name,La marque Brand master.,Marque maître. Brands,Marques Breakdown,Panne -Broadcasting,radiodiffusion +Broadcasting,Diffusion Brokerage,courtage Budget,Budget Budget Allocated,Budget alloué Budget Detail,Détail du budget Budget Details,Détails du budget Budget Distribution,Répartition du budget -Budget Distribution Detail,Détail Répartition du budget +Budget Distribution Detail,Détail de la répartition du budget Budget Distribution Details,Détails de la répartition du budget -Budget Variance Report,Rapport sur les écarts de budget +Budget Variance Report,Rapport sur les écarts du budget Budget cannot be set for Group Cost Centers,Imprimer et stationnaire -Build Report,construire Rapport +Build Report,Créer un rapport Bundle items at time of sale.,Regrouper des envois au moment de la vente. Business Development Manager,Directeur du développement des affaires Buying,Achat @@ -501,7 +502,7 @@ Cheque Date,Date de chèques Cheque Number,Numéro de chèque Child account exists for this account. You can not delete this account.,Les matières premières ne peut pas être le même que l'article principal City,Ville -City/Town,Ville / +City/Town,Ville Claim Amount,Montant réclamé Claims for company expense.,Les réclamations pour frais de la société. Class / Percentage,Classe / Pourcentage @@ -561,11 +562,11 @@ Complete,Compléter Complete Setup,congé de maladie Completed,Terminé Completed Production Orders,Terminé les ordres de fabrication -Completed Qty,Complété Quantité +Completed Qty,Quantité complétée Completion Date,Date d'achèvement Completion Status,L'état d'achèvement Computer,ordinateur -Computers,Informatique +Computers,Ordinateurs Confirmation Date,date de confirmation Confirmed orders from Customers.,Confirmé commandes provenant de clients. Consider Tax or Charge for,Prenons l'impôt ou charge pour @@ -715,7 +716,7 @@ Customize the introductory text that goes as a part of that email. Each transact DN Detail,Détail DN Daily,Quotidien Daily Time Log Summary,Daily Time Sommaire du journal -Database Folder ID,Database ID du dossier +Database Folder ID,Identifiant du dossier de la base de données Database of potential customers.,Base de données de clients potentiels. Date,Date Date Format,Format de date @@ -745,7 +746,7 @@ Deductions,Déductions Default,Par défaut Default Account,Compte par défaut Default Address Template cannot be deleted,Adresse par défaut modèle ne peut pas être supprimé -Default Amount,Montant en défaut +Default Amount,Montant par défaut Default BOM,Nomenclature par défaut Default Bank / Cash account will be automatically updated in POS Invoice when this mode is selected.,Par défaut Banque / argent compte sera automatiquement mis à jour dans la facture POS lorsque ce mode est sélectionné. Default Bank Account,Compte bancaire par défaut @@ -779,18 +780,18 @@ Default settings for selling transactions.,principal Default settings for stock transactions.,minute Defense,défense "Define Budget for this Cost Center. To set budget action, see
Company Master","Définir le budget pour ce centre de coûts. Pour définir l'action budgétaire, voir Maître Société" -Del,Eff -Delete,Effacer +Del,Suppr +Delete,Supprimer Delete {0} {1}?,Supprimer {0} {1} ? Delivered,Livré -Delivered Items To Be Billed,Les articles livrés être facturé +Delivered Items To Be Billed,Les items livrés à être facturés Delivered Qty,Qté livrée Delivered Serial No {0} cannot be deleted,médical Delivery Date,Date de livraison Delivery Details,Détails de la livraison Delivery Document No,Pas de livraison de documents Delivery Document Type,Type de document de livraison -Delivery Note,Remarque livraison +Delivery Note,Bon de livraison Delivery Note Item,Point de Livraison Delivery Note Items,Articles bordereau de livraison Delivery Note Message,Note Message de livraison @@ -800,9 +801,9 @@ Delivery Note Trends,Bordereau de livraison Tendances Delivery Note {0} is not submitted,Livraison Remarque {0} n'est pas soumis Delivery Note {0} must not be submitted,Pas de clients ou fournisseurs Comptes trouvé Delivery Notes {0} must be cancelled before cancelling this Sales Order,Quantité en ligne {0} ( {1} ) doit être la même que la quantité fabriquée {2} -Delivery Status,Delivery Status -Delivery Time,Délai de livraison -Delivery To,Pour livraison +Delivery Status,Statut de la livraison +Delivery Time,L'heure de la livraison +Delivery To,Livrer à Department,Département Department Stores,Grands Magasins Depends on LWP,Dépend de LWP @@ -822,8 +823,8 @@ Direct Income,Choisissez votre langue Disable,"Groupe ajoutée, rafraîchissant ..." Disable Rounded Total,Désactiver totale arrondie Disabled,Handicapé -Discount %,% De réduction -Discount %,% De réduction +Discount %,% Remise +Discount %,% Remise Discount (%),Remise (%) Discount Amount,S'il vous plaît tirer des articles de livraison Note "Discount Fields will be available in Purchase Order, Purchase Receipt, Purchase Invoice","Les champs d'actualisation sera disponible en commande, reçu d'achat, facture d'achat" @@ -1464,8 +1465,8 @@ Journal Voucher {0} does not have account {1} or already matched,Journal Bon {0} Journal Vouchers {0} are un-linked,Date de livraison prévue ne peut pas être avant ventes Date de commande Keep a track of communication related to this enquiry which will help for future reference.,Gardez une trace de la communication liée à cette enquête qui aidera pour référence future. Keep it web friendly 900px (w) by 100px (h),Gardez web 900px amical ( w) par 100px ( h ) -Key Performance Area,Zone de performance clé -Key Responsibility Area,Secteur de responsabilité clé +Key Performance Area,Section de performance clé +Key Responsibility Area,Section à responsabilité importante Kg,kg LR Date,LR Date LR No,LR Non @@ -1723,9 +1724,9 @@ Net Weight UOM,Emballage Poids Net Net Weight of each Item,Poids net de chaque article Net pay cannot be negative,Landed Cost correctement mis à jour Never,Jamais -New , +New ,Nouveau New Account,nouveau compte -New Account Name,Nouveau compte Nom +New Account Name,Nom du nouveau compte New BOM,Nouvelle nomenclature New Communications,Communications Nouveau- New Company,nouvelle entreprise @@ -1761,11 +1762,11 @@ Newspaper Publishers,Éditeurs de journaux Next,Nombre purchse de commande requis pour objet {0} Next Contact By,Suivant Par Next Contact Date,Date Contact Suivant -Next Date,Date d' +Next Date,Date suivante Next email will be sent on:,Email sera envoyé le: -No,Aucun +No,Non No Customer Accounts found.,Aucun client ne représente trouvés. -No Customer or Supplier Accounts found,Encaisse +No Customer or Supplier Accounts found,Aucun compte client ou fournisseur trouvé No Expense Approvers. Please assign 'Expense Approver' Role to atleast one user,Compte {0} est inactif No Item with Barcode {0},Bon de commande {0} ' arrêté ' No Item with Serial No {0},non autorisé @@ -1775,13 +1776,13 @@ No Permission,Aucune autorisation No Production Orders created,Section de base No Supplier Accounts found. Supplier Accounts are identified based on 'Master Type' value in account record.,Aucun fournisseur ne représente trouvés. Comptes fournisseurs sont identifiés sur la base de la valeur «Maître Type ' dans le compte rendu. No accounting entries for the following warehouses,Pas d'entrées comptables pour les entrepôts suivants -No addresses created,Aucune adresse créés +No addresses created,Aucune adresse créée No contacts created,Pas de contacts créés No default Address Template found. Please create a new one from Setup > Printing and Branding > Address Template.,Aucune valeur par défaut Adresse modèle trouvé. S'il vous plaît créer un nouveau à partir de Configuration> Presse et Branding> Adresse modèle. No default BOM exists for Item {0},services impressionnants No description given,Le jour (s ) sur lequel vous postulez pour congé sont les vacances . Vous n'avez pas besoin de demander l'autorisation . -No employee found,Aucun employé -No employee found!,Aucun employé ! +No employee found,Aucun employé trouvé +No employee found!,Aucun employé trouvé! No of Requested SMS,Pas de SMS demandés No of Sent SMS,Pas de SMS envoyés No of Visits,Pas de visites @@ -1816,14 +1817,14 @@ Note: This Cost Center is a Group. Cannot make accounting entries against groups Note: {0},Compte avec des nœuds enfants ne peut pas être converti en livre Notes,Remarques Notes:,notes: -Nothing to request,Rien à demander +Nothing to request,Pas de requête à demander Notice (days),Avis ( jours ) Notification Control,Contrôle de notification Notification Email Address,Adresse e-mail de notification Notify by Email on creation of automatic Material Request,Notification par courriel lors de la création de la demande de matériel automatique Number Format,Format numérique -Offer Date,offre date -Office,Fonction +Offer Date,Date de l'offre +Office,Bureau Office Equipments,Équipement de bureau Office Maintenance Expenses,Date d'adhésion doit être supérieure à Date de naissance Office Rent,POS Global Setting {0} déjà créé pour la compagnie {1} @@ -1970,7 +1971,7 @@ Payments made during the digest period,Les paiements effectués au cours de la p Payments received during the digest period,Les paiements reçus au cours de la période digest Payroll Settings,Paramètres de la paie Pending,En attendant -Pending Amount,Montant attente +Pending Amount,Montant en attente Pending Items {0} updated,Machines et installations Pending Review,Attente d'examen Pending SO Items For Purchase Request,"Articles en attente Donc, pour demande d'achat" @@ -2097,11 +2098,11 @@ Please set {0},S'il vous plaît mettre {0} Please setup Employee Naming System in Human Resource > HR Settings,S'il vous plaît configuration Naming System employés en ressources humaines> Paramètres RH Please setup numbering series for Attendance via Setup > Numbering Series,S'il vous plaît configuration série de numérotation à la fréquentation via Configuration> Série de numérotation Please setup your chart of accounts before you start Accounting Entries,S'il vous plaît configurer votre plan de comptes avant de commencer Écritures comptables -Please specify,S'il vous plaît spécifier +Please specify,Veuillez spécifier Please specify Company,S'il vous plaît préciser Company Please specify Company to proceed,Veuillez indiquer Société de procéder Please specify Default Currency in Company Master and Global Defaults,N ° de série {0} n'existe pas -Please specify a,S'il vous plaît spécifier une +Please specify a,Veuillez spécifier un Please specify a valid 'From Case No.',S'il vous plaît indiquer une valide »De Affaire n ' Please specify a valid Row ID for {0} in row {1},Il s'agit d'un site d'exemple généré automatiquement à partir de ERPNext Please specify either Quantity or Valuation Rate or both,S'il vous plaît spécifier Quantité ou l'évaluation des taux ou à la fois @@ -2205,7 +2206,7 @@ Publishing,édition Pull sales orders (pending to deliver) based on the above criteria,Tirez les ordres de vente (en attendant de livrer) sur la base des critères ci-dessus Purchase,Acheter Purchase / Manufacture Details,Achat / Fabrication Détails -Purchase Analytics,Achat Analytics +Purchase Analytics,Les analyses des achats Purchase Common,Achat commune Purchase Details,Conditions de souscription Purchase Discounts,Rabais sur l'achat @@ -2256,7 +2257,7 @@ Qty To Manufacture,Quantité à fabriquer Qty as per Stock UOM,Qté en stock pour Emballage Qty to Deliver,Quantité à livrer Qty to Order,Quantité à commander -Qty to Receive,Quantité pour recevoir +Qty to Receive,Quantité à recevoir Qty to Transfer,Quantité de Transfert Qualification,Qualification Quality,Qualité @@ -2278,11 +2279,11 @@ Quantity required for Item {0} in row {1},Quantité requise pour objet {0} à la Quarter,Trimestre Quarterly,Trimestriel Quick Help,Aide rapide -Quotation,Citation +Quotation,Devis Quotation Item,Article devis Quotation Items,Articles de devis Quotation Lost Reason,Devis perdu la raison -Quotation Message,Devis message +Quotation Message,Message du devis Quotation To,Devis Pour Quotation Trends,Devis Tendances Quotation {0} is cancelled,Devis {0} est annulée @@ -2296,8 +2297,8 @@ Random,Aléatoire Range,Gamme Rate,Taux Rate ,Taux -Rate (%),S'il vous plaît entrer la date soulager . -Rate (Company Currency),Taux (Société Monnaie) +Rate (%),Taux (%) +Rate (Company Currency),Taux (Monnaie de la société) Rate Of Materials Based On,Taux de matériaux à base Rate and Amount,Taux et le montant Rate at which Customer Currency is converted to customer's base currency,Vitesse à laquelle la devise du client est converti en devise de base du client @@ -2318,15 +2319,15 @@ Re-order Level,Re-order niveau Re-order Qty,Re-order Quantité Read,Lire Reading 1,Lecture 1 -Reading 10,Lecture le 10 +Reading 10,Lecture 10 Reading 2,Lecture 2 Reading 3,Reading 3 Reading 4,Reading 4 Reading 5,Reading 5 Reading 6,Lecture 6 -Reading 7,Lecture le 7 +Reading 7,Lecture 7 Reading 8,Lecture 8 -Reading 9,Lectures suggérées 9 +Reading 9,Lecture 9 Real Estate,Immobilier Reason,Raison Reason for Leaving,Raison du départ @@ -2345,7 +2346,7 @@ Received and Accepted,Reçus et acceptés Receiver List,Liste des récepteurs Receiver List is empty. Please create Receiver List,Soit quantité de cible ou le montant cible est obligatoire . Receiver Parameter,Paramètre récepteur -Recipients,Récipiendaires +Recipients,Destinataires Reconcile,réconcilier Reconciliation Data,Données de réconciliation Reconciliation HTML,Réconciliation HTML @@ -2383,7 +2384,7 @@ Remarks,Remarques Remarks Custom,Remarques sur commande Rename,rebaptiser Rename Log,Renommez identifiez-vous -Rename Tool,Renommer l'outil +Rename Tool,Outils de renommage Rent Cost,louer coût Rent per hour,Louer par heure Rented,Loué @@ -2419,8 +2420,8 @@ Reseller,Revendeur Reserved,réservé Reserved Qty,Quantité réservés "Reserved Qty: Quantity ordered for sale, but not delivered.","Réservés Quantité: Quantité de commande pour la vente , mais pas livré ." -Reserved Quantity,Quantité réservés -Reserved Warehouse,Réservé Entrepôt +Reserved Quantity,Quantité réservée +Reserved Warehouse,Entrepôt réservé Reserved Warehouse in Sales Order / Finished Goods Warehouse,Entrepôt réservé à des commandes clients / entrepôt de produits finis Reserved Warehouse is missing in Sales Order,Réservé entrepôt est manquant dans l'ordre des ventes Reserved Warehouse required for stock Item {0} in row {1},Centre de coûts par défaut de vente @@ -3158,8 +3159,8 @@ Voucher Type and Date,Type de chèques et date Walk In,Walk In Warehouse,entrepôt Warehouse Contact Info,Entrepôt Info Contact -Warehouse Detail,Détail d'entrepôt -Warehouse Name,Nom d'entrepôt +Warehouse Detail,Détail de l'entrepôt +Warehouse Name,Nom de l'entrepôt Warehouse and Reference,Entrepôt et référence Warehouse can not be deleted as stock ledger entry exists for this warehouse.,Descendre : {0} Warehouse can only be changed via Stock Entry / Delivery Note / Purchase Receipt,Entrepôt ne peut être modifié via Stock Entrée / bon de livraison / reçu d'achat @@ -3177,15 +3178,15 @@ Warehouse {0}: Parent account {1} does not bolong to the company {2},Entrepôt { Warehouse-Wise Stock Balance,Warehouse-Wise Stock Solde Warehouse-wise Item Reorder,Warehouse-sage Réorganiser article Warehouses,Entrepôts -Warehouses.,applicable +Warehouses.,Entrepôts. Warn,Avertir Warning: Leave application contains following block dates,Attention: la demande d'autorisation contient les dates de blocs suivants Warning: Material Requested Qty is less than Minimum Order Qty,Attention: Matériel requis Quantité est inférieure Quantité minimum à commander Warning: Sales Order {0} already exists against same Purchase Order number,S'il vous plaît vérifier ' Est Advance' contre compte {0} si c'est une entrée avance . Warning: System will not check overbilling since amount for Item {0} in {1} is zero,Attention : Le système ne vérifie pas la surfacturation depuis montant pour objet {0} dans {1} est nulle -Warranty / AMC Details,Garantie / AMC Détails -Warranty / AMC Status,Garantie / AMC Statut -Warranty Expiry Date,Date d'expiration de garantie +Warranty / AMC Details,Garantie / Détails AMC +Warranty / AMC Status,Garantie / Statut AMC +Warranty Expiry Date,Date d'expiration de la garantie Warranty Period (Days),Période de garantie (jours) Warranty Period (in days),Période de garantie (en jours) We buy this Item,Nous achetons cet article @@ -3237,7 +3238,7 @@ Write Off Outstanding Amount,Ecrire Off Encours Write Off Voucher,Ecrire Off Bon Wrong Template: Unable to find head row.,Modèle tort: ​​Impossible de trouver la ligne de tête. Year,Année -Year Closed,L'année Fermé +Year Closed,L'année est fermée Year End Date,Fin de l'exercice Date de Year Name,Nom Année Year Start Date,Date de début Année diff --git a/erpnext/translations/hi.csv b/erpnext/translations/hi.csv index 63e2323a98..e1092492ac 100644 --- a/erpnext/translations/hi.csv +++ b/erpnext/translations/hi.csv @@ -38,30 +38,30 @@ A Customer Group exists with same name please change the Customer name or rename A Customer exists with same name,यह नाम से दूसरा ग्राहक मौजूद हैं A Lead with this email id should exist,इस ईमेल आईडी के साथ एक लीड मौजूद होना चाहिए A Product or Service,उत्पाद या सेवा -A Supplier exists with same name,सप्लायर एक ही नाम के साथ मौजूद है -A symbol for this currency. For e.g. $,इस मुद्रा के लिए एक प्रतीक है. उदाहरण के लिए $ +A Supplier exists with same name,यह नाम से दूसरा आपूर्तिकर्ता मौजूद है +A symbol for this currency. For e.g. $,इस मुद्रा के लिए एक प्रतीक. उदाहरण के लिए $ AMC Expiry Date,एएमसी समाप्ति तिथि -Abbr,Abbr -Abbreviation cannot have more than 5 characters,संक्षिप्त 5 से अधिक वर्ण नहीं हो सकता -Above Value,मूल्य से ऊपर +Abbr,संक्षिप्त +Abbreviation cannot have more than 5 characters,संक्षिप्त 5 से अधिक वर्ण की नहीं हो सकती +Above Value,ऊपर मूल्य Absent,अनुपस्थित -Acceptance Criteria,स्वीकृति मानदंड +Acceptance Criteria,स्वीकृति मापदंड Accepted,स्वीकार किया Accepted + Rejected Qty must be equal to Received quantity for Item {0},स्वीकृत + अस्वीकृत मात्रा मद के लिए प्राप्त मात्रा के बराबर होना चाहिए {0} Accepted Quantity,स्वीकार किए जाते हैं मात्रा -Accepted Warehouse,स्वीकार किए जाते हैं वेअरहाउस +Accepted Warehouse,स्वीकार किए जाते हैं गोदाम Account,खाता -Account Balance,खाता शेष -Account Created: {0},खाता बनाया : {0} +Account Balance,खाते की शेष राशि +Account Created: {0},खाता बन गया : {0} Account Details,खाता विवरण Account Head,लेखाशीर्ष Account Name,खाते का नाम Account Type,खाता प्रकार -"Account balance already in Credit, you are not allowed to set 'Balance Must Be' as 'Debit'","खाता शेष राशि पहले से ही क्रेडिट में, आप सेट करने की अनुमति नहीं है 'डेबिट' के रूप में 'बैलेंस होना चाहिए'" -"Account balance already in Debit, you are not allowed to set 'Balance Must Be' as 'Credit'","पहले से ही डेबिट में खाता शेष, आप के रूप में 'क्रेडिट' 'बैलेंस होना चाहिए' स्थापित करने के लिए अनुमति नहीं है" +"Account balance already in Credit, you are not allowed to set 'Balance Must Be' as 'Debit'","खाते की शेष राशि पहले से ही क्रेडिट में है, कृपया आप शेष राशि को डेबिट के रूप में ही रखें " +"Account balance already in Debit, you are not allowed to set 'Balance Must Be' as 'Credit'","खाते की शेष राशि पहले से ही डेबिट में है, कृपया आप शेष राशि को क्रेडिट के रूप में ही रखें" Account for the warehouse (Perpetual Inventory) will be created under this Account.,गोदाम ( सदा सूची ) के लिए खाते में इस खाते के तहत बनाया जाएगा . -Account head {0} created,लेखा शीर्ष {0} बनाया -Account must be a balance sheet account,खाता एक वित्तीय स्थिति विवरण खाता होना चाहिए +Account head {0} created,लेखाशीर्ष {0} बनाया +Account must be a balance sheet account,खाता एक वित्तीय स्थिति विवरण का खाता होना चाहिए Account with child nodes cannot be converted to ledger,बच्चे नोड्स के साथ खाता लेजर को परिवर्तित नहीं किया जा सकता है Account with existing transaction can not be converted to group.,मौजूदा लेन - देन के साथ खाता समूह को नहीं बदला जा सकता . Account with existing transaction can not be deleted,मौजूदा लेन - देन के साथ खाता हटाया नहीं जा सकता diff --git a/erpnext/translations/ja.csv b/erpnext/translations/ja.csv index a6e14611b1..4b2a0157df 100644 --- a/erpnext/translations/ja.csv +++ b/erpnext/translations/ja.csv @@ -44,7 +44,7 @@ AMC Expiry Date,AMCの有効期限日 Abbr,略称 Abbreviation cannot have more than 5 characters,略語は、5つ以上の文字を使用することはできません Above Value,値を上回る -Absent,ない +Absent,いんない Acceptance Criteria,合否基準 Accepted,承認済 Accepted + Rejected Qty must be equal to Received quantity for Item {0},一般に認められた+拒否数量、アイテムの受信量と等しくなければなりません{0} diff --git a/erpnext/translations/th.csv b/erpnext/translations/th.csv index 47462b7ff5..8043ecaa12 100644 --- a/erpnext/translations/th.csv +++ b/erpnext/translations/th.csv @@ -1559,9 +1559,9 @@ Maintain same rate throughout purchase cycle,รักษาอัตราเ Maintenance,การบำรุงรักษา Maintenance Date,วันที่การบำรุงรักษา Maintenance Details,รายละเอียดการบำรุงรักษา -Maintenance Schedule,ตารางการบำรุงรักษา -Maintenance Schedule Detail,รายละเอียดตารางการบำรุงรักษา -Maintenance Schedule Item,รายการตารางการบำรุงรักษา +Maintenance Schedule,กำหนดการซ่อมบำรุง +Maintenance Schedule Detail,รายละเอียดกำหนดการซ่อมบำรุง +Maintenance Schedule Item,รายการกำหนดการซ่อมบำรุง Maintenance Schedule is not generated for all the items. Please click on 'Generate Schedule',ตาราง การบำรุงรักษา ที่ไม่ได้ สร้างขึ้นสำหรับ รายการทั้งหมด กรุณา คลิกที่ 'สร้าง ตาราง ' Maintenance Schedule {0} exists against {0},ตาราง การบำรุงรักษา {0} อยู่ กับ {0} Maintenance Schedule {0} must be cancelled before cancelling this Sales Order,ตาราง การบำรุงรักษา {0} ต้อง ถูกยกเลิก ก่อนที่จะ ยกเลิกการ สั่งซื้อการขาย นี้ @@ -1574,7 +1574,7 @@ Maintenance Visit Purpose,วัตถุประสงค์ชมการบ Maintenance Visit {0} must be cancelled before cancelling this Sales Order,การบำรุงรักษา ไปที่ {0} ต้อง ถูกยกเลิก ก่อนที่จะ ยกเลิกการ สั่งซื้อการขาย นี้ Maintenance start date can not be before delivery date for Serial No {0},วันที่เริ่มต้น การบำรุงรักษา ไม่สามารถ ก่อนวัน ส่งสำหรับ อนุกรม ไม่มี {0} Major/Optional Subjects,วิชาเอก / เสริม -Make , +Make ,สร้าง Make Accounting Entry For Every Stock Movement,ทำให้ รายการ บัญชี สำหรับ ทุก การเคลื่อนไหวของ หุ้น Make Bank Voucher,ทำให้บัตรของธนาคาร Make Credit Note,ให้ เครดิต หมายเหตุ @@ -1587,7 +1587,7 @@ Make Invoice,ทำให้ ใบแจ้งหนี้ Make Maint. Schedule,ทำให้ Maint ตารางเวลา Make Maint. Visit,ทำให้ Maint เยือน Make Maintenance Visit,ทำให้ การบำรุงรักษา เยี่ยมชม -Make Packing Slip,ให้ บรรจุ สลิป +Make Packing Slip,สร้าง รายการบรรจุภัณฑ์ Make Payment,ชำระเงิน Make Payment Entry,ทำ รายการ ชำระเงิน Make Purchase Invoice,ให้ ซื้อ ใบแจ้งหนี้ @@ -1628,7 +1628,7 @@ Mass Mailing,จดหมายมวล Master Name,ชื่อปริญญาโท Master Name is mandatory if account type is Warehouse,ชื่อ ปริญญาโท มีผลบังคับใช้ ถ้าชนิด บัญชี คลังสินค้า Master Type,ประเภทหลัก -Masters,โท +Masters,ข้อมูลหลัก Match non-linked Invoices and Payments.,ตรงกับใบแจ้งหนี้ไม่ได้เชื่อมโยงและการชำระเงิน Material Issue,ฉบับวัสดุ Material Receipt,ใบเสร็จรับเงินวัสดุ @@ -2465,7 +2465,7 @@ Row {0}:Start Date must be before End Date,แถว {0}: วันที่ เ Rules for adding shipping costs.,กฎระเบียบ สำหรับการเพิ่ม ค่าใช้จ่ายใน การจัดส่งสินค้า Rules for applying pricing and discount.,กฎระเบียบ สำหรับการใช้ การกำหนดราคาและ ส่วนลด Rules to calculate shipping amount for a sale,กฎระเบียบในการคำนวณปริมาณการขนส่งสินค้าสำหรับการขาย -S.O. No.,S.O. เลขที่ +S.O. No.,เลขที่ใบสั่งขาย SHE Cess on Excise,SHE Cess บนสรรพสามิต SHE Cess on Service Tax,SHE Cess กับภาษีบริการ SHE Cess on TDS,SHE Cess ใน TDS @@ -2550,7 +2550,7 @@ Salutation,ประณม Sample Size,ขนาดของกลุ่มตัวอย่าง Sanctioned Amount,จำนวนตามทำนองคลองธรรม Saturday,วันเสาร์ -Schedule,กำหนด +Schedule,กำหนดการ Schedule Date,กำหนดการ วันที่ Schedule Details,รายละเอียดตาราง Scheduled,กำหนด @@ -2564,7 +2564,7 @@ Score Earned,คะแนนที่ได้รับ Score must be less than or equal to 5,คะแนน ต้องน้อยกว่า หรือ เท่ากับ 5 Scrap %,เศษ% Seasonality for setting budgets.,ฤดูกาลสำหรับงบประมาณการตั้งค่า -Secretary,เลขานุการ +Secretary,เลขา Secured Loans,เงินให้กู้ยืม ที่มีหลักประกัน Securities & Commodity Exchanges,หลักทรัพย์และ การแลกเปลี่ยน สินค้าโภคภัณฑ์ Securities and Deposits,หลักทรัพย์และ เงินฝาก @@ -2603,14 +2603,14 @@ Select your home country and check the timezone and currency.,เลือกป "Selecting ""Yes"" will allow you to create Bill of Material showing raw material and operational costs incurred to manufacture this item.",เลือก "ใช่" จะช่วยให้คุณสามารถสร้างบิลของวัสดุแสดงวัตถุดิบและต้นทุนการดำเนินงานที่เกิดขึ้นในการผลิตรายการนี​​้ "Selecting ""Yes"" will allow you to make a Production Order for this item.",เลือก "ใช่" จะช่วยให้คุณที่จะทำให้การสั่งซื้อการผลิตสำหรับรายการนี​​้ "Selecting ""Yes"" will give a unique identity to each entity of this item which can be viewed in the Serial No master.",เลือก "Yes" จะให้เอกลักษณ์เฉพาะของแต่ละองค์กรเพื่อรายการนี​​้ซึ่งสามารถดูได้ในหลักหมายเลขเครื่อง -Selling,ขาย -Selling Settings,การขายการตั้งค่า +Selling,การขาย +Selling Settings,ตั้งค่าระบบการขาย "Selling must be checked, if Applicable For is selected as {0}",ขายจะต้องตรวจสอบถ้าใช้สำหรับการถูกเลือกเป็น {0} Send,ส่ง Send Autoreply,ส่ง autoreply Send Email,ส่งอีเมล์ -Send From,ส่งเริ่มต้นที่ -Send Notifications To,ส่งการแจ้งเตือนไป +Send From,ส่งจาก +Send Notifications To,แจ้งเตือนไปให้ Send Now,ส่งเดี๋ยวนี้ Send SMS,ส่ง SMS Send To,ส่งให้ diff --git a/erpnext/translations/tr.csv b/erpnext/translations/tr.csv index 0d9fb014e2..67b2c24a6c 100644 --- a/erpnext/translations/tr.csv +++ b/erpnext/translations/tr.csv @@ -38,7 +38,7 @@ A Customer Group exists with same name please change the Customer name or rename A Customer exists with same name,Bir Müşteri aynı adla A Lead with this email id should exist,Bu e-posta kimliği ile bir Kurşun bulunmalıdır A Product or Service,Bir Ürün veya Hizmet -A Supplier exists with same name,A Tedarikçi aynı adla +A Supplier exists with same name,Bu Tedarikçi mevcut A symbol for this currency. For e.g. $,Bu para için bir sembol. Örneğin $ için AMC Expiry Date,AMC Son Kullanma Tarihi Abbr,Kısaltma From 1b2944e87161ef5fd4eb5549119258f3e2c24b46 Mon Sep 17 00:00:00 2001 From: ankitjavalkarwork Date: Wed, 8 Oct 2014 14:24:58 +0530 Subject: [PATCH 08/30] Rearrange To/From, Recurring Type field for better UX --- .../purchase_invoice/purchase_invoice.json | 26 +++++++++---------- .../doctype/sales_invoice/sales_invoice.json | 24 ++++++++--------- .../purchase_order/purchase_order.json | 22 ++++++++-------- .../doctype/sales_order/sales_order.json | 26 +++++++++---------- 4 files changed, 49 insertions(+), 49 deletions(-) diff --git a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json index 153b8d89e4..7e374002f2 100755 --- a/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json +++ b/erpnext/accounts/doctype/purchase_invoice/purchase_invoice.json @@ -780,6 +780,18 @@ "permlevel": 0, "print_hide": 1 }, + { + "allow_on_submit": 1, + "depends_on": "eval:doc.is_recurring==1", + "description": "Select the period when the invoice will be generated automatically", + "fieldname": "recurring_type", + "fieldtype": "Select", + "label": "Recurring Type", + "no_copy": 1, + "options": "Monthly\nQuarterly\nHalf-yearly\nYearly", + "permlevel": 0, + "print_hide": 1 + }, { "allow_on_submit": 1, "depends_on": "eval:doc.is_recurring==1", @@ -800,18 +812,6 @@ "no_copy": 1, "permlevel": 0 }, - { - "allow_on_submit": 1, - "depends_on": "eval:doc.is_recurring==1", - "description": "Select the period when the invoice will be generated automatically", - "fieldname": "recurring_type", - "fieldtype": "Select", - "label": "Recurring Type", - "no_copy": 1, - "options": "Monthly\nQuarterly\nHalf-yearly\nYearly", - "permlevel": 0, - "print_hide": 1 - }, { "allow_on_submit": 1, "depends_on": "eval:doc.is_recurring==1", @@ -878,7 +878,7 @@ "icon": "icon-file-text", "idx": 1, "is_submittable": 1, - "modified": "2014-10-06 12:57:32.064210", + "modified": "2014-10-08 14:23:20.234176", "modified_by": "Administrator", "module": "Accounts", "name": "Purchase Invoice", diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json index 21c96e745d..e9bb996f76 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json @@ -1074,13 +1074,14 @@ { "allow_on_submit": 1, "depends_on": "eval:doc.is_recurring==1", - "description": "End date of current invoice's period", - "fieldname": "to_date", - "fieldtype": "Date", - "label": "To Date", + "description": "Select the period when the invoice will be generated automatically", + "fieldname": "recurring_type", + "fieldtype": "Select", + "label": "Recurring Type", "no_copy": 1, + "options": "\nMonthly\nQuarterly\nHalf-yearly\nYearly", "permlevel": 0, - "print_hide": 0, + "print_hide": 1, "read_only": 0 }, { @@ -1098,14 +1099,13 @@ { "allow_on_submit": 1, "depends_on": "eval:doc.is_recurring==1", - "description": "Select the period when the invoice will be generated automatically", - "fieldname": "recurring_type", - "fieldtype": "Select", - "label": "Recurring Type", + "description": "End date of current invoice's period", + "fieldname": "to_date", + "fieldtype": "Date", + "label": "To Date", "no_copy": 1, - "options": "\nMonthly\nQuarterly\nHalf-yearly\nYearly", "permlevel": 0, - "print_hide": 1, + "print_hide": 0, "read_only": 0 }, { @@ -1192,7 +1192,7 @@ "icon": "icon-file-text", "idx": 1, "is_submittable": 1, - "modified": "2014-10-06 12:54:42.549361", + "modified": "2014-10-08 14:23:05.034326", "modified_by": "Administrator", "module": "Accounts", "name": "Sales Invoice", diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.json b/erpnext/buying/doctype/purchase_order/purchase_order.json index 8380e864c6..f072b65a46 100644 --- a/erpnext/buying/doctype/purchase_order/purchase_order.json +++ b/erpnext/buying/doctype/purchase_order/purchase_order.json @@ -677,6 +677,16 @@ "permlevel": 0, "print_hide": 1 }, + { + "allow_on_submit": 1, + "depends_on": "eval:doc.is_recurring==1", + "fieldname": "recurring_type", + "fieldtype": "Select", + "label": "Recurring Type", + "no_copy": 1, + "options": "Monthly\nQuarterly\nHalf-yearly\nYearly", + "permlevel": 0 + }, { "allow_on_submit": 1, "depends_on": "eval:doc.is_recurring==1", @@ -697,16 +707,6 @@ "no_copy": 1, "permlevel": 0 }, - { - "allow_on_submit": 1, - "depends_on": "eval:doc.is_recurring==1", - "fieldname": "recurring_type", - "fieldtype": "Select", - "label": "Recurring Type", - "no_copy": 1, - "options": "Monthly\nQuarterly\nHalf-yearly\nYearly", - "permlevel": 0 - }, { "allow_on_submit": 1, "depends_on": "eval:doc.is_recurring==1", @@ -772,7 +772,7 @@ "icon": "icon-file-text", "idx": 1, "is_submittable": 1, - "modified": "2014-10-06 12:16:44.453946", + "modified": "2014-10-08 14:23:29.718779", "modified_by": "Administrator", "module": "Buying", "name": "Purchase Order", diff --git a/erpnext/selling/doctype/sales_order/sales_order.json b/erpnext/selling/doctype/sales_order/sales_order.json index 5af9a26ed9..69693a7bed 100644 --- a/erpnext/selling/doctype/sales_order/sales_order.json +++ b/erpnext/selling/doctype/sales_order/sales_order.json @@ -921,6 +921,18 @@ "permlevel": 0, "print_hide": 1 }, + { + "allow_on_submit": 1, + "depends_on": "eval:doc.is_recurring==1", + "description": "Select the period when the invoice will be generated automatically", + "fieldname": "recurring_type", + "fieldtype": "Select", + "label": "Recurring Type", + "no_copy": 1, + "options": "\nMonthly\nQuarterly\nHalf-yearly\nYearly", + "permlevel": 0, + "print_hide": 1 + }, { "allow_on_submit": 1, "depends_on": "eval:doc.is_recurring==1", @@ -941,18 +953,6 @@ "no_copy": 1, "permlevel": 0 }, - { - "allow_on_submit": 1, - "depends_on": "eval:doc.is_recurring==1", - "description": "Select the period when the invoice will be generated automatically", - "fieldname": "recurring_type", - "fieldtype": "Select", - "label": "Recurring Type", - "no_copy": 1, - "options": "\nMonthly\nQuarterly\nHalf-yearly\nYearly", - "permlevel": 0, - "print_hide": 1 - }, { "allow_on_submit": 1, "depends_on": "eval:doc.is_recurring==1", @@ -1020,7 +1020,7 @@ "idx": 1, "is_submittable": 1, "issingle": 0, - "modified": "2014-10-06 12:16:41.256013", + "modified": "2014-10-08 14:22:44.717108", "modified_by": "Administrator", "module": "Selling", "name": "Sales Order", From e96e83d557048a58f5ab261317802aa1deb424be Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 8 Oct 2014 18:06:14 +0530 Subject: [PATCH 09/30] stock reco and repost vouchers --- erpnext/controllers/buying_controller.py | 17 +++++++-- erpnext/controllers/stock_controller.py | 10 ++--- erpnext/public/js/stock_analytics.js | 3 ++ erpnext/public/js/stock_grid_report.js | 38 +++++++++---------- .../stock/doctype/stock_entry/stock_entry.py | 2 +- .../stock_reconciliation.py | 5 --- .../stock/page/stock_balance/stock_balance.js | 3 ++ erpnext/utilities/repost_stock.py | 17 +++++---- 8 files changed, 53 insertions(+), 42 deletions(-) diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py index 69ab661616..3cb6bf7fbb 100644 --- a/erpnext/controllers/buying_controller.py +++ b/erpnext/controllers/buying_controller.py @@ -256,8 +256,6 @@ class BuyingController(StockController): rm.required_qty = required_qty rm.conversion_factor = item.conversion_factor - rm.rate = bom_item.rate - rm.amount = required_qty * flt(bom_item.rate) rm.idx = rm_supplied_idx if self.doctype == "Purchase Receipt": @@ -268,7 +266,20 @@ class BuyingController(StockController): rm_supplied_idx += 1 - raw_materials_cost += required_qty * flt(bom_item.rate) + # get raw materials rate + from erpnext.stock.utils import get_incoming_rate + item_rate = get_incoming_rate({ + "item_code": bom_item.item_code, + "warehouse": self.supplier_warehouse, + "posting_date": self.posting_date, + "posting_time": self.posting_time, + "qty": -1 * required_qty, + "serial_no": rm.serial_no + }) + rm.rate = item_rate + rm.amount = required_qty * flt(item_rate) + + raw_materials_cost += flt(rm.amount) if self.doctype == "Purchase Receipt": item.rm_supp_cost = raw_materials_cost diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py index 8c5bcac407..20eb40c418 100644 --- a/erpnext/controllers/stock_controller.py +++ b/erpnext/controllers/stock_controller.py @@ -30,7 +30,7 @@ class StockController(AccountsController): def get_gl_entries(self, warehouse_account=None, default_expense_account=None, default_cost_center=None, allow_negative_stock=False): - # block_negative_stock(allow_negative_stock) + block_negative_stock(allow_negative_stock) if not warehouse_account: warehouse_account = get_warehouse_account() @@ -51,7 +51,7 @@ class StockController(AccountsController): stock_value_difference = flt(sle.stock_value_difference, 2) if not stock_value_difference: - valuation_rate = get_valuation_rate(sle.item_code, sle.warehouse, sle.posting_date) + valuation_rate = get_valuation_rate(sle.item_code, sle.warehouse) stock_value_difference = flt(sle.actual_qty)*flt(valuation_rate) gl_list.append(self.get_gl_dict({ @@ -301,12 +301,12 @@ def block_negative_stock(allow_negative_stock=False): if cint(frappe.db.get_value("Stock Settings", None, "allow_negative_stock")): frappe.throw(_("Negative stock is not allowed in case of Perpetual Inventory, please disable it from Stock Settings")) -def get_valuation_rate(item_code, warehouse, posting_date): +def get_valuation_rate(item_code, warehouse): last_valuation_rate = frappe.db.sql("""select valuation_rate from `tabStock Ledger Entry` where item_code = %s and warehouse = %s - and ifnull(qty_after_transaction, 0) > 0 and posting_date < %s - order by posting_date desc limit 1""", (item_code, warehouse, posting_date)) + and ifnull(qty_after_transaction, 0) > 0 + order by posting_date desc, posting_time desc, name desc limit 1""", (item_code, warehouse)) valuation_rate = flt(last_valuation_rate[0][0]) if last_valuation_rate else 0 diff --git a/erpnext/public/js/stock_analytics.js b/erpnext/public/js/stock_analytics.js index 84c0386c57..a86d7ade95 100644 --- a/erpnext/public/js/stock_analytics.js +++ b/erpnext/public/js/stock_analytics.js @@ -140,6 +140,9 @@ erpnext.StockAnalytics = erpnext.StockGridReport.extend({ if(sl.voucher_type=="Stock Reconciliation") { var diff = (sl.qty_after_transaction * sl.valuation_rate) - item.closing_qty_value; + wh.fifo_stack.push([sl.qty_after_transaction, sl.valuation_rate, sl.posting_date]); + wh.balance_qty = sl.qty_after_transaction; + wh.balance_value = sl.valuation_rate * sl.qty_after_transaction; } else { var diff = me.get_value_diff(wh, sl, is_fifo); } diff --git a/erpnext/public/js/stock_grid_report.js b/erpnext/public/js/stock_grid_report.js index f58c1ab613..726852f7ce 100644 --- a/erpnext/public/js/stock_grid_report.js +++ b/erpnext/public/js/stock_grid_report.js @@ -9,8 +9,8 @@ erpnext.StockGridReport = frappe.views.TreeGridReport.extend({ }; return this.item_warehouse[item][warehouse]; }, - - get_value_diff: function(wh, sl, is_fifo) { + + get_value_diff: function(wh, sl, is_fifo) { // value if(sl.qty > 0) { // incoming - rate is given @@ -30,9 +30,9 @@ erpnext.StockGridReport = frappe.views.TreeGridReport.extend({ } else { var value_diff = (rate * add_qty); } - + if(add_qty) - wh.fifo_stack.push([add_qty, sl.incoming_rate, sl.posting_date]); + wh.fifo_stack.push([add_qty, sl.incoming_rate, sl.posting_date]); } else { // called everytime for maintaining fifo stack var fifo_value_diff = this.get_fifo_value_diff(wh, sl); @@ -44,13 +44,13 @@ erpnext.StockGridReport = frappe.views.TreeGridReport.extend({ var value_diff = fifo_value_diff; } else { // average rate for weighted average - var rate = (wh.balance_qty.toFixed(2) == 0.00 ? 0 : + var rate = (wh.balance_qty.toFixed(2) == 0.00 ? 0 : flt(wh.balance_value) / flt(wh.balance_qty)); - + // no change in value if negative qty if((wh.balance_qty + sl.qty).toFixed(2) >= 0.00) var value_diff = (rate * sl.qty); - else + else var value_diff = -wh.balance_value; } } @@ -58,7 +58,6 @@ erpnext.StockGridReport = frappe.views.TreeGridReport.extend({ // update balance (only needed in case of valuation) wh.balance_qty += sl.qty; wh.balance_value += value_diff; - return value_diff; }, get_fifo_value_diff: function(wh, sl) { @@ -66,19 +65,19 @@ erpnext.StockGridReport = frappe.views.TreeGridReport.extend({ var fifo_stack = (wh.fifo_stack || []).reverse(); var fifo_value_diff = 0.0; var qty = -sl.qty; - + for(var i=0, j=fifo_stack.length; i= qty) { batch[0] = batch[0] - qty; fifo_value_diff += (qty * batch[1]); - + qty = 0.0; if(batch[0]) { // batch still has qty put it back fifo_stack.push(batch); } - + // all qty found break; } else { @@ -87,35 +86,34 @@ erpnext.StockGridReport = frappe.views.TreeGridReport.extend({ qty = qty - batch[0]; } } - // reset the updated stack wh.fifo_stack = fifo_stack.reverse(); return -fifo_value_diff; }, - + get_serialized_value_diff: function(sl) { var me = this; - + var value_diff = 0.0; - + $.each(sl.serial_no.trim().split("\n"), function(i, sr) { if(sr) { value_diff += flt(me.serialized_buying_rates[sr.trim().toLowerCase()]); } }); - + return value_diff; }, - + get_serialized_buying_rates: function() { var serialized_buying_rates = {}; - + if (frappe.report_dump.data["Serial No"]) { $.each(frappe.report_dump.data["Serial No"], function(i, sn) { serialized_buying_rates[sn.name.toLowerCase()] = flt(sn.incoming_rate); }); } - + return serialized_buying_rates; }, -}); \ No newline at end of file +}); diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.py b/erpnext/stock/doctype/stock_entry/stock_entry.py index 4cc96bfec7..4f3480c0bb 100644 --- a/erpnext/stock/doctype/stock_entry/stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/stock_entry.py @@ -527,7 +527,7 @@ class StockEntry(StockController): } }, bom_no=self.bom_no) - self.e() + self.get_stock_and_rate() def get_bom_raw_materials(self, qty): from erpnext.manufacturing.doctype.bom.bom import get_bom_items_as_dict diff --git a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py index 6c3c395d88..b67090d137 100644 --- a/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py +++ b/erpnext/stock/doctype/stock_reconciliation/stock_reconciliation.py @@ -16,8 +16,6 @@ class StockReconciliation(StockController): self.head_row = ["Item Code", "Warehouse", "Quantity", "Valuation Rate"] def validate(self): - self.entries = [] - self.validate_data() self.validate_expense_account() @@ -179,9 +177,6 @@ class StockReconciliation(StockController): }) self.make_sl_entries([args]) - # append to entries - self.entries.append(args) - def delete_and_repost_sle(self): """ Delete Stock Ledger Entries related to this voucher and repost future Stock Ledger Entries""" diff --git a/erpnext/stock/page/stock_balance/stock_balance.js b/erpnext/stock/page/stock_balance/stock_balance.js index 7405227116..ecd1108bc6 100644 --- a/erpnext/stock/page/stock_balance/stock_balance.js +++ b/erpnext/stock/page/stock_balance/stock_balance.js @@ -107,6 +107,9 @@ erpnext.StockBalance = erpnext.StockAnalytics.extend({ if(sl.voucher_type=="Stock Reconciliation") { var qty_diff = sl.qty_after_transaction - (item.temp_closing_qty || 0.0); var value_diff = (sl.valuation_rate * sl.qty_after_transaction) - (item.temp_closing_value || 0.0); + wh.fifo_stack.push([sl.qty_after_transaction, sl.valuation_rate, sl.posting_date]); + wh.balance_qty = sl.qty_after_transaction; + wh.balance_value = sl.valuation_rate * sl.qty_after_transaction; } else { var qty_diff = sl.qty; var value_diff = me.get_value_diff(wh, sl, is_fifo); diff --git a/erpnext/utilities/repost_stock.py b/erpnext/utilities/repost_stock.py index 9c3bf1d0e9..51b472e155 100644 --- a/erpnext/utilities/repost_stock.py +++ b/erpnext/utilities/repost_stock.py @@ -214,9 +214,8 @@ def repost_all_stock_vouchers(): from `tabStock Ledger Entry` order by posting_date, posting_time, name""") rejected = [] - i = 0 + # vouchers = [["Purchase Receipt", "GRN00062"]] for voucher_type, voucher_no in vouchers: - i += 1 print voucher_type, voucher_no try: for dt in ["Stock Ledger Entry", "GL Entry"]: @@ -226,13 +225,15 @@ def repost_all_stock_vouchers(): doc = frappe.get_doc(voucher_type, voucher_no) if voucher_type=="Stock Entry" and doc.purpose in ["Manufacture", "Repack"]: doc.get_stock_and_rate(force=1) + # elif voucher_type=="Purchase Receipt": + # doc.create_raw_materials_supplied("pr_raw_material_details") + doc.update_stock_ledger() - doc.make_gl_entries() - if i%100 == 0: - frappe.db.commit() - except: + doc.make_gl_entries(repost_future_gle=False, allow_negative_stock=True) + frappe.db.commit() + except Exception, e: + print frappe.get_traceback() rejected.append([voucher_type, voucher_no]) - pass + frappe.db.rollback() print rejected - From fce2881de66584d870a96fbe6ba36f5550316a46 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 8 Oct 2014 18:38:27 +0530 Subject: [PATCH 10/30] minor fix --- erpnext/controllers/buying_controller.py | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py index 3cb6bf7fbb..3d25c213ed 100644 --- a/erpnext/controllers/buying_controller.py +++ b/erpnext/controllers/buying_controller.py @@ -267,18 +267,20 @@ class BuyingController(StockController): rm_supplied_idx += 1 # get raw materials rate - from erpnext.stock.utils import get_incoming_rate - item_rate = get_incoming_rate({ - "item_code": bom_item.item_code, - "warehouse": self.supplier_warehouse, - "posting_date": self.posting_date, - "posting_time": self.posting_time, - "qty": -1 * required_qty, - "serial_no": rm.serial_no - }) - rm.rate = item_rate - rm.amount = required_qty * flt(item_rate) + if self.doctype == "Purchase Receipt": + from erpnext.stock.utils import get_incoming_rate + rm.rate = get_incoming_rate({ + "item_code": bom_item.item_code, + "warehouse": self.supplier_warehouse, + "posting_date": self.posting_date, + "posting_time": self.posting_time, + "qty": -1 * required_qty, + "serial_no": rm.serial_no + }) + else: + rm.rate = bom_item.rate + rm.amount = required_qty * flt(rm.rate) raw_materials_cost += flt(rm.amount) if self.doctype == "Purchase Receipt": From e435592d64dbd4f75a7cc9d1ac8bb17ab4177a2b Mon Sep 17 00:00:00 2001 From: Pratik Vyas Date: Thu, 9 Oct 2014 11:22:12 +0530 Subject: [PATCH 11/30] [minor] Fix default website style patch (reload doc) --- erpnext/patches/v4_2/default_website_style.py | 1 + 1 file changed, 1 insertion(+) diff --git a/erpnext/patches/v4_2/default_website_style.py b/erpnext/patches/v4_2/default_website_style.py index 5fbbd48c5b..6f375b9ab5 100644 --- a/erpnext/patches/v4_2/default_website_style.py +++ b/erpnext/patches/v4_2/default_website_style.py @@ -2,6 +2,7 @@ import frappe from frappe.templates.pages.style_settings import default_properties def execute(): + frappe.reload_doc('website', 'doctype', 'style_settings') style_settings = frappe.get_doc("Style Settings", "Style Settings") if not style_settings.apply_style: style_settings.update(default_properties) From 4d742161472ac5228d100c7aab4994c8fc40fdaa Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 9 Oct 2014 19:25:03 +0530 Subject: [PATCH 12/30] Maintain negative stock balance if balance qty is negative --- erpnext/controllers/buying_controller.py | 3 +- erpnext/controllers/stock_controller.py | 8 ++- .../doctype/stock_entry/test_stock_entry.py | 66 +++++++++++++++--- .../test_stock_reconciliation.py | 12 ++-- .../stock/page/stock_balance/stock_balance.js | 1 + erpnext/stock/stock_ledger.py | 68 +++++++++++-------- erpnext/stock/utils.py | 3 +- erpnext/utilities/repost_stock.py | 7 +- 8 files changed, 118 insertions(+), 50 deletions(-) diff --git a/erpnext/controllers/buying_controller.py b/erpnext/controllers/buying_controller.py index 3d25c213ed..66d5792e2d 100644 --- a/erpnext/controllers/buying_controller.py +++ b/erpnext/controllers/buying_controller.py @@ -269,7 +269,7 @@ class BuyingController(StockController): # get raw materials rate if self.doctype == "Purchase Receipt": from erpnext.stock.utils import get_incoming_rate - rm.rate = get_incoming_rate({ + item_rate = get_incoming_rate({ "item_code": bom_item.item_code, "warehouse": self.supplier_warehouse, "posting_date": self.posting_date, @@ -277,6 +277,7 @@ class BuyingController(StockController): "qty": -1 * required_qty, "serial_no": rm.serial_no }) + rm.rate = item_rate or bom_item.rate else: rm.rate = bom_item.rate diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py index 20eb40c418..ad553d8c83 100644 --- a/erpnext/controllers/stock_controller.py +++ b/erpnext/controllers/stock_controller.py @@ -305,9 +305,15 @@ def get_valuation_rate(item_code, warehouse): last_valuation_rate = frappe.db.sql("""select valuation_rate from `tabStock Ledger Entry` where item_code = %s and warehouse = %s - and ifnull(qty_after_transaction, 0) > 0 + and ifnull(valuation_rate, 0) > 0 order by posting_date desc, posting_time desc, name desc limit 1""", (item_code, warehouse)) + if not last_valuation_rate: + last_valuation_rate = frappe.db.sql("""select valuation_rate + from `tabStock Ledger Entry` + where item_code = %s and ifnull(valuation_rate, 0) > 0 + order by posting_date desc, posting_time desc, name desc limit 1""", item_code) + valuation_rate = flt(last_valuation_rate[0][0]) if last_valuation_rate else 0 if not valuation_rate: diff --git a/erpnext/stock/doctype/stock_entry/test_stock_entry.py b/erpnext/stock/doctype/stock_entry/test_stock_entry.py index 038606cc1d..7654cbcccd 100644 --- a/erpnext/stock/doctype/stock_entry/test_stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/test_stock_entry.py @@ -9,14 +9,64 @@ from erpnext.stock.doctype.serial_no.serial_no import * from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import set_perpetual_inventory from erpnext.stock.doctype.stock_ledger_entry.stock_ledger_entry import StockFreezeError +def get_sle(**args): + condition, values = "", [] + for key, value in args.iteritems(): + condition += " and " if condition else " where " + condition += "`{0}`=%s".format(key) + values.append(value) + + return frappe.db.sql("""select * from `tabStock Ledger Entry` %s + order by timestamp(posting_date, posting_time) desc, name desc limit 1"""% condition, + values, as_dict=1) + +def make_zero(item_code, warehouse): + sle = get_sle(item_code = item_code, warehouse = warehouse) + qty = sle[0].qty_after_transaction if sle else 0 + if qty < 0: + make_stock_entry(item_code, None, warehouse, abs(qty), incoming_rate=10) + elif qty > 0: + make_stock_entry(item_code, warehouse, None, qty, incoming_rate=10) + class TestStockEntry(unittest.TestCase): - def tearDown(self): frappe.set_user("Administrator") set_perpetual_inventory(0) if hasattr(self, "old_default_company"): frappe.db.set_default("company", self.old_default_company) + def test_fifo(self): + frappe.db.set_default("allow_negative_stock", 1) + item_code = "_Test Item 2" + warehouse = "_Test Warehouse - _TC" + make_zero(item_code, warehouse) + + make_stock_entry(item_code, None, warehouse, 1, incoming_rate=10) + sle = get_sle(item_code = item_code, warehouse = warehouse)[0] + + self.assertEqual([[1, 10]], eval(sle.stock_queue)) + + # negative qty + make_zero(item_code, warehouse) + make_stock_entry(item_code, warehouse, None, 1, incoming_rate=10) + sle = get_sle(item_code = item_code, warehouse = warehouse)[0] + + self.assertEqual([[-1, 10]], eval(sle.stock_queue)) + + # further negative + make_stock_entry(item_code, warehouse, None, 1) + sle = get_sle(item_code = item_code, warehouse = warehouse)[0] + + self.assertEqual([[-2, 10]], eval(sle.stock_queue)) + + # move stock to positive + make_stock_entry(item_code, None, warehouse, 3, incoming_rate=10) + sle = get_sle(item_code = item_code, warehouse = warehouse)[0] + + self.assertEqual([[1, 10]], eval(sle.stock_queue)) + + frappe.db.set_default("allow_negative_stock", 0) + def test_auto_material_request(self): frappe.db.sql("""delete from `tabMaterial Request Item`""") frappe.db.sql("""delete from `tabMaterial Request`""") @@ -821,19 +871,19 @@ class TestStockEntry(unittest.TestCase): se = frappe.copy_doc(test_records[0]).insert() self.assertRaises (StockFreezeError, se.submit) frappe.db.set_value("Stock Settings", None, "stock_frozen_upto_days", 0) - + def test_production_order(self): - bom_no = frappe.db.get_value("BOM", {"item": "_Test FG Item 2", + bom_no = frappe.db.get_value("BOM", {"item": "_Test FG Item 2", "is_default": 1, "docstatus": 1}) - + production_order = frappe.new_doc("Production Order") production_order.update({ "company": "_Test Company", - "fg_warehouse": "_Test Warehouse 1 - _TC", - "production_item": "_Test FG Item 2", + "fg_warehouse": "_Test Warehouse 1 - _TC", + "production_item": "_Test FG Item 2", "bom_no": bom_no, "qty": 1.0, - "stock_uom": "Nos", + "stock_uom": "Nos", "wip_warehouse": "_Test Warehouse - _TC" }) production_order.insert() @@ -889,5 +939,3 @@ def make_stock_entry(item, source, target, qty, incoming_rate=None): s.insert() s.submit() return s - -test_records = frappe.get_test_records('Stock Entry') diff --git a/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py index 183e3e51d2..91775d9087 100644 --- a/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py +++ b/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py @@ -28,7 +28,7 @@ class TestStockReconciliation(unittest.TestCase): [20, "", "2012-12-26", "12:05", 16000, 15, 18000], [10, 2000, "2012-12-26", "12:10", 20000, 5, 6000], [1, 1000, "2012-12-01", "00:00", 1000, 11, 13200], - [0, "", "2012-12-26", "12:10", 0, -5, 0] + [0, "", "2012-12-26", "12:10", 0, -5, -6000] ] for d in input_data: @@ -63,16 +63,16 @@ class TestStockReconciliation(unittest.TestCase): input_data = [ [50, 1000, "2012-12-26", "12:00", 50000, 45, 48000], [5, 1000, "2012-12-26", "12:00", 5000, 0, 0], - [15, 1000, "2012-12-26", "12:00", 15000, 10, 12000], + [15, 1000, "2012-12-26", "12:00", 15000, 10, 11500], [25, 900, "2012-12-26", "12:00", 22500, 20, 22500], [20, 500, "2012-12-26", "12:00", 10000, 15, 18000], [50, 1000, "2013-01-01", "12:00", 50000, 65, 68000], [5, 1000, "2013-01-01", "12:00", 5000, 20, 23000], - ["", 1000, "2012-12-26", "12:05", 15000, 10, 12000], + ["", 1000, "2012-12-26", "12:05", 15000, 10, 11500], [20, "", "2012-12-26", "12:05", 18000, 15, 18000], - [10, 2000, "2012-12-26", "12:10", 20000, 5, 6000], - [1, 1000, "2012-12-01", "00:00", 1000, 11, 13200], - [0, "", "2012-12-26", "12:10", 0, -5, 0] + [10, 2000, "2012-12-26", "12:10", 20000, 5, 7600], + [1, 1000, "2012-12-01", "00:00", 1000, 11, 12512.73], + [0, "", "2012-12-26", "12:10", 0, -5, -5142.86] ] diff --git a/erpnext/stock/page/stock_balance/stock_balance.js b/erpnext/stock/page/stock_balance/stock_balance.js index ecd1108bc6..198d317824 100644 --- a/erpnext/stock/page/stock_balance/stock_balance.js +++ b/erpnext/stock/page/stock_balance/stock_balance.js @@ -126,6 +126,7 @@ erpnext.StockBalance = erpnext.StockAnalytics.extend({ && this.stock_entry_map[sl.voucher_no].purpose=="Material Transfer"; if(!ignore_inflow_outflow) { + if(qty_diff < 0) { item.outflow_qty += Math.abs(qty_diff); } else { diff --git a/erpnext/stock/stock_ledger.py b/erpnext/stock/stock_ledger.py index e8a84c2ab1..f1ba94efab 100644 --- a/erpnext/stock/stock_ledger.py +++ b/erpnext/stock/stock_ledger.py @@ -106,18 +106,19 @@ def update_entries_after(args, verbose=1): stock_queue = [[qty_after_transaction, valuation_rate]] else: if valuation_method == "Moving Average": - valuation_rate = get_moving_average_values(qty_after_transaction, sle, valuation_rate) + if flt(sle.actual_qty) > 0: + valuation_rate = get_moving_average_values(qty_after_transaction, sle, valuation_rate) else: valuation_rate = get_fifo_values(qty_after_transaction, sle, stock_queue) + qty_after_transaction += flt(sle.actual_qty) # get stock value if sle.serial_no: stock_value = qty_after_transaction * valuation_rate elif valuation_method == "Moving Average": - stock_value = (qty_after_transaction > 0) and \ - (qty_after_transaction * valuation_rate) or 0 + stock_value = qty_after_transaction * valuation_rate else: stock_value = sum((flt(batch[0]) * flt(batch[1]) for batch in stock_queue)) @@ -256,64 +257,73 @@ def get_moving_average_values(qty_after_transaction, sle, valuation_rate): actual_qty = flt(sle.actual_qty) if not incoming_rate: - # In case of delivery/stock issue in_rate = 0 or wrong incoming rate + # If wrong incoming rate incoming_rate = valuation_rate - elif qty_after_transaction < 0: + elif qty_after_transaction < 0 and not valuation_rate: # if negative stock, take current valuation rate as incoming rate valuation_rate = incoming_rate - new_stock_qty = qty_after_transaction + actual_qty - new_stock_value = qty_after_transaction * valuation_rate + actual_qty * incoming_rate + new_stock_qty = abs(qty_after_transaction) + actual_qty + new_stock_value = (abs(qty_after_transaction) * valuation_rate) + (actual_qty * incoming_rate) - if new_stock_qty > 0 and new_stock_value > 0: + if new_stock_qty: valuation_rate = new_stock_value / flt(new_stock_qty) - elif new_stock_qty <= 0: - valuation_rate = 0.0 - # NOTE: val_rate is same as previous entry if new stock value is negative - - return valuation_rate + return abs(valuation_rate) def get_fifo_values(qty_after_transaction, sle, stock_queue): incoming_rate = flt(sle.incoming_rate) actual_qty = flt(sle.actual_qty) - if not stock_queue: - stock_queue.append([0, 0]) + + intialize_stock_queue(stock_queue, sle.item_code, sle.warehouse) if actual_qty > 0: if stock_queue[-1][0] > 0: stock_queue.append([actual_qty, incoming_rate]) else: qty = stock_queue[-1][0] + actual_qty - stock_queue[-1] = [qty, qty > 0 and incoming_rate or 0] + if qty == 0: + stock_queue.pop(-1) + else: + stock_queue[-1] = [qty, incoming_rate] else: - incoming_cost = 0 qty_to_pop = abs(actual_qty) while qty_to_pop: - if not stock_queue: - stock_queue.append([0, 0]) + intialize_stock_queue(stock_queue, sle.item_code, sle.warehouse) batch = stock_queue[0] - if 0 < batch[0] <= qty_to_pop: - # if batch qty > 0 - # not enough or exactly same qty in current batch, clear batch - incoming_cost += flt(batch[0]) * flt(batch[1]) - qty_to_pop -= batch[0] + # print qty_to_pop, batch + + if qty_to_pop >= batch[0]: + # consume current batch + qty_to_pop = qty_to_pop - batch[0] stock_queue.pop(0) + if not stock_queue and qty_to_pop: + # stock finished, qty still remains to be withdrawn + # negative stock, keep in as a negative batch + stock_queue.append([-qty_to_pop, batch[1]]) + break + else: - # all from current batch - incoming_cost += flt(qty_to_pop) * flt(batch[1]) - batch[0] -= qty_to_pop + # qty found in current batch + # consume it and exit + batch[0] = batch[0] - qty_to_pop qty_to_pop = 0 stock_value = sum((flt(batch[0]) * flt(batch[1]) for batch in stock_queue)) stock_qty = sum((flt(batch[0]) for batch in stock_queue)) - valuation_rate = stock_qty and (stock_value / flt(stock_qty)) or 0 + valuation_rate = (stock_value / flt(stock_qty)) if stock_qty else 0 - return valuation_rate + return abs(valuation_rate) + +def intialize_stock_queue(stock_queue, item_code, warehouse): + if not stock_queue: + from erpnext.controllers.stock_controller import get_valuation_rate + estimated_val_rate = get_valuation_rate(item_code, warehouse) + stock_queue.append([0, estimated_val_rate]) def _raise_exceptions(args, verbose=1): deficiency = min(e["diff"] for e in _exceptions) diff --git a/erpnext/stock/utils.py b/erpnext/stock/utils.py index 7264f360b9..b444e84193 100644 --- a/erpnext/stock/utils.py +++ b/erpnext/stock/utils.py @@ -5,7 +5,6 @@ import frappe from frappe import _ import json from frappe.utils import flt, cstr, nowdate, add_days, cint -from frappe.defaults import get_global_default from frappe.utils.email_lib import sendmail from erpnext.accounts.utils import get_fiscal_year, FiscalYearError @@ -94,7 +93,7 @@ def get_valuation_method(item_code): """get valuation method from item or default""" val_method = frappe.db.get_value('Item', item_code, 'valuation_method') if not val_method: - val_method = get_global_default('valuation_method') or "FIFO" + val_method = frappe.db.get_value("Stock Settings", None, "valuation_method") or "FIFO" return val_method def get_fifo_rate(previous_stock_queue, qty): diff --git a/erpnext/utilities/repost_stock.py b/erpnext/utilities/repost_stock.py index 51b472e155..b5eec231d7 100644 --- a/erpnext/utilities/repost_stock.py +++ b/erpnext/utilities/repost_stock.py @@ -213,10 +213,13 @@ def repost_all_stock_vouchers(): vouchers = frappe.db.sql("""select distinct voucher_type, voucher_no from `tabStock Ledger Entry` order by posting_date, posting_time, name""") + print len(vouchers) rejected = [] - # vouchers = [["Purchase Receipt", "GRN00062"]] + # vouchers = [["Delivery Note", "DN00060"]] + i = 0 for voucher_type, voucher_no in vouchers: - print voucher_type, voucher_no + i+=1 + print i try: for dt in ["Stock Ledger Entry", "GL Entry"]: frappe.db.sql("""delete from `tab%s` where voucher_type=%s and voucher_no=%s"""% From ff231b5e62202384986ae209c5e190644a8bc2a6 Mon Sep 17 00:00:00 2001 From: ankitjavalkarwork Date: Fri, 10 Oct 2014 13:13:39 +0530 Subject: [PATCH 13/30] Allow advance JV payments in Accounts Receivable/Payable --- erpnext/accounts/report/accounts_payable/accounts_payable.py | 3 ++- .../accounts/report/accounts_receivable/accounts_receivable.py | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/erpnext/accounts/report/accounts_payable/accounts_payable.py b/erpnext/accounts/report/accounts_payable/accounts_payable.py index 3ae741e772..5ce2c562a3 100644 --- a/erpnext/accounts/report/accounts_payable/accounts_payable.py +++ b/erpnext/accounts/report/accounts_payable/accounts_payable.py @@ -30,7 +30,8 @@ def execute(filters=None): data = [] for gle in entries: if cstr(gle.against_voucher) == gle.voucher_no or not gle.against_voucher \ - or [gle.against_voucher_type, gle.against_voucher] in entries_after_report_date: + or [gle.against_voucher_type, gle.against_voucher] in entries_after_report_date \ + or (gle.against_voucher_type == "Purchase Order"): voucher_details = voucher_detail_map.get(gle.voucher_type, {}).get(gle.voucher_no, {}) invoiced_amount = gle.credit > 0 and gle.credit or 0 diff --git a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py index 3a0fb31dea..3dc81d1341 100644 --- a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py +++ b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py @@ -79,6 +79,9 @@ class AccountsReceivableReport(object): return ( # advance (not gle.against_voucher) or + + # against sales order + (gle.against_voucher_type == "Sales Order") or # sales invoice (gle.against_voucher==gle.voucher_no and gle.debit > 0) or From 6d83454237d77fe9c484fa6f1e03dfad1af5cdee Mon Sep 17 00:00:00 2001 From: ankitjavalkarwork Date: Fri, 10 Oct 2014 13:30:10 +0530 Subject: [PATCH 14/30] Disallow Stopped Orders in Against Voucher table --- erpnext/accounts/doctype/payment_tool/payment_tool.py | 1 + 1 file changed, 1 insertion(+) diff --git a/erpnext/accounts/doctype/payment_tool/payment_tool.py b/erpnext/accounts/doctype/payment_tool/payment_tool.py index d8d6df3da2..578a3168ea 100644 --- a/erpnext/accounts/doctype/payment_tool/payment_tool.py +++ b/erpnext/accounts/doctype/payment_tool/payment_tool.py @@ -91,6 +91,7 @@ def get_orders_to_be_billed(party_type, party_name): where %s = %s and docstatus = 1 + and ifnull(status, "") != "Stopped" and ifnull(grand_total, 0) > ifnull(advance_paid, 0) and ifnull(per_billed, 0) < 100.0 """ % (voucher_type, 'customer' if party_type == "Customer" else 'supplier', '%s'), From 9a4b173b88cf73868131640777ba27a824d2746b Mon Sep 17 00:00:00 2001 From: ankitjavalkarwork Date: Fri, 10 Oct 2014 16:28:41 +0530 Subject: [PATCH 15/30] Add validation for stopped orders, advance payment in journal voucher --- .../doctype/journal_voucher/journal_voucher.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/erpnext/accounts/doctype/journal_voucher/journal_voucher.py b/erpnext/accounts/doctype/journal_voucher/journal_voucher.py index 7bf6fcc54e..719a7057cc 100644 --- a/erpnext/accounts/doctype/journal_voucher/journal_voucher.py +++ b/erpnext/accounts/doctype/journal_voucher/journal_voucher.py @@ -76,13 +76,14 @@ class JournalVoucher(AccountsController): def validate_entries_for_advance(self): for d in self.get('entries'): - if not d.is_advance and not d.against_voucher and \ - not d.against_invoice and not d.against_jv: + if not (d.against_voucher and d.against_invoice and d.against_jv) and d.is_advance in ["", "No"]: master_type = frappe.db.get_value("Account", d.account, "master_type") if (master_type == 'Customer' and flt(d.credit) > 0) or \ (master_type == 'Supplier' and flt(d.debit) > 0): msgprint(_("Row {0}: Please check 'Is Advance' against Account {1} if this \ is an advance entry.").format(d.idx, d.account)) + if d.against_sales_order or d.against_purchase_order: + raise frappe.ValidationError def validate_against_jv(self): for d in self.get('entries'): @@ -177,7 +178,7 @@ class JournalVoucher(AccountsController): def validate_against_order_fields(self, doctype, payment_against_voucher): for voucher_no, payment_list in payment_against_voucher.items(): voucher_properties = frappe.db.get_value(doctype, voucher_no, - ["docstatus", "per_billed", "advance_paid", "grand_total"]) + ["docstatus", "per_billed", "status", "advance_paid", "grand_total"]) if voucher_properties[0] != 1: frappe.throw(_("{0} {1} is not submitted").format(doctype, voucher_no)) @@ -185,7 +186,10 @@ class JournalVoucher(AccountsController): if flt(voucher_properties[1]) >= 100: frappe.throw(_("{0} {1} is fully billed").format(doctype, voucher_no)) - if flt(voucher_properties[3]) < flt(voucher_properties[2]) + flt(sum(payment_list)): + if cstr(voucher_properties[2]) == "Stopped": + frappe.throw(_("{0} {1} is stopped").format(doctype, voucher_no)) + + if flt(voucher_properties[4]) < flt(voucher_properties[3]) + flt(sum(payment_list)): frappe.throw(_("Advance paid against {0} {1} cannot be greater \ than Grand Total {2}").format(doctype, voucher_no, voucher_properties[3])) From 0cf4cc283c7722c516806b573dca9accf511c861 Mon Sep 17 00:00:00 2001 From: ankitjavalkarwork Date: Fri, 10 Oct 2014 16:55:03 +0530 Subject: [PATCH 16/30] Add Shipping Addr to Sales Invoice --- .../doctype/sales_invoice/sales_invoice.json | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json index e9bb996f76..3dcf136d45 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json @@ -168,6 +168,27 @@ "reqd": 1, "search_index": 0 }, + { + "fieldname": "shipping_address_name", + "fieldtype": "Link", + "hidden": 1, + "in_filter": 1, + "label": "Shipping Address Name", + "options": "Address", + "permlevel": 0, + "precision": "", + "print_hide": 1 + }, + { + "fieldname": "shipping_address", + "fieldtype": "Small Text", + "hidden": 1, + "label": "Shipping Address", + "permlevel": 0, + "precision": "", + "print_hide": 1, + "read_only": 1 + }, { "fieldname": "currency_section", "fieldtype": "Section Break", @@ -1192,7 +1213,7 @@ "icon": "icon-file-text", "idx": 1, "is_submittable": 1, - "modified": "2014-10-08 14:23:05.034326", + "modified": "2014-10-10 16:54:22.284284", "modified_by": "Administrator", "module": "Accounts", "name": "Sales Invoice", From 7820b171d31b3cf409bf60ce2f77703655926215 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 10 Oct 2014 18:02:23 +0530 Subject: [PATCH 17/30] Stock balance grid report deprecated and moved to server side --- erpnext/patches.txt | 3 +- .../__init__.py | 0 .../stock_balance.js} | 8 ++--- .../stock_balance.json} | 11 +++---- .../stock_balance.py} | 30 +++++++++++-------- 5 files changed, 30 insertions(+), 22 deletions(-) rename erpnext/stock/report/{warehouse_wise_stock_balance => stock_balance}/__init__.py (100%) rename erpnext/stock/report/{warehouse_wise_stock_balance/warehouse_wise_stock_balance.js => stock_balance/stock_balance.js} (75%) rename erpnext/stock/report/{warehouse_wise_stock_balance/warehouse_wise_stock_balance.json => stock_balance/stock_balance.json} (57%) rename erpnext/stock/report/{warehouse_wise_stock_balance/warehouse_wise_stock_balance.py => stock_balance/stock_balance.py} (80%) diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 29049f7def..bd2d436453 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -81,4 +81,5 @@ erpnext.patches.v4_2.default_website_style erpnext.patches.v4_2.set_company_country erpnext.patches.v4_2.update_sales_order_invoice_field_name erpnext.patches.v4_2.cost_of_production_cycle -erpnext.patches.v4_2.seprate_manufacture_and_repack \ No newline at end of file +erpnext.patches.v4_2.seprate_manufacture_and_repack +execute:frappe.delete_doc("Report", "Warehouse-Wise Stock Balance") diff --git a/erpnext/stock/report/warehouse_wise_stock_balance/__init__.py b/erpnext/stock/report/stock_balance/__init__.py similarity index 100% rename from erpnext/stock/report/warehouse_wise_stock_balance/__init__.py rename to erpnext/stock/report/stock_balance/__init__.py diff --git a/erpnext/stock/report/warehouse_wise_stock_balance/warehouse_wise_stock_balance.js b/erpnext/stock/report/stock_balance/stock_balance.js similarity index 75% rename from erpnext/stock/report/warehouse_wise_stock_balance/warehouse_wise_stock_balance.js rename to erpnext/stock/report/stock_balance/stock_balance.js index 2543fa4667..c0aed51845 100644 --- a/erpnext/stock/report/warehouse_wise_stock_balance/warehouse_wise_stock_balance.js +++ b/erpnext/stock/report/stock_balance/stock_balance.js @@ -1,7 +1,7 @@ -// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors -// License: GNU General Public License v3. See license.txt +// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors and contributors +// For license information, please see license.txt -frappe.query_reports["Warehouse-Wise Stock Balance"] = { +frappe.query_reports["Stock Balance"] = { "filters": [ { "fieldname":"from_date", @@ -18,4 +18,4 @@ frappe.query_reports["Warehouse-Wise Stock Balance"] = { "default": frappe.datetime.get_today() } ] -} \ No newline at end of file +} diff --git a/erpnext/stock/report/warehouse_wise_stock_balance/warehouse_wise_stock_balance.json b/erpnext/stock/report/stock_balance/stock_balance.json similarity index 57% rename from erpnext/stock/report/warehouse_wise_stock_balance/warehouse_wise_stock_balance.json rename to erpnext/stock/report/stock_balance/stock_balance.json index f911956111..ab331dc3c2 100644 --- a/erpnext/stock/report/warehouse_wise_stock_balance/warehouse_wise_stock_balance.json +++ b/erpnext/stock/report/stock_balance/stock_balance.json @@ -1,16 +1,17 @@ { + "add_total_row": 0, "apply_user_permissions": 1, - "creation": "2013-06-05 11:00:31", + "creation": "2014-10-10 17:58:11.577901", + "disabled": 0, "docstatus": 0, "doctype": "Report", - "idx": 1, "is_standard": "Yes", - "modified": "2014-06-03 07:18:17.384923", + "modified": "2014-10-10 17:58:11.577901", "modified_by": "Administrator", "module": "Stock", - "name": "Warehouse-Wise Stock Balance", + "name": "Stock Balance", "owner": "Administrator", "ref_doctype": "Stock Ledger Entry", - "report_name": "Warehouse-Wise Stock Balance", + "report_name": "Stock Balance", "report_type": "Script Report" } \ No newline at end of file diff --git a/erpnext/stock/report/warehouse_wise_stock_balance/warehouse_wise_stock_balance.py b/erpnext/stock/report/stock_balance/stock_balance.py similarity index 80% rename from erpnext/stock/report/warehouse_wise_stock_balance/warehouse_wise_stock_balance.py rename to erpnext/stock/report/stock_balance/stock_balance.py index dc552cb773..95de739e0f 100644 --- a/erpnext/stock/report/warehouse_wise_stock_balance/warehouse_wise_stock_balance.py +++ b/erpnext/stock/report/stock_balance/stock_balance.py @@ -59,9 +59,9 @@ def get_conditions(filters): def get_stock_ledger_entries(filters): conditions = get_conditions(filters) return frappe.db.sql("""select item_code, warehouse, posting_date, - actual_qty, valuation_rate, stock_uom, company + actual_qty, valuation_rate, stock_uom, company, voucher_type, qty_after_transaction from `tabStock Ledger Entry` - where docstatus < 2 %s order by item_code, warehouse""" % + where docstatus < 2 %s order by posting_date, posting_time, name""" % conditions, as_dict=1) def get_item_warehouse_map(filters): @@ -80,21 +80,27 @@ def get_item_warehouse_map(filters): qty_dict = iwb_map[d.company][d.item_code][d.warehouse] qty_dict.uom = d.stock_uom + if d.voucher_type == "Stock Reconciliation": + qty_diff = flt(d.qty_after_transaction) - qty_dict.bal_qty + value_diff = flt(d.stock_value) - qty_dict.bal_val + else: + qty_diff = flt(d.actual_qty) + value_diff = flt(d.actual_qty) * flt(d.valuation_rate) + if d.posting_date < filters["from_date"]: - qty_dict.opening_qty += flt(d.actual_qty) - qty_dict.opening_val += flt(d.actual_qty) * flt(d.valuation_rate) + qty_dict.opening_qty += qty_diff + qty_dict.opening_val += value_diff elif d.posting_date >= filters["from_date"] and d.posting_date <= filters["to_date"]: qty_dict.val_rate = d.valuation_rate - - if flt(d.actual_qty) > 0: - qty_dict.in_qty += flt(d.actual_qty) - qty_dict.in_val += flt(d.actual_qty) * flt(d.valuation_rate) + if qty_diff > 0: + qty_dict.in_qty += qty_diff + qty_dict.in_val += value_diff else: - qty_dict.out_qty += abs(flt(d.actual_qty)) - qty_dict.out_val += flt(abs(flt(d.actual_qty) * flt(d.valuation_rate))) + qty_dict.out_qty += abs(qty_diff) + qty_dict.out_val += abs(value_diff) - qty_dict.bal_qty += flt(d.actual_qty) - qty_dict.bal_val += flt(d.actual_qty) * flt(d.valuation_rate) + qty_dict.bal_qty += qty_diff + qty_dict.bal_val += value_diff return iwb_map From 7c6f990cf9688ad033c18e0620d35d601819165c Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 10 Oct 2014 18:03:27 +0530 Subject: [PATCH 18/30] Minor fix for moving average --- erpnext/stock/stock_ledger.py | 26 ++++++++++++-------------- erpnext/utilities/repost_stock.py | 11 +++++------ 2 files changed, 17 insertions(+), 20 deletions(-) diff --git a/erpnext/stock/stock_ledger.py b/erpnext/stock/stock_ledger.py index f1ba94efab..a2614d7f79 100644 --- a/erpnext/stock/stock_ledger.py +++ b/erpnext/stock/stock_ledger.py @@ -6,6 +6,7 @@ import frappe from frappe import _ from frappe.utils import cint, flt, cstr, now from erpnext.stock.utils import get_valuation_method +from erpnext.controllers.stock_controller import get_valuation_rate import json # future reposting @@ -106,8 +107,7 @@ def update_entries_after(args, verbose=1): stock_queue = [[qty_after_transaction, valuation_rate]] else: if valuation_method == "Moving Average": - if flt(sle.actual_qty) > 0: - valuation_rate = get_moving_average_values(qty_after_transaction, sle, valuation_rate) + valuation_rate = get_moving_average_values(qty_after_transaction, sle, valuation_rate) else: valuation_rate = get_fifo_values(qty_after_transaction, sle, stock_queue) @@ -256,19 +256,18 @@ def get_moving_average_values(qty_after_transaction, sle, valuation_rate): incoming_rate = flt(sle.incoming_rate) actual_qty = flt(sle.actual_qty) - if not incoming_rate: - # If wrong incoming rate - incoming_rate = valuation_rate + if flt(sle.actual_qty) > 0: + if qty_after_transaction < 0 and not valuation_rate: + # if negative stock, take current valuation rate as incoming rate + valuation_rate = incoming_rate - elif qty_after_transaction < 0 and not valuation_rate: - # if negative stock, take current valuation rate as incoming rate - valuation_rate = incoming_rate + new_stock_qty = abs(qty_after_transaction) + actual_qty + new_stock_value = (abs(qty_after_transaction) * valuation_rate) + (actual_qty * incoming_rate) - new_stock_qty = abs(qty_after_transaction) + actual_qty - new_stock_value = (abs(qty_after_transaction) * valuation_rate) + (actual_qty * incoming_rate) - - if new_stock_qty: - valuation_rate = new_stock_value / flt(new_stock_qty) + if new_stock_qty: + valuation_rate = new_stock_value / flt(new_stock_qty) + elif not valuation_rate: + valuation_rate = get_valuation_rate(sle.item_code, sle.warehouse) return abs(valuation_rate) @@ -321,7 +320,6 @@ def get_fifo_values(qty_after_transaction, sle, stock_queue): def intialize_stock_queue(stock_queue, item_code, warehouse): if not stock_queue: - from erpnext.controllers.stock_controller import get_valuation_rate estimated_val_rate = get_valuation_rate(item_code, warehouse) stock_queue.append([0, estimated_val_rate]) diff --git a/erpnext/utilities/repost_stock.py b/erpnext/utilities/repost_stock.py index b5eec231d7..7d9423db14 100644 --- a/erpnext/utilities/repost_stock.py +++ b/erpnext/utilities/repost_stock.py @@ -211,15 +211,14 @@ def reset_serial_no_status_and_warehouse(serial_nos=None): def repost_all_stock_vouchers(): vouchers = frappe.db.sql("""select distinct voucher_type, voucher_no - from `tabStock Ledger Entry` order by posting_date, posting_time, name""") + from `tabStock Ledger Entry` + order by posting_date, posting_time, name""") - print len(vouchers) rejected = [] - # vouchers = [["Delivery Note", "DN00060"]] i = 0 for voucher_type, voucher_no in vouchers: i+=1 - print i + print i, "/", len(vouchers) try: for dt in ["Stock Ledger Entry", "GL Entry"]: frappe.db.sql("""delete from `tab%s` where voucher_type=%s and voucher_no=%s"""% @@ -228,8 +227,8 @@ def repost_all_stock_vouchers(): doc = frappe.get_doc(voucher_type, voucher_no) if voucher_type=="Stock Entry" and doc.purpose in ["Manufacture", "Repack"]: doc.get_stock_and_rate(force=1) - # elif voucher_type=="Purchase Receipt": - # doc.create_raw_materials_supplied("pr_raw_material_details") + elif voucher_type=="Purchase Receipt" and doc.is_subcontracted == "Yes": + doc.validate() doc.update_stock_ledger() doc.make_gl_entries(repost_future_gle=False, allow_negative_stock=True) From 79ed124939aef03e8a503c6136405f62d9f4f67d Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 10 Oct 2014 18:19:03 +0530 Subject: [PATCH 19/30] Update journal_voucher.py --- .../doctype/journal_voucher/journal_voucher.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/erpnext/accounts/doctype/journal_voucher/journal_voucher.py b/erpnext/accounts/doctype/journal_voucher/journal_voucher.py index 719a7057cc..3c67508306 100644 --- a/erpnext/accounts/doctype/journal_voucher/journal_voucher.py +++ b/erpnext/accounts/doctype/journal_voucher/journal_voucher.py @@ -76,14 +76,14 @@ class JournalVoucher(AccountsController): def validate_entries_for_advance(self): for d in self.get('entries'): - if not (d.against_voucher and d.against_invoice and d.against_jv) and d.is_advance in ["", "No"]: + if not (d.against_voucher and d.against_invoice and d.against_jv): master_type = frappe.db.get_value("Account", d.account, "master_type") if (master_type == 'Customer' and flt(d.credit) > 0) or \ (master_type == 'Supplier' and flt(d.debit) > 0): - msgprint(_("Row {0}: Please check 'Is Advance' against Account {1} if this \ - is an advance entry.").format(d.idx, d.account)) - if d.against_sales_order or d.against_purchase_order: - raise frappe.ValidationError + if not d.is_advance: + msgprint(_("Row {0}: Please check 'Is Advance' against Account {1} if this is an advance entry.").format(d.idx, d.account)) + elif (d.against_sales_order or d.against_purchase_order) and d.is_advance != "Yes": + frappe.throw(_("Row {0}: Payment against Sales/Purchase Order should always be marked as advance").format(d.idx)) def validate_against_jv(self): for d in self.get('entries'): From 4f0e5db2162e3559df13a8feb94b677cbe6b1edc Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 10 Oct 2014 20:54:57 +0530 Subject: [PATCH 20/30] Stock balance grid report deprecated and moved to server side --- erpnext/config/stock.py | 16 +- erpnext/stock/page/stock_balance/README.md | 1 - erpnext/stock/page/stock_balance/__init__.py | 0 .../stock/page/stock_balance/stock_balance.js | 192 ------------------ .../page/stock_balance/stock_balance.json | 23 --- 5 files changed, 5 insertions(+), 227 deletions(-) delete mode 100644 erpnext/stock/page/stock_balance/README.md delete mode 100644 erpnext/stock/page/stock_balance/__init__.py delete mode 100644 erpnext/stock/page/stock_balance/stock_balance.js delete mode 100644 erpnext/stock/page/stock_balance/stock_balance.json diff --git a/erpnext/config/stock.py b/erpnext/config/stock.py index 7a4345e4d2..04e45d45a1 100644 --- a/erpnext/config/stock.py +++ b/erpnext/config/stock.py @@ -142,10 +142,10 @@ def get_data(): "doctype": "Item", }, { - "type": "page", - "name": "stock-balance", - "label": _("Stock Balance"), - "icon": "icon-table", + "type": "report", + "is_query_report": True, + "name": "Stock Balance", + "doctype": "Warehouse" }, { "type": "report", @@ -170,13 +170,7 @@ def get_data(): "name": "stock-analytics", "label": _("Stock Analytics"), "icon": "icon-bar-chart" - }, - { - "type": "report", - "is_query_report": True, - "name": "Warehouse-Wise Stock Balance", - "doctype": "Warehouse" - }, + } ] }, { diff --git a/erpnext/stock/page/stock_balance/README.md b/erpnext/stock/page/stock_balance/README.md deleted file mode 100644 index 6522aeb099..0000000000 --- a/erpnext/stock/page/stock_balance/README.md +++ /dev/null @@ -1 +0,0 @@ -Stock balances on a particular day, per warehouse. \ No newline at end of file diff --git a/erpnext/stock/page/stock_balance/__init__.py b/erpnext/stock/page/stock_balance/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/erpnext/stock/page/stock_balance/stock_balance.js b/erpnext/stock/page/stock_balance/stock_balance.js deleted file mode 100644 index 198d317824..0000000000 --- a/erpnext/stock/page/stock_balance/stock_balance.js +++ /dev/null @@ -1,192 +0,0 @@ -// Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors -// License: GNU General Public License v3. See license.txt - -frappe.require("assets/erpnext/js/stock_analytics.js"); - -frappe.pages['stock-balance'].onload = function(wrapper) { - frappe.ui.make_app_page({ - parent: wrapper, - title: __('Stock Balance'), - single_column: true - }); - - new erpnext.StockBalance(wrapper); - - wrapper.appframe.add_module_icon("Stock"); -} - -erpnext.StockBalance = erpnext.StockAnalytics.extend({ - init: function(wrapper) { - this._super(wrapper, { - title: __("Stock Balance"), - doctypes: ["Item", "Item Group", "Warehouse", "Stock Ledger Entry", "Brand", - "Stock Entry", "Project", "Serial No"], - }); - }, - setup_columns: function() { - this.columns = [ - {id: "name", name: __("Item"), field: "name", width: 300, - formatter: this.tree_formatter}, - {id: "item_name", name: __("Item Name"), field: "item_name", width: 100}, - {id: "description", name: __("Description"), field: "description", width: 200, - formatter: this.text_formatter}, - {id: "brand", name: __("Brand"), field: "brand", width: 100}, - {id: "stock_uom", name: __("UOM"), field: "stock_uom", width: 100}, - {id: "opening_qty", name: __("Opening Qty"), field: "opening_qty", width: 100, - formatter: this.currency_formatter}, - {id: "inflow_qty", name: __("In Qty"), field: "inflow_qty", width: 100, - formatter: this.currency_formatter}, - {id: "outflow_qty", name: __("Out Qty"), field: "outflow_qty", width: 100, - formatter: this.currency_formatter}, - {id: "closing_qty", name: __("Closing Qty"), field: "closing_qty", width: 100, - formatter: this.currency_formatter}, - - {id: "opening_value", name: __("Opening Value"), field: "opening_value", width: 100, - formatter: this.currency_formatter}, - {id: "inflow_value", name: __("In Value"), field: "inflow_value", width: 100, - formatter: this.currency_formatter}, - {id: "outflow_value", name: __("Out Value"), field: "outflow_value", width: 100, - formatter: this.currency_formatter}, - {id: "closing_value", name: __("Closing Value"), field: "closing_value", width: 100, - formatter: this.currency_formatter}, - {id: "valuation_rate", name: __("Valuation Rate"), field: "valuation_rate", width: 100, - formatter: this.currency_formatter}, - ]; - }, - - filters: [ - {fieldtype:"Select", label: __("Brand"), link:"Brand", fieldname: "brand", - default_value: __("Select Brand..."), filter: function(val, item, opts) { - return val == opts.default_value || item.brand == val || item._show; - }, link_formatter: {filter_input: "brand"}}, - {fieldtype:"Select", label: __("Warehouse"), link:"Warehouse", fieldname: "warehouse", - default_value: __("Select Warehouse..."), filter: function(val, item, opts, me) { - return me.apply_zero_filter(val, item, opts, me); - }}, - {fieldtype:"Select", label: __("Project"), link:"Project", fieldname: "project", - default_value: __("Select Project..."), filter: function(val, item, opts, me) { - return me.apply_zero_filter(val, item, opts, me); - }, link_formatter: {filter_input: "project"}}, - {fieldtype:"Date", label: __("From Date"), fieldname: "from_date"}, - {fieldtype:"Label", label: __("To")}, - {fieldtype:"Date", label: __("To Date"), fieldname: "to_date"}, - {fieldtype:"Button", label: __("Refresh"), icon:"icon-refresh icon-white"}, - {fieldtype:"Button", label: __("Reset Filters"), icon: "icon-filter"} - ], - - setup_plot_check: function() { - return; - }, - - prepare_data: function() { - this.stock_entry_map = this.make_name_map(frappe.report_dump.data["Stock Entry"], "name"); - this._super(); - }, - - prepare_balances: function() { - var me = this; - var from_date = dateutil.str_to_obj(this.from_date); - var to_date = dateutil.str_to_obj(this.to_date); - var data = frappe.report_dump.data["Stock Ledger Entry"]; - - this.item_warehouse = {}; - this.serialized_buying_rates = this.get_serialized_buying_rates(); - - for(var i=0, j=data.length; i 0) - item.valuation_rate = flt(item.closing_value) / flt(item.closing_qty); - else item.valuation_rate = 0.0 - }); - }, - - update_groups: function() { - var me = this; - - $.each(this.data, function(i, item) { - // update groups - if(!item.is_group && me.apply_filter(item, "brand")) { - var parent = me.parent_map[item.name]; - while(parent) { - parent_group = me.item_by_name[parent]; - $.each(me.columns, function(c, col) { - if (col.formatter == me.currency_formatter && col.field != "valuation_rate") { - parent_group[col.field] = flt(parent_group[col.field]) + flt(item[col.field]); - } - }); - - // show parent if filtered by brand - if(item.brand == me.brand) - parent_group._show = true; - - parent = me.parent_map[parent]; - } - } - }); - }, - - get_plot_data: function() { - return; - } -}); diff --git a/erpnext/stock/page/stock_balance/stock_balance.json b/erpnext/stock/page/stock_balance/stock_balance.json deleted file mode 100644 index 6f25be4407..0000000000 --- a/erpnext/stock/page/stock_balance/stock_balance.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "creation": "2012-12-27 18:57:47.000000", - "docstatus": 0, - "doctype": "Page", - "icon": "icon-table", - "idx": 1, - "modified": "2013-07-11 14:44:15.000000", - "modified_by": "Administrator", - "module": "Stock", - "name": "stock-balance", - "owner": "Administrator", - "page_name": "stock-balance", - "roles": [ - { - "role": "Material Manager" - }, - { - "role": "Analytics" - } - ], - "standard": "Yes", - "title": "Stock Balance" -} \ No newline at end of file From 70ec88b733880958bae15f951b54179053d86340 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 10 Oct 2014 21:22:46 +0530 Subject: [PATCH 21/30] fixed test cases --- erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py | 2 +- erpnext/stock/doctype/stock_entry/test_stock_entry.py | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py index 51c85ce48b..67f621aa01 100644 --- a/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py +++ b/erpnext/stock/doctype/purchase_receipt/test_purchase_receipt.py @@ -95,7 +95,7 @@ class TestPurchaseReceipt(unittest.TestCase): pr.insert() self.assertEquals(len(pr.get("pr_raw_material_details")), 2) - self.assertEquals(pr.get("purchase_receipt_details")[0].rm_supp_cost, 70000.0) + self.assertEquals(pr.get("purchase_receipt_details")[0].rm_supp_cost, 20750.0) def test_serial_no_supplier(self): diff --git a/erpnext/stock/doctype/stock_entry/test_stock_entry.py b/erpnext/stock/doctype/stock_entry/test_stock_entry.py index 7654cbcccd..e010bd19b9 100644 --- a/erpnext/stock/doctype/stock_entry/test_stock_entry.py +++ b/erpnext/stock/doctype/stock_entry/test_stock_entry.py @@ -939,3 +939,5 @@ def make_stock_entry(item, source, target, qty, incoming_rate=None): s.insert() s.submit() return s + +test_records = frappe.get_test_records('Stock Entry') From 27e37e68b25281e7dd57e7a6f2cc682c1c52737a Mon Sep 17 00:00:00 2001 From: Pratik Vyas Date: Sun, 12 Oct 2014 19:35:46 +0530 Subject: [PATCH 22/30] add my_config patch to travis --- .travis.yml | 2 ++ ci/fix-mariadb.sh | 11 +++++++++++ ci/my_config.h.patch | 22 ++++++++++++++++++++++ 3 files changed, 35 insertions(+) create mode 100755 ci/fix-mariadb.sh create mode 100644 ci/my_config.h.patch diff --git a/.travis.yml b/.travis.yml index 1b4e3403f1..c136aa0978 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,6 +14,8 @@ install: - sudo apt-get update - sudo apt-get purge -y mysql-common - sudo apt-get install mariadb-server mariadb-common libmariadbclient-dev + - ./ci/fix-mariadb.sh + - wget http://downloads.sourceforge.net/project/wkhtmltopdf/0.12.1/wkhtmltox-0.12.1_linux-precise-amd64.deb - sudo dpkg -i wkhtmltox-0.12.1_linux-precise-amd64.deb - CFLAGS=-O0 pip install git+https://github.com/frappe/frappe.git@develop diff --git a/ci/fix-mariadb.sh b/ci/fix-mariadb.sh new file mode 100755 index 0000000000..886ec5e0d0 --- /dev/null +++ b/ci/fix-mariadb.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +# stolen from http://cgit.drupalcode.org/octopus/commit/?id=db4f837 +includedir=`mysql_config --variable=pkgincludedir` +thiscwd=`pwd` +_THIS_DB_VERSION=`mysql -V 2>&1 | tr -d "\n" | cut -d" " -f6 | awk '{ print $1}' | cut -d"-" -f1 | awk '{ print $1}' | sed "s/[\,']//g"` +if [ "$_THIS_DB_VERSION" = "5.5.40" ] && [ ! -e "$includedir-$_THIS_DB_VERSION-fixed.log" ] ; then + cd $includedir + sudo patch -p1 < $thiscwd/ci/my_config.h.patch &> /dev/null + sudo touch $includedir-$_THIS_DB_VERSION-fixed.log +fi diff --git a/ci/my_config.h.patch b/ci/my_config.h.patch new file mode 100644 index 0000000000..5247b5b39b --- /dev/null +++ b/ci/my_config.h.patch @@ -0,0 +1,22 @@ +diff -burp a/my_config.h b/my_config.h +--- a/my_config.h 2014-10-09 19:32:46.000000000 -0400 ++++ b/my_config.h 2014-10-09 19:35:12.000000000 -0400 +@@ -641,17 +641,4 @@ + #define SIZEOF_TIME_T 8 + /* #undef TIME_T_UNSIGNED */ + +-/* +- stat structure (from ) is conditionally defined +- to have different layout and size depending on the defined macros. +- The correct macro is defined in my_config.h, which means it MUST be +- included first (or at least before - so, practically, +- before including any system headers). +- +- __GLIBC__ is defined in +-*/ +-#ifdef __GLIBC__ +-#error MUST be included first! +-#endif +- + #endif + From daf344e5fdb8a1008a26e9361713513c5960f719 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Sun, 12 Oct 2014 17:40:43 +0530 Subject: [PATCH 23/30] Precision fixed in batch-wise balance report --- .../batch_wise_balance_history.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py b/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py index 9b94ee61e1..3679457136 100644 --- a/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py +++ b/erpnext/stock/report/batch_wise_balance_history/batch_wise_balance_history.py @@ -4,7 +4,7 @@ from __future__ import unicode_literals import frappe from frappe import _ -from frappe.utils import flt +from frappe.utils import flt, cint def execute(filters=None): if not filters: filters = {} @@ -57,6 +57,7 @@ def get_stock_ledger_entries(filters): conditions, as_dict=1) def get_item_warehouse_batch_map(filters): + float_precision = cint(frappe.db.get_default("float_precision")) or 3 sle = get_stock_ledger_entries(filters) iwb_map = {} @@ -67,14 +68,14 @@ def get_item_warehouse_batch_map(filters): })) qty_dict = iwb_map[d.item_code][d.warehouse][d.batch_no] if d.posting_date < filters["from_date"]: - qty_dict.opening_qty += flt(d.actual_qty) + qty_dict.opening_qty += flt(d.actual_qty, float_precision) elif d.posting_date >= filters["from_date"] and d.posting_date <= filters["to_date"]: if flt(d.actual_qty) > 0: - qty_dict.in_qty += flt(d.actual_qty) + qty_dict.in_qty += flt(d.actual_qty, float_precision) else: - qty_dict.out_qty += abs(flt(d.actual_qty)) + qty_dict.out_qty += abs(flt(d.actual_qty, float_precision)) - qty_dict.bal_qty += flt(d.actual_qty) + qty_dict.bal_qty += flt(d.actual_qty, float_precision) return iwb_map From bc8b20ae3c539600fc91a075793e691816e91e0f Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 13 Oct 2014 10:47:14 +0530 Subject: [PATCH 24/30] Allocate entire advance amount if advance against SO/PO --- erpnext/controllers/accounts_controller.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py index 9a62fc299e..af0a96ef67 100644 --- a/erpnext/controllers/accounts_controller.py +++ b/erpnext/controllers/accounts_controller.py @@ -387,7 +387,7 @@ class AccountsController(TransactionBase): res = frappe.db.sql(""" select - t1.name as jv_no, t1.remark, t2.%s as amount, t2.name as jv_detail_no + t1.name as jv_no, t1.remark, t2.%s as amount, t2.name as jv_detail_no, `against_%s` as against_order from `tabJournal Voucher` t1, `tabJournal Voucher Detail` t2 where @@ -400,7 +400,7 @@ class AccountsController(TransactionBase): and ifnull(t2.against_purchase_order, '') = '' ) %s) order by t1.posting_date""" % - (dr_or_cr, '%s', cond), + (dr_or_cr, against_order_field, '%s', cond), tuple([account_head] + so_list), as_dict= True) self.set(parentfield, []) @@ -411,7 +411,7 @@ class AccountsController(TransactionBase): "jv_detail_no": d.jv_detail_no, "remarks": d.remark, "advance_amount": flt(d.amount), - "allocate_amount": 0 + "allocated_amount": flt(d.amount) if d.against_order else 0 }) def validate_advance_jv(self, advance_table_fieldname, against_order_field): From 3d3f0bcf549ddcd9416a3e20ff1e688472c723e1 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 13 Oct 2014 11:32:41 +0530 Subject: [PATCH 25/30] Minor fix in setup wizard --- erpnext/setup/page/setup_wizard/setup_wizard.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/erpnext/setup/page/setup_wizard/setup_wizard.py b/erpnext/setup/page/setup_wizard/setup_wizard.py index d3942e47c5..bf643ddcf9 100644 --- a/erpnext/setup/page/setup_wizard/setup_wizard.py +++ b/erpnext/setup/page/setup_wizard/setup_wizard.py @@ -78,9 +78,10 @@ def setup_account(args=None): frappe.db.commit() except: - traceback = frappe.get_traceback() - for hook in frappe.get_hooks("setup_wizard_exception"): - frappe.get_attr(hook)(traceback, args) + if args: + traceback = frappe.get_traceback() + for hook in frappe.get_hooks("setup_wizard_exception"): + frappe.get_attr(hook)(traceback, args) raise From 17a16eeaf4f8be85a9c4dadc90f1fbe7c3160a64 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 13 Oct 2014 11:43:14 +0530 Subject: [PATCH 26/30] Tets case fixed for payment tool --- .../doctype/payment_tool/test_payment_tool.py | 34 ++++++++++--------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/erpnext/accounts/doctype/payment_tool/test_payment_tool.py b/erpnext/accounts/doctype/payment_tool/test_payment_tool.py index c91a5de2e1..2192aebaae 100644 --- a/erpnext/accounts/doctype/payment_tool/test_payment_tool.py +++ b/erpnext/accounts/doctype/payment_tool/test_payment_tool.py @@ -31,9 +31,10 @@ class TestPaymentTool(unittest.TestCase): "customer": "_Test Customer 3" }) - jv_against_so1 = self.create_against_jv(jv_test_records[0], { + jv_against_so1 = self.create_against_jv(jv_test_records[0], { "account": "_Test Customer 3 - _TC", - "against_sales_order": so1.name + "against_sales_order": so1.name, + "is_advance": "Yes" }) @@ -42,10 +43,11 @@ class TestPaymentTool(unittest.TestCase): "customer": "_Test Customer 3" }) - jv_against_so2 = self.create_against_jv(jv_test_records[0], { + jv_against_so2 = self.create_against_jv(jv_test_records[0], { "account": "_Test Customer 3 - _TC", "against_sales_order": so2.name, - "credit": 1000 + "credit": 1000, + "is_advance": "Yes" }) po = self.create_voucher(po_test_records[1], { "supplier": "_Test Supplier 1" @@ -54,20 +56,20 @@ class TestPaymentTool(unittest.TestCase): #Create SI with partial outstanding si1 = self.create_voucher(si_test_records[0], { "customer": "_Test Customer 3", - "debit_to": "_Test Customer 3 - _TC" + "debit_to": "_Test Customer 3 - _TC" }) - - jv_against_si1 = self.create_against_jv(jv_test_records[0], { + + jv_against_si1 = self.create_against_jv(jv_test_records[0], { "account": "_Test Customer 3 - _TC", "against_invoice": si1.name }) #Create SI with no outstanding si2 = self.create_voucher(si_test_records[0], { "customer": "_Test Customer 3", - "debit_to": "_Test Customer 3 - _TC" + "debit_to": "_Test Customer 3 - _TC" }) - - jv_against_si2 = self.create_against_jv(jv_test_records[0], { + + jv_against_si2 = self.create_against_jv(jv_test_records[0], { "account": "_Test Customer 3 - _TC", "against_invoice": si2.name, "credit": 561.80 @@ -75,7 +77,7 @@ class TestPaymentTool(unittest.TestCase): pi = self.create_voucher(pi_test_records[0], { "supplier": "_Test Supplier 1", - "credit_to": "_Test Supplier 1 - _TC" + "credit_to": "_Test Supplier 1 - _TC" }) #Create a dict containing properties and expected values @@ -137,7 +139,7 @@ class TestPaymentTool(unittest.TestCase): payment_tool_doc.set(k, v) self.check_outstanding_vouchers(payment_tool_doc, args, expected_outstanding) - + def check_outstanding_vouchers(self, doc, args, expected_outstanding): from erpnext.accounts.doctype.payment_tool.payment_tool import get_outstanding_vouchers @@ -161,7 +163,7 @@ class TestPaymentTool(unittest.TestCase): new_jv = paytool.make_journal_voucher() - #Create a list of expected values as [party account, payment against, against_jv, against_invoice, + #Create a list of expected values as [party account, payment against, against_jv, against_invoice, #against_voucher, against_sales_order, against_purchase_order] expected_values = [ [paytool.party_account, 100.00, expected_outstanding.get("Journal Voucher")[0], None, None, None, None], @@ -171,7 +173,7 @@ class TestPaymentTool(unittest.TestCase): [paytool.party_account, 100.00, None, None, None, None, expected_outstanding.get("Purchase Order")[0]] ] - for jv_entry in new_jv.get("entries"): + for jv_entry in new_jv.get("entries"): if paytool.party_account == jv_entry.get("account"): row = [ jv_entry.get("account"), @@ -183,11 +185,11 @@ class TestPaymentTool(unittest.TestCase): jv_entry.get("against_purchase_order"), ] self.assertTrue(row in expected_values) - + self.assertEquals(new_jv.get("cheque_no"), paytool.reference_no) self.assertEquals(new_jv.get("cheque_date"), paytool.reference_date) def clear_table_entries(self): frappe.db.sql("""delete from `tabGL Entry` where (account = "_Test Customer 3 - _TC" or account = "_Test Supplier 1 - _TC")""") frappe.db.sql("""delete from `tabSales Order` where customer_name = "_Test Customer 3" """) - frappe.db.sql("""delete from `tabPurchase Order` where supplier_name = "_Test Supplier 1" """) + frappe.db.sql("""delete from `tabPurchase Order` where supplier_name = "_Test Supplier 1" """) From 8a28ccfa2fbcb362be71897444d4c029c44b1485 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 14 Oct 2014 11:41:44 +0530 Subject: [PATCH 27/30] Repost gl entries where mismatch with stock balance --- erpnext/patches.txt | 2 + .../fix_gl_entries_for_stock_transactions.py | 51 ++++++++++++++----- .../report/stock_balance/stock_balance.py | 8 +-- erpnext/utilities/repost_stock.py | 15 ++++-- 4 files changed, 56 insertions(+), 20 deletions(-) diff --git a/erpnext/patches.txt b/erpnext/patches.txt index bd2d436453..0dbe444472 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -83,3 +83,5 @@ erpnext.patches.v4_2.update_sales_order_invoice_field_name erpnext.patches.v4_2.cost_of_production_cycle erpnext.patches.v4_2.seprate_manufacture_and_repack execute:frappe.delete_doc("Report", "Warehouse-Wise Stock Balance") +execute:frappe.delete_doc("DocType", "Purchase Request") +execute:frappe.delete_doc("DocType", "Purchase Request Item") diff --git a/erpnext/patches/v4_2/fix_gl_entries_for_stock_transactions.py b/erpnext/patches/v4_2/fix_gl_entries_for_stock_transactions.py index e065d2d42f..3c554ae0f0 100644 --- a/erpnext/patches/v4_2/fix_gl_entries_for_stock_transactions.py +++ b/erpnext/patches/v4_2/fix_gl_entries_for_stock_transactions.py @@ -3,24 +3,49 @@ from __future__ import unicode_literals import frappe +from frappe.utils import flt def execute(): - warehouses_with_account = frappe.db.sql_list("""select master_name from tabAccount - where ifnull(account_type, '') = 'Warehouse'""") + from erpnext.utilities.repost_stock import repost + repost() - stock_vouchers_without_gle = frappe.db.sql("""select distinct sle.voucher_type, sle.voucher_no + warehouse_account = frappe.db.sql("""select name, master_name from tabAccount + where ifnull(account_type, '') = 'Warehouse'""") + warehouses = [d[1] for d in warehouse_account] + accounts = [d[0] for d in warehouse_account] + + stock_vouchers = frappe.db.sql("""select distinct sle.voucher_type, sle.voucher_no from `tabStock Ledger Entry` sle where sle.warehouse in (%s) - and not exists(select name from `tabGL Entry` - where voucher_type=sle.voucher_type and voucher_no=sle.voucher_no) order by sle.posting_date""" % - ', '.join(['%s']*len(warehouses_with_account)), tuple(warehouses_with_account)) + ', '.join(['%s']*len(warehouses)), tuple(warehouses)) - for voucher_type, voucher_no in stock_vouchers_without_gle: - print voucher_type, voucher_no - frappe.db.sql("""delete from `tabGL Entry` - where voucher_type=%s and voucher_no=%s""", (voucher_type, voucher_no)) + rejected = [] + for voucher_type, voucher_no in stock_vouchers: + stock_bal = frappe.db.sql("""select sum(stock_value_difference) from `tabStock Ledger Entry` + where voucher_type=%s and voucher_no =%s and warehouse in (%s)""" % + ('%s', '%s', ', '.join(['%s']*len(warehouses))), tuple([voucher_type, voucher_no] + warehouses)) - voucher = frappe.get_doc(voucher_type, voucher_no) - voucher.make_gl_entries() - frappe.db.commit() + account_bal = frappe.db.sql("""select ifnull(sum(ifnull(debit, 0) - ifnull(credit, 0)), 0) + from `tabGL Entry` + where voucher_type=%s and voucher_no =%s and account in (%s) + group by voucher_type, voucher_no""" % + ('%s', '%s', ', '.join(['%s']*len(accounts))), tuple([voucher_type, voucher_no] + accounts)) + + if stock_bal and account_bal and abs(flt(stock_bal[0][0]) - flt(account_bal[0][0])) > 0.1: + try: + print voucher_type, voucher_no, stock_bal[0][0], account_bal[0][0] + + frappe.db.sql("""delete from `tabGL Entry` + where voucher_type=%s and voucher_no=%s""", (voucher_type, voucher_no)) + + voucher = frappe.get_doc(voucher_type, voucher_no) + voucher.make_gl_entries(repost_future_gle=False, allow_negative_stock=True) + frappe.db.commit() + except Exception, e: + print frappe.get_traceback() + rejected.append([voucher_type, voucher_no]) + frappe.db.rollback() + + print "Failed to repost: " + print rejected diff --git a/erpnext/stock/report/stock_balance/stock_balance.py b/erpnext/stock/report/stock_balance/stock_balance.py index 95de739e0f..daef2ebd31 100644 --- a/erpnext/stock/report/stock_balance/stock_balance.py +++ b/erpnext/stock/report/stock_balance/stock_balance.py @@ -58,8 +58,8 @@ def get_conditions(filters): #get all details def get_stock_ledger_entries(filters): conditions = get_conditions(filters) - return frappe.db.sql("""select item_code, warehouse, posting_date, - actual_qty, valuation_rate, stock_uom, company, voucher_type, qty_after_transaction + return frappe.db.sql("""select item_code, warehouse, posting_date, actual_qty, valuation_rate, + stock_uom, company, voucher_type, qty_after_transaction, stock_value_difference from `tabStock Ledger Entry` where docstatus < 2 %s order by posting_date, posting_time, name""" % conditions, as_dict=1) @@ -82,10 +82,10 @@ def get_item_warehouse_map(filters): if d.voucher_type == "Stock Reconciliation": qty_diff = flt(d.qty_after_transaction) - qty_dict.bal_qty - value_diff = flt(d.stock_value) - qty_dict.bal_val else: qty_diff = flt(d.actual_qty) - value_diff = flt(d.actual_qty) * flt(d.valuation_rate) + + value_diff = flt(d.stock_value_difference) if d.posting_date < filters["from_date"]: qty_dict.opening_qty += qty_diff diff --git a/erpnext/utilities/repost_stock.py b/erpnext/utilities/repost_stock.py index 7d9423db14..89494ad2ca 100644 --- a/erpnext/utilities/repost_stock.py +++ b/erpnext/utilities/repost_stock.py @@ -22,7 +22,11 @@ def repost(allow_negative_stock=False): (select item_code, warehouse from tabBin union select item_code, warehouse from `tabStock Ledger Entry`) a"""): - repost_stock(d[0], d[1]) + try: + repost_stock(d[0], d[1]) + frappe.db.commit() + except: + frappe.db.rollback() if allow_negative_stock: frappe.db.set_default("allow_negative_stock", @@ -210,9 +214,14 @@ def reset_serial_no_status_and_warehouse(serial_nos=None): frappe.db.sql("""update `tabSerial No` set warehouse='' where status in ('Delivered', 'Purchase Returned')""") def repost_all_stock_vouchers(): + warehouses_with_account = frappe.db.sql_list("""select master_name from tabAccount + where ifnull(account_type, '') = 'Warehouse'""") + vouchers = frappe.db.sql("""select distinct voucher_type, voucher_no - from `tabStock Ledger Entry` - order by posting_date, posting_time, name""") + from `tabStock Ledger Entry` sle + where voucher_type != "Serial No" and sle.warehouse in (%s) + order by posting_date, posting_time, name""" % + ', '.join(['%s']*len(warehouses_with_account)), tuple(warehouses_with_account)) rejected = [] i = 0 From 66444061858d323f09087ad350c951484a27cdea Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Fri, 10 Oct 2014 18:48:09 +0530 Subject: [PATCH 28/30] Fix - BOM calculated wrong cost on update cost --- erpnext/manufacturing/doctype/bom/bom.py | 30 +++++++++++--------- erpnext/patches.txt | 1 + erpnext/patches/v4_2/recalculate_bom_cost.py | 16 +++++++++++ 3 files changed, 33 insertions(+), 14 deletions(-) create mode 100644 erpnext/patches/v4_2/recalculate_bom_cost.py diff --git a/erpnext/manufacturing/doctype/bom/bom.py b/erpnext/manufacturing/doctype/bom/bom.py index 75c4ffbd92..e8a8682ceb 100644 --- a/erpnext/manufacturing/doctype/bom/bom.py +++ b/erpnext/manufacturing/doctype/bom/bom.py @@ -115,6 +115,9 @@ class BOM(Document): return rate def update_cost(self): + if self.docstatus == 2: + return + for d in self.get("bom_materials"): d.rate = self.get_bom_material_detail({ 'item_code': d.item_code, @@ -122,9 +125,10 @@ class BOM(Document): 'qty': d.qty })["rate"] - if self.docstatus in (0, 1): + if self.docstatus == 1: self.ignore_validate_update_after_submit = True - self.save() + self.calculate_cost() + self.save() def get_bom_unitcost(self, bom_no): bom = frappe.db.sql("""select name, total_variable_cost/quantity as unit_cost from `tabBOM` @@ -269,29 +273,27 @@ class BOM(Document): """Calculate bom totals""" self.calculate_op_cost() self.calculate_rm_cost() - self.calculate_fixed_cost() self.total_variable_cost = self.raw_material_cost + self.operating_cost + self.total_cost = self.total_variable_cost + self.total_fixed_cost def calculate_op_cost(self): """Update workstation rate and calculates totals""" - total_op_cost = 0 + total_op_cost, fixed_cost = 0, 0 for d in self.get('bom_operations'): - if d.workstation and not d.hour_rate: - d.hour_rate = frappe.db.get_value("Workstation", d.workstation, "hour_rate") + if d.workstation: + w = frappe.db.get_value("Workstation", d.workstation, ["hour_rate", "fixed_cycle_cost"]) + if not d.hour_rate: + d.hour_rate = flt(w[0]) + + fixed_cost += flt(w[1]) + if d.hour_rate and d.time_in_mins: d.operating_cost = flt(d.hour_rate) * flt(d.time_in_mins) / 60.0 total_op_cost += flt(d.operating_cost) + self.operating_cost = total_op_cost - - def calculate_fixed_cost(self): - """Update workstation rate and calculates totals""" - fixed_cost = 0 - for d in self.get('bom_operations'): - if d.workstation: - fixed_cost += flt(frappe.db.get_value("Workstation", d.workstation, "fixed_cycle_cost")) self.total_fixed_cost = fixed_cost - def calculate_rm_cost(self): """Fetch RM rate as per today's valuation rate and calculate totals""" total_rm_cost = 0 diff --git a/erpnext/patches.txt b/erpnext/patches.txt index 0dbe444472..92f8395f29 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -85,3 +85,4 @@ erpnext.patches.v4_2.seprate_manufacture_and_repack execute:frappe.delete_doc("Report", "Warehouse-Wise Stock Balance") execute:frappe.delete_doc("DocType", "Purchase Request") execute:frappe.delete_doc("DocType", "Purchase Request Item") +erpnext.patches.v4_2.recalculate_bom_cost \ No newline at end of file diff --git a/erpnext/patches/v4_2/recalculate_bom_cost.py b/erpnext/patches/v4_2/recalculate_bom_cost.py new file mode 100644 index 0000000000..418f42313c --- /dev/null +++ b/erpnext/patches/v4_2/recalculate_bom_cost.py @@ -0,0 +1,16 @@ +# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors +# License: GNU General Public License v3. See license.txt + +from __future__ import unicode_literals +import frappe + +def execute(): + try: + for d in frappe.db.sql("select name from `tabBOM` where docstatus < 2"): + document = frappe.get_doc('BOM', d[0]) + if document.docstatus == 1: + document.ignore_validate_update_after_submit = True + document.calculate_cost() + document.save() + except: + pass \ No newline at end of file From c40451ee2efe93c4bfddb99469fe489f3c947f74 Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Tue, 14 Oct 2014 12:12:40 +0530 Subject: [PATCH 29/30] Patch Fixed --- erpnext/patches/v4_2/recalculate_bom_cost.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/erpnext/patches/v4_2/recalculate_bom_cost.py b/erpnext/patches/v4_2/recalculate_bom_cost.py index 418f42313c..3a194ff195 100644 --- a/erpnext/patches/v4_2/recalculate_bom_cost.py +++ b/erpnext/patches/v4_2/recalculate_bom_cost.py @@ -5,12 +5,12 @@ from __future__ import unicode_literals import frappe def execute(): - try: - for d in frappe.db.sql("select name from `tabBOM` where docstatus < 2"): + for d in frappe.db.sql("select name from `tabBOM` where docstatus < 2"): + try: document = frappe.get_doc('BOM', d[0]) if document.docstatus == 1: document.ignore_validate_update_after_submit = True document.calculate_cost() document.save() - except: - pass \ No newline at end of file + except: + pass \ No newline at end of file From 78f86e9385f930e83dac465f6017e34f87e964dd Mon Sep 17 00:00:00 2001 From: Pratik Vyas Date: Tue, 14 Oct 2014 13:07:07 +0600 Subject: [PATCH 30/30] bumped to version 4.6.0 --- erpnext/__version__.py | 2 +- erpnext/hooks.py | 2 +- setup.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/erpnext/__version__.py b/erpnext/__version__.py index d04f92aa34..52fde385e9 100644 --- a/erpnext/__version__.py +++ b/erpnext/__version__.py @@ -1 +1 @@ -__version__ = '4.5.2' +__version__ = '4.6.0' diff --git a/erpnext/hooks.py b/erpnext/hooks.py index bda5c80678..6c91c390ff 100644 --- a/erpnext/hooks.py +++ b/erpnext/hooks.py @@ -4,7 +4,7 @@ app_publisher = "Web Notes Technologies Pvt. Ltd. and Contributors" app_description = "Open Source Enterprise Resource Planning for Small and Midsized Organizations" app_icon = "icon-th" app_color = "#e74c3c" -app_version = "4.5.2" +app_version = "4.6.0" error_report_email = "support@erpnext.com" diff --git a/setup.py b/setup.py index 8b037432f4..c6d1f84b4f 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,7 @@ from setuptools import setup, find_packages import os -version = "4.5.2" +version = "4.6.0" with open("requirements.txt", "r") as f: install_requires = f.readlines()