frappe/frappe#478, more changes, removed bean
This commit is contained in:
parent
d36cb5c812
commit
f14b809ab5
@ -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>
|
||||
|
@ -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:
|
||||
|
@ -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()
|
@ -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"
|
||||
}
|
||||
]
|
||||
}]
|
||||
|
@ -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")
|
||||
|
||||
|
@ -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:
|
||||
|
@ -3,4 +3,6 @@
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import frappe
|
||||
|
||||
test_records = frappe.get_test_records('Fiscal Year')
|
@ -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
|
||||
|
@ -6,5 +6,5 @@ import frappe
|
||||
|
||||
from frappe.model.document import Document
|
||||
|
||||
class PurchaseTaxesAndCharges(Document):
|
||||
class PurchaseTaxesandCharges(Document):
|
||||
pass
|
@ -5,5 +5,5 @@ from __future__ import unicode_literals
|
||||
import frappe
|
||||
from frappe.model.document import Document
|
||||
|
||||
class PurchaseTaxesAndChargesMaster(Document):
|
||||
class PurchaseTaxesandChargesMaster(Document):
|
||||
pass
|
||||
|
@ -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)) * \
|
||||
|
@ -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
|
||||
|
||||
|
@ -6,5 +6,5 @@ import frappe
|
||||
|
||||
from frappe.model.document import Document
|
||||
|
||||
class SalesTaxesAndCharges(Document):
|
||||
class SalesTaxesandCharges(Document):
|
||||
pass
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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):
|
||||
|
@ -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))
|
||||
|
||||
|
@ -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"""
|
||||
|
@ -1 +1,4 @@
|
||||
[]
|
||||
[
|
||||
{"doctype":"Department", "department_name":"_Test Department"},
|
||||
{"doctype":"Department", "department_name":"_Test Department 1"}
|
||||
]
|
@ -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",
|
||||
|
@ -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")
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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):
|
||||
|
@ -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,
|
||||
|
@ -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"
|
||||
|
@ -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)
|
||||
|
@ -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()
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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()
|
||||
|
@ -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()
|
||||
|
||||
|
@ -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]
|
@ -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)
|
||||
|
@ -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],
|
||||
|
@ -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"))
|
||||
|
||||
|
@ -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')
|
@ -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")
|
@ -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):
|
||||
|
@ -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
|
||||
|
||||
|
@ -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": {
|
||||
|
@ -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
|
||||
|
@ -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"
|
||||
|
@ -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)
|
||||
|
@ -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])
|
||||
|
@ -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')
|
||||
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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:
|
||||
|
@ -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""", {
|
||||
|
@ -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:
|
||||
|
@ -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:
|
||||
|
@ -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
|
Loading…
x
Reference in New Issue
Block a user