commit
be99b1240c
@ -111,7 +111,7 @@ erpnext.buying.BuyingController = erpnext.TransactionController.extend({
|
|||||||
var item = frappe.get_doc(cdt, cdn);
|
var item = frappe.get_doc(cdt, cdn);
|
||||||
if(item.item_code && item.uom) {
|
if(item.item_code && item.uom) {
|
||||||
return this.frm.call({
|
return this.frm.call({
|
||||||
method: "erpnext.buying.utils.get_conversion_factor",
|
method: "erpnext.stock.get_item_details.get_conversion_factor",
|
||||||
child: item,
|
child: item,
|
||||||
args: {
|
args: {
|
||||||
item_code: item.item_code,
|
item_code: item.item_code,
|
||||||
@ -144,7 +144,7 @@ erpnext.buying.BuyingController = erpnext.TransactionController.extend({
|
|||||||
var item = frappe.get_doc(cdt, cdn);
|
var item = frappe.get_doc(cdt, cdn);
|
||||||
if(item.item_code && item.warehouse) {
|
if(item.item_code && item.warehouse) {
|
||||||
return this.frm.call({
|
return this.frm.call({
|
||||||
method: "erpnext.buying.utils.get_projected_qty",
|
method: "erpnext.stock.get_item_details.get_projected_qty",
|
||||||
child: item,
|
child: item,
|
||||||
args: {
|
args: {
|
||||||
item_code: item.item_code,
|
item_code: item.item_code,
|
||||||
|
|||||||
@ -45,6 +45,7 @@ class PurchaseOrder(BuyingController):
|
|||||||
|
|
||||||
self.validate_with_previous_doc()
|
self.validate_with_previous_doc()
|
||||||
self.validate_for_subcontracting()
|
self.validate_for_subcontracting()
|
||||||
|
self.validate_minimum_order_qty()
|
||||||
self.create_raw_materials_supplied("po_raw_material_details")
|
self.create_raw_materials_supplied("po_raw_material_details")
|
||||||
|
|
||||||
def validate_with_previous_doc(self):
|
def validate_with_previous_doc(self):
|
||||||
@ -61,6 +62,13 @@ class PurchaseOrder(BuyingController):
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
def validate_minimum_order_qty(self):
|
||||||
|
itemwise_min_order_qty = frappe._dict(frappe.db.sql("select name, min_order_qty from tabItem"))
|
||||||
|
|
||||||
|
for d in self.get("po_details"):
|
||||||
|
if flt(d.qty) < flt(itemwise_min_order_qty.get(d.item_code)):
|
||||||
|
frappe.throw(_("Row #{0}: Ordered qty can not less than item's minimum order qty (defined in item master).").format(d.idx))
|
||||||
|
|
||||||
def get_schedule_dates(self):
|
def get_schedule_dates(self):
|
||||||
for d in self.get('po_details'):
|
for d in self.get('po_details'):
|
||||||
if d.prevdoc_detail_docname and not d.schedule_date:
|
if d.prevdoc_detail_docname and not d.schedule_date:
|
||||||
|
|||||||
@ -33,8 +33,8 @@ class SalarySlip(TransactionBase):
|
|||||||
return struct and struct[0][0] or ''
|
return struct and struct[0][0] or ''
|
||||||
|
|
||||||
def pull_sal_struct(self, struct):
|
def pull_sal_struct(self, struct):
|
||||||
from erpnext.hr.doctype.salary_structure.salary_structure import get_mapped_doc
|
from erpnext.hr.doctype.salary_structure.salary_structure import make_salary_slip
|
||||||
self.update(get_mapped_doc(struct, self))
|
self.update(make_salary_slip(struct, self).as_dict())
|
||||||
|
|
||||||
def pull_emp_details(self):
|
def pull_emp_details(self):
|
||||||
emp = frappe.db.get_value("Employee", self.employee,
|
emp = frappe.db.get_value("Employee", self.employee,
|
||||||
|
|||||||
@ -89,7 +89,7 @@ erpnext.selling.SalesOrderController = erpnext.selling.SellingController.extend(
|
|||||||
var item = frappe.get_doc(cdt, cdn);
|
var item = frappe.get_doc(cdt, cdn);
|
||||||
if(item.item_code && item.warehouse) {
|
if(item.item_code && item.warehouse) {
|
||||||
return this.frm.call({
|
return this.frm.call({
|
||||||
method: "erpnext.selling.utils.get_available_qty",
|
method: "erpnext.stock.get_item_details.get_available_qty",
|
||||||
child: item,
|
child: item,
|
||||||
args: {
|
args: {
|
||||||
item_code: item.item_code,
|
item_code: item.item_code,
|
||||||
|
|||||||
@ -215,7 +215,7 @@ erpnext.selling.SellingController = erpnext.TransactionController.extend({
|
|||||||
var item = frappe.get_doc(cdt, cdn);
|
var item = frappe.get_doc(cdt, cdn);
|
||||||
if(item.item_code && item.warehouse) {
|
if(item.item_code && item.warehouse) {
|
||||||
return this.frm.call({
|
return this.frm.call({
|
||||||
method: "erpnext.selling.utils.get_available_qty",
|
method: "erpnext.stock.get_item_details.get_available_qty",
|
||||||
child: item,
|
child: item,
|
||||||
args: {
|
args: {
|
||||||
item_code: item.item_code,
|
item_code: item.item_code,
|
||||||
|
|||||||
@ -297,8 +297,8 @@ class StockEntry(StockController):
|
|||||||
frappe.DoesNotExistError)
|
frappe.DoesNotExistError)
|
||||||
|
|
||||||
# validate quantity <= ref item's qty - qty already returned
|
# validate quantity <= ref item's qty - qty already returned
|
||||||
ref_item = ref.doc.getone({"item_code": item.item_code})
|
ref_item_qty = sum([flt(d.qty) for d in ref.doc.get({"item_code": item.item_code})])
|
||||||
returnable_qty = ref_item.qty - flt(already_returned_item_qty.get(item.item_code))
|
returnable_qty = ref_item_qty - flt(already_returned_item_qty.get(item.item_code))
|
||||||
if not returnable_qty:
|
if not returnable_qty:
|
||||||
frappe.throw(_("Item {0} has already been returned").format(item.item_code), StockOverReturnError)
|
frappe.throw(_("Item {0} has already been returned").format(item.item_code), StockOverReturnError)
|
||||||
elif item.transfer_qty > returnable_qty:
|
elif item.transfer_qty > returnable_qty:
|
||||||
|
|||||||
@ -175,6 +175,11 @@ def get_buying_amount(voucher_type, voucher_no, item_row, stock_ledger_entries):
|
|||||||
|
|
||||||
def reorder_item():
|
def reorder_item():
|
||||||
""" Reorder item if stock reaches reorder level"""
|
""" Reorder item if stock reaches reorder level"""
|
||||||
|
|
||||||
|
# if initial setup not completed, return
|
||||||
|
if not frappe.db.sql("select name from `tabFiscal Year` limit 1"):
|
||||||
|
return
|
||||||
|
|
||||||
if getattr(frappe.local, "auto_indent", None) is None:
|
if getattr(frappe.local, "auto_indent", None) is None:
|
||||||
frappe.local.auto_indent = cint(frappe.db.get_value('Stock Settings', None, 'auto_indent'))
|
frappe.local.auto_indent = cint(frappe.db.get_value('Stock Settings', None, 'auto_indent'))
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user