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>Amount</th>
</tr>
{%- for row in doclist.get({"doctype":"Sales Invoice Item"}) %}
{%- for row in doc.get({"doctype":"Sales Invoice Item"}) %}
<tr>
<td style="width: 3%;">{{ row.idx }}</td>
<td style="width: 20%;">{{ row.item_name }}</td>
@ -106,7 +106,7 @@
utils.fmt_money(doc.net_total_export, currency=doc.currency)
}}</td>
</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 -%}
<tr>
<td>{{ charge.description }}</td>

View File

@ -40,13 +40,13 @@ class Account(Document):
["name", "group_or_ledger", "report_type"], as_dict=1)
if not par:
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"))
elif par[0]["group_or_ledger"] != 'Group':
elif par["group_or_ledger"] != 'Group':
throw(_("Parent account can not be a ledger"))
if par[0]["report_type"]:
self.report_type = par[0]["report_type"]
if par["report_type"]:
self.report_type = par["report_type"]
def validate_duplicate_account(self):
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" +
"\n".join(warehouse_with_no_company))
for wh in warehouse_list:
wh_bean = frappe.get_doc("Warehouse", wh.name)
wh_bean.save()
wh_doc = frappe.get_doc("Warehouse", wh.name)
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())
country = frappe.db.get_value("Country", {"code": fname.split("_", 1)[0]})
if country:
bean = frappe.get_doc({
doc = frappe.get_doc({
"doctype":"Chart of Accounts",
"chart_name": chart.get("name"),
"source_file": fname,
"country": country
}).insert()
print bean.name.encode("utf-8")
print doc.name.encode("utf-8")
else:
print "No chart for: " + chart.get("name").encode("utf-8")

View File

@ -13,7 +13,7 @@ class CostCenter(DocTypeNestedSet):
def autoname(self):
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):
if not self.group_or_ledger:

View File

@ -3,4 +3,6 @@
from __future__ import unicode_literals
import frappe
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):
from erpnext.accounts.utils import get_balance_on
si = frappe.get_doc("Sales Invoice", sales_invoice)
jv = get_payment_entry(si.doc)
jv.remark = 'Payment received against Sales Invoice %(name)s. %(remarks)s' % si.fields
jv = get_payment_entry(si)
jv.remark = 'Payment received against Sales Invoice {0}. {1}'.format(si.name, si.remarks)
# credit customer
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):
from erpnext.accounts.utils import get_balance_on
pi = frappe.get_doc("Purchase Invoice", purchase_invoice)
jv = get_payment_entry(pi.doc)
jv.remark = 'Payment against Purchase Invoice %(name)s. %(remarks)s' % pi.fields
jv = get_payment_entry(pi)
jv.remark = 'Payment against Purchase Invoice {0}. {1}'.format(pi.name, pi.remarks)
# credit supplier
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):
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.company = doc.company

View File

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

View File

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

View File

@ -192,7 +192,7 @@ class SalesInvoice(SellingController):
for item in self.get("entries"):
if item.get('item_code'):
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)):
item.set(fname, val)
@ -696,7 +696,7 @@ def manage_recurring_invoices(next_date=None, commit=True):
raise Exception, exception_message
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
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
frappe.sendmail(new_rv.notification_email_address,
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):
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
def set_missing_values(source, target):
bean = frappe.get_doc(target)
bean.run_method("onload_post_render")
doc = frappe.get_doc(target)
doc.run_method("onload_post_render")
def update_item(source_doc, target_doc, source_parent):
target_doc.base_amount = (flt(source_doc.qty) - flt(source_doc.delivered_qty)) * \

View File

@ -4,7 +4,7 @@
import frappe
import unittest, json
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.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
class SalesTaxesAndCharges(Document):
class SalesTaxesandCharges(Document):
pass

View File

@ -6,7 +6,7 @@ import frappe
from frappe.utils import cint
from frappe.model.controller import DocListController
class SalesTaxesAndChargesMaster(DocListController):
class SalesTaxesandChargesMaster(DocListController):
def validate(self):
if self.is_default == 1:
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 j in xrange(i+1, len(self.shipping_rule_conditions)):
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
range_a = (d1.from_value, d1.to_value or d1.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):
frappe.throw("Not Permitted", frappe.PermissionError)
party_bean = frappe.get_doc(party_type, party)
party = party_bean.doc
party_doc = frappe.get_doc(party_type, party)
party = party_doc
set_address_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"] = [{
"sales_person": d.sales_person,
"sales_designation": d.sales_designation
} for d in party_bean.get("sales_team")]
} for d in party_doc.get("sales_team")]
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
def set_missing_values(source, target):
bean = frappe.get_doc(target)
bean.run_method("set_missing_values")
doc = frappe.get_doc(target)
doc.run_method("set_missing_values")
def update_item(obj, target, source_parent):
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
def set_missing_values(source, target):
bean = frappe.get_doc(target)
bean.run_method("set_missing_values")
doc = frappe.get_doc(target)
doc.run_method("set_missing_values")
def update_item(obj, target, source_parent):
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]))
pr[0]["naming_series"] = "_T-Purchase Receipt-"
pr_bean = frappe.get_doc(pr)
pr_bean.insert()
pr_doc = frappe.get_doc(pr)
pr_doc.insert()
def test_ordered_qty(self):
frappe.db.sql("delete from tabBin")
@ -54,9 +54,9 @@ class TestPurchaseOrder(unittest.TestCase):
pr[0]["posting_date"] = "2013-05-12"
pr[0]["naming_series"] = "_T-Purchase Receipt-"
pr[1]["qty"] = 4.0
pr_bean = frappe.get_doc(pr)
pr_bean.insert()
pr_bean.submit()
pr_doc = frappe.get_doc(pr)
pr_doc.insert()
pr_doc.submit()
self.assertEquals(flt(frappe.db.get_value("Bin", {"item_code": "_Test Item",
"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]["posting_date"] = "2013-05-12"
pr1[1]["qty"] = 8
pr1_bean = frappe.get_doc(pr1)
pr1_bean.insert()
pr1_bean.submit()
pr1_doc = frappe.get_doc(pr1)
pr1_doc.insert()
pr1_doc.submit()
self.assertEquals(flt(frappe.db.get_value("Bin", {"item_code": "_Test Item",
"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
def set_missing_values(source, target):
bean = frappe.get_doc(target)
bean.run_method("set_missing_values")
bean.run_method("get_schedule_dates")
doc = frappe.get_doc(target)
doc.run_method("set_missing_values")
doc.run_method("get_schedule_dates")
def update_item(obj, target, source_parent):
target.conversion_factor = 1

View File

@ -86,15 +86,16 @@ class AccountsController(TransactionBase):
def set_missing_item_details(self):
"""set missing item values"""
from erpnext.stock.get_item_details import get_item_details
for item in self.get(self.fname):
if item.get("item_code"):
args = item.fields.copy()
args.update(self.fields)
ret = get_item_details(args)
for fieldname, value in ret.items():
if self.meta.get_field(fieldname, parentfield=self.fname) and \
item.get(fieldname) is None and value is not None:
item.set(fieldname, value)
if hasattr(self, "fname"):
for item in self.get(self.fname):
if item.get("item_code"):
args = item.as_dict()
args.update(self.as_dict())
ret = get_item_details(args)
for fieldname, value in ret.items():
if self.meta.get_field(fieldname, parentfield=self.fname) and \
item.get(fieldname) is None and value is not None:
item.set(fieldname, value)
def set_taxes(self, tax_parentfield, tax_master_field):
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")
def set_missing_lead_customer_details(self):
if self.customer:
if getattr(self, "customer", None):
from erpnext.accounts.party import _get_party_details
self.update_if_missing(_get_party_details(self.customer,
ignore_permissions=self.ignore_permissions))
elif self.lead:
elif getattr(self, "lead", None):
from erpnext.selling.doctype.lead.lead import get_lead_details
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']:
subject, color = feed_dict.get(doc.doctype, [None, None])
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):
"""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",
"idx": 1,
"issingle": 1,
"modified": "2014-02-19 17:40:18.000000",
"modified": "2014-02-19 17:40:18.000001",
"modified_by": "Administrator",
"module": "HR",
"name": "HR Settings",

View File

@ -37,7 +37,7 @@ class JobsMailbox(POP3Mailbox):
applicant.ignore_mandatory = True
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",
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
or to_date between %(from_date)s and %(to_date)s
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)

View File

@ -129,11 +129,11 @@ class SalaryManager(Document):
for ss in ss_list:
ss_obj = frappe.get_doc("Salary Slip",ss[0])
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:
ss_obj.send_mail_funct()
frappe.db.set(ss_obj.doc, 'docstatus', 1)
frappe.db.set(ss_obj, 'docstatus', 1)
except Exception,e:
not_submitted_ss.append(ss[0])
msgprint(e)

View File

@ -153,7 +153,7 @@ def get_item_details(item):
def make_stock_entry(production_order_id, purpose):
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.production_order = production_order_id
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 `tabGL Entry`""")
pro_bean = frappe.copy_doc(test_records[0])
pro_bean.insert()
pro_bean.submit()
pro_doc = frappe.copy_doc(test_records[0])
pro_doc.insert()
pro_doc.submit()
from erpnext.stock.doctype.stock_entry.test_stock_entry import test_records as se_test_records
mr1 = frappe.copy_doc(se_test_records[0])
@ -31,7 +31,7 @@ class TestProductionOrder(unittest.TestCase):
mr2.insert()
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.fiscal_year = "_Test Fiscal Year 2013"
stock_entry.fg_completed_qty = 4
@ -40,12 +40,12 @@ class TestProductionOrder(unittest.TestCase):
stock_entry.run_method("get_items")
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)
self.assertEqual(frappe.db.get_value("Bin", {"item_code": "_Test FG Item",
"warehouse": "_Test Warehouse 1 - _TC"}, "planned_qty"), 6)
return pro_bean.name
return pro_doc.name
def test_over_production(self):
from erpnext.stock.doctype.stock_entry.stock_entry import StockOverProductionError

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -281,21 +281,20 @@ class TestSalesOrder(unittest.TestCase):
def test_warehouse_user(self):
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")
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")
frappe.set_user("test@example.com")
from frappe.model.bean import BeanPermissionError
so = frappe.copy_doc(test_records[0])
so.company = "_Test Company 1"
so.conversion_rate = 0.02
so.plc_conversion_rate = 0.02
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")
so.insert()

View File

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

View File

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

View File

@ -60,13 +60,13 @@ class GlobalDefaults(Document):
raise_exception=1)
def update_control_panel(self):
cp_bean = frappe.get_doc("Control Panel")
cp_doc = frappe.get_doc("Control Panel")
if self.country:
cp_bean.country = self.country
cp_doc.country = self.country
if self.time_zone:
cp_bean.time_zone = self.time_zone
cp_bean.ignore_permissions = True
cp_bean.save()
cp_doc.time_zone = self.time_zone
cp_doc.ignore_permissions = True
cp_doc.save()
def get_defaults(self):
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`
where parent_item_group='_Test Item Group C'"""):
bean = frappe.get_doc("Item Group", name)
bean.parent_item_group = "_Test Item Group B"
bean.save()
doc = frappe.get_doc("Item Group", name)
doc.parent_item_group = "_Test Item Group B"
doc.save()
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))
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")
return naming_series[0] or naming_series[1]

View File

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

View File

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

View File

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

View File

@ -8,7 +8,7 @@ import frappe
class TestItem(unittest.TestCase):
def test_duplicate_item(self):
from erpnext.stock.doctype.item_price.item_price import ItemPriceDuplicateItem
bean = frappe.copy_doc(test_records[0])
self.assertRaises(ItemPriceDuplicateItem, bean.insert)
doc = frappe.copy_doc(test_records[0])
self.assertRaises(ItemPriceDuplicateItem, doc.insert)
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)
for pr in purchase_receipts:
pr_bean = frappe.get_doc('Purchase Receipt', pr)
pr_items = pr_bean.get("purchase_tax_details")
pr_doc = frappe.get_doc('Purchase Receipt', pr)
pr_items = pr_doc.get("purchase_tax_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",
"add_deduct_tax": "Add",
"charge_type": "Actual",
@ -48,7 +48,7 @@ class LandedCostWizard(Document):
})
if not matched_row: # add if not exists
ch = pr_bean.append("other_charges")
ch = pr_doc.append("other_charges")
ch.category = 'Valuation'
ch.add_deduct_tax = 'Add'
ch.charge_type = 'Actual'
@ -64,8 +64,8 @@ class LandedCostWizard(Document):
matched_row[0].tax_amount = amt
matched_row[0].cost_center = lc.cost_center
pr_bean.run_method("validate")
for d in pr_bean.get_all_children():
pr_doc.run_method("validate")
for d in pr_doc.get_all_children():
d.db_update()
def get_total_pr_amt(self, purchase_receipts):
@ -75,9 +75,9 @@ class LandedCostWizard(Document):
def cancel_pr(self, 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`
where voucher_type='Purchase Receipt' and voucher_no=%s""", pr)
@ -86,7 +86,7 @@ class LandedCostWizard(Document):
def submit_pr(self, purchase_receipts):
for pr in purchase_receipts:
pr_bean = frappe.get_doc("Purchase Receipt", pr)
pr_bean.run_method("update_ordered_qty")
pr_bean.run_method("update_stock")
pr_bean.run_method("make_gl_entries")
pr_doc = frappe.get_doc("Purchase Receipt", pr)
pr_doc.run_method("update_ordered_qty")
pr_doc.run_method("update_stock")
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)
frappe.db.set_value(self.doctype, self.name, "per_ordered", self.per_ordered)
def update_completed_qty(bean, method):
if bean.doctype == "Stock Entry":
def update_completed_qty(doc, method):
if doc.doctype == "Stock Entry":
material_request_map = {}
for d in bean.get("mtn_details"):
for d in doc.get("mtn_details"):
if d.material_request:
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)
+ _("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
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)"""
from erpnext.stock.utils import update_bin
for mr_item_name in mr_items:
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})
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,
"warehouse": se_detail.t_warehouse,
"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):

View File

@ -57,7 +57,7 @@ class PackingSlip(Document):
(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 %(from_case_no)s BETWEEN from_case_no AND to_case_no)
""", self.fields)
""", self.as_dict())
if res:
frappe.msgprint(_("""Case No(s) already in use. Please rectify and try again.
@ -145,7 +145,7 @@ class PackingSlip(Document):
note
"""
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

View File

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

View File

@ -280,7 +280,7 @@ def get_serial_nos(serial_no):
if s.strip()]
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.item_code = sle.item_code
sr.warehouse = None

View File

@ -14,7 +14,7 @@ from erpnext.stock.doctype.serial_no.serial_no import *
class TestSerialNo(unittest.TestCase):
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.warehouse = "_Test Warehouse - _TC"
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')
def update_production_order(self):
def _validate_production_order(pro_bean):
if flt(pro_bean.docstatus) != 1:
def _validate_production_order(pro_doc):
if flt(pro_doc.docstatus) != 1:
frappe.throw(_("Production Order must be submitted") + ": " +
self.production_order)
if pro_bean.status == 'Stopped':
if pro_doc.status == 'Stopped':
msgprint(_("Transaction not allowed against stopped Production Order") + ": " +
self.production_order)
if self.production_order:
pro_bean = frappe.get_doc("Production Order", self.production_order)
_validate_production_order(pro_bean)
self.update_produced_qty(pro_bean)
pro_doc = frappe.get_doc("Production Order", self.production_order)
_validate_production_order(pro_doc)
self.update_produced_qty(pro_doc)
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":
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)
if produced_qty > flt(pro_bean.qty):
if produced_qty > flt(pro_doc.qty):
frappe.throw(_("Production Order") + ": " + self.production_order + "\n" +
_("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
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
update_bin({
"item_code": pro_bean.production_item,
"warehouse": pro_bean.fg_warehouse,
"item_code": pro_doc.production_item,
"warehouse": pro_doc.fg_warehouse,
"posting_date": self.posting_date,
"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():
if args.get(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]
break
@ -748,7 +748,7 @@ def make_return_jv(stock_entry):
if not se.purpose in ["Sales Return", "Purchase Return"]:
return
ref = get_return_doc_and_details(se.fields)
ref = get_return_doc_and_details(se)
if ref.doc.doctype == "Delivery Note":
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):
set_perpetual_inventory(0)
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")
frappe.set_user("test2@example.com")
@ -778,21 +778,20 @@ class TestStockEntry(unittest.TestCase):
# permission tests
def test_warehouse_user(self):
import frappe.defaults
from frappe.model.bean import BeanPermissionError
set_perpetual_inventory(0)
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.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")
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")
frappe.set_user("test@example.com")
st1 = frappe.copy_doc(test_records[0])
st1.company = "_Test Company 1"
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")
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, \
current: %(batch_bal)s in Batch <b>%(batch_no)s</b> for Item \
<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')

View File

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

View File

@ -22,15 +22,15 @@ class Warehouse(Document):
self.update_parent_account()
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")):
warehouse_account = frappe.db.get_value("Account",
{"account_type": "Warehouse", "company": self.company,
"master_name": self.name}, ["name", "parent_account"])
if warehouse_account and warehouse_account[1] != self.create_account_under:
acc_bean = frappe.get_doc("Account", warehouse_account[0])
acc_bean.parent_account = self.create_account_under
acc_bean.save()
acc_doc = frappe.get_doc("Account", warehouse_account[0])
acc_doc.parent_account = self.create_account_under
acc_doc.save()
def on_update(self):
self.create_account_head()
@ -43,7 +43,7 @@ class Warehouse(Document):
if self.get("__islocal") or not frappe.db.get_value(
"Stock Ledger Entry", {"warehouse": self.name}):
self.validate_parent_account()
ac_bean = frappe.get_doc({
ac_doc = frappe.get_doc({
"doctype": "Account",
'account_name': self.warehouse_name,
'parent_account': self.create_account_under,
@ -53,10 +53,10 @@ class Warehouse(Document):
"master_name": self.name,
"freeze_account": "No"
})
ac_bean.ignore_permissions = True
ac_bean.insert()
ac_doc.ignore_permissions = True
ac_doc.insert()
msgprint(_("Account Head") + ": " + ac_bean.name + _(" created"))
msgprint(_("Account Head") + ": " + ac_doc.name + _(" created"))
def validate_parent_account(self):
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:
args.item_code = get_item_code(serial_no=args.serial_no)
item_bean = frappe.get_doc("Item", args.item_code)
item = item_bean.doc
item_doc = frappe.get_doc("Item", args.item_code)
item = item_doc
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"):
out.update(get_available_qty(args.item_code, 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):
out.update(get_pos_settings_item_details(args.company, args))
@ -67,8 +67,8 @@ def get_item_details(args):
apply_pricing_rule(out, args)
if args.get("doctype") in ("Sales Invoice", "Delivery Note"):
if item_bean.has_serial_no == "Yes" and not args.serial_no:
out.serial_no = get_serial_nos_by_fifo(args, item_bean)
if item_doc.has_serial_no == "Yes" and not args.serial_no:
out.serial_no = get_serial_nos_by_fifo(args, item_doc)
if args.transaction_date and item.lead_time_days:
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.") +
_("Please select a sub-contracted item or do not sub-contract the transaction."))
def get_basic_details(args, item_bean):
item = item_bean.doc
def get_basic_details(args, item_doc):
item = item_doc
from frappe.defaults import get_user_default_as_list
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,
"batch_no": None,
"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,
"min_order_qty": flt(item.min_order_qty) if args.doctype == "Material Request" else "",
"conversion_factor": 1.0,
@ -156,7 +156,7 @@ def get_basic_details(args, item_bean):
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)
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":
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))
def validate_price_list(args):
@ -207,12 +207,12 @@ def validate_conversion_rate(args, meta):
get_field_precision(meta.get_field("plc_conversion_rate"),
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":
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
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
@ -351,7 +351,7 @@ def apply_internal_priority(pricing_rules, field_set, args_dict):
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`
where item_code=%(item_code)s and warehouse=%(warehouse)s and status='Available'
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,
})
mr_bean = frappe.get_doc(mr)
mr_bean.insert()
mr_bean.submit()
mr_list.append(mr_bean)
mr_doc = frappe.get_doc(mr)
mr_doc.insert()
mr_doc.submit()
mr_list.append(mr_doc)
except:
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):
for serial_no in serial_nos:
serial_no_bean = frappe.get_doc("Serial No", serial_no)
serial_no_bean.amc_expiry_date = amc_expiry_date
serial_no_bean.save()
serial_no_doc = frappe.get_doc("Serial No", serial_no)
serial_no_doc.amc_expiry_date = amc_expiry_date
serial_no_doc.save()
def validate_serial_no(self, serial_nos, amc_start_date):
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 \
"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):
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")
if mail:
mail.save_attachments_in_doc(ticket.doc)
mail.save_attachments_in_doc(ticket)
return ticket