Merge pull request #5772 from rohitwaghchaure/demo_records
Demo records for timesheet
This commit is contained in:
commit
4d64f6d4b4
@ -100,7 +100,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"item": "Wind Turbine",
|
"item": "Wind Turbine-S",
|
||||||
"with_operations": 1,
|
"with_operations": 1,
|
||||||
"operations": [
|
"operations": [
|
||||||
{
|
{
|
||||||
|
|||||||
@ -4,7 +4,7 @@ import frappe, sys
|
|||||||
import erpnext
|
import erpnext
|
||||||
import frappe.utils
|
import frappe.utils
|
||||||
from erpnext.demo.setup_data import setup_data
|
from erpnext.demo.setup_data import setup_data
|
||||||
from erpnext.demo.user import hr, sales, purchase, manufacturing, stock, accounts
|
from erpnext.demo.user import hr, sales, purchase, manufacturing, stock, accounts, projects
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Make a demo
|
Make a demo
|
||||||
@ -69,6 +69,9 @@ def simulate():
|
|||||||
manufacturing.work()
|
manufacturing.work()
|
||||||
stock.work()
|
stock.work()
|
||||||
accounts.work()
|
accounts.work()
|
||||||
|
projects.run_projects(current_date)
|
||||||
|
# run_stock()
|
||||||
|
# run_accounts()
|
||||||
# run_projects()
|
# run_projects()
|
||||||
# run_messages()
|
# run_messages()
|
||||||
|
|
||||||
|
|||||||
@ -3,7 +3,7 @@ from __future__ import unicode_literals
|
|||||||
import random, json
|
import random, json
|
||||||
from erpnext.demo.domains import data
|
from erpnext.demo.domains import data
|
||||||
import frappe, erpnext
|
import frappe, erpnext
|
||||||
import frappe.utils
|
from frappe.utils import cint, flt
|
||||||
|
|
||||||
def setup_data():
|
def setup_data():
|
||||||
domain = frappe.flags.domain
|
domain = frappe.flags.domain
|
||||||
@ -27,6 +27,7 @@ def setup_data():
|
|||||||
setup_user()
|
setup_user()
|
||||||
setup_employee()
|
setup_employee()
|
||||||
setup_salary_structure()
|
setup_salary_structure()
|
||||||
|
setup_salary_structure_for_timesheet()
|
||||||
setup_user_roles()
|
setup_user_roles()
|
||||||
frappe.db.commit()
|
frappe.db.commit()
|
||||||
frappe.clear_cache()
|
frappe.clear_cache()
|
||||||
@ -286,6 +287,14 @@ def setup_salary_structure():
|
|||||||
})
|
})
|
||||||
|
|
||||||
ss.insert()
|
ss.insert()
|
||||||
|
|
||||||
|
def setup_salary_structure_for_timesheet():
|
||||||
|
for e in frappe.get_all('Salary Structure', fields=['name'], filters={'is_active': 'Yes'}, limit=2):
|
||||||
|
ss_doc = frappe.get_doc("Salary Structure", e.name)
|
||||||
|
ss_doc.salary_slip_based_on_timesheet = 1
|
||||||
|
ss_doc.salary_component = 'Basic'
|
||||||
|
ss_doc.hour_rate = flt(random.random() * 10, 2)
|
||||||
|
ss_doc.save(ignore_permissions=True)
|
||||||
|
|
||||||
def setup_account():
|
def setup_account():
|
||||||
frappe.flags.in_import = True
|
frappe.flags.in_import = True
|
||||||
@ -332,4 +341,9 @@ def setup_user_roles():
|
|||||||
user = frappe.get_doc('User', 'LeonAbdulov@example.com')
|
user = frappe.get_doc('User', 'LeonAbdulov@example.com')
|
||||||
user.add_roles('Accounts User', 'Accounts Manager', 'Sales User', 'Purchase User')
|
user.add_roles('Accounts User', 'Accounts Manager', 'Sales User', 'Purchase User')
|
||||||
frappe.db.set_global('demo_accounts_user', user.name)
|
frappe.db.set_global('demo_accounts_user', user.name)
|
||||||
|
|
||||||
|
if not frappe.db.get_global('demo_projects_user'):
|
||||||
|
user = frappe.get_doc('User', 'panca@example.com')
|
||||||
|
user.add_roles('HR User', 'Projects User')
|
||||||
|
frappe.db.set_global('demo_projects_user', user.name)
|
||||||
|
|
||||||
|
|||||||
@ -1,10 +1,13 @@
|
|||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
import frappe
|
import frappe
|
||||||
|
import random
|
||||||
from frappe.utils import random_string
|
from frappe.utils import random_string
|
||||||
|
from erpnext.projects.doctype.timesheet.test_timesheet import make_timesheet
|
||||||
|
from erpnext.projects.doctype.timesheet.timesheet import make_salary_slip, make_sales_invoice
|
||||||
|
from frappe.utils.make_random import how_many, get_random
|
||||||
|
|
||||||
def work():
|
def work():
|
||||||
frappe.set_user(frappe.db.get_global('demo_hr_user'))
|
frappe.set_user(frappe.db.get_global('demo_hr_user'))
|
||||||
|
|
||||||
year, month = frappe.flags.current_date.strftime("%Y-%m").split("-")
|
year, month = frappe.flags.current_date.strftime("%Y-%m").split("-")
|
||||||
|
|
||||||
# process payroll
|
# process payroll
|
||||||
@ -24,3 +27,45 @@ def work():
|
|||||||
journal_entry.posting_date = frappe.flags.current_date
|
journal_entry.posting_date = frappe.flags.current_date
|
||||||
journal_entry.insert()
|
journal_entry.insert()
|
||||||
journal_entry.submit()
|
journal_entry.submit()
|
||||||
|
|
||||||
|
if frappe.db.get_global('demo_hr_user'):
|
||||||
|
make_timesheet_records()
|
||||||
|
|
||||||
|
def get_timesheet_based_salary_slip_employee():
|
||||||
|
return frappe.get_all('Salary Structure', fields = ["distinct employee as name"],
|
||||||
|
filters = {'salary_slip_based_on_timesheet': 1})
|
||||||
|
|
||||||
|
def make_timesheet_records():
|
||||||
|
employees = get_timesheet_based_salary_slip_employee()
|
||||||
|
for employee in employees:
|
||||||
|
ts = make_timesheet(employee.name, simulate = True, billable = 1, activity_type=get_random("Activity Type"))
|
||||||
|
|
||||||
|
rand = random.random()
|
||||||
|
if rand >= 0.3:
|
||||||
|
make_salary_slip_for_timesheet(ts.name)
|
||||||
|
|
||||||
|
rand = random.random()
|
||||||
|
if rand >= 0.2:
|
||||||
|
make_sales_invoice_for_timesheet(ts.name)
|
||||||
|
|
||||||
|
def make_salary_slip_for_timesheet(name):
|
||||||
|
salary_slip = make_salary_slip(name)
|
||||||
|
salary_slip.insert()
|
||||||
|
salary_slip.submit()
|
||||||
|
|
||||||
|
def make_sales_invoice_for_timesheet(name):
|
||||||
|
sales_invoice = make_sales_invoice(name)
|
||||||
|
sales_invoice.customer = get_random("Customer")
|
||||||
|
sales_invoice.append('items', {
|
||||||
|
'item_code': get_random_item(),
|
||||||
|
'qty': 1,
|
||||||
|
'rate': 1000
|
||||||
|
})
|
||||||
|
sales_invoice.set_missing_values()
|
||||||
|
sales_invoice.calculate_taxes_and_totals()
|
||||||
|
sales_invoice.insert()
|
||||||
|
sales_invoice.submit()
|
||||||
|
|
||||||
|
def get_random_item():
|
||||||
|
return frappe.db.sql_list(""" select name from `tabItem` where
|
||||||
|
has_variants = 0 order by rand() limit 1""")[0]
|
||||||
|
|||||||
@ -6,6 +6,8 @@ from __future__ import unicode_literals
|
|||||||
import frappe, random, erpnext
|
import frappe, random, erpnext
|
||||||
from frappe.utils.make_random import how_many
|
from frappe.utils.make_random import how_many
|
||||||
from frappe.desk import query_report
|
from frappe.desk import query_report
|
||||||
|
from erpnext.manufacturing.doctype.workstation.workstation import WorkstationHolidayError
|
||||||
|
from erpnext.manufacturing.doctype.production_order.test_production_order import make_prod_order_test_record
|
||||||
|
|
||||||
def work():
|
def work():
|
||||||
frappe.set_user(frappe.db.get_global('demo_manufacturing_user'))
|
frappe.set_user(frappe.db.get_global('demo_manufacturing_user'))
|
||||||
@ -46,6 +48,13 @@ def work():
|
|||||||
for pro in query_report.run("Production Orders in Progress")["result"][:how_many("Stock Entry for FG")]:
|
for pro in query_report.run("Production Orders in Progress")["result"][:how_many("Stock Entry for FG")]:
|
||||||
make_stock_entry_from_pro(pro[0], "Manufacture")
|
make_stock_entry_from_pro(pro[0], "Manufacture")
|
||||||
|
|
||||||
|
for bom in frappe.get_all('BOM', fields=['item'], filters = {'with_operations': 1}):
|
||||||
|
pro_order = make_prod_order_test_record(item=bom.item, qty=2,
|
||||||
|
source_warehouse="Stores - WPL", wip_warehouse = "Work in Progress - WPL",
|
||||||
|
fg_warehouse = "Stores - WPL", company = erpnext.get_default_company(),
|
||||||
|
stock_uom = frappe.db.get_value('Item', bom.item, 'stock_uom'),
|
||||||
|
planned_start_date = frappe.flags.current_date)
|
||||||
|
|
||||||
# submit time logs
|
# submit time logs
|
||||||
for timesheet in frappe.get_all("Timesheet", ["name"], {"docstatus": 0,
|
for timesheet in frappe.get_all("Timesheet", ["name"], {"docstatus": 0,
|
||||||
"production_order": ("!=", ""), "to_time": ("<", frappe.flags.current_date)}):
|
"production_order": ("!=", ""), "to_time": ("<", frappe.flags.current_date)}):
|
||||||
@ -55,6 +64,8 @@ def work():
|
|||||||
frappe.db.commit()
|
frappe.db.commit()
|
||||||
except OverlapError:
|
except OverlapError:
|
||||||
pass
|
pass
|
||||||
|
except WorkstationHolidayError:
|
||||||
|
pass
|
||||||
|
|
||||||
def make_stock_entry_from_pro(pro_id, purpose):
|
def make_stock_entry_from_pro(pro_id, purpose):
|
||||||
from erpnext.manufacturing.doctype.production_order.production_order import make_stock_entry
|
from erpnext.manufacturing.doctype.production_order.production_order import make_stock_entry
|
||||||
|
|||||||
95
erpnext/demo/user/projects.py
Normal file
95
erpnext/demo/user/projects.py
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
|
||||||
|
# License: GNU General Public License v3. See license.txt
|
||||||
|
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
import frappe
|
||||||
|
from frappe.utils.make_random import can_make
|
||||||
|
from frappe.utils.make_random import how_many, get_random
|
||||||
|
from erpnext.projects.doctype.timesheet.test_timesheet import make_timesheet
|
||||||
|
|
||||||
|
def run_projects(current_date):
|
||||||
|
frappe.set_user(frappe.db.get_global('demo_projects_user'))
|
||||||
|
if frappe.db.get_global('demo_projects_user'):
|
||||||
|
make_project(current_date)
|
||||||
|
make_timesheet_for_projects(current_date)
|
||||||
|
close_tasks(current_date)
|
||||||
|
|
||||||
|
def make_timesheet_for_projects(current_date ):
|
||||||
|
for data in frappe.get_all("Task", ["name", "project"], {"status": "Open", "exp_end_date": ("<", current_date)}):
|
||||||
|
employee = get_random("Employee")
|
||||||
|
if frappe.db.get_value('Salary Structure', {'employee': employee}, 'salary_slip_based_on_timesheet'):
|
||||||
|
make_timesheet(employee, simulate = True, billable = 1,
|
||||||
|
activity_type=get_random("Activity Type"), project=data.project, task =data.name)
|
||||||
|
|
||||||
|
def close_tasks(current_date):
|
||||||
|
for task in frappe.get_all("Task", ["name"], {"status": "Open", "exp_end_date": ("<", current_date)}):
|
||||||
|
task = frappe.get_doc("Task", task.name)
|
||||||
|
task.status = "Closed"
|
||||||
|
task.save()
|
||||||
|
|
||||||
|
def make_project(current_date):
|
||||||
|
if not frappe.db.exists('Project',
|
||||||
|
"New Product Development " + current_date.strftime("%Y-%m-%d")):
|
||||||
|
project = frappe.get_doc({
|
||||||
|
"doctype": "Project",
|
||||||
|
"project_name": "New Product Development " + current_date.strftime("%Y-%m-%d"),
|
||||||
|
})
|
||||||
|
project.set("tasks", [
|
||||||
|
{
|
||||||
|
"title": "Review Requirements",
|
||||||
|
"start_date": frappe.utils.add_days(current_date, 10),
|
||||||
|
"end_date": frappe.utils.add_days(current_date, 11)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Design Options",
|
||||||
|
"start_date": frappe.utils.add_days(current_date, 11),
|
||||||
|
"end_date": frappe.utils.add_days(current_date, 20)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Make Prototypes",
|
||||||
|
"start_date": frappe.utils.add_days(current_date, 20),
|
||||||
|
"end_date": frappe.utils.add_days(current_date, 30)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Customer Feedback on Prototypes",
|
||||||
|
"start_date": frappe.utils.add_days(current_date, 30),
|
||||||
|
"end_date": frappe.utils.add_days(current_date, 40)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Freeze Feature Set",
|
||||||
|
"start_date": frappe.utils.add_days(current_date, 40),
|
||||||
|
"end_date": frappe.utils.add_days(current_date, 45)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Testing",
|
||||||
|
"start_date": frappe.utils.add_days(current_date, 45),
|
||||||
|
"end_date": frappe.utils.add_days(current_date, 60)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Product Engineering",
|
||||||
|
"start_date": frappe.utils.add_days(current_date, 45),
|
||||||
|
"end_date": frappe.utils.add_days(current_date, 55)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Supplier Contracts",
|
||||||
|
"start_date": frappe.utils.add_days(current_date, 55),
|
||||||
|
"end_date": frappe.utils.add_days(current_date, 70)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Design and Build Fixtures",
|
||||||
|
"start_date": frappe.utils.add_days(current_date, 45),
|
||||||
|
"end_date": frappe.utils.add_days(current_date, 65)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Test Run",
|
||||||
|
"start_date": frappe.utils.add_days(current_date, 70),
|
||||||
|
"end_date": frappe.utils.add_days(current_date, 80)
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Launch",
|
||||||
|
"start_date": frappe.utils.add_days(current_date, 80),
|
||||||
|
"end_date": frappe.utils.add_days(current_date, 90)
|
||||||
|
},
|
||||||
|
])
|
||||||
|
project.insert()
|
||||||
@ -220,7 +220,8 @@ def make_prod_order_test_record(**args):
|
|||||||
pro_order.wip_warehouse = args.wip_warehouse or "_Test Warehouse - _TC"
|
pro_order.wip_warehouse = args.wip_warehouse or "_Test Warehouse - _TC"
|
||||||
pro_order.fg_warehouse = args.fg_warehouse or "_Test Warehouse 1 - _TC"
|
pro_order.fg_warehouse = args.fg_warehouse or "_Test Warehouse 1 - _TC"
|
||||||
pro_order.company = args.company or "_Test Company"
|
pro_order.company = args.company or "_Test Company"
|
||||||
pro_order.stock_uom = "_Test UOM"
|
pro_order.stock_uom = args.stock_uom or "_Test UOM"
|
||||||
|
pro_order.set_production_order_operations()
|
||||||
|
|
||||||
if args.source_warehouse:
|
if args.source_warehouse:
|
||||||
pro_order.source_warehouse = args.source_warehouse
|
pro_order.source_warehouse = args.source_warehouse
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user