Demo records for timesheet
This commit is contained in:
parent
8d8bbb0588
commit
8002d47ff6
@ -100,7 +100,7 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"item": "Wind Turbine",
|
||||
"item": "Wind Turbine-S",
|
||||
"with_operations": 1,
|
||||
"operations": [
|
||||
{
|
||||
|
@ -4,7 +4,7 @@ import frappe, sys
|
||||
import erpnext
|
||||
import frappe.utils
|
||||
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
|
||||
@ -69,6 +69,9 @@ def simulate():
|
||||
manufacturing.work()
|
||||
stock.work()
|
||||
accounts.work()
|
||||
projects.run_projects(current_date)
|
||||
# run_stock()
|
||||
# run_accounts()
|
||||
# run_projects()
|
||||
# run_messages()
|
||||
|
||||
|
@ -3,7 +3,7 @@ from __future__ import unicode_literals
|
||||
import random, json
|
||||
from erpnext.demo.domains import data
|
||||
import frappe, erpnext
|
||||
import frappe.utils
|
||||
from frappe.utils import cint, flt
|
||||
|
||||
def setup_data():
|
||||
domain = frappe.flags.domain
|
||||
@ -27,6 +27,7 @@ def setup_data():
|
||||
setup_user()
|
||||
setup_employee()
|
||||
setup_salary_structure()
|
||||
setup_salary_structure_for_timesheet()
|
||||
setup_user_roles()
|
||||
frappe.db.commit()
|
||||
frappe.clear_cache()
|
||||
@ -286,6 +287,14 @@ def setup_salary_structure():
|
||||
})
|
||||
|
||||
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():
|
||||
frappe.flags.in_import = True
|
||||
@ -332,4 +341,9 @@ def setup_user_roles():
|
||||
user = frappe.get_doc('User', 'LeonAbdulov@example.com')
|
||||
user.add_roles('Accounts User', 'Accounts Manager', 'Sales User', 'Purchase User')
|
||||
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
|
||||
import frappe
|
||||
import random
|
||||
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():
|
||||
frappe.set_user(frappe.db.get_global('demo_hr_user'))
|
||||
|
||||
year, month = frappe.flags.current_date.strftime("%Y-%m").split("-")
|
||||
|
||||
# process payroll
|
||||
@ -24,3 +27,45 @@ def work():
|
||||
journal_entry.posting_date = frappe.flags.current_date
|
||||
journal_entry.insert()
|
||||
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
|
||||
from frappe.utils.make_random import how_many
|
||||
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():
|
||||
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")]:
|
||||
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
|
||||
for timesheet in frappe.get_all("Timesheet", ["name"], {"docstatus": 0,
|
||||
"production_order": ("!=", ""), "to_time": ("<", frappe.flags.current_date)}):
|
||||
@ -55,6 +64,8 @@ def work():
|
||||
frappe.db.commit()
|
||||
except OverlapError:
|
||||
pass
|
||||
except WorkstationHolidayError:
|
||||
pass
|
||||
|
||||
def make_stock_entry_from_pro(pro_id, purpose):
|
||||
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.fg_warehouse = args.fg_warehouse or "_Test Warehouse 1 - _TC"
|
||||
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:
|
||||
pro_order.source_warehouse = args.source_warehouse
|
||||
|
Loading…
x
Reference in New Issue
Block a user