diff --git a/accounts/search_criteria/accounts_receivable/accounts_receivable.py b/accounts/search_criteria/accounts_receivable/accounts_receivable.py index 7d13d00c91..34aafe5ffc 100644 --- a/accounts/search_criteria/accounts_receivable/accounts_receivable.py +++ b/accounts/search_criteria/accounts_receivable/accounts_receivable.py @@ -165,4 +165,4 @@ if len(out) > 0: t_row[col_idx['Voucher No']] = 'Total' t_row[col_idx['Opening Amt']] = total_booking_amt t_row[col_idx['Outstanding Amt']] = total_outstanding_amt - out.append(t_row) + out.append(t_row) \ No newline at end of file diff --git a/buying/doctype/purchase_order/purchase_order.py b/buying/doctype/purchase_order/purchase_order.py index 814d646890..092640df9e 100644 --- a/buying/doctype/purchase_order/purchase_order.py +++ b/buying/doctype/purchase_order/purchase_order.py @@ -162,42 +162,50 @@ class DocType(TransactionBase): # Check for stopped status self.check_for_stopped_status(pc_obj) - # get total in words dcc = TransactionBase().get_company_currency(self.doc.company) self.doc.in_words = pc_obj.get_total_in_words(dcc, self.doc.grand_total) self.doc.in_words_import = pc_obj.get_total_in_words(self.doc.currency, self.doc.grand_total_import) - # update bin - # ---------- + def update_bin(self, is_submit, is_stopped = 0): pc_obj = get_obj('Purchase Common') for d in getlist(self.doclist, 'po_details'): #1. Check if is_stock_item == 'Yes' - if sql("select is_stock_item from tabItem where name=%s", d.item_code)[0][0]=='Yes': - + if webnotes.conn.get_value("Item", d.item_code, "is_stock_item") == "Yes": ind_qty, po_qty = 0, flt(d.qty) * flt(d.conversion_factor) if is_stopped: - po_qty = flt(d.qty) > flt(d.received_qty) and flt( flt(flt(d.qty) - flt(d.received_qty)) * flt(d.conversion_factor))or 0 + po_qty = flt(d.qty) > flt(d.received_qty) and \ + flt( flt(flt(d.qty) - flt(d.received_qty))*flt(d.conversion_factor)) or 0 # No updates in Purchase Request on Stop / Unstop if cstr(d.prevdoc_doctype) == 'Purchase Request' and not is_stopped: # get qty and pending_qty of prevdoc - curr_ref_qty = pc_obj.get_qty( d.doctype, 'prevdoc_detail_docname', d.prevdoc_detail_docname, 'Purchase Request Item', 'Purchase Request - Purchase Order', self.doc.name) - max_qty, qty, curr_qty = flt(curr_ref_qty.split('~~~')[1]), flt(curr_ref_qty.split('~~~')[0]), 0 + curr_ref_qty = pc_obj.get_qty(d.doctype, 'prevdoc_detail_docname', + d.prevdoc_detail_docname, 'Purchase Request Item', + 'Purchase Request - Purchase Order', self.doc.name) + max_qty, qty, curr_qty = flt(curr_ref_qty.split('~~~')[1]), \ + flt(curr_ref_qty.split('~~~')[0]), 0 if flt(qty) + flt(po_qty) > flt(max_qty): curr_qty = flt(max_qty) - flt(qty) - # special case as there is no restriction for Purchase Request - Purchase Order - curr_qty = (curr_qty > 0) and curr_qty or 0 + # special case as there is no restriction + # for Purchase Request - Purchase Order + curr_qty = curr_qty > 0 and curr_qty or 0 else: curr_qty = flt(po_qty) ind_qty = -flt(curr_qty) - #==> Update Bin's Purchase Request Qty by +- ind_qty and Ordered Qty by +- qty - get_obj('Warehouse', d.warehouse).update_bin(0, 0, (is_submit and 1 or -1) * flt(po_qty), (is_submit and 1 or -1) * flt(ind_qty), 0, d.item_code, self.doc.transaction_date) - + # Update ordered_qty and indented_qty in bin + args = { + "item_code" : d.item_code, + "ordered_qty" : (is_submit and 1 or -1) * flt(po_qty), + "indented_qty" : (is_submit and 1 or -1) * flt(ind_qty), + "posting_date": self.doc.transaction_date + } + get_obj("Warehouse", d.warehouse).update_bin(args) + def check_modified_date(self): mod_db = sql("select modified from `tabPurchase Order` where name = '%s'" % self.doc.name) date_diff = sql("select TIMEDIFF('%s', '%s')" % ( mod_db[0][0],cstr(self.doc.modified))) diff --git a/buying/doctype/purchase_request/purchase_request.py b/buying/doctype/purchase_request/purchase_request.py index a1b09856f1..a4373a8051 100644 --- a/buying/doctype/purchase_request/purchase_request.py +++ b/buying/doctype/purchase_request/purchase_request.py @@ -167,32 +167,29 @@ class DocType: # Validate qty against SO self.validate_qty_against_so() - - # On Submit Functions - #---------------------------------------------------------------------------- - # Update Quantity Requested for Purchase in Bin def update_bin(self, is_submit, is_stopped): + """ Update Quantity Requested for Purchase in Bin""" + for d in getlist(self.doclist, 'indent_details'): - # Step 1:=> Check if is_stock_item == 'Yes' - if cstr(sql("select is_stock_item from `tabItem` where name = '%s'" % cstr(d.item_code))[0][0]) == 'Yes': + if webnotes.conn.get_value("Item", d.item_code, "is_stock_item") == "Yes": if not d.warehouse: - msgprint('Please Enter Warehouse for Item %s as it is stock item.' % cstr(d.item_code)) - raise Exception - # Step 2:=> Set Qty + msgprint("Please Enter Warehouse for Item %s as it is stock item" + % cstr(d.item_code), raise_exception=1) + qty =flt(d.qty) if is_stopped: - qty = (d.qty > d.ordered_qty) and flt(flt(d.qty) - flt(d.ordered_qty)) or 0 - # Step 3 :=> Update Bin's Purchase Request Qty by +- qty - get_obj('Warehouse', d.warehouse).update_bin(0, 0, 0, (is_submit and 1 or -1) * flt(qty), 0, d.item_code, self.doc.transaction_date) + qty = (d.qty > d.ordered_qty) and flt(flt(d.qty) - flt(d.ordered_qty)) or 0 + + args = { + "item_code": d.item_code, + "indented_qty": (is_submit and 1 or -1) * flt(qty), + "posting_date": self.doc.transaction_date + } + get_obj('Warehouse', d.warehouse).update_bin(args) - # On Submit - #--------------------------------------------------------------------------- def on_submit(self): - # Step 1:=> Set Status set(self.doc,'status','Submitted') - - # Step 2:=> Update Bin self.update_bin(is_submit = 1, is_stopped = 0) def check_modified_date(self): @@ -202,9 +199,7 @@ class DocType: if date_diff and date_diff[0][0]: msgprint(cstr(self.doc.doctype) +" => "+ cstr(self.doc.name) +" has been modified. Please Refresh. ") raise Exception - - # On Stop / unstop - #------------------------------------------------------------------------------ + def update_status(self, status): self.check_modified_date() # Step 1:=> Update Bin @@ -216,8 +211,7 @@ class DocType: # Step 3:=> Acknowledge User msgprint(self.doc.doctype + ": " + self.doc.name + " has been %s." % ((status == 'Submitted') and 'Unstopped' or cstr(status)) ) - # On Cancel - #----------------------------------------------------------------------------- + def on_cancel(self): # Step 1:=> Get Purchase Common Obj pc_obj = get_obj(dt='Purchase Common') diff --git a/patches/july_2012/repost_stock_due_to_wrong_packing_list.py b/patches/july_2012/repost_stock_due_to_wrong_packing_list.py index 449dd1f03c..b20290287c 100644 --- a/patches/july_2012/repost_stock_due_to_wrong_packing_list.py +++ b/patches/july_2012/repost_stock_due_to_wrong_packing_list.py @@ -24,27 +24,33 @@ def repost_reserved_qty(): i += 1 print i reserved_qty = webnotes.conn.sql(""" - select sum((dnpi_qty / so_item_qty) * (so_item_qty - so_item_delivered_qty)) - from (select - qty as dnpi_qty, - ( - select qty from `tabSales Order Item` - where name = dnpi.parent_detail_docname - ) as so_item_qty, - ( - select ifnull(delivered_qty, 0) from `tabSales Order Item` - where name = dnpi.parent_detail_docname - ) as so_item_delivered_qty + select + sum((dnpi_qty / so_item_qty) * (so_item_qty - so_item_delivered_qty)) from - ( - select qty, parent_detail_docname - from `tabDelivery Note Packing Item` dnpi_in - where item_code = %s and warehouse = %s - and parenttype="Sales Order" - and exists (select * from `tabSales Order` so - where name = dnpi_in.parent and docstatus = 1 and status != 'Stopped') - ) dnpi) tab - where so_item_qty >= so_item_delivered_qty""", (d[0], d[1])) + ( + select + qty as dnpi_qty, + ( + select qty from `tabSales Order Item` + where name = dnpi.parent_detail_docname + ) as so_item_qty, + ( + select ifnull(delivered_qty, 0) from `tabSales Order Item` + where name = dnpi.parent_detail_docname + ) as so_item_delivered_qty + from + ( + select qty, parent_detail_docname + from `tabDelivery Note Packing Item` dnpi_in + where item_code = %s and warehouse = %s + and parenttype="Sales Order" + and exists (select * from `tabSales Order` so + where name = dnpi_in.parent and docstatus = 1 and status != 'Stopped') + ) dnpi + ) tab + where + so_item_qty >= so_item_delivered_qty + """, (d[0], d[1])) if flt(d[3]) != flt(reserved_qty[0][0]): print d[3], reserved_qty[0][0] diff --git a/production/doctype/production_order/production_order.py b/production/doctype/production_order/production_order.py index 915c80d1b5..5be3edcee3 100644 --- a/production/doctype/production_order/production_order.py +++ b/production/doctype/production_order/production_order.py @@ -58,57 +58,63 @@ class DocType: def validate(self): if self.doc.production_item : - item_detail = sql("select name from `tabItem` where name = '%s' and docstatus != 2" % self.doc.production_item, as_dict = 1) + item_detail = sql("select name from `tabItem` where name = '%s' and docstatus != 2" + % self.doc.production_item, as_dict = 1) if not item_detail: - msgprint("Item '%s' does not exist or cancelled in the system." % cstr(self.doc.production_item)) - raise Exception + msgprint("Item '%s' does not exist or cancelled in the system." + % cstr(self.doc.production_item), raise_exception=1) if self.doc.bom_no: bom = sql("""select name from `tabBOM` where name = %s and docstatus = 1 - and is_active = 'Yes' and item = %s""", (self.doc.bom_no, self.doc.production_item), as_dict =1) + and is_active = 'Yes' and item = %s""" + , (self.doc.bom_no, self.doc.production_item), as_dict =1) if not bom: msgprint("""Incorrect BOM: %s entered. - May be BOM not exists or inactive or not submitted or for some other item.""" % cstr(self.doc.bom_no)) - raise Exception + May be BOM not exists or inactive or not submitted + or for some other item.""" % cstr(self.doc.bom_no), raise_exception=1) def stop_unstop(self, status): """ Called from client side on Stop/Unstop event""" self.update_status(status) - # Update Planned Qty of Production Item - qty = (flt(self.doc.qty) - flt(self.doc.produced_qty)) * ((status == 'Stopped') and -1 or 1) - get_obj('Warehouse', self.doc.fg_warehouse).update_bin(0, 0, 0, 0, flt(qty), self.doc.production_item, now()) + qty = (flt(self.doc.qty)-flt(self.doc.produced_qty)) * ((status == 'Stopped') and -1 or 1) + self.update_planned_qty(qty) msgprint("Production Order has been %s" % status) - def update_status(self, status): if status == 'Stopped': - set(self.doc, 'status', cstr(status)) + webnotes.conn.set(self.doc, 'status', cstr(status)) else: if flt(self.doc.qty) == flt(self.doc.produced_qty): - set(self.doc, 'status', 'Completed') + webnotes.conn.set(self.doc, 'status', 'Completed') if flt(self.doc.qty) > flt(self.doc.produced_qty): - set(self.doc, 'status', 'In Process') + webnotes.conn.set(self.doc, 'status', 'In Process') if flt(self.doc.produced_qty) == 0: - set(self.doc, 'status', 'Submitted') + webnotes.conn.set(self.doc, 'status', 'Submitted') def on_submit(self): - set(self.doc,'status', 'Submitted') - # increase Planned Qty of Prooduction Item by Qty - get_obj('Warehouse', self.doc.fg_warehouse).update_bin(0, 0, 0, 0,flt(self.doc.qty), self.doc.production_item, now()) - - + webnotes.conn.set(self.doc,'status', 'Submitted') + self.update_planned_qty(self.doc.qty) + def on_cancel(self): # Check whether any stock entry exists against this Production Order - st = sql("select name from `tabStock Entry` where production_order = '%s' and docstatus = 1" % cstr(self.doc.name)) - if st and st[0][0]: + stock_entry = sql("""select name from `tabStock Entry` + where production_order = %s and docstatus = 1""", self.doc.name) + if stock_entry: msgprint("""Submitted Stock Entry %s exists against this production order. - Hence can not be cancelled.""" % st[0][0]) - raise Exception + Hence can not be cancelled.""" % stock_entry[0][0], raise_exception=1) - set(self.doc,'status', 'Cancelled') - # decrease Planned Qty of Prooduction Item by Qty - get_obj('Warehouse', self.doc.fg_warehouse).update_bin(0, 0, 0, 0,-flt(self.doc.qty), self.doc.production_item, now()) + webnotes.conn.set(self.doc,'status', 'Cancelled') + self.update_planned_qty(-self.doc.qty) + + def update_planned_qty(self, qty): + """update planned qty in bin""" + args = { + "item_code": self.doc.production_item, + "posting_date": nowdate(), + "planned_qty": flt(qty) + } + get_obj('Warehouse', self.doc.fg_warehouse).update_bin(args) \ No newline at end of file diff --git a/selling/doctype/sales_order/sales_order.py b/selling/doctype/sales_order/sales_order.py index 7b677c56c4..f05500d5fa 100644 --- a/selling/doctype/sales_order/sales_order.py +++ b/selling/doctype/sales_order/sales_order.py @@ -350,7 +350,6 @@ class DocType(TransactionBase): def on_submit(self): self.check_prev_docstatus() self.update_stock_ledger(update_stock = 1) - self.set_sms_msg(1) # update customer's last sales order no. update_customer = sql("update `tabCustomer` set last_sales_order = '%s', modified = '%s' where name = '%s'" %(self.doc.name, self.doc.modified, self.doc.customer)) get_obj('Sales Common').check_credit(self,self.doc.grand_total) @@ -373,7 +372,6 @@ class DocType(TransactionBase): raise Exception self.check_nextdoc_docstatus() self.update_stock_ledger(update_stock = -1) - self.set_sms_msg() #update prevdoc status self.update_prevdoc_status('cancel') @@ -405,75 +403,44 @@ class DocType(TransactionBase): def check_modified_date(self): mod_db = sql("select modified from `tabSales Order` where name = '%s'" % self.doc.name) date_diff = sql("select TIMEDIFF('%s', '%s')" % ( mod_db[0][0],cstr(self.doc.modified))) - if date_diff and date_diff[0][0]: - msgprint(cstr(self.doc.doctype) +" => "+ cstr(self.doc.name) +" has been modified. Please Refresh. ") - raise Exception + msgprint("%s: %s has been modified after you have opened. Please Refresh" + % (self.doc.doctype, self.doc.name), raise_exception=1) - # STOP SALES ORDER - # ============================================================================================== - # Stops Sales Order & no more transactions will be created against this Sales Order def stop_sales_order(self): self.check_modified_date() self.update_stock_ledger(update_stock = -1,clear = 1) - # ::::::::: SET SO STATUS :::::::::: set(self.doc, 'status', 'Stopped') - msgprint(self.doc.doctype + ": " + self.doc.name + " has been Stopped. To make transactions against this Sales Order you need to Unstop it.") + msgprint("""%s: %s has been Stopped. To make transactions against this Sales Order + you need to Unstop it.""" % (self.doc.doctype, self.doc.name)) - # UNSTOP SALES ORDER - # ============================================================================================== - # Unstops Sales Order & now transactions can be continued against this Sales Order def unstop_sales_order(self): self.check_modified_date() self.update_stock_ledger(update_stock = 1,clear = 1) - # ::::::::: SET SO STATUS :::::::::: set(self.doc, 'status', 'Submitted') - msgprint(self.doc.doctype + ": " + self.doc.name + " has been Unstopped.") + msgprint("%s: %s has been Unstopped" % (self.doc.doctype, self.doc.name)) + - # UPDATE STOCK LEDGER - # =============================================================================================== def update_stock_ledger(self, update_stock, clear = 0): for d in self.get_item_list(clear): - stock_item = sql("SELECT is_stock_item FROM tabItem where name = '%s'"%(d['item_code']),as_dict = 1) - # stock ledger will be updated only if it is a stock item - if stock_item and stock_item[0]['is_stock_item'] == "Yes": + if webnotes.conn.get_value("Item", d['item_code'], "is_stock_item") == "Yes": if not d['reserved_warehouse']: - msgprint("Message: Please enter Reserved Warehouse for item %s as it is stock item."% d['item_code']) - raise Exception - bin = get_obj('Warehouse', d['reserved_warehouse']).update_bin( 0, flt(update_stock) * flt(d['qty']), \ - 0, 0, 0, d['item_code'], self.doc.transaction_date,doc_type=self.doc.doctype,\ - doc_name=self.doc.name, is_amended = (self.doc.amended_from and 'Yes' or 'No')) - - # Gets Items from packing list - #================================= + msgprint("""Please enter Reserved Warehouse for item %s + as it is stock ite""" % d['item_code'], raise_exception=1) + + args = { + "item_code": d['item_code'], + "reserved_qty": flt(update_stock) * flt(d['qty']), + "posting_date": self.doc.transaction_date, + "doc_type": self.doc.doctype, + "doc_name": self.doc.name, + "is_amended": self.doc.amended_from and 'Yes' or 'No' + } + get_obj('Warehouse', d['reserved_warehouse']).update_bin(args) + + def get_item_list(self, clear): return get_obj('Sales Common').get_item_list( self, clear) - - # SET MESSAGE FOR SMS - #====================== - def set_sms_msg(self, is_submitted = 0): - if is_submitted: - if not self.doc.amended_from: - msg = 'Sales Order: '+self.doc.name+' has been made against PO no: '+cstr(self.doc.po_no) - set(self.doc, 'message', msg) - else: - msg = 'Sales Order has been amended. New SO no:'+self.doc.name - set(self.doc, 'message', msg) - else: - msg = 'Sales Order: '+self.doc.name+' has been cancelled.' - set(self.doc, 'message', msg) - - # SEND SMS - # ========= - def send_sms(self): - if not self.doc.customer_mobile_no: - msgprint("Please enter customer mobile no") - elif not self.doc.message: - msgprint("Please enter the message you want to send") - else: - msgprint(get_obj("SMS Control", "SMS Control").send_sms([self.doc.customer_mobile_no,], self.doc.message)) - # on update def on_update(self): - pass - + pass \ No newline at end of file diff --git a/setup/doctype/global_defaults/global_defaults.txt b/setup/doctype/global_defaults/global_defaults.txt index d1175b7c19..f68c6d3a49 100644 --- a/setup/doctype/global_defaults/global_defaults.txt +++ b/setup/doctype/global_defaults/global_defaults.txt @@ -3,11 +3,11 @@ # These values are common in all dictionaries { - 'creation': '2012-04-20 14:02:53', - 'docstatus': 0, - 'modified': '2012-05-22 14:11:21', - 'modified_by': u'Administrator', - 'owner': u'Administrator' + u'creation': '2012-07-03 13:30:02', + u'docstatus': 0, + u'modified': '2012-10-23 10:57:41', + u'modified_by': u'Administrator', + u'owner': u'Administrator' }, # These values are common for all DocType @@ -18,12 +18,12 @@ 'allow_print': 1, 'colour': u'White:FFF', 'default_print_format': u'Standard', - 'doctype': 'DocType', + u'doctype': u'DocType', 'hide_toolbar': 0, 'in_create': 1, 'issingle': 1, 'module': u'Setup', - 'name': '__common__', + u'name': u'__common__', 'read_only': 1, 'section_style': u'Tabbed', 'server_code_error': u' ', @@ -33,8 +33,8 @@ # These values are common for all DocField { - 'doctype': u'DocField', - 'name': '__common__', + u'doctype': u'DocField', + u'name': u'__common__', 'parent': u'Global Defaults', 'parentfield': u'fields', 'parenttype': u'DocType', @@ -43,8 +43,8 @@ # These values are common for all DocPerm { - 'doctype': u'DocPerm', - 'name': '__common__', + u'doctype': u'DocPerm', + u'name': u'__common__', 'parent': u'Global Defaults', 'parentfield': u'permissions', 'parenttype': u'DocType', @@ -53,57 +53,13 @@ # DocType, Global Defaults { - 'doctype': 'DocType', - 'name': u'Global Defaults' - }, - - # DocPerm - { - 'amend': 0, - 'cancel': 0, - 'create': 1, - 'doctype': u'DocPerm', - 'permlevel': 0, - 'role': u'System Manager', - 'submit': 0, - 'write': 1 - }, - - # DocPerm - { - 'create': 1, - 'doctype': u'DocPerm', - 'permlevel': 0, - 'role': u'System Manager', - 'write': 1 - }, - - # DocPerm - { - 'doctype': u'DocPerm', - 'permlevel': 1, - 'role': u'System Manager', - 'write': 1 - }, - - # DocPerm - { - 'doctype': u'DocPerm', - 'permlevel': 1, - 'role': u'All' - }, - - # DocPerm - { - 'doctype': u'DocPerm', - 'permlevel': 2, - 'role': u'System Manager', - 'write': 1 + u'doctype': u'DocType', + u'name': u'Global Defaults' }, # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'company', 'fieldtype': u'Section Break', 'label': u'Company' @@ -111,7 +67,7 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'default_company', 'fieldtype': u'Link', 'label': u'Default Company', @@ -121,7 +77,7 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'current_fiscal_year', 'fieldtype': u'Link', 'label': u'Current Fiscal Year', @@ -131,7 +87,7 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'date_format', 'fieldtype': u'Select', 'label': u'Date Format', @@ -140,7 +96,7 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'column_break1', 'fieldtype': u'Column Break', 'width': u'50%' @@ -149,7 +105,7 @@ # DocField { 'default': u'INR', - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'default_currency', 'fieldtype': u'Select', 'label': u'Default Currency', @@ -159,7 +115,7 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'default_currency_format', 'fieldtype': u'Select', 'label': u'Default Currency Format', @@ -168,7 +124,7 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'default_currency_fraction', 'fieldtype': u'Data', 'label': u'Default Currency Fraction' @@ -176,7 +132,7 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'stock', 'fieldtype': u'Section Break', 'label': u'Stock' @@ -184,7 +140,7 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'column_break2', 'fieldtype': u'Column Break', 'width': u'50%' @@ -192,7 +148,7 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'default_item_group', 'fieldtype': u'Link', 'label': u'Default Item Group', @@ -201,7 +157,7 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'ighelp', 'fieldtype': u'HTML', 'label': u'IGHelp', @@ -210,27 +166,18 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'default_stock_uom', 'fieldtype': u'Link', 'label': u'Default Stock UOM', 'options': u'UOM' }, - # DocField - { - 'doctype': u'DocField', - 'fieldname': u'default_valuation_method', - 'fieldtype': u'Select', - 'label': u'Default Valuation Method', - 'options': u'FIFO\nMoving Average' - }, - # DocField { 'colour': u'White:FFF', 'description': u'Applicable only if valuation method is moving average', - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'allow_negative_stock', 'fieldtype': u'Check', 'label': u'Allow Negative Stock' @@ -238,7 +185,7 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'default_warehouse_type', 'fieldtype': u'Link', 'label': u'Default Warehouse Type', @@ -247,7 +194,7 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'auto_indent', 'fieldtype': u'Check', 'label': u'Raise Purchase Request when stock reaches re-order level' @@ -256,7 +203,7 @@ # DocField { 'default': u'1', - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'column_break3', 'fieldtype': u'Column Break', 'width': u'50%' @@ -266,7 +213,7 @@ { 'colour': u'White:FFF', 'description': u'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
', - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'tolerance', 'fieldtype': u'Currency', 'label': u'Allowance Percent' @@ -276,7 +223,7 @@ { 'colour': u'White:FFF', 'description': u'Stock level frozen up to this date, nobody can do / modify entry except authorized person', - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'stock_frozen_upto', 'fieldtype': u'Date', 'label': u'Stock Frozen Upto' @@ -286,7 +233,7 @@ { 'colour': u'White:FFF', 'description': u'Users with this role are allowed to do / modify stock entry before frozen date', - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'stock_auth_role', 'fieldtype': u'Link', 'label': u'Authorized Role (Frozen Entry)', @@ -295,7 +242,7 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'accounts', 'fieldtype': u'Section Break', 'label': u'Accounts' @@ -305,7 +252,7 @@ { 'colour': u'White:FFF', 'description': u'Accounting entry frozen up to this date, nobody can do / modify entry except authorized person', - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'acc_frozen_upto', 'fieldtype': u'Date', 'label': u'Accounts Frozen Upto' @@ -315,7 +262,7 @@ { 'colour': u'White:FFF', 'description': u'Users with this role are allowed to do / modify accounting entry before frozen date', - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'bde_auth_role', 'fieldtype': u'Link', 'label': u'Authourized Role (Frozen Entry)', @@ -324,7 +271,7 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'credit_controller', 'fieldtype': u'Link', 'label': u'Credit Controller', @@ -333,14 +280,14 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'column_break4', 'fieldtype': u'Column Break' }, # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'account_info', 'fieldtype': u'HTML', 'label': u'Account Info', @@ -349,7 +296,7 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'selling', 'fieldtype': u'Section Break', 'label': u'Selling' @@ -359,7 +306,7 @@ { 'colour': u'White:FFF', 'default': u'Customer Name', - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'cust_master_name', 'fieldtype': u'Select', 'label': u'Customer Master created by ', @@ -368,7 +315,7 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'default_customer_group', 'fieldtype': u'Link', 'label': u'Default Customer Group', @@ -377,7 +324,7 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'cghelp', 'fieldtype': u'HTML', 'label': u'CGHelp', @@ -386,7 +333,7 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'default_territory', 'fieldtype': u'Link', 'label': u'Default Territory', @@ -395,7 +342,7 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'territoryhelp', 'fieldtype': u'HTML', 'label': u'TerritoryHelp', @@ -404,7 +351,7 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'column_break5', 'fieldtype': u'Column Break', 'width': u'50%' @@ -412,7 +359,7 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'default_price_list', 'fieldtype': u'Link', 'label': u'Default Price List', @@ -421,7 +368,7 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'default_price_list_currency', 'fieldtype': u'Link', 'label': u'Default Price List Currency', @@ -432,7 +379,7 @@ { 'colour': u'White:FFF', 'default': u'No', - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'so_required', 'fieldtype': u'Select', 'label': u'Sales Order Required', @@ -443,7 +390,7 @@ { 'colour': u'White:FFF', 'default': u'No', - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'dn_required', 'fieldtype': u'Select', 'label': u'Delivery Note Required', @@ -452,7 +399,7 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'buying', 'fieldtype': u'Section Break', 'label': u'Buying' @@ -460,7 +407,7 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'default_supplier_type', 'fieldtype': u'Link', 'label': u'Default Supplier Type', @@ -471,7 +418,7 @@ { 'colour': u'White:FFF', 'default': u'Supplier Name', - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'supp_master_name', 'fieldtype': u'Select', 'label': u'Supplier Master created by ', @@ -480,7 +427,7 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'column_break6', 'fieldtype': u'Column Break', 'width': u'50%' @@ -490,7 +437,7 @@ { 'colour': u'White:FFF', 'default': u'No', - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'po_required', 'fieldtype': u'Select', 'label': u'Purchase Order Required', @@ -501,7 +448,7 @@ { 'colour': u'White:FFF', 'default': u'No', - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'pr_required', 'fieldtype': u'Select', 'label': u'Purchase Receipt Required', @@ -510,7 +457,7 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'maintain_same_rate', 'fieldtype': u'Check', 'label': u'Maintain same rate throughout purchase cycle' @@ -518,7 +465,7 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'hr', 'fieldtype': u'Section Break', 'label': u'HR', @@ -529,7 +476,7 @@ { 'colour': u'White:FFF', 'description': u'Employee record is created using selected field. ', - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'emp_created_by', 'fieldtype': u'Select', 'label': u'Employee Records to be created by ', @@ -538,7 +485,7 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'system', 'fieldtype': u'Section Break', 'label': u'System' @@ -546,9 +493,53 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'sms_sender_name', 'fieldtype': u'Data', 'label': u'SMS Sender Name' + }, + + # DocPerm + { + 'amend': 0, + 'cancel': 0, + 'create': 1, + u'doctype': u'DocPerm', + 'permlevel': 0, + 'role': u'System Manager', + 'submit': 0, + 'write': 1 + }, + + # DocPerm + { + 'create': 1, + u'doctype': u'DocPerm', + 'permlevel': 0, + 'role': u'System Manager', + 'write': 1 + }, + + # DocPerm + { + u'doctype': u'DocPerm', + 'permlevel': 1, + 'role': u'All' + }, + + # DocPerm + { + u'doctype': u'DocPerm', + 'permlevel': 1, + 'role': u'System Manager', + 'write': 1 + }, + + # DocPerm + { + u'doctype': u'DocPerm', + 'permlevel': 2, + 'role': u'System Manager', + 'write': 1 } ] \ No newline at end of file diff --git a/stock/doctype/bin/bin.py b/stock/doctype/bin/bin.py index 648d581231..8da6e9cbe3 100644 --- a/stock/doctype/bin/bin.py +++ b/stock/doctype/bin/bin.py @@ -23,47 +23,45 @@ from webnotes.model import db_exists from webnotes.model.doc import Document, addchild, getchildren, make_autoname from webnotes.model.doclist import getlist, copy_doclist from webnotes.model.code import get_obj, get_server_obj, run_server_obj, updatedb, check_syntax -from webnotes import session, form, msgprint, errprint - - -set = webnotes.conn.set +from webnotes import msgprint, errprint sql = webnotes.conn.sql -get_value = webnotes.conn.get_value - - - -# ----------------------------------------------------------------------------------------- class DocType: def __init__(self, doc, doclist=[]): self.doc = doc self.doclist = doclist - - def update_stock(self, actual_qty=0, reserved_qty=0, ordered_qty=0, indented_qty=0, \ - planned_qty=0, dt=None, sle_id='', posting_time='', serial_no = '', \ - is_cancelled = 'No',doc_type='',doc_name='',is_amended='No'): - if not dt: - dt = nowdate() - - # update the stock values (for current quantities) - self.doc.actual_qty = flt(self.doc.actual_qty) + flt(actual_qty) - self.doc.ordered_qty = flt(self.doc.ordered_qty) + flt(ordered_qty) - self.doc.reserved_qty = flt(self.doc.reserved_qty) + flt(reserved_qty) - self.doc.indented_qty = flt(self.doc.indented_qty) + flt(indented_qty) - self.doc.planned_qty = flt(self.doc.planned_qty) + flt(planned_qty) - self.doc.projected_qty = flt(self.doc.actual_qty) + flt(self.doc.ordered_qty) + flt(self.doc.indented_qty) + flt(self.doc.planned_qty) - flt(self.doc.reserved_qty) - self.doc.save() - if(( flt(actual_qty)<0 or flt(reserved_qty)>0 ) and is_cancelled == 'No' and is_amended=='No'): - self.reorder_item(doc_type,doc_name) - if actual_qty: + def update_stock(self, args): + if not args.get("posting_date"): + posting_date = nowdate() + + self.update_qty(args) + + if (flt(args.get("actual_qty")) < 0 or flt(args.get("reserved_qty")) > 0) \ + and args.get("is_cancelled") == 'No' and args.get("is_amended")=='No': + self.reorder_item(args.get("doc_type"), args.get("doc_name")) + + if args.get("actual_qty"): # check actual qty with total number of serial no - if serial_no: + if args.get("serial_no"): self.check_qty_with_serial_no() # update valuation and qty after transaction for post dated entry - self.update_entries_after(dt, posting_time) + self.update_entries_after(args.get("posting_date"), args.get("posting_time")) + + def update_qty(self, args): + # update the stock values (for current quantities) + self.doc.actual_qty = flt(self.doc.actual_qty) + flt(args.get("actual_qty", 0)) + self.doc.ordered_qty = flt(self.doc.ordered_qty) + flt(args.get("ordered_qty", 0)) + self.doc.reserved_qty = flt(self.doc.reserved_qty) + flt(args.get("reserved_qty")) + self.doc.indented_qty = flt(self.doc.indented_qty) + flt(args.get("indented_qty")) + self.doc.planned_qty = flt(self.doc.planned_qty) + flt(args.get("planned_qty")) + + self.doc.projected_qty = flt(self.doc.actual_qty) + flt(self.doc.ordered_qty) + \ + flt(self.doc.indented_qty) + flt(self.doc.planned_qty) - flt(self.doc.reserved_qty) + + self.doc.save() def check_qty_with_serial_no(self): """ @@ -327,7 +325,7 @@ class DocType: def reorder_item(self,doc_type,doc_name): """ Reorder item if stock reaches reorder level""" - if get_value('Global Defaults', None, 'auto_indent'): + if webnotes.conn.get_value('Global Defaults', None, 'auto_indent'): #check if re-order is required ret = sql("""select re_order_level, item_name, description, brand, item_group, lead_time_days, min_order_qty, email_notify, re_order_qty @@ -371,7 +369,7 @@ class DocType: indent_details_child.save() indent_obj = get_obj('Purchase Request',indent.name,with_children=1) indent_obj.validate() - set(indent_obj.doc,'docstatus',1) + webnotes.conn.set(indent_obj.doc,'docstatus',1) indent_obj.on_submit() msgprint("""Item: %s is to be re-ordered. Purchase Request %s raised. It was generated from %s %s""" % diff --git a/stock/doctype/delivery_note/delivery_note.py b/stock/doctype/delivery_note/delivery_note.py index 1e0116fd3b..bb444ec1f7 100644 --- a/stock/doctype/delivery_note/delivery_note.py +++ b/stock/doctype/delivery_note/delivery_note.py @@ -244,7 +244,7 @@ class DocType(TransactionBase): def on_submit(self): self.validate_packed_qty() - set(self.doc, 'message', 'Items against your Order #%s have been delivered. Delivery #%s: ' % (self.doc.po_no, self.doc.name)) + # Check for Approving Authority get_obj('Authorization Control').validate_approving_authority(self.doc.doctype, self.doc.company, self.doc.grand_total, self) @@ -342,16 +342,22 @@ class DocType(TransactionBase): def update_stock_ledger(self, update_stock, is_stopped = 0): self.values = [] for d in self.get_item_list(is_stopped): - stock_item = sql("SELECT is_stock_item, is_sample_item FROM tabItem where name = '%s'"%(d['item_code']), as_dict = 1) # stock ledger will be updated only if it is a stock item - if stock_item[0]['is_stock_item'] == "Yes": + if webnotes.conn.get_value("Item", d['item_code'], "is_stock_item") == "Yes": if not d['warehouse']: - msgprint("Message: Please enter Warehouse for item %s as it is stock item."% d['item_code']) - raise Exception + msgprint("Please enter Warehouse for item %s as it is stock item" + % d['item_code'], raise_exception=1) + if d['reserved_qty'] < 0 : # Reduce reserved qty from reserved warehouse mentioned in so - bin = get_obj('Warehouse', d['reserved_warehouse']).update_bin(0, flt(update_stock) * flt(d['reserved_qty']), \ - 0, 0, 0, d['item_code'], self.doc.transaction_date,doc_type=self.doc.doctype, \ - doc_name=self.doc.name, is_amended = (self.doc.amended_from and 'Yes' or 'No')) + args = { + "item_code": d['item_code'], + "doc_type": self.doc.doctype, + "doc_name": self.doc.name, + "reserved_qty": flt(update_stock) * flt(d['reserved_qty']), + "posting_date": self.doc.posting_date, + "is_amended": self.doc.amended_from and 'Yes' or 'No' + } + get_obj("Warehouse", d["reserved_warehouse"]).update_bin(args) # Reduce actual qty from warehouse self.make_sl_entry(d, d['warehouse'], - flt(d['qty']) , 0, update_stock) @@ -383,15 +389,6 @@ class DocType(TransactionBase): }) - def send_sms(self): - if not self.doc.customer_mobile_no: - msgprint("Please enter customer mobile no") - elif not self.doc.message: - msgprint("Please enter the message you want to send") - else: - msgprint(get_obj("SMS Control", "SMS Control").send_sms([self.doc.customer_mobile_no,], self.doc.message)) - - def credit_limit(self): """check credit limit of items in DN Detail which are not fetched from sales order""" amount, total = 0, 0 @@ -407,5 +404,4 @@ class DocType(TransactionBase): self.doclist = get_obj('Sales Common').make_packing_list(self,'delivery_note_details') sl = get_obj('Stock Ledger') sl.scrub_serial_nos(self) - sl.scrub_serial_nos(self, 'packing_details') - + sl.scrub_serial_nos(self, 'packing_details') \ No newline at end of file diff --git a/stock/doctype/item/item.txt b/stock/doctype/item/item.txt index c624fc1379..a605821d5f 100644 --- a/stock/doctype/item/item.txt +++ b/stock/doctype/item/item.txt @@ -3,11 +3,11 @@ # These values are common in all dictionaries { - 'creation': '2012-07-03 13:30:46', - 'docstatus': 0, - 'modified': '2012-07-11 09:57:42', - 'modified_by': u'Administrator', - 'owner': u'Administrator' + u'creation': '2012-07-12 22:19:45', + u'docstatus': 0, + u'modified': '2012-10-23 11:02:09', + u'modified_by': u'Administrator', + u'owner': u'Administrator' }, # These values are common for all DocType @@ -18,11 +18,11 @@ 'autoname': u'field:item_code', 'colour': u'White:FFF', 'default_print_format': u'Standard', - 'doctype': 'DocType', + u'doctype': u'DocType', 'document_type': u'Master', 'max_attachments': 1, 'module': u'Stock', - 'name': '__common__', + u'name': u'__common__', 'search_fields': u'item_name,description,item_group,customer_code', 'section_style': u'Tray', 'server_code_error': u' ', @@ -34,8 +34,8 @@ # These values are common for all DocField { - 'doctype': u'DocField', - 'name': '__common__', + u'doctype': u'DocField', + u'name': u'__common__', 'parent': u'Item', 'parentfield': u'fields', 'parenttype': u'DocType' @@ -43,8 +43,8 @@ # These values are common for all DocPerm { - 'doctype': u'DocPerm', - 'name': '__common__', + u'doctype': u'DocPerm', + u'name': u'__common__', 'parent': u'Item', 'parentfield': u'permissions', 'parenttype': u'DocType', @@ -53,97 +53,13 @@ # DocType, Item { - 'doctype': 'DocType', - 'name': u'Item' - }, - - # DocPerm - { - 'cancel': 1, - 'create': 1, - 'doctype': u'DocPerm', - 'permlevel': 0, - 'role': u'System Manager', - 'write': 1 - }, - - # DocPerm - { - 'create': 0, - 'doctype': u'DocPerm', - 'permlevel': 1, - 'role': u'Material Master Manager', - 'write': 0 - }, - - # DocPerm - { - 'cancel': 1, - 'create': 1, - 'doctype': u'DocPerm', - 'permlevel': 0, - 'role': u'Material Master Manager', - 'write': 1 - }, - - # DocPerm - { - 'doctype': u'DocPerm', - 'permlevel': 1, - 'role': u'System Manager' - }, - - # DocPerm - { - 'amend': 0, - 'cancel': 0, - 'create': 0, - 'doctype': u'DocPerm', - 'permlevel': 1, - 'role': u'Material Manager', - 'submit': 0, - 'write': 0 - }, - - # DocPerm - { - 'amend': 0, - 'cancel': 0, - 'create': 0, - 'doctype': u'DocPerm', - 'permlevel': 0, - 'role': u'Material Manager', - 'submit': 0, - 'write': 0 - }, - - # DocPerm - { - 'amend': 0, - 'cancel': 0, - 'create': 0, - 'doctype': u'DocPerm', - 'permlevel': 1, - 'role': u'Material User', - 'submit': 0, - 'write': 0 - }, - - # DocPerm - { - 'amend': 0, - 'cancel': 0, - 'create': 0, - 'doctype': u'DocPerm', - 'permlevel': 0, - 'role': u'Material User', - 'submit': 0, - 'write': 0 + u'doctype': u'DocType', + u'name': u'Item' }, # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'item', 'fieldtype': u'Section Break', 'label': u'Item', @@ -154,7 +70,7 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'trash_reason', 'fieldtype': u'Small Text', 'label': u'Trash Reason', @@ -167,7 +83,7 @@ { 'colour': u'White:FFF', 'description': u'Item will be saved by this name in the data base.', - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'item_code', 'fieldtype': u'Data', 'in_filter': 0, @@ -181,7 +97,7 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'item_name', 'fieldtype': u'Data', 'in_filter': 1, @@ -197,7 +113,7 @@ { 'colour': u'White:FFF', 'description': u'Manage Item Groups', - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'item_group', 'fieldtype': u'Link', 'in_filter': 1, @@ -211,7 +127,7 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'brand', 'fieldtype': u'Link', 'hidden': 0, @@ -226,7 +142,7 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'barcode', 'fieldtype': u'Data', 'label': u'Barcode', @@ -235,7 +151,7 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'column_break0', 'fieldtype': u'Column Break', 'permlevel': 0 @@ -243,7 +159,7 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'description', 'fieldtype': u'Text', 'in_filter': 0, @@ -258,7 +174,7 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'description_html', 'fieldtype': u'Text', 'label': u'Description HTML', @@ -269,7 +185,7 @@ { 'colour': u'White:FFF', 'description': u'Generates HTML to include image (1st attachment) in the description', - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'add_image', 'fieldtype': u'Button', 'label': u'Add Image', @@ -278,7 +194,7 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'inventory', 'fieldtype': u'Section Break', 'label': u'Inventory', @@ -290,7 +206,7 @@ { 'colour': u'White:FFF', 'description': u'Enter unit of measurement in which stock of this item is maintained in your warehouse.', - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'stock_uom', 'fieldtype': u'Link', 'label': u'Default UoM', @@ -306,7 +222,7 @@ 'colour': u'White:FFF', 'default': u'Yes', 'description': u'Select "Yes" if you are maintaining stock of this item in your Inventory.', - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'is_stock_item', 'fieldtype': u'Select', 'label': u'Is Stock Item', @@ -319,19 +235,7 @@ # DocField { - 'doctype': u'DocField', - 'fieldname': u'valuation_method', - 'fieldtype': u'Select', - 'label': u'Valuation Method', - 'oldfieldname': u'valuation_method', - 'oldfieldtype': u'Select', - 'options': u'\nFIFO\nMoving Average', - 'permlevel': 0 - }, - - # DocField - { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'default_warehouse', 'fieldtype': u'Link', 'label': u'Default Warehouse', @@ -345,7 +249,7 @@ { 'colour': u'White:FFF', 'description': u'Percentage variation in quantity to be allowed while receiving or delivering this item.', - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'tolerance', 'fieldtype': u'Currency', 'label': u'Allowance Percent', @@ -358,7 +262,7 @@ { 'colour': u'White:FFF', 'description': u'The system will generate auto indent when stock reaches re-order level.', - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u're_order_level', 'fieldtype': u'Currency', 'label': u'Re-Order Level', @@ -371,7 +275,7 @@ { 'colour': u'White:FFF', 'description': u'The system will create auto indent of re-order quantity when stock reaches re-order level', - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u're_order_qty', 'fieldtype': u'Currency', 'label': u'Re-Order Qty', @@ -380,7 +284,7 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'email_notify', 'fieldtype': u'Check', 'label': u'Send Email Notification when stock reaches re-order level', @@ -392,7 +296,7 @@ 'colour': u'White:FFF', 'default': u'0.00', 'description': u'You can enter the minimum quantity of this item to be ordered.', - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'min_order_qty', 'fieldtype': u'Currency', 'hidden': 0, @@ -404,7 +308,7 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'column_break1', 'fieldtype': u'Column Break', 'oldfieldtype': u'Column Break', @@ -417,7 +321,7 @@ 'colour': u'White:FFF', 'default': u'No', 'description': u'Select "Yes" if this item is used for some internal purpose in your company.', - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'is_asset_item', 'fieldtype': u'Select', 'label': u'Is Asset Item', @@ -432,7 +336,7 @@ { 'colour': u'White:FFF', 'default': u'No', - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'has_batch_no', 'fieldtype': u'Select', 'label': u'Has Batch No', @@ -448,7 +352,7 @@ 'colour': u'White:FFF', 'default': u'No', 'description': u'Selecting "Yes" will give a unique identity to each entity of this item which can be viewed in the Serial No master.', - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'has_serial_no', 'fieldtype': u'Select', 'in_filter': 1, @@ -462,7 +366,7 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'warranty_period', 'fieldtype': u'Data', 'label': u'Warranty Period (in days)', @@ -473,7 +377,7 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'end_of_life', 'fieldtype': u'Date', 'label': u'End of Life', @@ -485,7 +389,7 @@ # DocField { 'description': u'Net Weight of each Item', - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'net_weight', 'fieldtype': u'Float', 'label': u'Net Weight', @@ -494,7 +398,7 @@ # DocField { - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'weight_uom', 'fieldtype': u'Link', 'label': u'Weight UOM', @@ -505,7 +409,7 @@ # DocField { 'colour': u'White:FFF', - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'purchase_details', 'fieldtype': u'Section Break', 'label': u'Purchase Details', @@ -518,7 +422,7 @@ 'colour': u'White:FFF', 'default': u'Yes', 'description': u'Selecting "Yes" will allow this item to appear in Purchase Order , Purchase Receipt.', - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'is_purchase_item', 'fieldtype': u'Select', 'label': u'Is Purchase Item', @@ -533,7 +437,7 @@ { 'colour': u'White:FFF', 'description': u'Lead Time days is number of days by which this item is expected in your warehouse. This days is fetched in Purchase Request when you select this item.', - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'lead_time_days', 'fieldtype': u'Int', 'label': u'Lead Time Days', @@ -547,7 +451,7 @@ { 'colour': u'White:FFF', 'description': u'Default Purchase Account in which cost of the item will be debited.', - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'purchase_account', 'fieldtype': u'Link', 'label': u'Default Expense Account', @@ -562,7 +466,7 @@ { 'colour': u'White:FFF', 'description': u'Default Cost Center for tracking expense for this item.', - 'doctype': u'DocField', + u'doctype': u'DocField', 'fieldname': u'cost_center', 'fieldtype': u'Link', 'label': u'Default Cost Center', @@ -576,7 +480,7 @@ { 'colour': u'White:FFF', 'description': u'Buying Cost will be updated from Purchase Orders and Purchase Receipts.