frappe/frappe#478, more changes, removed bean

This commit is contained in:
Rushabh Mehta
2014-04-03 14:30:42 +05:30
parent d36cb5c812
commit f14b809ab5
59 changed files with 243 additions and 198 deletions

View File

@@ -65,7 +65,7 @@
<th>Basic Rate</th> <th>Basic Rate</th>
<th>Amount</th> <th>Amount</th>
</tr> </tr>
{%- for row in doclist.get({"doctype":"Sales Invoice Item"}) %} {%- for row in doc.get({"doctype":"Sales Invoice Item"}) %}
<tr> <tr>
<td style="width: 3%;">{{ row.idx }}</td> <td style="width: 3%;">{{ row.idx }}</td>
<td style="width: 20%;">{{ row.item_name }}</td> <td style="width: 20%;">{{ row.item_name }}</td>
@@ -106,7 +106,7 @@
utils.fmt_money(doc.net_total_export, currency=doc.currency) utils.fmt_money(doc.net_total_export, currency=doc.currency)
}}</td> }}</td>
</tr> </tr>
{%- for charge in doclist.get({"doctype":"Sales Taxes and Charges"}) -%} {%- for charge in doc.get({"doctype":"Sales Taxes and Charges"}) -%}
{%- if not charge.included_in_print_rate -%} {%- if not charge.included_in_print_rate -%}
<tr> <tr>
<td>{{ charge.description }}</td> <td>{{ charge.description }}</td>

View File

@@ -40,13 +40,13 @@ class Account(Document):
["name", "group_or_ledger", "report_type"], as_dict=1) ["name", "group_or_ledger", "report_type"], as_dict=1)
if not par: if not par:
throw(_("Parent account does not exists")) throw(_("Parent account does not exists"))
elif par[0]["name"] == self.name: elif par["name"] == self.name:
throw(_("You can not assign itself as parent account")) throw(_("You can not assign itself as parent account"))
elif par[0]["group_or_ledger"] != 'Group': elif par["group_or_ledger"] != 'Group':
throw(_("Parent account can not be a ledger")) throw(_("Parent account can not be a ledger"))
if par[0]["report_type"]: if par["report_type"]:
self.report_type = par[0]["report_type"] self.report_type = par["report_type"]
def validate_duplicate_account(self): def validate_duplicate_account(self):
if self.get('__islocal') or not self.name: if self.get('__islocal') or not self.name:

View File

@@ -25,5 +25,5 @@ class AccountsSettings(Document):
frappe.throw(_("Company is missing in following warehouses") + ": \n" + frappe.throw(_("Company is missing in following warehouses") + ": \n" +
"\n".join(warehouse_with_no_company)) "\n".join(warehouse_with_no_company))
for wh in warehouse_list: for wh in warehouse_list:
wh_bean = frappe.get_doc("Warehouse", wh.name) wh_doc = frappe.get_doc("Warehouse", wh.name)
wh_bean.save() wh_doc.save()

View File

@@ -1 +1,44 @@
[] [{
"doctype": "Budget Distribution",
"distribution_id": "_Test Distribution",
"fiscal_year": "_Test Fiscal Year 2013",
"budget_distribution_details": [
{
"month": "January",
"percentage_allocation": "8"
}, {
"month": "February",
"percentage_allocation": "8"
}, {
"month": "March",
"percentage_allocation": "8"
}, {
"month": "April",
"percentage_allocation": "8"
}, {
"month": "May",
"percentage_allocation": "8"
}, {
"month": "June",
"percentage_allocation": "8"
}, {
"month": "July",
"percentage_allocation": "8"
}, {
"month": "August",
"percentage_allocation": "8"
}, {
"month": "September",
"percentage_allocation": "8"
}, {
"month": "October",
"percentage_allocation": "8"
}, {
"month": "November",
"percentage_allocation": "10"
}, {
"month": "December",
"percentage_allocation": "10"
}
]
}]

View File

@@ -13,13 +13,13 @@ def import_charts():
chart = json.loads(f.read()) chart = json.loads(f.read())
country = frappe.db.get_value("Country", {"code": fname.split("_", 1)[0]}) country = frappe.db.get_value("Country", {"code": fname.split("_", 1)[0]})
if country: if country:
bean = frappe.get_doc({ doc = frappe.get_doc({
"doctype":"Chart of Accounts", "doctype":"Chart of Accounts",
"chart_name": chart.get("name"), "chart_name": chart.get("name"),
"source_file": fname, "source_file": fname,
"country": country "country": country
}).insert() }).insert()
print bean.name.encode("utf-8") print doc.name.encode("utf-8")
else: else:
print "No chart for: " + chart.get("name").encode("utf-8") print "No chart for: " + chart.get("name").encode("utf-8")

View File

@@ -13,7 +13,7 @@ class CostCenter(DocTypeNestedSet):
def autoname(self): def autoname(self):
self.name = self.cost_center_name.strip() + ' - ' + \ self.name = self.cost_center_name.strip() + ' - ' + \
frappe.get_value("Company", self.company, "abbr") frappe.db.get_value("Company", self.company, "abbr")
def validate_mandatory(self): def validate_mandatory(self):
if not self.group_or_ledger: if not self.group_or_ledger:

View File

@@ -3,4 +3,6 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import frappe
test_records = frappe.get_test_records('Fiscal Year') test_records = frappe.get_test_records('Fiscal Year')

View File

@@ -349,8 +349,8 @@ def get_default_bank_cash_account(company, voucher_type):
def get_payment_entry_from_sales_invoice(sales_invoice): def get_payment_entry_from_sales_invoice(sales_invoice):
from erpnext.accounts.utils import get_balance_on from erpnext.accounts.utils import get_balance_on
si = frappe.get_doc("Sales Invoice", sales_invoice) si = frappe.get_doc("Sales Invoice", sales_invoice)
jv = get_payment_entry(si.doc) jv = get_payment_entry(si)
jv.remark = 'Payment received against Sales Invoice %(name)s. %(remarks)s' % si.fields jv.remark = 'Payment received against Sales Invoice {0}. {1}'.format(si.name, si.remarks)
# credit customer # credit customer
jv.doclist[1].account = si.debit_to jv.doclist[1].account = si.debit_to
@@ -367,8 +367,8 @@ def get_payment_entry_from_sales_invoice(sales_invoice):
def get_payment_entry_from_purchase_invoice(purchase_invoice): def get_payment_entry_from_purchase_invoice(purchase_invoice):
from erpnext.accounts.utils import get_balance_on from erpnext.accounts.utils import get_balance_on
pi = frappe.get_doc("Purchase Invoice", purchase_invoice) pi = frappe.get_doc("Purchase Invoice", purchase_invoice)
jv = get_payment_entry(pi.doc) jv = get_payment_entry(pi)
jv.remark = 'Payment against Purchase Invoice %(name)s. %(remarks)s' % pi.fields jv.remark = 'Payment against Purchase Invoice {0}. {1}'.format(pi.name, pi.remarks)
# credit supplier # credit supplier
jv.doclist[1].account = pi.credit_to jv.doclist[1].account = pi.credit_to
@@ -384,7 +384,7 @@ def get_payment_entry_from_purchase_invoice(purchase_invoice):
def get_payment_entry(doc): def get_payment_entry(doc):
bank_account = get_default_bank_cash_account(doc.company, "Bank Voucher") bank_account = get_default_bank_cash_account(doc.company, "Bank Voucher")
jv = frappe.new_bean('Journal Voucher') jv = frappe.new_doc('Journal Voucher')
jv.voucher_type = 'Bank Voucher' jv.voucher_type = 'Bank Voucher'
jv.company = doc.company jv.company = doc.company

View File

@@ -6,5 +6,5 @@ import frappe
from frappe.model.document import Document from frappe.model.document import Document
class PurchaseTaxesAndCharges(Document): class PurchaseTaxesandCharges(Document):
pass pass

View File

@@ -5,5 +5,5 @@ from __future__ import unicode_literals
import frappe import frappe
from frappe.model.document import Document from frappe.model.document import Document
class PurchaseTaxesAndChargesMaster(Document): class PurchaseTaxesandChargesMaster(Document):
pass pass

View File

@@ -192,7 +192,7 @@ class SalesInvoice(SellingController):
for item in self.get("entries"): for item in self.get("entries"):
if item.get('item_code'): if item.get('item_code'):
for fname, val in get_pos_settings_item_details(pos, for fname, val in get_pos_settings_item_details(pos,
frappe._dict(item.fields), pos).items(): frappe._dict(item.as_dict()), pos).items():
if (not for_validate) or (for_validate and not item.get(fname)): if (not for_validate) or (for_validate and not item.get(fname)):
item.set(fname, val) item.set(fname, val)
@@ -696,7 +696,7 @@ def manage_recurring_invoices(next_date=None, commit=True):
raise Exception, exception_message raise Exception, exception_message
def make_new_invoice(ref_wrapper, posting_date): def make_new_invoice(ref_wrapper, posting_date):
from frappe.model.bean import clone from frappe.model.doc import clone
from erpnext.accounts.utils import get_fiscal_year from erpnext.accounts.utils import get_fiscal_year
new_invoice = clone(ref_wrapper) new_invoice = clone(ref_wrapper)
@@ -736,7 +736,7 @@ def send_notification(new_rv):
from frappe.core.doctype.print_format.print_format import get_html from frappe.core.doctype.print_format.print_format import get_html
frappe.sendmail(new_rv.notification_email_address, frappe.sendmail(new_rv.notification_email_address,
subject="New Invoice : " + new_rv.name, subject="New Invoice : " + new_rv.name,
message = get_html(new_rv.doc, new_rv, "SalesInvoice")) message = get_html(new_rv, new_rv, "SalesInvoice"))
def notify_errors(inv, customer, owner): def notify_errors(inv, customer, owner):
from frappe.utils.user import get_system_managers from frappe.utils.user import get_system_managers
@@ -797,8 +797,8 @@ def make_delivery_note(source_name, target_doc=None):
from frappe.model.mapper import get_mapped_doc from frappe.model.mapper import get_mapped_doc
def set_missing_values(source, target): def set_missing_values(source, target):
bean = frappe.get_doc(target) doc = frappe.get_doc(target)
bean.run_method("onload_post_render") doc.run_method("onload_post_render")
def update_item(source_doc, target_doc, source_parent): def update_item(source_doc, target_doc, source_parent):
target_doc.base_amount = (flt(source_doc.qty) - flt(source_doc.delivered_qty)) * \ target_doc.base_amount = (flt(source_doc.qty) - flt(source_doc.delivered_qty)) * \

View File

@@ -4,7 +4,7 @@
import frappe import frappe
import unittest, json import unittest, json
from frappe.utils import flt from frappe.utils import flt
from frappe.model.bean import DocstatusTransitionError, TimestampMismatchError from frappe.model.doc import DocstatusTransitionError, TimestampMismatchError
from erpnext.accounts.utils import get_stock_and_account_difference from erpnext.accounts.utils import get_stock_and_account_difference
from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import set_perpetual_inventory from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import set_perpetual_inventory

View File

@@ -6,5 +6,5 @@ import frappe
from frappe.model.document import Document from frappe.model.document import Document
class SalesTaxesAndCharges(Document): class SalesTaxesandCharges(Document):
pass pass

View File

@@ -6,7 +6,7 @@ import frappe
from frappe.utils import cint from frappe.utils import cint
from frappe.model.controller import DocListController from frappe.model.controller import DocListController
class SalesTaxesAndChargesMaster(DocListController): class SalesTaxesandChargesMaster(DocListController):
def validate(self): def validate(self):
if self.is_default == 1: if self.is_default == 1:
frappe.db.sql("""update `tabSales Taxes and Charges Master` set is_default = 0 frappe.db.sql("""update `tabSales Taxes and Charges Master` set is_default = 0

View File

@@ -66,7 +66,7 @@ class ShippingRule(DocListController):
for i in xrange(0, len(self.shipping_rule_conditions)): for i in xrange(0, len(self.shipping_rule_conditions)):
for j in xrange(i+1, len(self.shipping_rule_conditions)): for j in xrange(i+1, len(self.shipping_rule_conditions)):
d1, d2 = self.shipping_rule_conditions[i], self.shipping_rule_conditions[j] d1, d2 = self.shipping_rule_conditions[i], self.shipping_rule_conditions[j]
if d1.fields != d2.fields: if d1.as_dict() != d2.as_dict():
# in our case, to_value can be zero, hence pass the from_value if so # in our case, to_value can be zero, hence pass the from_value if so
range_a = (d1.from_value, d1.to_value or d1.from_value) range_a = (d1.from_value, d1.to_value or d1.from_value)
range_b = (d2.from_value, d2.to_value or d2.from_value) range_b = (d2.from_value, d2.to_value or d2.from_value)

View File

@@ -25,8 +25,8 @@ def _get_party_details(party=None, account=None, party_type="Customer", company=
if not ignore_permissions and not frappe.has_permission(party_type, "read", party): if not ignore_permissions and not frappe.has_permission(party_type, "read", party):
frappe.throw("Not Permitted", frappe.PermissionError) frappe.throw("Not Permitted", frappe.PermissionError)
party_bean = frappe.get_doc(party_type, party) party_doc = frappe.get_doc(party_type, party)
party = party_bean.doc party = party_doc
set_address_details(out, party, party_type) set_address_details(out, party, party_type)
set_contact_details(out, party, party_type) set_contact_details(out, party, party_type)
@@ -41,7 +41,7 @@ def _get_party_details(party=None, account=None, party_type="Customer", company=
out["sales_team"] = [{ out["sales_team"] = [{
"sales_person": d.sales_person, "sales_person": d.sales_person,
"sales_designation": d.sales_designation "sales_designation": d.sales_designation
} for d in party_bean.get("sales_team")] } for d in party_doc.get("sales_team")]
return out return out

View File

@@ -184,8 +184,8 @@ def make_purchase_receipt(source_name, target_doc=None):
from frappe.model.mapper import get_mapped_doc from frappe.model.mapper import get_mapped_doc
def set_missing_values(source, target): def set_missing_values(source, target):
bean = frappe.get_doc(target) doc = frappe.get_doc(target)
bean.run_method("set_missing_values") doc.run_method("set_missing_values")
def update_item(obj, target, source_parent): def update_item(obj, target, source_parent):
target.qty = flt(obj.qty) - flt(obj.received_qty) target.qty = flt(obj.qty) - flt(obj.received_qty)
@@ -223,8 +223,8 @@ def make_purchase_invoice(source_name, target_doc=None):
from frappe.model.mapper import get_mapped_doc from frappe.model.mapper import get_mapped_doc
def set_missing_values(source, target): def set_missing_values(source, target):
bean = frappe.get_doc(target) doc = frappe.get_doc(target)
bean.run_method("set_missing_values") doc.run_method("set_missing_values")
def update_item(obj, target, source_parent): def update_item(obj, target, source_parent):
target.amount = flt(obj.amount) - flt(obj.billed_amt) target.amount = flt(obj.amount) - flt(obj.billed_amt)

View File

@@ -26,8 +26,8 @@ class TestPurchaseOrder(unittest.TestCase):
self.assertEquals(len(pr), len(test_records[0])) self.assertEquals(len(pr), len(test_records[0]))
pr[0]["naming_series"] = "_T-Purchase Receipt-" pr[0]["naming_series"] = "_T-Purchase Receipt-"
pr_bean = frappe.get_doc(pr) pr_doc = frappe.get_doc(pr)
pr_bean.insert() pr_doc.insert()
def test_ordered_qty(self): def test_ordered_qty(self):
frappe.db.sql("delete from tabBin") frappe.db.sql("delete from tabBin")
@@ -54,9 +54,9 @@ class TestPurchaseOrder(unittest.TestCase):
pr[0]["posting_date"] = "2013-05-12" pr[0]["posting_date"] = "2013-05-12"
pr[0]["naming_series"] = "_T-Purchase Receipt-" pr[0]["naming_series"] = "_T-Purchase Receipt-"
pr[1]["qty"] = 4.0 pr[1]["qty"] = 4.0
pr_bean = frappe.get_doc(pr) pr_doc = frappe.get_doc(pr)
pr_bean.insert() pr_doc.insert()
pr_bean.submit() pr_doc.submit()
self.assertEquals(flt(frappe.db.get_value("Bin", {"item_code": "_Test Item", self.assertEquals(flt(frappe.db.get_value("Bin", {"item_code": "_Test Item",
"warehouse": "_Test Warehouse - _TC"}, "ordered_qty")), 6.0) "warehouse": "_Test Warehouse - _TC"}, "ordered_qty")), 6.0)
@@ -67,9 +67,9 @@ class TestPurchaseOrder(unittest.TestCase):
pr1[0]["naming_series"] = "_T-Purchase Receipt-" pr1[0]["naming_series"] = "_T-Purchase Receipt-"
pr1[0]["posting_date"] = "2013-05-12" pr1[0]["posting_date"] = "2013-05-12"
pr1[1]["qty"] = 8 pr1[1]["qty"] = 8
pr1_bean = frappe.get_doc(pr1) pr1_doc = frappe.get_doc(pr1)
pr1_bean.insert() pr1_doc.insert()
pr1_bean.submit() pr1_doc.submit()
self.assertEquals(flt(frappe.db.get_value("Bin", {"item_code": "_Test Item", self.assertEquals(flt(frappe.db.get_value("Bin", {"item_code": "_Test Item",
"warehouse": "_Test Warehouse - _TC"}, "ordered_qty")), 0.0) "warehouse": "_Test Warehouse - _TC"}, "ordered_qty")), 0.0)

View File

@@ -55,9 +55,9 @@ def make_purchase_order(source_name, target_doc=None):
from frappe.model.mapper import get_mapped_doc from frappe.model.mapper import get_mapped_doc
def set_missing_values(source, target): def set_missing_values(source, target):
bean = frappe.get_doc(target) doc = frappe.get_doc(target)
bean.run_method("set_missing_values") doc.run_method("set_missing_values")
bean.run_method("get_schedule_dates") doc.run_method("get_schedule_dates")
def update_item(obj, target, source_parent): def update_item(obj, target, source_parent):
target.conversion_factor = 1 target.conversion_factor = 1

View File

@@ -86,15 +86,16 @@ class AccountsController(TransactionBase):
def set_missing_item_details(self): def set_missing_item_details(self):
"""set missing item values""" """set missing item values"""
from erpnext.stock.get_item_details import get_item_details from erpnext.stock.get_item_details import get_item_details
for item in self.get(self.fname): if hasattr(self, "fname"):
if item.get("item_code"): for item in self.get(self.fname):
args = item.fields.copy() if item.get("item_code"):
args.update(self.fields) args = item.as_dict()
ret = get_item_details(args) args.update(self.as_dict())
for fieldname, value in ret.items(): ret = get_item_details(args)
if self.meta.get_field(fieldname, parentfield=self.fname) and \ for fieldname, value in ret.items():
item.get(fieldname) is None and value is not None: if self.meta.get_field(fieldname, parentfield=self.fname) and \
item.set(fieldname, value) item.get(fieldname) is None and value is not None:
item.set(fieldname, value)
def set_taxes(self, tax_parentfield, tax_master_field): def set_taxes(self, tax_parentfield, tax_master_field):
if not self.meta.get_field(tax_parentfield): if not self.meta.get_field(tax_parentfield):

View File

@@ -32,12 +32,12 @@ class SellingController(StockController):
self.set_taxes("other_charges", "taxes_and_charges") self.set_taxes("other_charges", "taxes_and_charges")
def set_missing_lead_customer_details(self): def set_missing_lead_customer_details(self):
if self.customer: if getattr(self, "customer", None):
from erpnext.accounts.party import _get_party_details from erpnext.accounts.party import _get_party_details
self.update_if_missing(_get_party_details(self.customer, self.update_if_missing(_get_party_details(self.customer,
ignore_permissions=self.ignore_permissions)) ignore_permissions=self.ignore_permissions))
elif self.lead: elif getattr(self, "lead", None):
from erpnext.selling.doctype.lead.lead import get_lead_details from erpnext.selling.doctype.lead.lead import get_lead_details
self.update_if_missing(get_lead_details(self.lead)) self.update_if_missing(get_lead_details(self.lead))

View File

@@ -86,7 +86,7 @@ def update_feed(doc, method=None):
if method in ['on_update', 'on_submit']: if method in ['on_update', 'on_submit']:
subject, color = feed_dict.get(doc.doctype, [None, None]) subject, color = feed_dict.get(doc.doctype, [None, None])
if subject: if subject:
make_feed('', doc.doctype, doc.name, doc.owner, subject % doc.fields, color) make_feed('', doc.doctype, doc.name, doc.owner, subject % doc.as_dict(), color)
def make_comment_feed(doc, method): def make_comment_feed(doc, method):
"""add comment to feed""" """add comment to feed"""

View File

@@ -1 +1,4 @@
[] [
{"doctype":"Department", "department_name":"_Test Department"},
{"doctype":"Department", "department_name":"_Test Department 1"}
]

View File

@@ -43,7 +43,7 @@
"icon": "icon-cog", "icon": "icon-cog",
"idx": 1, "idx": 1,
"issingle": 1, "issingle": 1,
"modified": "2014-02-19 17:40:18.000000", "modified": "2014-02-19 17:40:18.000001",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "HR", "module": "HR",
"name": "HR Settings", "name": "HR Settings",

View File

@@ -37,7 +37,7 @@ class JobsMailbox(POP3Mailbox):
applicant.ignore_mandatory = True applicant.ignore_mandatory = True
applicant.insert() applicant.insert()
mail.save_attachments_in_doc(applicant.doc) mail.save_attachments_in_doc(applicant)
_make(content=mail.content, sender=mail.from_email, subject=mail.subject or "No Subject", _make(content=mail.content, sender=mail.from_email, subject=mail.subject or "No Subject",
doctype="Job Applicant", name=applicant.name, sent_or_received="Received") doctype="Job Applicant", name=applicant.name, sent_or_received="Received")

View File

@@ -136,7 +136,7 @@ class LeaveApplication(DocListController):
and (from_date between %(from_date)s and %(to_date)s and (from_date between %(from_date)s and %(to_date)s
or to_date between %(from_date)s and %(to_date)s or to_date between %(from_date)s and %(to_date)s
or %(from_date)s between from_date and to_date) or %(from_date)s between from_date and to_date)
and name != %(name)s""", self.fields, as_dict = 1): and name != %(name)s""", self.as_dict(), as_dict = 1):
msgprint("Employee : %s has already applied for %s between %s and %s on %s. Please refer Leave Application : <a href=\"#Form/Leave Application/%s\">%s</a>" % (self.employee, cstr(d['leave_type']), formatdate(d['from_date']), formatdate(d['to_date']), formatdate(d['posting_date']), d['name'], d['name']), raise_exception = OverlapError) msgprint("Employee : %s has already applied for %s between %s and %s on %s. Please refer Leave Application : <a href=\"#Form/Leave Application/%s\">%s</a>" % (self.employee, cstr(d['leave_type']), formatdate(d['from_date']), formatdate(d['to_date']), formatdate(d['posting_date']), d['name'], d['name']), raise_exception = OverlapError)

View File

@@ -129,11 +129,11 @@ class SalaryManager(Document):
for ss in ss_list: for ss in ss_list:
ss_obj = frappe.get_doc("Salary Slip",ss[0]) ss_obj = frappe.get_doc("Salary Slip",ss[0])
try: try:
frappe.db.set(ss_obj.doc, 'email_check', cint(self.send_mail)) frappe.db.set(ss_obj, 'email_check', cint(self.send_mail))
if cint(self.send_email) == 1: if cint(self.send_email) == 1:
ss_obj.send_mail_funct() ss_obj.send_mail_funct()
frappe.db.set(ss_obj.doc, 'docstatus', 1) frappe.db.set(ss_obj, 'docstatus', 1)
except Exception,e: except Exception,e:
not_submitted_ss.append(ss[0]) not_submitted_ss.append(ss[0])
msgprint(e) msgprint(e)

View File

@@ -153,7 +153,7 @@ def get_item_details(item):
def make_stock_entry(production_order_id, purpose): def make_stock_entry(production_order_id, purpose):
production_order = frappe.get_doc("Production Order", production_order_id) production_order = frappe.get_doc("Production Order", production_order_id)
stock_entry = frappe.new_bean("Stock Entry") stock_entry = frappe.new_doc("Stock Entry")
stock_entry.purpose = purpose stock_entry.purpose = purpose
stock_entry.production_order = production_order_id stock_entry.production_order = production_order_id
stock_entry.company = production_order.company stock_entry.company = production_order.company

View File

@@ -17,9 +17,9 @@ class TestProductionOrder(unittest.TestCase):
frappe.db.sql("""delete from `tabBin`""") frappe.db.sql("""delete from `tabBin`""")
frappe.db.sql("""delete from `tabGL Entry`""") frappe.db.sql("""delete from `tabGL Entry`""")
pro_bean = frappe.copy_doc(test_records[0]) pro_doc = frappe.copy_doc(test_records[0])
pro_bean.insert() pro_doc.insert()
pro_bean.submit() pro_doc.submit()
from erpnext.stock.doctype.stock_entry.test_stock_entry import test_records as se_test_records from erpnext.stock.doctype.stock_entry.test_stock_entry import test_records as se_test_records
mr1 = frappe.copy_doc(se_test_records[0]) mr1 = frappe.copy_doc(se_test_records[0])
@@ -31,7 +31,7 @@ class TestProductionOrder(unittest.TestCase):
mr2.insert() mr2.insert()
mr2.submit() mr2.submit()
stock_entry = make_stock_entry(pro_bean.name, "Manufacture/Repack") stock_entry = make_stock_entry(pro_doc.name, "Manufacture/Repack")
stock_entry = frappe.get_doc(stock_entry) stock_entry = frappe.get_doc(stock_entry)
stock_entry.fiscal_year = "_Test Fiscal Year 2013" stock_entry.fiscal_year = "_Test Fiscal Year 2013"
stock_entry.fg_completed_qty = 4 stock_entry.fg_completed_qty = 4
@@ -40,12 +40,12 @@ class TestProductionOrder(unittest.TestCase):
stock_entry.run_method("get_items") stock_entry.run_method("get_items")
stock_entry.submit() stock_entry.submit()
self.assertEqual(frappe.db.get_value("Production Order", pro_bean.name, self.assertEqual(frappe.db.get_value("Production Order", pro_doc.name,
"produced_qty"), 4) "produced_qty"), 4)
self.assertEqual(frappe.db.get_value("Bin", {"item_code": "_Test FG Item", self.assertEqual(frappe.db.get_value("Bin", {"item_code": "_Test FG Item",
"warehouse": "_Test Warehouse 1 - _TC"}, "planned_qty"), 6) "warehouse": "_Test Warehouse 1 - _TC"}, "planned_qty"), 6)
return pro_bean.name return pro_doc.name
def test_over_production(self): def test_over_production(self):
from erpnext.stock.doctype.stock_entry.stock_entry import StockOverProductionError from erpnext.stock.doctype.stock_entry.stock_entry import StockOverProductionError

View File

@@ -214,7 +214,7 @@ class ProductionPlanningTool(Document):
pro_list = [] pro_list = []
for key in items: for key in items:
pro = frappe.new_bean("Production Order") pro = frappe.new_doc("Production Order")
pro.update(items[key]) pro.update(items[key])
frappe.flags.mute_messages = True frappe.flags.mute_messages = True

View File

@@ -34,8 +34,8 @@ def add_sales_communication(subject, content, sender, real_name, mail=None,
if mail: if mail:
# save attachments to parent if from mail # save attachments to parent if from mail
bean = frappe.get_doc(parent_doctype, parent_name) doc = frappe.get_doc(parent_doctype, parent_name)
mail.save_attachments_in_doc(bean.doc) mail.save_attachments_in_doc(doc)
class SalesMailbox(POP3Mailbox): class SalesMailbox(POP3Mailbox):
def setup(self, args=None): def setup(self, args=None):

View File

@@ -42,8 +42,7 @@ class Lead(SellingController):
"owner": self.lead_owner, "owner": self.lead_owner,
"subject": ('Contact ' + cstr(self.lead_name)), "subject": ('Contact ' + cstr(self.lead_name)),
"description": ('Contact ' + cstr(self.lead_name)) + \ "description": ('Contact ' + cstr(self.lead_name)) + \
(self.contact_by and ('. By : ' + cstr(self.contact_by)) or '') + \ (self.contact_by and ('. By : ' + cstr(self.contact_by)) or '')
(self.remark and ('.To Discuss : ' + cstr(self.remark)) or '')
}, force) }, force)
def check_email_id_is_unique(self): def check_email_id_is_unique(self):
@@ -117,7 +116,7 @@ def make_opportunity(source_name, target_doc=None):
} }
}}, target_doc) }}, target_doc)
return [d if isinstance(d, dict) else d.fields for d in doclist] return doclist
@frappe.whitelist() @frappe.whitelist()
def get_lead_details(lead): def get_lead_details(lead):
@@ -126,8 +125,8 @@ def get_lead_details(lead):
from erpnext.accounts.party import set_address_details from erpnext.accounts.party import set_address_details
out = frappe._dict() out = frappe._dict()
lead_bean = frappe.get_doc("Lead", lead) lead_doc = frappe.get_doc("Lead", lead)
lead = lead_bean.doc lead = lead_doc
out.update({ out.update({
"territory": lead.territory, "territory": lead.territory,

View File

@@ -3,11 +3,11 @@
from __future__ import unicode_literals from __future__ import unicode_literals
test_records = frappe.get_test_records('Lead')
import frappe import frappe
import unittest import unittest
test_records = frappe.get_test_records('Lead')
class TestLead(unittest.TestCase): class TestLead(unittest.TestCase):
def test_make_customer(self): def test_make_customer(self):
print "test_make_customer" print "test_make_customer"

View File

@@ -253,8 +253,8 @@ class SalesOrder(SellingController):
return "order" if self.docstatus==1 else None return "order" if self.docstatus==1 else None
def set_missing_values(source, target): def set_missing_values(source, target):
bean = frappe.get_doc(target) doc = frappe.get_doc(target)
bean.run_method("onload_post_render") doc.run_method("onload_post_render")
@frappe.whitelist() @frappe.whitelist()
def make_material_request(source_name, target_doc=None): def make_material_request(source_name, target_doc=None):
@@ -277,7 +277,7 @@ def make_material_request(source_name, target_doc=None):
} }
}, target_doc, postprocess) }, target_doc, postprocess)
return [(d if isinstance(d, dict) else d.fields) for d in doclist] return doclist
@frappe.whitelist() @frappe.whitelist()
def make_delivery_note(source_name, target_doc=None): def make_delivery_note(source_name, target_doc=None):
@@ -322,9 +322,9 @@ def make_delivery_note(source_name, target_doc=None):
@frappe.whitelist() @frappe.whitelist()
def make_sales_invoice(source_name, target_doc=None): def make_sales_invoice(source_name, target_doc=None):
def set_missing_values(source, target): def set_missing_values(source, target):
bean = frappe.get_doc(target) doc = frappe.get_doc(target)
bean.is_pos = 0 doc.is_pos = 0
bean.run_method("onload_post_render") doc.run_method("onload_post_render")
def update_item(obj, target, source_parent): def update_item(obj, target, source_parent):
target.amount = flt(obj.amount) - flt(obj.billed_amt) target.amount = flt(obj.amount) - flt(obj.billed_amt)

View File

@@ -281,21 +281,20 @@ class TestSalesOrder(unittest.TestCase):
def test_warehouse_user(self): def test_warehouse_user(self):
frappe.defaults.add_default("Warehouse", "_Test Warehouse 1 - _TC1", "test@example.com", "Restriction") frappe.defaults.add_default("Warehouse", "_Test Warehouse 1 - _TC1", "test@example.com", "Restriction")
frappe.get_doc("User", "test@example.com").get_controller()\ frappe.get_doc("User", "test@example.com")\
.add_roles("Sales User", "Sales Manager", "Material User", "Material Manager") .add_roles("Sales User", "Sales Manager", "Material User", "Material Manager")
frappe.get_doc("User", "test2@example.com").get_controller()\ frappe.get_doc("User", "test2@example.com")\
.add_roles("Sales User", "Sales Manager", "Material User", "Material Manager") .add_roles("Sales User", "Sales Manager", "Material User", "Material Manager")
frappe.set_user("test@example.com") frappe.set_user("test@example.com")
from frappe.model.bean import BeanPermissionError
so = frappe.copy_doc(test_records[0]) so = frappe.copy_doc(test_records[0])
so.company = "_Test Company 1" so.company = "_Test Company 1"
so.conversion_rate = 0.02 so.conversion_rate = 0.02
so.plc_conversion_rate = 0.02 so.plc_conversion_rate = 0.02
so.doclist[1].warehouse = "_Test Warehouse 2 - _TC1" so.doclist[1].warehouse = "_Test Warehouse 2 - _TC1"
self.assertRaises(BeanPermissionError, so.insert) self.assertRaises(frappe.PermissionError, so.insert)
frappe.set_user("test2@example.com") frappe.set_user("test2@example.com")
so.insert() so.insert()

View File

@@ -78,7 +78,7 @@ class Company(Document):
"title": self.name + " Home", "title": self.name + " Home",
"published": 1, "published": 1,
"description": "Standard Home Page for " + self.name, "description": "Standard Home Page for " + self.name,
"main_section": webfile.read() % self.fields "main_section": webfile.read() % self.as_dict()
}).insert() }).insert()
# update in home page in settings # update in home page in settings
@@ -163,12 +163,12 @@ class Company(Document):
] ]
for cc in cc_list: for cc in cc_list:
cc.update({"doctype": "Cost Center"}) cc.update({"doctype": "Cost Center"})
cc_bean = frappe.get_doc(cc) cc_doc = frappe.get_doc(cc)
cc_bean.ignore_permissions = True cc_doc.ignore_permissions = True
if cc.get("cost_center_name") == self.name: if cc.get("cost_center_name") == self.name:
cc_bean.ignore_mandatory = True cc_doc.ignore_mandatory = True
cc_bean.insert() cc_doc.insert()
frappe.db.set(self, "cost_center", "Main - " + self.abbr) frappe.db.set(self, "cost_center", "Main - " + self.abbr)

View File

@@ -13,7 +13,7 @@ class TestCompany(unittest.TestCase):
print "Country: ", country print "Country: ", country
print "Chart Name: ", chart_name print "Chart Name: ", chart_name
company_bean = frappe.get_doc({ company_doc = frappe.get_doc({
"doctype": "Company", "doctype": "Company",
"company_name": "_Test Company 2", "company_name": "_Test Company 2",
"abbr": "_TC2", "abbr": "_TC2",
@@ -22,7 +22,7 @@ class TestCompany(unittest.TestCase):
"chart_of_accounts": chart_name "chart_of_accounts": chart_name
}) })
company_bean.insert() company_doc.insert()
self.assertTrue(frappe.db.sql("""select count(*) from tabAccount self.assertTrue(frappe.db.sql("""select count(*) from tabAccount
where company='_Test Company 2'""")[0][0] > 10) where company='_Test Company 2'""")[0][0] > 10)

View File

@@ -60,13 +60,13 @@ class GlobalDefaults(Document):
raise_exception=1) raise_exception=1)
def update_control_panel(self): def update_control_panel(self):
cp_bean = frappe.get_doc("Control Panel") cp_doc = frappe.get_doc("Control Panel")
if self.country: if self.country:
cp_bean.country = self.country cp_doc.country = self.country
if self.time_zone: if self.time_zone:
cp_bean.time_zone = self.time_zone cp_doc.time_zone = self.time_zone
cp_bean.ignore_permissions = True cp_doc.ignore_permissions = True
cp_bean.save() cp_doc.save()
def get_defaults(self): def get_defaults(self):
return frappe.defaults.get_defaults() return frappe.defaults.get_defaults()

View File

@@ -183,9 +183,9 @@ class TestItem(unittest.TestCase):
for name in frappe.db.sql_list("""select name from `tabItem Group` for name in frappe.db.sql_list("""select name from `tabItem Group`
where parent_item_group='_Test Item Group C'"""): where parent_item_group='_Test Item Group C'"""):
bean = frappe.get_doc("Item Group", name) doc = frappe.get_doc("Item Group", name)
bean.parent_item_group = "_Test Item Group B" doc.parent_item_group = "_Test Item Group B"
bean.save() doc.save()
self.test_basic_tree() self.test_basic_tree()

View File

@@ -169,6 +169,6 @@ def set_by_naming_series(doctype, fieldname, naming_series, hide_name_field=True
ifnull({fieldname}, '')=''""".format(doctype=doctype, fieldname=fieldname)) ifnull({fieldname}, '')=''""".format(doctype=doctype, fieldname=fieldname))
def get_default_naming_series(doctype): def get_default_naming_series(doctype):
naming_series = frappe.model.get_meta(doctype).get_field("naming_series").options or "" naming_series = frappe.get_meta(doctype).get_field("naming_series").options or ""
naming_series = naming_series.split("\n") naming_series = naming_series.split("\n")
return naming_series[0] or naming_series[1] return naming_series[0] or naming_series[1]

View File

@@ -139,7 +139,7 @@ def feature_setup():
def set_single_defaults(): def set_single_defaults():
for dt in frappe.db.sql_list("""select name from `tabDocType` where issingle=1"""): for dt in frappe.db.sql_list("""select name from `tabDocType` where issingle=1"""):
default_values = frappe.db.sql("""select fieldname, `default` from `tabDocField` default_values = frappe.db.sql("""select fieldname, `default` from `tabDocField`
where parent=%s""", dt, as_dict=True) where parent=%s""", dt)
if default_values: if default_values:
try: try:
b = frappe.get_doc(dt, dt) b = frappe.get_doc(dt, dt)

View File

@@ -202,7 +202,7 @@ def create_email_digest():
# scheduler errors digest # scheduler errors digest
if companies: if companies:
edigest = frappe.new_bean("Email Digest") edigest = frappe.new_doc("Email Digest")
edigest.update({ edigest.update({
"name": "Scheduler Errors", "name": "Scheduler Errors",
"company": companies[0], "company": companies[0],

View File

@@ -222,9 +222,8 @@ class DeliveryNote(SellingController):
AND docstatus = 1""", self.name) AND docstatus = 1""", self.name)
if res: if res:
from frappe.model.bean import Bean
for r in res: for r in res:
ps = Bean(dt='Packing Slip', dn=r[0]) ps = frappe.get_doc('Packing Slip', r[0])
ps.cancel() ps.cancel()
frappe.msgprint(_("Packing Slip(s) Cancelled")) frappe.msgprint(_("Packing Slip(s) Cancelled"))

View File

@@ -8,7 +8,7 @@ import frappe
class TestItem(unittest.TestCase): class TestItem(unittest.TestCase):
def test_duplicate_item(self): def test_duplicate_item(self):
from erpnext.stock.doctype.item_price.item_price import ItemPriceDuplicateItem from erpnext.stock.doctype.item_price.item_price import ItemPriceDuplicateItem
bean = frappe.copy_doc(test_records[0]) doc = frappe.copy_doc(test_records[0])
self.assertRaises(ItemPriceDuplicateItem, bean.insert) self.assertRaises(ItemPriceDuplicateItem, doc.insert)
test_records = frappe.get_test_records('Item Price') test_records = frappe.get_test_records('Item Price')

View File

@@ -34,13 +34,13 @@ class LandedCostWizard(Document):
total_amt = self.get_total_pr_amt(purchase_receipts) total_amt = self.get_total_pr_amt(purchase_receipts)
for pr in purchase_receipts: for pr in purchase_receipts:
pr_bean = frappe.get_doc('Purchase Receipt', pr) pr_doc = frappe.get_doc('Purchase Receipt', pr)
pr_items = pr_bean.get("purchase_tax_details") pr_items = pr_doc.get("purchase_tax_details")
for lc in self.get("landed_cost_details"): for lc in self.get("landed_cost_details"):
amt = flt(lc.amount) * flt(pr_bean.net_total)/ flt(total_amt) amt = flt(lc.amount) * flt(pr_doc.net_total)/ flt(total_amt)
matched_row = pr_bean.get("other_charges", { matched_row = pr_doc.get("other_charges", {
"category": "Valuation", "category": "Valuation",
"add_deduct_tax": "Add", "add_deduct_tax": "Add",
"charge_type": "Actual", "charge_type": "Actual",
@@ -48,7 +48,7 @@ class LandedCostWizard(Document):
}) })
if not matched_row: # add if not exists if not matched_row: # add if not exists
ch = pr_bean.append("other_charges") ch = pr_doc.append("other_charges")
ch.category = 'Valuation' ch.category = 'Valuation'
ch.add_deduct_tax = 'Add' ch.add_deduct_tax = 'Add'
ch.charge_type = 'Actual' ch.charge_type = 'Actual'
@@ -64,8 +64,8 @@ class LandedCostWizard(Document):
matched_row[0].tax_amount = amt matched_row[0].tax_amount = amt
matched_row[0].cost_center = lc.cost_center matched_row[0].cost_center = lc.cost_center
pr_bean.run_method("validate") pr_doc.run_method("validate")
for d in pr_bean.get_all_children(): for d in pr_doc.get_all_children():
d.db_update() d.db_update()
def get_total_pr_amt(self, purchase_receipts): def get_total_pr_amt(self, purchase_receipts):
@@ -75,9 +75,9 @@ class LandedCostWizard(Document):
def cancel_pr(self, purchase_receipts): def cancel_pr(self, purchase_receipts):
for pr in purchase_receipts: for pr in purchase_receipts:
pr_bean = frappe.get_doc("Purchase Receipt", pr) pr_doc = frappe.get_doc("Purchase Receipt", pr)
pr_bean.run_method("update_ordered_qty") pr_doc.run_method("update_ordered_qty")
frappe.db.sql("""delete from `tabStock Ledger Entry` frappe.db.sql("""delete from `tabStock Ledger Entry`
where voucher_type='Purchase Receipt' and voucher_no=%s""", pr) where voucher_type='Purchase Receipt' and voucher_no=%s""", pr)
@@ -86,7 +86,7 @@ class LandedCostWizard(Document):
def submit_pr(self, purchase_receipts): def submit_pr(self, purchase_receipts):
for pr in purchase_receipts: for pr in purchase_receipts:
pr_bean = frappe.get_doc("Purchase Receipt", pr) pr_doc = frappe.get_doc("Purchase Receipt", pr)
pr_bean.run_method("update_ordered_qty") pr_doc.run_method("update_ordered_qty")
pr_bean.run_method("update_stock") pr_doc.run_method("update_stock")
pr_bean.run_method("make_gl_entries") pr_doc.run_method("make_gl_entries")

View File

@@ -165,11 +165,11 @@ class MaterialRequest(BuyingController):
self.per_ordered = flt((per_ordered / flt(len(item_doclist))) * 100.0, 2) self.per_ordered = flt((per_ordered / flt(len(item_doclist))) * 100.0, 2)
frappe.db.set_value(self.doctype, self.name, "per_ordered", self.per_ordered) frappe.db.set_value(self.doctype, self.name, "per_ordered", self.per_ordered)
def update_completed_qty(bean, method): def update_completed_qty(doc, method):
if bean.doctype == "Stock Entry": if doc.doctype == "Stock Entry":
material_request_map = {} material_request_map = {}
for d in bean.get("mtn_details"): for d in doc.get("mtn_details"):
if d.material_request: if d.material_request:
material_request_map.setdefault(d.material_request, []).append(d.material_request_item) material_request_map.setdefault(d.material_request, []).append(d.material_request_item)
@@ -182,17 +182,17 @@ def update_completed_qty(bean, method):
+ _(mr_doctype.get_label("status")) + " = %s. " % _(mr_obj.status) + _(mr_doctype.get_label("status")) + " = %s. " % _(mr_obj.status)
+ _("Cannot continue."), exc=frappe.InvalidStatusError) + _("Cannot continue."), exc=frappe.InvalidStatusError)
_update_requested_qty(bean, mr_obj, mr_items) _update_requested_qty(doc, mr_obj, mr_items)
# update ordered percentage and qty # update ordered percentage and qty
mr_obj.update_completed_qty(mr_items) mr_obj.update_completed_qty(mr_items)
def _update_requested_qty(bean, mr_obj, mr_items): def _update_requested_qty(doc, mr_obj, mr_items):
"""update requested qty (before ordered_qty is updated)""" """update requested qty (before ordered_qty is updated)"""
from erpnext.stock.utils import update_bin from erpnext.stock.utils import update_bin
for mr_item_name in mr_items: for mr_item_name in mr_items:
mr_item = mr_obj.get("indent_details", {"name": mr_item_name}) mr_item = mr_obj.get("indent_details", {"name": mr_item_name})
se_detail = bean.get("mtn_details", {"material_request": mr_obj.name, se_detail = doc.get("mtn_details", {"material_request": mr_obj.name,
"material_request_item": mr_item_name}) "material_request_item": mr_item_name})
if mr_item and se_detail: if mr_item and se_detail:
@@ -215,7 +215,7 @@ def _update_requested_qty(bean, mr_obj, mr_items):
"item_code": se_detail.item_code, "item_code": se_detail.item_code,
"warehouse": se_detail.t_warehouse, "warehouse": se_detail.t_warehouse,
"indented_qty": (se_detail.docstatus==2 and 1 or -1) * add_indented_qty, "indented_qty": (se_detail.docstatus==2 and 1 or -1) * add_indented_qty,
"posting_date": bean.posting_date, "posting_date": doc.posting_date,
}) })
def set_missing_values(source, target_doc): def set_missing_values(source, target_doc):

View File

@@ -57,7 +57,7 @@ class PackingSlip(Document):
(from_case_no BETWEEN %(from_case_no)s AND %(to_case_no)s (from_case_no BETWEEN %(from_case_no)s AND %(to_case_no)s
OR to_case_no BETWEEN %(from_case_no)s AND %(to_case_no)s OR to_case_no BETWEEN %(from_case_no)s AND %(to_case_no)s
OR %(from_case_no)s BETWEEN from_case_no AND to_case_no) OR %(from_case_no)s BETWEEN from_case_no AND to_case_no)
""", self.fields) """, self.as_dict())
if res: if res:
frappe.msgprint(_("""Case No(s) already in use. Please rectify and try again. frappe.msgprint(_("""Case No(s) already in use. Please rectify and try again.
@@ -145,7 +145,7 @@ class PackingSlip(Document):
note note
""" """
recommended_case_no = frappe.db.sql("""SELECT MAX(to_case_no) FROM `tabPacking Slip` recommended_case_no = frappe.db.sql("""SELECT MAX(to_case_no) FROM `tabPacking Slip`
WHERE delivery_note = %(delivery_note)s AND docstatus=1""", self.fields) WHERE delivery_note = %(delivery_note)s AND docstatus=1""", self.as_dict())
return cint(recommended_case_no[0][0]) + 1 return cint(recommended_case_no[0][0]) + 1

View File

@@ -298,8 +298,8 @@ def make_purchase_invoice(source_name, target_doc=None):
from frappe.model.mapper import get_mapped_doc from frappe.model.mapper import get_mapped_doc
def set_missing_values(source, target): def set_missing_values(source, target):
bean = frappe.get_doc(target) doc = frappe.get_doc(target)
bean.run_method("set_missing_values") doc.run_method("set_missing_values")
doclist = get_mapped_doc("Purchase Receipt", source_name, { doclist = get_mapped_doc("Purchase Receipt", source_name, {
"Purchase Receipt": { "Purchase Receipt": {

View File

@@ -280,7 +280,7 @@ def get_serial_nos(serial_no):
if s.strip()] if s.strip()]
def make_serial_no(serial_no, sle): def make_serial_no(serial_no, sle):
sr = frappe.new_bean("Serial No") sr = frappe.new_doc("Serial No")
sr.serial_no = serial_no sr.serial_no = serial_no
sr.item_code = sle.item_code sr.item_code = sle.item_code
sr.warehouse = None sr.warehouse = None

View File

@@ -14,7 +14,7 @@ from erpnext.stock.doctype.serial_no.serial_no import *
class TestSerialNo(unittest.TestCase): class TestSerialNo(unittest.TestCase):
def test_cannot_create_direct(self): def test_cannot_create_direct(self):
sr = frappe.new_bean("Serial No") sr = frappe.new_doc("Serial No")
sr.item_code = "_Test Serialized Item" sr.item_code = "_Test Serialized Item"
sr.warehouse = "_Test Warehouse - _TC" sr.warehouse = "_Test Warehouse - _TC"
sr.serial_no = "_TCSER0001" sr.serial_no = "_TCSER0001"

View File

@@ -325,41 +325,41 @@ class StockEntry(StockController):
self.make_sl_entries(sl_entries, self.amended_from and 'Yes' or 'No') self.make_sl_entries(sl_entries, self.amended_from and 'Yes' or 'No')
def update_production_order(self): def update_production_order(self):
def _validate_production_order(pro_bean): def _validate_production_order(pro_doc):
if flt(pro_bean.docstatus) != 1: if flt(pro_doc.docstatus) != 1:
frappe.throw(_("Production Order must be submitted") + ": " + frappe.throw(_("Production Order must be submitted") + ": " +
self.production_order) self.production_order)
if pro_bean.status == 'Stopped': if pro_doc.status == 'Stopped':
msgprint(_("Transaction not allowed against stopped Production Order") + ": " + msgprint(_("Transaction not allowed against stopped Production Order") + ": " +
self.production_order) self.production_order)
if self.production_order: if self.production_order:
pro_bean = frappe.get_doc("Production Order", self.production_order) pro_doc = frappe.get_doc("Production Order", self.production_order)
_validate_production_order(pro_bean) _validate_production_order(pro_doc)
self.update_produced_qty(pro_bean) self.update_produced_qty(pro_doc)
if self.purpose == "Manufacture/Repack": if self.purpose == "Manufacture/Repack":
self.update_planned_qty(pro_bean) self.update_planned_qty(pro_doc)
def update_produced_qty(self, pro_bean): def update_produced_qty(self, pro_doc):
if self.purpose == "Manufacture/Repack": if self.purpose == "Manufacture/Repack":
produced_qty = flt(pro_bean.produced_qty) + \ produced_qty = flt(pro_doc.produced_qty) + \
(self.docstatus==1 and 1 or -1 ) * flt(self.fg_completed_qty) (self.docstatus==1 and 1 or -1 ) * flt(self.fg_completed_qty)
if produced_qty > flt(pro_bean.qty): if produced_qty > flt(pro_doc.qty):
frappe.throw(_("Production Order") + ": " + self.production_order + "\n" + frappe.throw(_("Production Order") + ": " + self.production_order + "\n" +
_("Total Manufactured Qty can not be greater than Planned qty to manufacture") _("Total Manufactured Qty can not be greater than Planned qty to manufacture")
+ "(%s/%s)" % (produced_qty, flt(pro_bean.qty)), StockOverProductionError) + "(%s/%s)" % (produced_qty, flt(pro_doc.qty)), StockOverProductionError)
status = 'Completed' if flt(produced_qty) >= flt(pro_bean.qty) else 'In Process' status = 'Completed' if flt(produced_qty) >= flt(pro_doc.qty) else 'In Process'
frappe.db.sql("""update `tabProduction Order` set status=%s, produced_qty=%s frappe.db.sql("""update `tabProduction Order` set status=%s, produced_qty=%s
where name=%s""", (status, produced_qty, self.production_order)) where name=%s""", (status, produced_qty, self.production_order))
def update_planned_qty(self, pro_bean): def update_planned_qty(self, pro_doc):
from erpnext.stock.utils import update_bin from erpnext.stock.utils import update_bin
update_bin({ update_bin({
"item_code": pro_bean.production_item, "item_code": pro_doc.production_item,
"warehouse": pro_bean.fg_warehouse, "warehouse": pro_doc.fg_warehouse,
"posting_date": self.posting_date, "posting_date": self.posting_date,
"planned_qty": (self.docstatus==1 and -1 or 1 ) * flt(self.fg_completed_qty) "planned_qty": (self.docstatus==1 and -1 or 1 ) * flt(self.fg_completed_qty)
}) })
@@ -725,7 +725,7 @@ def get_return_doc_and_details(args):
for fieldname, val in return_map[args["purpose"]].items(): for fieldname, val in return_map[args["purpose"]].items():
if args.get(fieldname): if args.get(fieldname):
ref.fieldname = fieldname ref.fieldname = fieldname
ref.doc = frappe.get_doc(val[0], args[fieldname]) ref.doc = frappe.get_doc(val[0], args.get(fieldname))
ref.parentfields = val[1] ref.parentfields = val[1]
break break
@@ -748,7 +748,7 @@ def make_return_jv(stock_entry):
if not se.purpose in ["Sales Return", "Purchase Return"]: if not se.purpose in ["Sales Return", "Purchase Return"]:
return return
ref = get_return_doc_and_details(se.fields) ref = get_return_doc_and_details(se)
if ref.doc.doctype == "Delivery Note": if ref.doc.doctype == "Delivery Note":
result = make_return_jv_from_delivery_note(se, ref) result = make_return_jv_from_delivery_note(se, ref)

View File

@@ -765,7 +765,7 @@ class TestStockEntry(unittest.TestCase):
def test_warehouse_company_validation(self): def test_warehouse_company_validation(self):
set_perpetual_inventory(0) set_perpetual_inventory(0)
self._clear_stock_account_balance() self._clear_stock_account_balance()
frappe.get_doc("User", "test2@example.com").get_controller()\ frappe.get_doc("User", "test2@example.com")\
.add_roles("Sales User", "Sales Manager", "Material User", "Material Manager") .add_roles("Sales User", "Sales Manager", "Material User", "Material Manager")
frappe.set_user("test2@example.com") frappe.set_user("test2@example.com")
@@ -778,21 +778,20 @@ class TestStockEntry(unittest.TestCase):
# permission tests # permission tests
def test_warehouse_user(self): def test_warehouse_user(self):
import frappe.defaults import frappe.defaults
from frappe.model.bean import BeanPermissionError
set_perpetual_inventory(0) set_perpetual_inventory(0)
frappe.defaults.add_default("Warehouse", "_Test Warehouse 1 - _TC1", "test@example.com", "Restriction") frappe.defaults.add_default("Warehouse", "_Test Warehouse 1 - _TC1", "test@example.com", "Restriction")
frappe.defaults.add_default("Warehouse", "_Test Warehouse 2 - _TC1", "test2@example.com", "Restriction") frappe.defaults.add_default("Warehouse", "_Test Warehouse 2 - _TC1", "test2@example.com", "Restriction")
frappe.get_doc("User", "test@example.com").get_controller()\ frappe.get_doc("User", "test@example.com")\
.add_roles("Sales User", "Sales Manager", "Material User", "Material Manager") .add_roles("Sales User", "Sales Manager", "Material User", "Material Manager")
frappe.get_doc("User", "test2@example.com").get_controller()\ frappe.get_doc("User", "test2@example.com")\
.add_roles("Sales User", "Sales Manager", "Material User", "Material Manager") .add_roles("Sales User", "Sales Manager", "Material User", "Material Manager")
frappe.set_user("test@example.com") frappe.set_user("test@example.com")
st1 = frappe.copy_doc(test_records[0]) st1 = frappe.copy_doc(test_records[0])
st1.company = "_Test Company 1" st1.company = "_Test Company 1"
st1.doclist[1].t_warehouse="_Test Warehouse 2 - _TC1" st1.doclist[1].t_warehouse="_Test Warehouse 2 - _TC1"
self.assertRaises(BeanPermissionError, st1.insert) self.assertRaises(frappe.PermissionError, st1.insert)
frappe.set_user("test2@example.com") frappe.set_user("test2@example.com")
st1 = frappe.copy_doc(test_records[0]) st1 = frappe.copy_doc(test_records[0])

View File

@@ -47,7 +47,7 @@ class StockLedgerEntry(DocListController):
frappe.throw("""Not enough quantity (requested: %(actual_qty)s, \ frappe.throw("""Not enough quantity (requested: %(actual_qty)s, \
current: %(batch_bal)s in Batch <b>%(batch_no)s</b> for Item \ current: %(batch_bal)s in Batch <b>%(batch_no)s</b> for Item \
<b>%(item_code)s</b> at Warehouse <b>%(warehouse)s</b> \ <b>%(item_code)s</b> at Warehouse <b>%(warehouse)s</b> \
as on %(posting_date)s %(posting_time)s""" % self.fields) as on %(posting_date)s %(posting_time)s""" % self.as_dict())
self.pop('batch_bal') self.pop('batch_bal')

View File

@@ -34,9 +34,9 @@ class StockUOMReplaceUtility(Document):
raise Exception raise Exception
def update_item_master(self): def update_item_master(self):
item_bean = frappe.get_doc("Item", self.item_code) item_doc = frappe.get_doc("Item", self.item_code)
item_bean.stock_uom = self.new_stock_uom item_doc.stock_uom = self.new_stock_uom
item_bean.save() item_doc.save()
msgprint(_("Default UOM updated in item ") + self.item_code) msgprint(_("Default UOM updated in item ") + self.item_code)

View File

@@ -22,15 +22,15 @@ class Warehouse(Document):
self.update_parent_account() self.update_parent_account()
def update_parent_account(self): def update_parent_account(self):
if not self.__islocal and (self.create_account_under != if not getattr(self, "__islocal", None) and (self.create_account_under !=
frappe.db.get_value("Warehouse", self.name, "create_account_under")): frappe.db.get_value("Warehouse", self.name, "create_account_under")):
warehouse_account = frappe.db.get_value("Account", warehouse_account = frappe.db.get_value("Account",
{"account_type": "Warehouse", "company": self.company, {"account_type": "Warehouse", "company": self.company,
"master_name": self.name}, ["name", "parent_account"]) "master_name": self.name}, ["name", "parent_account"])
if warehouse_account and warehouse_account[1] != self.create_account_under: if warehouse_account and warehouse_account[1] != self.create_account_under:
acc_bean = frappe.get_doc("Account", warehouse_account[0]) acc_doc = frappe.get_doc("Account", warehouse_account[0])
acc_bean.parent_account = self.create_account_under acc_doc.parent_account = self.create_account_under
acc_bean.save() acc_doc.save()
def on_update(self): def on_update(self):
self.create_account_head() self.create_account_head()
@@ -43,7 +43,7 @@ class Warehouse(Document):
if self.get("__islocal") or not frappe.db.get_value( if self.get("__islocal") or not frappe.db.get_value(
"Stock Ledger Entry", {"warehouse": self.name}): "Stock Ledger Entry", {"warehouse": self.name}):
self.validate_parent_account() self.validate_parent_account()
ac_bean = frappe.get_doc({ ac_doc = frappe.get_doc({
"doctype": "Account", "doctype": "Account",
'account_name': self.warehouse_name, 'account_name': self.warehouse_name,
'parent_account': self.create_account_under, 'parent_account': self.create_account_under,
@@ -53,10 +53,10 @@ class Warehouse(Document):
"master_name": self.name, "master_name": self.name,
"freeze_account": "No" "freeze_account": "No"
}) })
ac_bean.ignore_permissions = True ac_doc.ignore_permissions = True
ac_bean.insert() ac_doc.insert()
msgprint(_("Account Head") + ": " + ac_bean.name + _(" created")) msgprint(_("Account Head") + ": " + ac_doc.name + _(" created"))
def validate_parent_account(self): def validate_parent_account(self):
if not self.create_account_under: if not self.create_account_under:

View File

@@ -46,20 +46,20 @@ def get_item_details(args):
elif not args.item_code and args.serial_no: elif not args.item_code and args.serial_no:
args.item_code = get_item_code(serial_no=args.serial_no) args.item_code = get_item_code(serial_no=args.serial_no)
item_bean = frappe.get_doc("Item", args.item_code) item_doc = frappe.get_doc("Item", args.item_code)
item = item_bean.doc item = item_doc
validate_item_details(args, item) validate_item_details(args, item)
out = get_basic_details(args, item_bean) out = get_basic_details(args, item_doc)
get_party_item_code(args, item_bean, out) get_party_item_code(args, item_doc, out)
if out.get("warehouse"): if out.get("warehouse"):
out.update(get_available_qty(args.item_code, out.warehouse)) out.update(get_available_qty(args.item_code, out.warehouse))
out.update(get_projected_qty(item.name, out.warehouse)) out.update(get_projected_qty(item.name, out.warehouse))
get_price_list_rate(args, item_bean, out) get_price_list_rate(args, item_doc, out)
if args.transaction_type == "selling" and cint(args.is_pos): if args.transaction_type == "selling" and cint(args.is_pos):
out.update(get_pos_settings_item_details(args.company, args)) out.update(get_pos_settings_item_details(args.company, args))
@@ -67,8 +67,8 @@ def get_item_details(args):
apply_pricing_rule(out, args) apply_pricing_rule(out, args)
if args.get("doctype") in ("Sales Invoice", "Delivery Note"): if args.get("doctype") in ("Sales Invoice", "Delivery Note"):
if item_bean.has_serial_no == "Yes" and not args.serial_no: if item_doc.has_serial_no == "Yes" and not args.serial_no:
out.serial_no = get_serial_nos_by_fifo(args, item_bean) out.serial_no = get_serial_nos_by_fifo(args, item_doc)
if args.transaction_date and item.lead_time_days: if args.transaction_date and item.lead_time_days:
out.schedule_date = out.lead_time_date = add_days(args.transaction_date, out.schedule_date = out.lead_time_date = add_days(args.transaction_date,
@@ -116,8 +116,8 @@ def validate_item_details(args, item):
_("not a sub-contracted item.") + _("not a sub-contracted item.") +
_("Please select a sub-contracted item or do not sub-contract the transaction.")) _("Please select a sub-contracted item or do not sub-contract the transaction."))
def get_basic_details(args, item_bean): def get_basic_details(args, item_doc):
item = item_bean.doc item = item_doc
from frappe.defaults import get_user_default_as_list from frappe.defaults import get_user_default_as_list
user_default_warehouse_list = get_user_default_as_list('warehouse') user_default_warehouse_list = get_user_default_as_list('warehouse')
@@ -137,7 +137,7 @@ def get_basic_details(args, item_bean):
if args.transaction_type == "selling" else item.buying_cost_center, if args.transaction_type == "selling" else item.buying_cost_center,
"batch_no": None, "batch_no": None,
"item_tax_rate": json.dumps(dict(([d.tax_type, d.tax_rate] for d in "item_tax_rate": json.dumps(dict(([d.tax_type, d.tax_rate] for d in
item_bean.get("item_tax")))), item_doc.get("item_tax")))),
"uom": item.stock_uom, "uom": item.stock_uom,
"min_order_qty": flt(item.min_order_qty) if args.doctype == "Material Request" else "", "min_order_qty": flt(item.min_order_qty) if args.doctype == "Material Request" else "",
"conversion_factor": 1.0, "conversion_factor": 1.0,
@@ -156,7 +156,7 @@ def get_basic_details(args, item_bean):
return out return out
def get_price_list_rate(args, item_bean, out): def get_price_list_rate(args, item_doc, out):
meta = frappe.get_meta(args.doctype) meta = frappe.get_meta(args.doctype)
if meta.get_field("currency"): if meta.get_field("currency"):
@@ -173,7 +173,7 @@ def get_price_list_rate(args, item_bean, out):
if not out.price_list_rate and args.transaction_type == "buying": if not out.price_list_rate and args.transaction_type == "buying":
from erpnext.stock.doctype.item.item import get_last_purchase_details from erpnext.stock.doctype.item.item import get_last_purchase_details
out.update(get_last_purchase_details(item_bean.name, out.update(get_last_purchase_details(item_doc.name,
args.docname, args.conversion_rate)) args.docname, args.conversion_rate))
def validate_price_list(args): def validate_price_list(args):
@@ -207,12 +207,12 @@ def validate_conversion_rate(args, meta):
get_field_precision(meta.get_field("plc_conversion_rate"), get_field_precision(meta.get_field("plc_conversion_rate"),
frappe._dict({"fields": args}))) frappe._dict({"fields": args})))
def get_party_item_code(args, item_bean, out): def get_party_item_code(args, item_doc, out):
if args.transaction_type == "selling": if args.transaction_type == "selling":
customer_item_code = item_bean.get("item_customer_details", {"customer_name": args.customer}) customer_item_code = item_doc.get("item_customer_details", {"customer_name": args.customer})
out.customer_item_code = customer_item_code[0].ref_code if customer_item_code else None out.customer_item_code = customer_item_code[0].ref_code if customer_item_code else None
else: else:
item_supplier = item_bean.get({"item_supplier_details", {"supplier": args.supplier}) item_supplier = item_doc.get("item_supplier_details", {"supplier": args.supplier})
out.supplier_part_no = item_supplier[0].supplier_part_no if item_supplier else None out.supplier_part_no = item_supplier[0].supplier_part_no if item_supplier else None
@@ -351,7 +351,7 @@ def apply_internal_priority(pricing_rules, field_set, args_dict):
return filtered_rules or pricing_rules return filtered_rules or pricing_rules
def get_serial_nos_by_fifo(args, item_bean): def get_serial_nos_by_fifo(args, item_doc):
return "\n".join(frappe.db.sql_list("""select name from `tabSerial No` return "\n".join(frappe.db.sql_list("""select name from `tabSerial No`
where item_code=%(item_code)s and warehouse=%(warehouse)s and status='Available' where item_code=%(item_code)s and warehouse=%(warehouse)s and status='Available'
order by timestamp(purchase_date, purchase_time) asc limit %(qty)s""", { order by timestamp(purchase_date, purchase_time) asc limit %(qty)s""", {

View File

@@ -261,10 +261,10 @@ def create_material_request(material_requests):
"brand": item.brand, "brand": item.brand,
}) })
mr_bean = frappe.get_doc(mr) mr_doc = frappe.get_doc(mr)
mr_bean.insert() mr_doc.insert()
mr_bean.submit() mr_doc.submit()
mr_list.append(mr_bean) mr_list.append(mr_doc)
except: except:
if frappe.local.message_log: if frappe.local.message_log:

View File

@@ -203,9 +203,9 @@ class MaintenanceSchedule(TransactionBase):
def update_amc_date(self, serial_nos, amc_expiry_date=None): def update_amc_date(self, serial_nos, amc_expiry_date=None):
for serial_no in serial_nos: for serial_no in serial_nos:
serial_no_bean = frappe.get_doc("Serial No", serial_no) serial_no_doc = frappe.get_doc("Serial No", serial_no)
serial_no_bean.amc_expiry_date = amc_expiry_date serial_no_doc.amc_expiry_date = amc_expiry_date
serial_no_bean.save() serial_no_doc.save()
def validate_serial_no(self, serial_nos, amc_start_date): def validate_serial_no(self, serial_nos, amc_start_date):
for serial_no in serial_nos: for serial_no in serial_nos:

View File

@@ -32,7 +32,7 @@ class SupportMailbox(POP3Mailbox):
if new_ticket and cint(self.email_settings.send_autoreply) and \ if new_ticket and cint(self.email_settings.send_autoreply) and \
"mailer-daemon" not in mail.from_email.lower(): "mailer-daemon" not in mail.from_email.lower():
self.send_auto_reply(ticket.doc) self.send_auto_reply(ticket)
def send_auto_reply(self, d): def send_auto_reply(self, d):
signature = self.email_settings.get('support_signature') or '' signature = self.email_settings.get('support_signature') or ''
@@ -80,6 +80,6 @@ def add_support_communication(subject, content, sender, docname=None, mail=None)
date=mail.date if mail else today(), sent_or_received="Received") date=mail.date if mail else today(), sent_or_received="Received")
if mail: if mail:
mail.save_attachments_in_doc(ticket.doc) mail.save_attachments_in_doc(ticket)
return ticket return ticket