Merge pull request #3599 from nabinhait/develop

Multiple fixes
This commit is contained in:
Nabin Hait
2015-07-08 15:33:57 +05:30
8 changed files with 34 additions and 63 deletions

View File

@@ -124,20 +124,11 @@ class PurchaseInvoice(BuyingController):
} }
}) })
if cint(frappe.defaults.get_global_default('maintain_same_rate')): if cint(frappe.db.get_single_value('Buying Settings', 'maintain_same_rate')):
super(PurchaseInvoice, self).validate_with_previous_doc({ self.validate_rate_with_reference_doc([
"Purchase Order Item": { ["Purchase Order", "purchase_order", "po_detail"],
"ref_dn_field": "po_detail", ["Purchase Receipt", "purchase_receipt", "pr_detail"]
"compare_fields": [["rate", "="]], ])
"is_child_table": True,
"allow_duplicate_prev_row_id": True
},
"Purchase Receipt Item": {
"ref_dn_field": "pr_detail",
"compare_fields": [["rate", "="]],
"is_child_table": True
}
})
def set_against_expense_account(self): def set_against_expense_account(self):
auto_accounting_for_stock = cint(frappe.defaults.get_global_default("auto_accounting_for_stock")) auto_accounting_for_stock = cint(frappe.defaults.get_global_default("auto_accounting_for_stock"))

View File

@@ -263,20 +263,11 @@ class SalesInvoice(SellingController):
}, },
}) })
if cint(frappe.defaults.get_global_default('maintain_same_sales_rate')): if cint(frappe.db.get_single_value('Selling Settings', 'maintain_same_sales_rate')):
super(SalesInvoice, self).validate_with_previous_doc({ self.validate_rate_with_reference_doc([
"Sales Order Item": { ["Sales Order", "sales_order", "so_detail"],
"ref_dn_field": "so_detail", ["Delivery Note", "delivery_note", "dn_detail"]
"compare_fields": [["rate", "="]], ])
"is_child_table": True,
"allow_duplicate_prev_row_id": True
},
"Delivery Note Item": {
"ref_dn_field": "dn_detail",
"compare_fields": [["rate", "="]],
"is_child_table": True
}
})
def set_against_income_account(self): def set_against_income_account(self):
"""Set against account for debit to account""" """Set against account for debit to account"""

View File

@@ -79,7 +79,8 @@ class Opportunity(TransactionBase):
if self.customer: if self.customer:
self.customer_name = frappe.db.get_value("Customer", self.customer, "customer_name") self.customer_name = frappe.db.get_value("Customer", self.customer, "customer_name")
elif self.lead: elif self.lead:
self.customer_name = frappe.db.get_value("Lead", self.lead, "lead_name") lead_name, company_name = frappe.db.get_value("Lead", self.lead, ["lead_name", "company_name"])
self.customer_name = company_name or lead_name
def get_cust_address(self,name): def get_cust_address(self,name):
details = frappe.db.sql("""select customer_name, address, territory, customer_group details = frappe.db.sql("""select customer_name, address, territory, customer_group

View File

@@ -108,11 +108,9 @@ class DeliveryNote(SellingController):
if not self.installation_status: self.installation_status = 'Not Installed' if not self.installation_status: self.installation_status = 'Not Installed'
def validate_with_previous_doc(self): def validate_with_previous_doc(self):
items = self.get("items")
for fn in (("Sales Order", "against_sales_order", "so_detail"), for fn in (("Sales Order", "against_sales_order", "so_detail"),
("Sales Invoice", "against_sales_invoice", "si_detail")): ("Sales Invoice", "against_sales_invoice", "si_detail")):
if filter(None, [getattr(d, fn[1], None) for d in items]): if filter(None, [getattr(d, fn[1], None) for d in self.get("items")]):
super(DeliveryNote, self).validate_with_previous_doc({ super(DeliveryNote, self).validate_with_previous_doc({
fn[0]: { fn[0]: {
"ref_dn_field": fn[1], "ref_dn_field": fn[1],
@@ -120,15 +118,10 @@ class DeliveryNote(SellingController):
["currency", "="]], ["currency", "="]],
}, },
}) })
if cint(frappe.defaults.get_global_default('maintain_same_sales_rate')): if cint(frappe.db.get_single_value('Selling Settings', 'maintain_same_sales_rate')):
super(DeliveryNote, self).validate_with_previous_doc({ self.validate_rate_with_reference_doc([["Sales Order", "sales_order", "so_detail"],
fn[0] + " Item": { ["Sales Invoice", "sales_invoice", "si_detail"]])
"ref_dn_field": fn[2],
"compare_fields": [["rate", "="]],
"is_child_table": True
}
})
def validate_proj_cust(self): def validate_proj_cust(self):
"""check for does customer belong to same project as entered..""" """check for does customer belong to same project as entered.."""

View File

@@ -36,8 +36,8 @@ class ManageVariants(Document):
def get_attributes(self): def get_attributes(self):
attributes = {} attributes = {}
self.set('attributes', []) self.set('attributes', [])
for d in frappe.db.sql("""select attribute, attribute_value from `tabVariant Attribute` as attribute, for d in frappe.db.sql("""select attr.attribute, attr.attribute_value from `tabVariant Attribute` as attr,
`tabItem` as item where attribute.parent= item.name and item.variant_of = %s""", self.item_code, as_dict=1): `tabItem` as item where attr.parent = item.name and item.variant_of = %s""", self.item_code, as_dict=1):
attributes.setdefault(d.attribute, []).append(d.attribute_value) attributes.setdefault(d.attribute, []).append(d.attribute_value)
for d in attributes: for d in attributes:
attribute_values = set(attributes[d]) attribute_values = set(attributes[d])

View File

@@ -104,15 +104,8 @@ class PurchaseReceipt(BuyingController):
} }
}) })
if cint(frappe.defaults.get_global_default('maintain_same_rate')): if cint(frappe.db.get_single_value('Buying Settings', 'maintain_same_rate')):
super(PurchaseReceipt, self).validate_with_previous_doc({ self.validate_rate_with_reference_doc([["Purchase Order", "prevdoc_docname", "prevdoc_detail_docname"]])
"Purchase Order Item": {
"ref_dn_field": "prevdoc_detail_docname",
"compare_fields": [["rate", "="]],
"is_child_table": True
}
})
def po_required(self): def po_required(self):
if frappe.db.get_value("Buying Settings", None, "po_required") == 'Yes': if frappe.db.get_value("Buying Settings", None, "po_required") == 'Yes':

View File

@@ -870,8 +870,6 @@ def make_return_jv(stock_entry):
"account": r.get("account"), "account": r.get("account"),
"party_type": r.get("party_type"), "party_type": r.get("party_type"),
"party": r.get("party"), "party": r.get("party"),
"against_invoice": r.get("against_invoice"),
"against_voucher": r.get("against_voucher"),
"balance": get_balance_on(r.get("account"), se.posting_date) if r.get("account") else 0 "balance": get_balance_on(r.get("account"), se.posting_date) if r.get("account") else 0
}) })
@@ -882,8 +880,7 @@ def make_return_jv_from_sales_invoice(se, ref):
parent = { parent = {
"account": ref.doc.debit_to, "account": ref.doc.debit_to,
"party_type": "Customer", "party_type": "Customer",
"party": ref.doc.customer, "party": ref.doc.customer
"against_invoice": ref.doc.name,
} }
# income account entries # income account entries
@@ -957,9 +954,6 @@ def make_return_jv_from_delivery_note(se, ref):
break break
if len(invoices_against_delivery) == 1:
parent["against_invoice"] = invoices_against_delivery[0]
result = [parent] + [{"account": account} for account in children] result = [parent] + [{"account": account} for account in children]
return result return result
@@ -1015,9 +1009,6 @@ def make_return_jv_from_purchase_receipt(se, ref):
break break
if len(invoice_against_receipt) == 1:
parent["against_voucher"] = invoice_against_receipt[0]
result = [parent] + [{"account": account} for account in children] result = [parent] + [{"account": account} for account in children]
return result return result

View File

@@ -4,7 +4,7 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import frappe import frappe
from frappe import _ from frappe import _
from frappe.utils import cstr, now_datetime, cint from frappe.utils import cstr, now_datetime, cint, flt
import frappe.share import frappe.share
from erpnext.controllers.status_updater import StatusUpdater from erpnext.controllers.status_updater import StatusUpdater
@@ -92,6 +92,17 @@ class TransactionBase(StatusUpdater):
for field, condition in fields: for field, condition in fields:
if prevdoc_values[field] is not None: if prevdoc_values[field] is not None:
self.validate_value(field, condition, prevdoc_values[field], doc) self.validate_value(field, condition, prevdoc_values[field], doc)
def validate_rate_with_reference_doc(self, ref_details):
for ref_dt, ref_dn_field, ref_link_field in ref_details:
for d in self.get("items"):
if d.get(ref_link_field):
ref_rate = frappe.db.get_value(ref_dt + " Item", d.get(ref_link_field), "rate")
if abs(flt(d.rate - ref_rate, d.precision("rate"))) >= .01:
frappe.throw(_("Row #{0}: Rate must be same as {1}: {2} ({3} / {4}) ")
.format(d.idx, ref_dt, d.get(ref_dn_field), d.rate, ref_rate))
def delete_events(ref_type, ref_name): def delete_events(ref_type, ref_name):