Demo records for timesheet

This commit is contained in:
Rohit Waghchaure 2016-07-13 16:03:05 +05:30
parent 8d8bbb0588
commit 8002d47ff6
7 changed files with 174 additions and 5 deletions

View File

@ -100,7 +100,7 @@
]
},
{
"item": "Wind Turbine",
"item": "Wind Turbine-S",
"with_operations": 1,
"operations": [
{

View File

@ -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()

View File

@ -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)

View File

@ -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]

View File

@ -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

View 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()

View File

@ -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