Merge pull request #13094 from rohitwaghchaure/pos_discount_v10_1
[Hotfix] POS discount issue
diff --git a/erpnext/education/doctype/fee_schedule/fee_schedule.js b/erpnext/education/doctype/fee_schedule/fee_schedule.js
index a36b9cb..c4fff77 100644
--- a/erpnext/education/doctype/fee_schedule/fee_schedule.js
+++ b/erpnext/education/doctype/fee_schedule/fee_schedule.js
@@ -38,9 +38,6 @@
if (data.reload && data.reload === 1) {
frm.reload_doc();
}
- if (data.progress && data.progress === "0") {
- frappe.msgprint(__("Fee records will be created in the background. In case of any error the error message will be updated in the Schedule."));
- }
if (data.progress) {
let progress_bar = $(cur_frm.dashboard.progress_area).find(".progress-bar");
if (progress_bar) {
@@ -74,6 +71,15 @@
});
}, "fa fa-play", "btn-success");
}
+ if (frm.doc.fee_creation_status == "Successful") {
+ frm.add_custom_button(__("View Fees Records"), function() {
+ frappe.route_options = {
+ fee_schedule: frm.doc.name
+ };
+ frappe.set_route("List", "Fees");
+ });
+ }
+
},
fee_structure: function(frm) {
diff --git a/erpnext/education/doctype/fee_schedule/fee_schedule.json b/erpnext/education/doctype/fee_schedule/fee_schedule.json
index a77cc59..5aae690 100644
--- a/erpnext/education/doctype/fee_schedule/fee_schedule.json
+++ b/erpnext/education/doctype/fee_schedule/fee_schedule.json
@@ -4,7 +4,7 @@
"allow_import": 1,
"allow_rename": 0,
"autoname": "naming_series:",
- "beta": 1,
+ "beta": 0,
"creation": "2017-07-18 15:21:21.527136",
"custom": 0,
"docstatus": 0,
@@ -1029,7 +1029,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
- "modified": "2017-12-04 13:08:27.727709",
+ "modified": "2018-02-26 13:59:36.560780",
"modified_by": "Administrator",
"module": "Education",
"name": "Fee Schedule",
diff --git a/erpnext/education/doctype/fee_schedule/fee_schedule.py b/erpnext/education/doctype/fee_schedule/fee_schedule.py
index 59acf46..b6df8c5 100644
--- a/erpnext/education/doctype/fee_schedule/fee_schedule.py
+++ b/erpnext/education/doctype/fee_schedule/fee_schedule.py
@@ -56,8 +56,15 @@
self.db_set("fee_creation_status", "In Process")
frappe.publish_realtime("fee_schedule_progress",
{"progress": "0", "reload": 1}, user=frappe.session.user)
- enqueue(generate_fee, queue='default', timeout=6000, event='generate_fee',
- fee_schedule=self.name)
+
+ total_records = sum([int(d.total_students) for d in self.student_groups])
+ if total_records > 10:
+ frappe.msgprint(_('''Fee records will be created in the background.
+ In case of any error the error message will be updated in the Schedule.'''))
+ enqueue(generate_fee, queue='default', timeout=6000, event='generate_fee',
+ fee_schedule=self.name)
+ else:
+ generate_fee(self.name)
def generate_fee(fee_schedule):
doc = frappe.get_doc("Fee Schedule", fee_schedule)
@@ -69,10 +76,7 @@
frappe.throw(_("Please setup Students under Student Groups"))
for d in doc.student_groups:
- students = frappe.db.sql(""" select sg.program, sg.batch, sgs.student, sgs.student_name
- from `tabStudent Group` sg, `tabStudent Group Student` sgs
- where sg.name=%s and sg.name=sgs.parent and sgs.active=1""", d.student_group, as_dict=1)
-
+ students = get_students(d.student_group, doc.academic_year, doc.academic_term, doc.student_category)
for student in students:
try:
fees_doc = get_mapped_doc("Fee Schedule", fee_schedule, {
@@ -86,7 +90,7 @@
fees_doc.student = student.student
fees_doc.student_name = student.student_name
fees_doc.program = student.program
- fees_doc.student_batch = student.batch
+ fees_doc.student_batch = student.student_batch_name
fees_doc.send_payment_request = doc.send_email
fees_doc.save()
fees_doc.submit()
@@ -110,6 +114,30 @@
{"progress": "100", "reload": 1}, user=frappe.session.user)
+def get_students(student_group, academic_year, academic_term=None, student_category=None):
+ conditions = ""
+ if student_category:
+ conditions = " and pe.student_category='{}'".format(frappe.db.escape(student_category))
+ if academic_term:
+ conditions = " and pe.academic_term='{}'".format(frappe.db.escape(academic_term))
+
+ students = frappe.db.sql("""
+ select pe.student, pe.student_name, pe.program, pe.student_batch_name
+ from `tabStudent Group Student` sgs, `tabProgram Enrollment` pe
+ where
+ pe.student = sgs.student and pe.academic_year = %s
+ and sgs.parent = %s and sgs.active = 1
+ {conditions}
+ """.format(conditions=conditions), (academic_year, student_group), as_dict=1)
+ return students
+
+
+@frappe.whitelist()
+def get_total_students(student_group, academic_year, academic_term=None, student_category=None):
+ total_students = get_students(student_group, academic_year, academic_term, student_category)
+ return len(total_students)
+
+
@frappe.whitelist()
def get_fee_structure(source_name,target_doc=None):
fee_request = get_mapped_doc("Fee Structure", source_name,
@@ -117,23 +145,3 @@
"doctype": "Fee Schedule"
}}, ignore_permissions=True)
return fee_request
-
-@frappe.whitelist()
-def get_total_students(student_group, academic_year, academic_term=None, student_category=None):
- conditions = ""
- if student_category:
- conditions = " and pe.student_category='{}'".format(frappe.db.escape(student_category))
- if academic_term:
- conditions = " and pe.academic_term='{}'".format(frappe.db.escape(academic_term))
-
-
- return frappe.db.sql("""
- select count(pe.name)
- from `tabStudent Group Student` sgs, `tabProgram Enrollment` pe
- where
- pe.student = sgs.student
- and pe.academic_year = %s
- and sgs.parent = %s
- and sgs.active = 1
- {conditions}
- """.format(conditions=conditions), (academic_year, student_group))[0][0]
diff --git a/erpnext/stock/doctype/serial_no/serial_no.py b/erpnext/stock/doctype/serial_no/serial_no.py
index 80c93ef..7194ec1 100644
--- a/erpnext/stock/doctype/serial_no/serial_no.py
+++ b/erpnext/stock/doctype/serial_no/serial_no.py
@@ -187,7 +187,7 @@
update_serial_nos(sle, item_det)
def validate_serial_no(sle, item_det):
- if item_det.has_serial_no==0:
+ if item_det.has_serial_no==0 and sle.is_cancelled == "No":
if sle.serial_no:
frappe.throw(_("Item {0} is not setup for Serial Nos. Column must be blank").format(sle.item_code),
SerialNoNotRequiredError)
diff --git a/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py b/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py
index fdf4442..e1249ea 100644
--- a/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py
+++ b/erpnext/stock/report/itemwise_recommended_reorder_level/itemwise_recommended_reorder_level.py
@@ -24,9 +24,8 @@
data = []
for item in items:
-
- total_outgoing = consumed_item_map.get(item.name, 0)+delivered_item_map.get(item.name,0)
- avg_daily_outgoing = flt(total_outgoing/diff, float_preceision)
+ total_outgoing = consumed_item_map.get(item.name, 0) + delivered_item_map.get(item.name,0)
+ avg_daily_outgoing = flt(total_outgoing / diff, float_preceision)
reorder_level = (avg_daily_outgoing * flt(item.lead_time_days)) + flt(item.safety_stock)
data.append([item.name, item.item_name, item.description, item.safety_stock, item.lead_time_days,
@@ -45,12 +44,11 @@
def get_item_info():
return frappe.db.sql("""select name, item_name, description, safety_stock,
- lead_time_days from tabItem""", as_dict=1)
+ lead_time_days from tabItem""", as_dict=1)
def get_consumed_items(condition):
-
cn_items = frappe.db.sql("""select se_item.item_code,
- sum(se_item.actual_qty) as 'consume_qty'
+ sum(se_item.transfer_qty) as 'consume_qty'
from `tabStock Entry` se, `tabStock Entry Detail` se_item
where se.name = se_item.parent and se.docstatus = 1
and ifnull(se_item.t_warehouse, '') = '' %s
@@ -63,17 +61,16 @@
return cn_items_map
def get_delivered_items(condition):
-
- dn_items = frappe.db.sql("""select dn_item.item_code, sum(dn_item.qty) as dn_qty
+ dn_items = frappe.db.sql("""select dn_item.item_code, sum(dn_item.stock_qty) as dn_qty
from `tabDelivery Note` dn, `tabDelivery Note Item` dn_item
where dn.name = dn_item.parent and dn.docstatus = 1 %s
group by dn_item.item_code""" % (condition), as_dict=1)
- si_items = frappe.db.sql("""select si_item.item_name, sum(si_item.qty) as si_qty
+ si_items = frappe.db.sql("""select si_item.item_code, sum(si_item.stock_qty) as si_qty
from `tabSales Invoice` si, `tabSales Invoice Item` si_item
where si.name = si_item.parent and si.docstatus = 1 and
- si.update_stock = 1 and si.is_pos = 1 %s
- group by si_item.item_name""" % (condition), as_dict=1)
+ si.update_stock = 1 %s
+ group by si_item.item_code""" % (condition), as_dict=1)
dn_item_map = {}
for item in dn_items:
diff --git a/erpnext/templates/emails/reorder_item.html b/erpnext/templates/emails/reorder_item.html
index c1aa897..05af316 100644
--- a/erpnext/templates/emails/reorder_item.html
+++ b/erpnext/templates/emails/reorder_item.html
@@ -9,7 +9,7 @@
<th style="border: 1px solid #d1d8dd; width: 35%; text-align: left; padding: 5px;">{{ _("Warehouse") }}</th>
<th style="border: 1px solid #d1d8dd; width: 10%; text-align: right; padding: 5px;">{{ _("Quantity") }}</th>
<th style="border: 1px solid #d1d8dd; width: 10%; text-align: left; padding: 5px;">{{ _("UOM") }}</th>
- <th style="border: 1px solid #d1d8dd; width: 10%; text-align: left; padding: 5px;">{{ _("Balance Qty") }}</th>
+ <th style="border: 1px solid #d1d8dd; width: 10%; text-align: left; padding: 5px;">{{ _("Projected Qty") }}</th>
</tr>
</thead>
<tbody>
@@ -22,7 +22,7 @@
<td style="border: 1px solid #d1d8dd; text-align: left; padding: 5px;">{{ item.warehouse }}</td>
<td style="border: 1px solid #d1d8dd; text-align: right; padding: 5px;">{{ item.qty }}</td>
<td style="border: 1px solid #d1d8dd; text-align: left; padding: 5px;">{{ item.uom }}</td>
- <td style="border: 1px solid #d1d8dd; text-align: left; padding: 5px;">{{ item.balance_qty }}</td>
+ <td style="border: 1px solid #d1d8dd; text-align: left; padding: 5px;">{{ frappe.utils.flt(item.projected_qty) + frappe.utils.flt(item.qty) }}</td>
</tr>
{%- endfor %}
</tbody>