Fixed merge conflict

This commit is contained in:
Nabin Hait 2016-12-06 16:16:58 +05:30
commit 5c18bd9b61
23 changed files with 134 additions and 50 deletions

View File

@ -2,7 +2,7 @@
from __future__ import unicode_literals from __future__ import unicode_literals
import frappe import frappe
__version__ = '7.1.20' __version__ = '7.1.21'
def get_default_company(user=None): def get_default_company(user=None):
'''Get default company for user''' '''Get default company for user'''

View File

@ -198,7 +198,7 @@ function hide_fields(doc) {
item_fields_stock = ['warehouse_section', 'received_qty', 'rejected_qty']; item_fields_stock = ['warehouse_section', 'received_qty', 'rejected_qty'];
cur_frm.fields_dict['items'].grid.set_column_disp(item_fields_stock, cur_frm.fields_dict['items'].grid.set_column_disp(item_fields_stock,
(cint(doc.update_stock)==1 ? true : false)); (cint(doc.update_stock)==1 || cint(doc.is_return)==1 ? true : false));
cur_frm.refresh_fields(); cur_frm.refresh_fields();
} }

View File

@ -307,7 +307,7 @@ cur_frm.cscript.hide_fields = function(doc) {
item_fields_stock = ['serial_no', 'batch_no', 'actual_qty', 'expense_account', 'warehouse', 'expense_account', 'warehouse'] item_fields_stock = ['serial_no', 'batch_no', 'actual_qty', 'expense_account', 'warehouse', 'expense_account', 'warehouse']
cur_frm.fields_dict['items'].grid.set_column_disp(item_fields_stock, cur_frm.fields_dict['items'].grid.set_column_disp(item_fields_stock,
(cint(doc.update_stock)==1 ? true : false)); (cint(doc.update_stock)==1 || cint(doc.is_return)==1 ? true : false));
// India related fields // India related fields
if (frappe.boot.sysdefaults.country == 'India') unhide_field(['c_form_applicable', 'c_form_no']); if (frappe.boot.sysdefaults.country == 'India') unhide_field(['c_form_applicable', 'c_form_no']);

View File

@ -38,6 +38,7 @@ class LeaveApplication(Document):
self.validate_block_days() self.validate_block_days()
self.validate_salary_processed_days() self.validate_salary_processed_days()
self.validate_leave_approver() self.validate_leave_approver()
self.validate_attendance()
def on_update(self): def on_update(self):
if (not self.previous_doc and self.leave_approver) or (self.previous_doc and \ if (not self.previous_doc and self.leave_approver) or (self.previous_doc and \
@ -102,7 +103,7 @@ class LeaveApplication(Document):
last_processed_pay_slip = frappe.db.sql(""" last_processed_pay_slip = frappe.db.sql("""
select start_date, end_date from `tabSalary Slip` select start_date, end_date from `tabSalary Slip`
where docstatus != 2 and employee = %s where docstatus = 1 and employee = %s
and ((%s between start_date and end_date) or (%s between start_date and end_date)) and ((%s between start_date and end_date) or (%s between start_date and end_date))
order by modified desc limit 1 order by modified desc limit 1
""",(self.employee, self.to_date, self.from_date)) """,(self.employee, self.to_date, self.from_date))
@ -212,6 +213,13 @@ class LeaveApplication(Document):
elif self.docstatus==1 and len(leave_approvers) and self.leave_approver != frappe.session.user: elif self.docstatus==1 and len(leave_approvers) and self.leave_approver != frappe.session.user:
frappe.throw(_("Only the selected Leave Approver can submit this Leave Application"), frappe.throw(_("Only the selected Leave Approver can submit this Leave Application"),
LeaveApproverIdentityError) LeaveApproverIdentityError)
def validate_attendance(self):
attendance = frappe.db.sql("""select name from `tabAttendance` where employee = %s and (att_date between %s and %s)
and docstatus = 1""",
(self.employee, self.from_date, self.to_date))
if attendance:
frappe.throw(_("Attendance for employee {0} is already marked for this day").format(self.employee))
def notify_employee(self, status): def notify_employee(self, status):
employee = frappe.get_doc("Employee", self.employee) employee = frappe.get_doc("Employee", self.employee)

View File

@ -43,6 +43,16 @@ frappe.ui.form.on("Process Payroll", {
} }
}) })
} }
},
account: function(frm) {
var account_types = ["Bank", "Cash"];
return {
filters: {
"account_type": ["in", account_types],
"is_group": 0,
"company": frm.doc.company
}
}
} }
}) })

View File

@ -114,22 +114,15 @@ var calculate_all = function(doc, dt, dn) {
} }
cur_frm.cscript.amount = function(doc,dt,dn){ cur_frm.cscript.amount = function(doc,dt,dn){
calculate_earning_total(doc, dt, dn); var child = locals[dt][dn];
calculate_net_pay(doc, dt, dn); if(!doc.salary_structure){
frappe.model.set_value(dt,dn, "default_amount", child.amount)
}
calculate_all(doc, dt, dn);
} }
cur_frm.cscript.depends_on_lwp = function(doc,dt,dn){ cur_frm.cscript.depends_on_lwp = function(doc,dt,dn){
calculate_earning_total(doc, dt, dn, true); calculate_earning_total(doc, dt, dn, true);
calculate_net_pay(doc, dt, dn);
}
// Trigger on earning modified amount and depends on lwp
// ------------------------------------------------------------------------
cur_frm.cscript.amount = function(doc,dt,dn){
calculate_ded_total(doc, dt, dn);
calculate_net_pay(doc, dt, dn);
}
cur_frm.cscript.depends_on_lwp = function(doc, dt, dn) {
calculate_ded_total(doc, dt, dn, true); calculate_ded_total(doc, dt, dn, true);
calculate_net_pay(doc, dt, dn); calculate_net_pay(doc, dt, dn);
}; };

View File

@ -10,7 +10,6 @@ from frappe.model.naming import make_autoname
from frappe import msgprint, _ from frappe import msgprint, _
from erpnext.accounts.utils import get_fiscal_year from erpnext.accounts.utils import get_fiscal_year
from erpnext.setup.utils import get_company_currency from erpnext.setup.utils import get_company_currency
from erpnext.hr.utils import set_employee_name
from erpnext.hr.doctype.process_payroll.process_payroll import get_month_details from erpnext.hr.doctype.process_payroll.process_payroll import get_month_details
from erpnext.hr.doctype.employee.employee import get_holiday_list_for_employee from erpnext.hr.doctype.employee.employee import get_holiday_list_for_employee
from erpnext.utilities.transaction_base import TransactionBase from erpnext.utilities.transaction_base import TransactionBase
@ -84,6 +83,7 @@ class SalarySlip(TransactionBase):
if d.amount_based_on_formula: if d.amount_based_on_formula:
if d.formula: if d.formula:
amount = eval(d.formula, None, data) amount = eval(d.formula, None, data)
if amount:
data[d.abbr] = amount data[d.abbr] = amount
return amount return amount
@ -230,10 +230,15 @@ class SalarySlip(TransactionBase):
if working_days < 0: if working_days < 0:
frappe.throw(_("There are more holidays than working days this month.")) frappe.throw(_("There are more holidays than working days this month."))
actual_lwp = self.calculate_lwp(holidays, working_days)
if not lwp: if not lwp:
lwp = self.calculate_lwp(holidays, working_days) lwp = actual_lwp
elif lwp != actual_lwp:
frappe.msgprint(_("Leave Without Pay does not match with approved Leave Application records"))
self.total_days_in_month = working_days self.total_days_in_month = working_days
self.leave_without_pay = lwp self.leave_without_pay = lwp
payment_days = flt(self.get_payment_days(joining_date, relieving_date)) - flt(lwp) payment_days = flt(self.get_payment_days(joining_date, relieving_date)) - flt(lwp)
self.payment_days = payment_days > 0 and payment_days or 0 self.payment_days = payment_days > 0 and payment_days or 0
@ -315,7 +320,7 @@ class SalarySlip(TransactionBase):
def sum_components(self, component_type, total_field): def sum_components(self, component_type, total_field):
for d in self.get(component_type): for d in self.get(component_type):
if cint(d.depends_on_lwp) == 1 and not self.salary_slip_based_on_timesheet: if cint(d.depends_on_lwp) == 1 and not self.salary_slip_based_on_timesheet:
d.amount = rounded((flt(d.amount) * flt(self.payment_days) d.amount = rounded((flt(d.default_amount) * flt(self.payment_days)
/ cint(self.total_days_in_month)), self.precision("amount", component_type)) / cint(self.total_days_in_month)), self.precision("amount", component_type))
elif not self.payment_days and not self.salary_slip_based_on_timesheet: elif not self.payment_days and not self.salary_slip_based_on_timesheet:
d.amount = 0 d.amount = 0

View File

@ -55,8 +55,8 @@ class TestSalarySlip(unittest.TestCase):
ss = frappe.get_doc("Salary Slip", ss = frappe.get_doc("Salary Slip",
self.make_employee_salary_slip("test_employee@salary.com")) self.make_employee_salary_slip("test_employee@salary.com"))
self.assertEquals(ss.total_days_in_month, 27) self.assertEquals(ss.total_days_in_month, 28)
self.assertEquals(ss.payment_days, 27) self.assertEquals(ss.payment_days, 28)
self.assertEquals(ss.earnings[0].amount, 5000) self.assertEquals(ss.earnings[0].amount, 5000)
self.assertEquals(ss.earnings[0].default_amount, 5000) self.assertEquals(ss.earnings[0].default_amount, 5000)
self.assertEquals(ss.earnings[1].amount, 3000) self.assertEquals(ss.earnings[1].amount, 3000)
@ -76,23 +76,23 @@ class TestSalarySlip(unittest.TestCase):
ss = frappe.get_doc("Salary Slip", ss = frappe.get_doc("Salary Slip",
self.make_employee_salary_slip("test_employee@salary.com")) self.make_employee_salary_slip("test_employee@salary.com"))
self.assertEquals(ss.total_days_in_month, 27) self.assertEquals(ss.total_days_in_month, 28)
self.assertEquals(ss.payment_days, 27) self.assertEquals(ss.payment_days, 28)
# set relieving date in the same month # set relieving date in the same month
frappe.db.set_value("Employee", frappe.get_value("Employee", {"employee_name":"test_employee@salary.com"}, "name"), "relieving_date", "12-12-2016") frappe.db.set_value("Employee", frappe.get_value("Employee", {"employee_name":"test_employee@salary.com"}, "name"), "relieving_date", "12-12-2016")
frappe.db.set_value("Employee", frappe.get_value("Employee", {"employee_name":"test_employee@salary.com"}, "name"), "status", "Left") frappe.db.set_value("Employee", frappe.get_value("Employee", {"employee_name":"test_employee@salary.com"}, "name"), "status", "Left")
self.assertEquals(ss.total_days_in_month, 27) self.assertEquals(ss.total_days_in_month, 28)
self.assertEquals(ss.payment_days, 27) self.assertEquals(ss.payment_days, 28)
ss.save() ss.save()
frappe.db.set_value("Employee", frappe.get_value("Employee", {"employee_name":"test_employee@salary.com"}, "name"), "relieving_date", None) frappe.db.set_value("Employee", frappe.get_value("Employee", {"employee_name":"test_employee@salary.com"}, "name"), "relieving_date", None)
frappe.db.set_value("Employee", frappe.get_value("Employee", {"employee_name":"test_employee@salary.com"}, "name"), "status", "Active") frappe.db.set_value("Employee", frappe.get_value("Employee", {"employee_name":"test_employee@salary.com"}, "name"), "status", "Active")
# Holidays included in working days # Holidays included in working days
frappe.db.set_value("HR Settings", None, "include_holidays_in_total_working_days", 1) frappe.db.set_value("HR Settings", None, "include_holidays_in_total_working_days", 1)
self.assertEquals(ss.total_days_in_month, 27) self.assertEquals(ss.total_days_in_month, 28)
self.assertEquals(ss.payment_days, 27) self.assertEquals(ss.payment_days, 28)
ss.save() ss.save()
# #
# frappe.db.set_value("Employee", frappe.get_value("Employee", {"employee_name":"test_employee@salary.com"}, "name"), "date_of_joining", "2001-01-11") # frappe.db.set_value("Employee", frappe.get_value("Employee", {"employee_name":"test_employee@salary.com"}, "name"), "date_of_joining", "2001-01-11")

View File

@ -1,12 +1,14 @@
{ {
"add_total_row": 0,
"apply_user_permissions": 1, "apply_user_permissions": 1,
"creation": "2013-05-06 18:43:53", "creation": "2013-05-06 18:43:53",
"disabled": 0,
"docstatus": 0, "docstatus": 0,
"doctype": "Report", "doctype": "Report",
"idx": 1, "idx": 1,
"is_standard": "Yes", "is_standard": "Yes",
"json": "{\"filters\":[],\"columns\":[[\"name\",\"Employee\"],[\"employee_number\",\"Employee\"],[\"date_of_joining\",\"Employee\"],[\"branch\",\"Employee\"],[\"department\",\"Employee\"],[\"designation\",\"Employee\"],[\"gender\",\"Employee\"],[\"status\",\"Employee\"],[\"company\",\"Employee\"],[\"employment_type\",\"Employee\"],[\"reports_to\",\"Employee\"],[\"company_email\",\"Employee\"]],\"sort_by\":\"Employee.bank_ac_no\",\"sort_order\":\"desc\",\"sort_by_next\":\"\",\"sort_order_next\":\"desc\"}", "json": "{\"add_total_row\": 0, \"sort_by\": \"Employee.bank_ac_no\", \"sort_order\": \"desc\", \"sort_by_next\": \"\", \"filters\": [], \"sort_order_next\": \"desc\", \"columns\": [[\"name\", \"Employee\"], [\"employee_number\", \"Employee\"], [\"date_of_joining\", \"Employee\"], [\"branch\", \"Employee\"], [\"department\", \"Employee\"], [\"designation\", \"Employee\"], [\"gender\", \"Employee\"], [\"status\", \"Employee\"], [\"company\", \"Employee\"], [\"employment_type\", \"Employee\"], [\"reports_to\", \"Employee\"], [\"company_email\", \"Employee\"]]}",
"modified": "2015-03-02 07:42:02.352823", "modified": "2016-12-05 18:49:34.782552",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "HR", "module": "HR",
"name": "Employee Information", "name": "Employee Information",

View File

@ -48,7 +48,7 @@ def get_columns(salary_slips):
from `tabSalary Detail` sd, `tabSalary Component` sc from `tabSalary Detail` sd, `tabSalary Component` sc
where sc.name=sd.salary_component and sd.amount != 0 and sd.parent in (%s)""" % where sc.name=sd.salary_component and sd.amount != 0 and sd.parent in (%s)""" %
(', '.join(['%s']*len(salary_slips))), tuple([d.name for d in salary_slips]), as_dict=1): (', '.join(['%s']*len(salary_slips))), tuple([d.name for d in salary_slips]), as_dict=1):
salary_components[component.type].append(component.salary_component) salary_components[_(component.type)].append(component.salary_component)
columns = columns + [(e + ":Currency:120") for e in salary_components[_("Earning")]] + \ columns = columns + [(e + ":Currency:120") for e in salary_components[_("Earning")]] + \
[ _("Arrear Amount") + ":Currency:120", _("Leave Encashment Amount") + ":Currency:150", [ _("Arrear Amount") + ":Currency:120", _("Leave Encashment Amount") + ":Currency:150",

View File

@ -353,3 +353,4 @@ erpnext.patches.v7_1.update_missing_salary_component_type
erpnext.patches.v7_1.rename_quality_inspection_field erpnext.patches.v7_1.rename_quality_inspection_field
erpnext.patches.v7_0.update_autoname_field erpnext.patches.v7_0.update_autoname_field
erpnext.patches.v7_1.update_bom_base_currency erpnext.patches.v7_1.update_bom_base_currency
erpnext.patches.v7_0.update_status_of_po_so

View File

@ -0,0 +1,62 @@
# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
# License: GNU General Public License v3. See license.txt
from __future__ import unicode_literals
import frappe
from frappe.utils import cint, flt
def execute():
update_po_per_received_per_billed()
update_so_per_delivered_per_billed()
update_status()
def update_po_per_received_per_billed():
frappe.db.sql("""
update
`tabPurchase Order`
set
`tabPurchase Order`.per_received = round((select sum(if(qty > ifnull(received_qty, 0),
ifnull(received_qty, 0), qty)) / sum(qty) *100 from `tabPurchase Order Item`
where parent = `tabPurchase Order`.name), 2),
`tabPurchase Order`.per_billed = round((select sum( if(amount > ifnull(billed_amt, 0),
ifnull(billed_amt, 0), amount)) / sum(amount) *100 from `tabPurchase Order Item`
where parent = `tabPurchase Order`.name), 2)""")
def update_so_per_delivered_per_billed():
frappe.db.sql("""
update
`tabSales Order`
set
`tabSales Order`.per_delivered = round((select sum( if(qty > ifnull(delivered_qty, 0),
ifnull(delivered_qty, 0), qty)) / sum(qty) *100 from `tabSales Order Item`
where parent = `tabSales Order`.name), 2),
`tabSales Order`.per_billed = round((select sum( if(amount > ifnull(billed_amt, 0),
ifnull(billed_amt, 0), amount)) / sum(amount) *100 from `tabSales Order Item`
where parent = `tabSales Order`.name), 2)""")
def update_status():
frappe.db.sql("""
update
`tabSales Order`
set status = (Case when status = 'Closed' then 'Closed'
When per_delivered < 100 and per_billed < 100 and docstatus = 1 then 'To Deliver and Bill'
when per_delivered = 100 and per_billed < 100 and docstatus = 1 then 'To Bill'
when per_delivered < 100 and per_billed = 100 and docstatus = 1 then 'To Deliver'
when per_delivered = 100 and per_billed = 100 and docstatus = 1 then 'Completed'
when order_type = 'Maintenance' and per_billed = 100 and docstatus = 1 then 'Completed'
when docstatus = 2 then 'Cancelled'
else 'Draft'
End)""")
frappe.db.sql("""
update
`tabPurchase Order`
set status = (Case when status = 'Closed' then 'Closed'
when status = 'Delivered' then 'Delivered'
When per_received < 100 and per_billed < 100 and docstatus = 1 then 'To Receive and Bill'
when per_received = 100 and per_billed < 100 and docstatus = 1 then 'To Bill'
when per_received < 100 and per_billed = 100 and docstatus = 1 then 'To Receive'
when per_received = 100 and per_billed = 100 and docstatus = 1 then 'Completed'
when docstatus = 2 then 'Cancelled'
else 'Draft'
End)""")

View File

@ -28,6 +28,7 @@ class Timesheet(Document):
self.update_cost() self.update_cost()
self.calculate_total_amounts() self.calculate_total_amounts()
self.calculate_percentage_billed() self.calculate_percentage_billed()
self.set_dates()
def set_employee_name(self): def set_employee_name(self):
if self.employee and not self.employee_name: if self.employee and not self.employee_name:
@ -86,9 +87,6 @@ class Timesheet(Document):
self.start_date = getdate(start_date) self.start_date = getdate(start_date)
self.end_date = getdate(end_date) self.end_date = getdate(end_date)
def before_submit(self):
self.set_dates()
def before_cancel(self): def before_cancel(self):
self.set_status() self.set_status()

View File

@ -5,12 +5,12 @@
"doctype": "Report", "doctype": "Report",
"idx": 1, "idx": 1,
"is_standard": "Yes", "is_standard": "Yes",
"modified": "2014-06-03 07:18:17.229116", "modified": "2016-12-01 09:18:17.229116",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Projects", "module": "Projects",
"name": "Project wise Stock Tracking", "name": "Project wise Stock Tracking",
"owner": "Administrator", "owner": "Administrator",
"ref_doctype": "Project", "ref_doctype": "Project",
"report_name": "Project wise Stock Tracking ", "report_name": "Project wise Stock Tracking ",
"report_type": "Report Builder" "report_type": "Script Report"
} }

View File

@ -112,9 +112,9 @@ $.extend(erpnext.utils, {
if(frm.doc.__onload && frm.doc.__onload.dashboard_info) { if(frm.doc.__onload && frm.doc.__onload.dashboard_info) {
var info = frm.doc.__onload.dashboard_info; var info = frm.doc.__onload.dashboard_info;
frm.dashboard.add_indicator(__('Annual Billing: {0}', frm.dashboard.add_indicator(__('Annual Billing: {0}',
[format_currency(info.billing_this_year, frm.doc.default_currency)]), 'blue'); [format_currency(info.billing_this_year, info.currency)]), 'blue');
frm.dashboard.add_indicator(__('Total Unpaid: {0}', frm.dashboard.add_indicator(__('Total Unpaid: {0}',
[format_currency(info.total_unpaid, frm.doc.default_currency)]), [format_currency(info.total_unpaid, info.currency)]),
info.total_unpaid ? 'orange' : 'green'); info.total_unpaid ? 'orange' : 'green');
} }
}, },

View File

@ -12,6 +12,7 @@ from erpnext.utilities.transaction_base import TransactionBase
from erpnext.utilities.address_and_contact import load_address_and_contact from erpnext.utilities.address_and_contact import load_address_and_contact
from erpnext.accounts.party import validate_party_accounts, get_timeline_data # keep this from erpnext.accounts.party import validate_party_accounts, get_timeline_data # keep this
from erpnext.accounts.party_status import get_party_status from erpnext.accounts.party_status import get_party_status
from erpnext import get_default_currency
class Customer(TransactionBase): class Customer(TransactionBase):
def get_feed(self): def get_feed(self):
@ -24,7 +25,7 @@ class Customer(TransactionBase):
def load_dashboard_info(self): def load_dashboard_info(self):
billing_this_year = frappe.db.sql(""" billing_this_year = frappe.db.sql("""
select sum(debit_in_account_currency) - sum(credit_in_account_currency) select sum(debit_in_account_currency) - sum(credit_in_account_currency), account_currency
from `tabGL Entry` from `tabGL Entry`
where voucher_type='Sales Invoice' and party_type = 'Customer' where voucher_type='Sales Invoice' and party_type = 'Customer'
and party=%s and fiscal_year = %s""", and party=%s and fiscal_year = %s""",
@ -36,6 +37,7 @@ class Customer(TransactionBase):
info = {} info = {}
info["billing_this_year"] = billing_this_year[0][0] if billing_this_year else 0 info["billing_this_year"] = billing_this_year[0][0] if billing_this_year else 0
info["currency"] = billing_this_year[0][1] if billing_this_year else get_default_currency()
info["total_unpaid"] = total_unpaid[0][0] if total_unpaid else 0 info["total_unpaid"] = total_unpaid[0][0] if total_unpaid else 0
self.set_onload('dashboard_info', info) self.set_onload('dashboard_info', info)

View File

@ -16,6 +16,9 @@ test_ignore = ["Price List"]
test_records = frappe.get_test_records('Customer') test_records = frappe.get_test_records('Customer')
class TestCustomer(unittest.TestCase): class TestCustomer(unittest.TestCase):
def tearDown(self):
frappe.db.set_value("Customer", '_Test Customer', 'credit_limit', 0.0)
def test_party_details(self): def test_party_details(self):
from erpnext.accounts.party import get_party_details from erpnext.accounts.party import get_party_details

View File

@ -233,7 +233,7 @@ class EmailDigest(Document):
"new_quotations","pending_quotations","sales_order","purchase_order","pending_sales_orders","pending_purchase_orders", "new_quotations","pending_quotations","sales_order","purchase_order","pending_sales_orders","pending_purchase_orders",
"invoiced_amount", "payables", "bank_balance", "credit_balance"): "invoiced_amount", "payables", "bank_balance", "credit_balance"):
if self.get(key): if self.get(key):
cache_key = "email_digest:card:{0}:{1}".format(self.company, key) cache_key = "email_digest:card:{0}:{1}:{2}".format(self.company, self.frequency, key)
card = cache.get(cache_key) card = cache.get(cache_key)
if card: if card:

View File

@ -7,8 +7,8 @@
"doctype": "Report", "doctype": "Report",
"idx": 1, "idx": 1,
"is_standard": "Yes", "is_standard": "Yes",
"json": "{\"filters\":[],\"columns\":[[\"warehouse\",\"Bin\"],[\"item_code\",\"Bin\"],[\"actual_qty\",\"Bin\"],[\"ordered_qty\",\"Bin\"],[\"planned_qty\",\"Bin\"],[\"reserved_qty\",\"Bin\"],[\"projected_qty\",\"Bin\"]],\"sort_by\":\"Bin.projected_qty\",\"sort_order\":\"asc\",\"sort_by_next\":null,\"sort_order_next\":\"desc\"}", "json": "{\"add_total_row\": 0, \"sort_by\": \"Bin.projected_qty\", \"sort_order\": \"asc\", \"sort_by_next\": \"\", \"filters\": [[\"Bin\", \"projected_qty\", \"<\", \"0\"]], \"sort_order_next\": \"desc\", \"columns\": [[\"warehouse\", \"Bin\"], [\"item_code\", \"Bin\"], [\"actual_qty\", \"Bin\"], [\"ordered_qty\", \"Bin\"], [\"planned_qty\", \"Bin\"], [\"reserved_qty\", \"Bin\"], [\"projected_qty\", \"Bin\"]]}",
"modified": "2016-11-01 15:38:27.881248", "modified": "2016-12-05 18:49:41.909411",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Stock", "module": "Stock",
"name": "Item Shortage Report", "name": "Item Shortage Report",

View File

@ -7,8 +7,8 @@
"doctype": "Report", "doctype": "Report",
"idx": 1, "idx": 1,
"is_standard": "Yes", "is_standard": "Yes",
"json": "{\"filters\":[],\"columns\":[[\"name\",\"Item Price\"],[\"price_list\",\"Item Price\"],[\"item_code\",\"Item Price\"],[\"item_name\",\"Item Price\"],[\"item_description\",\"Item Price\"],[\"price_list_rate\",\"Item Price\"],[\"buying\",\"Item Price\"],[\"selling\",\"Item Price\"],[\"currency\",\"Item Price\"]],\"sort_by\":\"Item Price.modified\",\"sort_order\":\"desc\",\"sort_by_next\":null,\"sort_order_next\":\"desc\"}", "json": "{\"add_total_row\": 0, \"sort_by\": \"Item Price.modified\", \"sort_order\": \"desc\", \"sort_by_next\": null, \"filters\": [], \"sort_order_next\": \"desc\", \"columns\": [[\"name\", \"Item Price\"], [\"price_list\", \"Item Price\"], [\"item_code\", \"Item Price\"], [\"item_name\", \"Item Price\"], [\"item_description\", \"Item Price\"], [\"price_list_rate\", \"Item Price\"], [\"buying\", \"Item Price\"], [\"selling\", \"Item Price\"], [\"currency\", \"Item Price\"]]}",
"modified": "2016-02-01 14:31:04.075909", "modified": "2016-12-05 18:49:15.693076",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Stock", "module": "Stock",
"name": "Item-wise Price List Rate", "name": "Item-wise Price List Rate",

View File

@ -7,8 +7,8 @@
"doctype": "Report", "doctype": "Report",
"idx": 1, "idx": 1,
"is_standard": "Yes", "is_standard": "Yes",
"json": "{\"filters\":[[\"Serial No\",\"delivery_document_type\",\"in\",[\"Delivery Note\",\"Sales Invoice\"]],[\"Serial No\",\"warehouse\",\"=\",\"\"]],\"columns\":[[\"name\",\"Serial No\"],[\"item_code\",\"Serial No\"],[\"amc_expiry_date\",\"Serial No\"],[\"maintenance_status\",\"Serial No\"],[\"delivery_document_no\",\"Serial No\"],[\"customer\",\"Serial No\"],[\"customer_name\",\"Serial No\"],[\"item_name\",\"Serial No\"],[\"description\",\"Serial No\"],[\"item_group\",\"Serial No\"],[\"brand\",\"Serial No\"]],\"sort_by\":\"Serial No.modified\",\"sort_order\":\"desc\",\"sort_by_next\":null,\"sort_order_next\":\"desc\"}", "json": "{\"add_total_row\": 0, \"sort_by\": \"Serial No.modified\", \"sort_order\": \"desc\", \"sort_by_next\": null, \"filters\": [[\"Serial No\", \"delivery_document_type\", \"in\", [\"Delivery Note\", \"Sales Invoice\"]], [\"Serial No\", \"warehouse\", \"=\", \"\"]], \"sort_order_next\": \"desc\", \"columns\": [[\"name\", \"Serial No\"], [\"item_code\", \"Serial No\"], [\"amc_expiry_date\", \"Serial No\"], [\"maintenance_status\", \"Serial No\"], [\"delivery_document_no\", \"Serial No\"], [\"customer\", \"Serial No\"], [\"customer_name\", \"Serial No\"], [\"item_name\", \"Serial No\"], [\"description\", \"Serial No\"], [\"item_group\", \"Serial No\"], [\"brand\", \"Serial No\"]]}",
"modified": "2015-10-22 14:53:45.192497", "modified": "2016-12-05 18:49:22.748446",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Stock", "module": "Stock",
"name": "Serial No Service Contract Expiry", "name": "Serial No Service Contract Expiry",

View File

@ -7,8 +7,8 @@
"doctype": "Report", "doctype": "Report",
"idx": 1, "idx": 1,
"is_standard": "Yes", "is_standard": "Yes",
"json": "{\"filters\":[],\"columns\":[[\"name\",\"Serial No\"],[\"item_code\",\"Serial No\"],[\"warehouse\",\"Serial No\"],[\"item_name\",\"Serial No\"],[\"description\",\"Serial No\"],[\"item_group\",\"Serial No\"],[\"brand\",\"Serial No\"],[\"purchase_document_type\",\"Serial No\"],[\"purchase_document_no\",\"Serial No\"],[\"purchase_date\",\"Serial No\"],[\"customer\",\"Serial No\"],[\"customer_name\",\"Serial No\"],[\"purchase_rate\",\"Serial No\"],[\"delivery_document_no\",\"Serial No\"],[\"delivery_date\",\"Serial No\"],[\"supplier\",\"Serial No\"],[\"supplier_name\",\"Serial No\"]],\"sort_by\":\"Serial No.name\",\"sort_order\":\"desc\",\"sort_by_next\":null,\"sort_order_next\":\"desc\"}", "json": "{\"add_total_row\": 0, \"sort_by\": \"Serial No.name\", \"sort_order\": \"desc\", \"sort_by_next\": null, \"filters\": [], \"sort_order_next\": \"desc\", \"columns\": [[\"name\", \"Serial No\"], [\"item_code\", \"Serial No\"], [\"warehouse\", \"Serial No\"], [\"item_name\", \"Serial No\"], [\"description\", \"Serial No\"], [\"item_group\", \"Serial No\"], [\"brand\", \"Serial No\"], [\"purchase_document_no\", \"Serial No\"], [\"purchase_date\", \"Serial No\"], [\"customer\", \"Serial No\"], [\"customer_name\", \"Serial No\"], [\"purchase_rate\", \"Serial No\"], [\"delivery_document_no\", \"Serial No\"], [\"delivery_date\", \"Serial No\"], [\"supplier\", \"Serial No\"], [\"supplier_name\", \"Serial No\"]]}",
"modified": "2016-10-31 06:28:26.344862", "modified": "2016-12-05 18:49:31.424300",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Stock", "module": "Stock",
"name": "Serial No Status", "name": "Serial No Status",

View File

@ -7,8 +7,8 @@
"doctype": "Report", "doctype": "Report",
"idx": 1, "idx": 1,
"is_standard": "Yes", "is_standard": "Yes",
"json": "{\"filters\":[[\"Serial No\",\"delivery_document_type\",\"in\",[\"Delivery Note\",\"Sales Invoice\"]],[\"Serial No\",\"warehouse\",\"=\",\"\"]],\"columns\":[[\"name\",\"Serial No\"],[\"item_code\",\"Serial No\"],[\"warranty_expiry_date\",\"Serial No\"],[\"warranty_period\",\"Serial No\"],[\"maintenance_status\",\"Serial No\"],[\"purchase_document_no\",\"Serial No\"],[\"purchase_date\",\"Serial No\"],[\"supplier\",\"Serial No\"],[\"supplier_name\",\"Serial No\"],[\"delivery_document_no\",\"Serial No\"],[\"delivery_date\",\"Serial No\"],[\"customer\",\"Serial No\"],[\"customer_name\",\"Serial No\"],[\"item_name\",\"Serial No\"],[\"description\",\"Serial No\"],[\"item_group\",\"Serial No\"],[\"brand\",\"Serial No\"]],\"sort_by\":\"Serial No.modified\",\"sort_order\":\"desc\",\"sort_by_next\":null,\"sort_order_next\":\"desc\"}", "json": "{\"add_total_row\": 0, \"sort_by\": \"Serial No.modified\", \"sort_order\": \"desc\", \"sort_by_next\": null, \"filters\": [[\"Serial No\", \"delivery_document_type\", \"in\", [\"Delivery Note\", \"Sales Invoice\"]], [\"Serial No\", \"warehouse\", \"=\", \"\"]], \"sort_order_next\": \"desc\", \"columns\": [[\"name\", \"Serial No\"], [\"item_code\", \"Serial No\"], [\"warranty_expiry_date\", \"Serial No\"], [\"warranty_period\", \"Serial No\"], [\"maintenance_status\", \"Serial No\"], [\"purchase_document_no\", \"Serial No\"], [\"purchase_date\", \"Serial No\"], [\"supplier\", \"Serial No\"], [\"supplier_name\", \"Serial No\"], [\"delivery_document_no\", \"Serial No\"], [\"delivery_date\", \"Serial No\"], [\"customer\", \"Serial No\"], [\"customer_name\", \"Serial No\"], [\"item_name\", \"Serial No\"], [\"description\", \"Serial No\"], [\"item_group\", \"Serial No\"], [\"brand\", \"Serial No\"]]}",
"modified": "2015-10-22 14:53:12.575608", "modified": "2016-12-05 18:49:26.761364",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Stock", "module": "Stock",
"name": "Serial No Warranty Expiry", "name": "Serial No Warranty Expiry",