def execute(): frappe.reload_doc('projects', 'doctype', 'timesheet') for data in frappe.get_all('Time Log', fields=["*"], filters=[["docstatus", "<", "2"]]): if data.task: company = frappe.db.get_value("Task", data.task, "company") elif data.production_order: company = frappe.db.get_value("Prodction Order", data.production_order, "company") else: company = frappe.db.get_single_value('Global Defaults', 'default_company') time_sheet = make_timesheet(data.production_order) args = get_timelog_data(data) add_timesheet_detail(time_sheet, args) time_sheet.note = data.note time_sheet.company = company time_sheet.set_status() time_sheet.update_cost() time_sheet.calculate_total_amounts() time_sheet.flags.ignore_validate = True time_sheet.save(ignore_permissions=True) # To ignore validate_mandatory_fields function if data.docstatus == 1: time_sheet.db_set("docstatus", 1) for d in time_sheet.get("time_logs"): d.db_set("docstatus", 1) time_sheet.update_production_order(time_sheet.name) time_sheet.update_task_and_project()
def execute(): frappe.reload_doc('projects', 'doctype', 'timesheet') if not frappe.db.table_exists("Time Log"): return for data in frappe.db.sql("select * from `tabTime Log` where docstatus < 2", as_dict=1): if data.task: company = frappe.db.get_value("Task", data.task, "company") elif data.production_order: company = frappe.db.get_value("Prodction Order", data.production_order, "company") else: company = frappe.db.get_single_value('Global Defaults', 'default_company') time_sheet = make_timesheet(data.production_order) args = get_timelog_data(data) add_timesheet_detail(time_sheet, args) time_sheet.employee = data.employee time_sheet.note = data.note time_sheet.company = company time_sheet.set_status() time_sheet.set_dates() time_sheet.update_cost() time_sheet.calculate_total_amounts() time_sheet.flags.ignore_validate = True time_sheet.save(ignore_permissions=True) # To ignore validate_mandatory_fields function if data.docstatus == 1: time_sheet.db_set("docstatus", 1) for d in time_sheet.get("time_logs"): d.db_set("docstatus", 1) time_sheet.update_production_order(time_sheet.name) time_sheet.update_task_and_project()
def test_make_time_sheet(self): from erpnext.manufacturing.doctype.production_order.production_order import make_timesheet prod_order = make_prod_order_test_record(item="_Test FG Item 2", planned_start_date=now(), qty=1, do_not_save=True) prod_order.set_production_order_operations() prod_order.insert() prod_order.submit() d = prod_order.operations[0] d.completed_qty = flt(d.completed_qty) name = frappe.db.get_value('Timesheet', {'production_order': prod_order.name}, 'name') time_sheet_doc = frappe.get_doc('Timesheet', name) self.assertEqual(prod_order.company, time_sheet_doc.company) time_sheet_doc.submit() self.assertEqual(prod_order.name, time_sheet_doc.production_order) self.assertEqual( (prod_order.qty - d.completed_qty), sum([d.completed_qty for d in time_sheet_doc.time_logs])) manufacturing_settings = frappe.get_doc({ "doctype": "Manufacturing Settings", "allow_production_on_holidays": 0 }) manufacturing_settings.save() prod_order.load_from_db() self.assertEqual(prod_order.operations[0].status, "Completed") self.assertEqual(prod_order.operations[0].completed_qty, prod_order.qty) self.assertEqual(prod_order.operations[0].actual_operation_time, 60) self.assertEqual(prod_order.operations[0].actual_operating_cost, 100) time_sheet_doc1 = make_timesheet(prod_order.name, prod_order.company) self.assertEqual(len(time_sheet_doc1.get('time_logs')), 0) time_sheet_doc.cancel() prod_order.load_from_db() self.assertEqual(prod_order.operations[0].status, "Pending") self.assertEqual(flt(prod_order.operations[0].completed_qty), 0) self.assertEqual(flt(prod_order.operations[0].actual_operation_time), 0) self.assertEqual(flt(prod_order.operations[0].actual_operating_cost), 0)
def execute(): frappe.reload_doc('projects', 'doctype', 'timesheet') for data in frappe.get_all('Time Log', fields=["*"], filters = [["docstatus", "<", "2"]]): time_sheet = make_timesheet(data.production_order) args = get_timelog_data(data) add_timesheet_detail(time_sheet, args) time_sheet.docstatus = data.docstatus time_sheet.note = data.note time_sheet.company = frappe.db.get_single_value('Global Defaults', 'default_company') time_sheet.save(ignore_permissions=True)
def execute(): frappe.reload_doc('projects', 'doctype', 'timesheet') for data in frappe.get_all('Time Log', fields=["*"], filters=[["docstatus", "<", "2"]]): time_sheet = make_timesheet(data.production_order) args = get_timelog_data(data) add_timesheet_detail(time_sheet, args) time_sheet.docstatus = data.docstatus time_sheet.note = data.note time_sheet.company = frappe.db.get_single_value( 'Global Defaults', 'default_company') time_sheet.save(ignore_permissions=True)
def test_make_time_sheet(self): from erpnext.manufacturing.doctype.production_order.production_order import make_timesheet prod_order = make_prod_order_test_record(item="_Test FG Item 2", planned_start_date=now(), qty=1, do_not_save=True) prod_order.set_production_order_operations() prod_order.insert() prod_order.submit() d = prod_order.operations[0] d.completed_qty = flt(d.completed_qty) name = frappe.db.get_value('Timesheet', {'production_order': prod_order.name}, 'name') time_sheet_doc = frappe.get_doc('Timesheet', name) self.assertEqual(prod_order.company, time_sheet_doc.company) time_sheet_doc.submit() self.assertEqual(prod_order.name, time_sheet_doc.production_order) self.assertEqual((prod_order.qty - d.completed_qty), sum([d.completed_qty for d in time_sheet_doc.time_logs])) manufacturing_settings = frappe.get_doc({ "doctype": "Manufacturing Settings", "allow_production_on_holidays": 0 }) manufacturing_settings.save() prod_order.load_from_db() self.assertEqual(prod_order.operations[0].status, "Completed") self.assertEqual(prod_order.operations[0].completed_qty, prod_order.qty) self.assertEqual(prod_order.operations[0].actual_operation_time, 60) self.assertEqual(prod_order.operations[0].actual_operating_cost, 6000) time_sheet_doc1 = make_timesheet(prod_order.name, prod_order.company) self.assertEqual(len(time_sheet_doc1.get('time_logs')), 0) time_sheet_doc.cancel() prod_order.load_from_db() self.assertEqual(prod_order.operations[0].status, "Pending") self.assertEqual(flt(prod_order.operations[0].completed_qty), 0) self.assertEqual(flt(prod_order.operations[0].actual_operation_time), 0) self.assertEqual(flt(prod_order.operations[0].actual_operating_cost), 0)
def execute(): frappe.reload_doc('projects', 'doctype', 'task') frappe.reload_doc('projects', 'doctype', 'timesheet') if not frappe.db.table_exists("Time Log"): return for data in frappe.db.sql("select * from `tabTime Log`", as_dict=1): if data.task: company = frappe.db.get_value("Task", data.task, "company") elif data.production_order: company = frappe.db.get_value("Prodction Order", data.production_order, "company") else: company = frappe.db.get_single_value('Global Defaults', 'default_company') time_sheet = make_timesheet(data.production_order, company) args = get_timelog_data(data) add_timesheet_detail(time_sheet, args) if data.docstatus == 2: time_sheet.docstatus = 0 else: time_sheet.docstatus = data.docstatus time_sheet.employee = data.employee time_sheet.note = data.note time_sheet.company = company time_sheet.set_status() time_sheet.set_dates() time_sheet.update_cost() time_sheet.calculate_total_amounts() time_sheet.flags.ignore_validate = True time_sheet.flags.ignore_links = True time_sheet.save(ignore_permissions=True) # To ignore validate_mandatory_fields function if data.docstatus == 1: time_sheet.db_set("docstatus", 1) for d in time_sheet.get("time_logs"): d.db_set("docstatus", 1) time_sheet.update_production_order(time_sheet.name) time_sheet.update_task_and_project() if data.docstatus == 2: time_sheet.db_set("docstatus", 2) for d in time_sheet.get("time_logs"): d.db_set("docstatus", 2)