[demo] new cleaner, more-flexible demo

This commit is contained in:
Rushabh Mehta 2016-06-29 18:38:32 +05:30
parent 8c2e79cf0d
commit dc8067eb33
18 changed files with 1856 additions and 0 deletions

0
erpnext/demo/__init__.py Normal file
View File

View File

@ -0,0 +1,18 @@
[{
"account_name": "Debtors EUR",
"parent_account": "Accounts Receivable",
"account_type": "Receivable",
"account_currency": "EUR"
},
{
"account_name": "Creditors EUR",
"parent_account": "Accounts Payable",
"account_type": "Payable",
"account_currency": "EUR"
},
{
"account_name": "Paypal",
"parent_account": "Bank Accounts",
"account_type": "Bank",
"account_currency": "EUR"
}]

View File

@ -0,0 +1,245 @@
[
{
"address_line1": "254 Theotokopoulou Str.",
"address_type": "Office",
"city": "Larnaka",
"country": "Cyprus",
"customer": "Adaptas",
"phone": "23566775757",
"supplier": null
},
{
"address_line1": "R Patr\u00e3o Caramelho 116",
"address_type": "Office",
"city": "Fajozes",
"country": "Portugal",
"customer": "Asian Fusion",
"phone": "23566775757",
"supplier": null
},
{
"address_line1": "30 Fulford Road",
"address_type": "Office",
"city": "PENTRE-PIOD",
"country": "United Kingdom",
"customer": "Asian Junction",
"phone": "23566775757",
"supplier": null
},
{
"address_line1": "Schoenebergerstrasse 13",
"address_type": "Office",
"city": "Raschau",
"country": "Germany",
"customer": "Big D Supermarkets",
"phone": "23566775757",
"supplier": null
},
{
"address_line1": "Hoheluftchaussee 43",
"address_type": "Office",
"city": "Kieritzsch",
"country": "Germany",
"customer": "Buttrey Food & Drug",
"phone": "23566775757",
"supplier": null
},
{
"address_line1": "R Cimo Vila 6",
"address_type": "Office",
"city": "Rebordosa",
"country": "Portugal",
"customer": "Chi-Chis",
"phone": "23566775757",
"supplier": null
},
{
"address_line1": "R 5 Outubro 9",
"address_type": "Office",
"city": "Quinta Nova S\u00e3o Domingos",
"country": "Portugal",
"customer": "Choices",
"phone": "23566775757",
"supplier": null
},
{
"address_line1": "Avenida Macambira 953",
"address_type": "Office",
"city": "Goi\u00e2nia",
"country": "Brazil",
"customer": "Consumers and Consumers Express",
"phone": "23566775757",
"supplier": null
},
{
"address_line1": "2342 Goyeau Ave",
"address_type": "Office",
"city": "Windsor",
"country": "Canada",
"customer": "Crafts Canada",
"phone": "23566775757",
"supplier": null
},
{
"address_line1": "Laukaantie 82",
"address_type": "Office",
"city": "KOKKOLA",
"country": "Finland",
"customer": "Endicott Shoes",
"phone": "23566775757",
"supplier": null
},
{
"address_line1": "9 Brown Street",
"address_type": "Office",
"city": "PETERSHAM",
"country": "Australia",
"customer": "Fayva",
"phone": "23566775757",
"supplier": null
},
{
"address_line1": "Via Donnalbina 41",
"address_type": "Office",
"city": "Cala Gonone",
"country": "Italy",
"customer": "Intelacard",
"phone": "23566775757",
"supplier": null
},
{
"address_line1": "Liljerum Grenadj\u00e4rtorpet 69",
"address_type": "Office",
"city": "TOMTEBODA",
"country": "Sweden",
"customer": "Landskip Yard Care",
"phone": "23566775757",
"supplier": null
},
{
"address_line1": "72 Bishopgate Street",
"address_type": "Office",
"city": "SEAHAM",
"country": "United Kingdom",
"customer": "Life Plan Counselling",
"phone": "23566775757",
"supplier": null
},
{
"address_line1": "\u03a3\u03ba\u03b1\u03c6\u03af\u03b4\u03b9\u03b1 105",
"address_type": "Office",
"city": "\u03a0\u0391\u03a1\u0395\u039a\u039a\u039b\u0397\u03a3\u0399\u0391",
"country": "Cyprus",
"customer": "Mr Fables",
"phone": "23566775757",
"supplier": null
},
{
"address_line1": "Mellemvej 7",
"address_type": "Office",
"city": "Aabybro",
"country": "Denmark",
"customer": "Nelson Brothers",
"phone": "23566775757",
"supplier": null
},
{
"address_line1": "Plougg\u00e5rdsvej 98",
"address_type": "Office",
"city": "Karby",
"country": "Denmark",
"customer": "Netobill",
"phone": "23566775757",
"supplier": null
},
{
"address_line1": "176 Michalakopoulou Street",
"address_type": "Office",
"city": "Agio Georgoudi",
"country": "Cyprus",
"customer": null,
"phone": "23566775757",
"supplier": "Helios Air"
},
{
"address_line1": "Fibichova 1102",
"address_type": "Office",
"city": "Kokor\u00edn",
"country": "Czech Republic",
"customer": null,
"phone": "23566775757",
"supplier": "Ks Merchandise"
},
{
"address_line1": "Zahradn\u00ed 888",
"address_type": "Office",
"city": "Cecht\u00edn",
"country": "Czech Republic",
"customer": null,
"phone": "23566775757",
"supplier": "HomeBase"
},
{
"address_line1": "ul. Grochowska 94",
"address_type": "Office",
"city": "Warszawa",
"country": "Poland",
"customer": null,
"phone": "23566775757",
"supplier": "Scott Ties"
},
{
"address_line1": "Norra Esplanaden 87",
"address_type": "Office",
"city": "HELSINKI",
"country": "Finland",
"customer": null,
"phone": "23566775757",
"supplier": "Reliable Investments"
},
{
"address_line1": "2038 Fallon Drive",
"address_type": "Office",
"city": "Dresden",
"country": "Canada",
"customer": null,
"phone": "23566775757",
"supplier": "Nan Duskin"
},
{
"address_line1": "77 cours Franklin Roosevelt",
"address_type": "Office",
"city": "MARSEILLE",
"country": "France",
"customer": null,
"phone": "23566775757",
"supplier": "Rainbow Records"
},
{
"address_line1": "ul. Tuwima Juliana 85",
"address_type": "Office",
"city": "\u0141\u00f3d\u017a",
"country": "Poland",
"customer": null,
"phone": "23566775757",
"supplier": "New World Realty"
},
{
"address_line1": "Gl. Sygehusvej 41",
"address_type": "Office",
"city": "Narsaq",
"country": "Greenland",
"customer": null,
"phone": "23566775757",
"supplier": "Asiatic Solutions"
},
{
"address_line1": "Gosposka ulica 50",
"address_type": "Office",
"city": "Nova Gorica",
"country": "Slovenia",
"customer": null,
"phone": "23566775757",
"supplier": "Eagle Hardware"
}
]

147
erpnext/demo/data/bom.json Normal file
View File

@ -0,0 +1,147 @@
[
{
"item": "Bearing Assembly",
"items": [
{
"item_code": "Base Bearing Plate",
"qty": 1.0,
"rate": 15.0
},
{
"item_code": "Bearing Block",
"qty": 1.0,
"rate": 10.0
},
{
"item_code": "Bearing Collar",
"qty": 2.0,
"rate": 20.0
},
{
"item_code": "Bearing Pipe",
"qty": 1.0,
"rate": 15.0
},
{
"item_code": "Upper Bearing Plate",
"qty": 1.0,
"rate": 50.0
}
]
},
{
"item": "Wind Mill A Series",
"items": [
{
"item_code": "Base Bearing Plate",
"qty": 1.0,
"rate": 15.0
},
{
"item_code": "Base Plate",
"qty": 1.0,
"rate": 20.0
},
{
"item_code": "Bearing Block",
"qty": 1.0,
"rate": 10.0
},
{
"item_code": "Bearing Pipe",
"qty": 1.0,
"rate": 15.0
},
{
"item_code": "External Disc",
"qty": 1.0,
"rate": 45.0
},
{
"item_code": "Shaft",
"qty": 1.0,
"rate": 30.0
},
{
"item_code": "Wing Sheet",
"qty": 4.0,
"rate": 22.0
}
]
},
{
"item": "Wind MIll C Series",
"items": [
{
"item_code": "Base Plate",
"qty": 2.0,
"rate": 20.0
},
{
"item_code": "Internal Disc",
"qty": 1.0,
"rate": 33.0
},
{
"item_code": "External Disc",
"qty": 1.0,
"rate": 45.0
},
{
"item_code": "Bearing Assembly",
"qty": 1.0,
"rate": 130.0
},
{
"item_code": "Wing Sheet",
"qty": 3.0,
"rate": 22.0
}
]
},
{
"item": "Wind Turbine",
"items": [
{
"item_code": "Base Bearing Plate",
"qty": 1.0,
"rate": 15.0
},
{
"item_code": "Base Plate",
"qty": 1.0,
"rate": 20.0
},
{
"item_code": "Bearing Collar",
"qty": 1.0,
"rate": 20.0
},
{
"item_code": "Blade Rib",
"qty": 1.0,
"rate": 10.0
},
{
"item_code": "Shaft",
"qty": 1.0,
"rate": 30.0
},
{
"item_code": "Wing Sheet",
"qty": 2.0,
"rate": 22.0
}
]
},
{
"item": "Base Plate",
"items": [
{
"item_code": "Base Plate Un Painted",
"qty": 1.0,
"rate": 16.0
}
]
}
]

View File

@ -0,0 +1,191 @@
[
{
"customer": "Adaptas",
"email_id": "JanVaclavik@example.com",
"first_name": "January",
"last_name": "V\u00e1clav\u00edk",
"supplier": null
},
{
"customer": "Asian Fusion",
"email_id": "ChidumagaTobeolisa@example.com",
"first_name": "Chidumaga",
"last_name": "Tobeolisa",
"supplier": null
},
{
"customer": "Asian Junction",
"email_id": "JanaKubanova@example.com",
"first_name": "Jana",
"last_name": "Kub\u00e1\u0148ov\u00e1",
"supplier": null
},
{
"customer": "Big D Supermarkets",
"email_id": "XuChaoXuan@example.com",
"first_name": "\u7d39\u8431",
"last_name": "\u4e8e",
"supplier": null
},
{
"customer": "Buttrey Food & Drug",
"email_id": "OzlemVerwijmeren@example.com",
"first_name": "\u00d6zlem",
"last_name": "Verwijmeren",
"supplier": null
},
{
"customer": "Chi-Chis",
"email_id": "HansRasmussen@example.com",
"first_name": "Hans",
"last_name": "Rasmussen",
"supplier": null
},
{
"customer": "Choices",
"email_id": "SatomiShigeki@example.com",
"first_name": "Satomi",
"last_name": "Shigeki",
"supplier": null
},
{
"customer": "Consumers and Consumers Express",
"email_id": "SimonVJessen@example.com",
"first_name": "Simon",
"last_name": "Jessen",
"supplier": null
},
{
"customer": "Crafts Canada",
"email_id": "NeguaranShahsaah@example.com",
"first_name": "\u0646\u06af\u0627\u0631\u06cc\u0646",
"last_name": "\u0634\u0627\u0647 \u0633\u06cc\u0627\u0647",
"supplier": null
},
{
"customer": "Endicott Shoes",
"email_id": "Lom-AliBataev@example.com",
"first_name": "Lom-Ali",
"last_name": "Bataev",
"supplier": null
},
{
"customer": "Fayva",
"email_id": "VanNgocTien@example.com",
"first_name": "Ti\u00ean",
"last_name": "V\u0103n",
"supplier": null
},
{
"customer": "Intelacard",
"email_id": "QuimeyOsorioRuelas@example.com",
"first_name": "Quimey",
"last_name": "Osorio",
"supplier": null
},
{
"customer": "Landskip Yard Care",
"email_id": "EdgardaSalcedoRaya@example.com",
"first_name": "Edgarda",
"last_name": "Salcedo",
"supplier": null
},
{
"customer": "Life Plan Counselling",
"email_id": "HafsteinnBjarnarsonar@example.com",
"first_name": "Hafsteinn",
"last_name": "Bjarnarsonar",
"supplier": null
},
{
"customer": "Mr Fables",
"email_id": "\u0434\u0430\u043d\u0438\u0438\u043b@example.com",
"first_name": "\u0414\u0430\u043d\u0438\u0438\u043b",
"last_name": "\u041a\u043e\u043d\u043e\u0432\u0430\u043b\u043e\u0432",
"supplier": null
},
{
"customer": "Nelson Brothers",
"email_id": "SelmaMAndersen@example.com",
"first_name": "Selma",
"last_name": "Andersen",
"supplier": null
},
{
"customer": "Netobill",
"email_id": "LadislavKolaja@example.com",
"first_name": "Ladislav",
"last_name": "Kolaja",
"supplier": null
},
{
"customer": null,
"email_id": "TewoldeAbaalom@example.com",
"first_name": "Tewolde",
"last_name": "Abaalom",
"supplier": "Helios Air"
},
{
"customer": null,
"email_id": "LeilaFernandesRodrigues@example.com",
"first_name": "Leila",
"last_name": "Rodrigues",
"supplier": "Ks Merchandise"
},
{
"customer": null,
"email_id": "DmitryBulgakov@example.com",
"first_name": "Dmitry",
"last_name": "Bulgakov",
"supplier": "HomeBase"
},
{
"customer": null,
"email_id": "HaiducWhitfoot@example.com",
"first_name": "Haiduc",
"last_name": "Whitfoot",
"supplier": "Scott Ties"
},
{
"customer": null,
"email_id": "SesseljaPetursdottir@example.com",
"first_name": "Sesselja",
"last_name": "P\u00e9tursd\u00f3ttir",
"supplier": "Reliable Investments"
},
{
"customer": null,
"email_id": "HajdarPignar@example.com",
"first_name": "Hajdar",
"last_name": "Pignar",
"supplier": "Nan Duskin"
},
{
"customer": null,
"email_id": "GustavaLorenzo@example.com",
"first_name": "Gustava",
"last_name": "Lorenzo",
"supplier": "Rainbow Records"
},
{
"customer": null,
"email_id": "BethanyWood@example.com",
"first_name": "Bethany",
"last_name": "Wood",
"supplier": "New World Realty"
},
{
"customer": null,
"email_id": "GlorianaBrownlock@example.com",
"first_name": "Gloriana",
"last_name": "Brownlock",
"supplier": "Asiatic Solutions"
},
{
"customer": null,
"email_id": "JensonFraser@gustr.com",
"first_name": "Jenson",
"last_name": "Fraser",
"supplier": "Eagle Hardware"
}
]

View File

@ -0,0 +1,72 @@
[
{
"date_of_birth": "1982-01-03",
"date_of_joining": "2001-10-10",
"employee_name": "Dikman Shervashidze Shervashidze",
"gender": "Female",
"user_id": "DikmanShervashidze@example.com"
},
{
"date_of_birth": "1959-02-03",
"date_of_joining": "1976-09-16",
"employee_name": "Zukutakitoteka",
"gender": "Female",
"user_id": "Zukutakitoteka@example.com"
},
{
"date_of_birth": "1982-03-03",
"date_of_joining": "2000-06-16",
"employee_name": "Hatsue Kashiwagi",
"gender": "Female",
"user_id": "HatsueKashiwagi@example.com"
},
{
"date_of_birth": "1945-04-04",
"date_of_joining": "1969-07-01",
"employee_name": "Nuran Verkleij",
"gender": "Female",
"user_id": "NuranVerkleij@example.com"
},
{
"date_of_birth": "1978-05-03",
"date_of_joining": "1999-12-24",
"employee_name": "\u0414\u043c\u0438\u0442\u0440\u0438\u0439 \u041f\u0438\u0440\u043e\u0433\u043e\u0432",
"gender": "Male",
"user_id": "aromn@example.com"
},
{
"date_of_birth": "1964-06-03",
"date_of_joining": "1981-08-05",
"employee_name": "Tilde Lindqvist",
"gender": "Female",
"user_id": "TildeLindqvist@example.com"
},
{
"date_of_birth": "1982-07-03",
"date_of_joining": "2006-06-10",
"employee_name": "Micha\u0142 Sobczak",
"gender": "Male",
"user_id": "MichalSobczak@example.com"
},
{
"date_of_birth": "1969-08-03",
"date_of_joining": "1993-10-21",
"employee_name": "Gabrielle Loftus",
"gender": "Female",
"user_id": "GabrielleLoftus@example.com"
},
{
"date_of_birth": "1982-09-03",
"date_of_joining": "2005-09-06",
"employee_name": "Vakhita Ryzaev",
"gender": "Male",
"user_id": "VakhitaRyzaev@example.com"
},
{
"date_of_birth": "1985-10-03",
"date_of_joining": "2007-12-25",
"employee_name": "Charmaine Gaudreau",
"gender": "Female",
"user_id": "CharmaineGaudreau@example.com"
}
]

224
erpnext/demo/data/item.json Normal file
View File

@ -0,0 +1,224 @@
[
{
"default_supplier": "Asiatic Solutions",
"default_warehouse": "Stores",
"description": "For Upper Bearing",
"image": "/assets/erpnext_demo/images/disc.png",
"item_code": "Disc Collars",
"item_group": "Raw Material",
"item_name": "Disc Collars"
},
{
"default_supplier": "Nan Duskin",
"default_warehouse": "Stores",
"description": "CAST IRON, MCMASTER PART NO. 3710T13",
"image": "/assets/erpnext_demo/images/bearing.jpg",
"item_code": "Bearing Block",
"item_group": "Raw Material",
"item_name": "Bearing Block"
},
{
"default_supplier": null,
"default_warehouse": "Finished Goods",
"description": "Wind Mill C Series for Commercial Use 18ft",
"image": "/assets/erpnext_demo/images/wind-turbine-2.png",
"item_code": "Wind MIll C Series",
"item_group": "Products",
"item_name": "Wind MIll C Series"
},
{
"default_supplier": null,
"default_warehouse": "Finished Goods",
"description": "Wind Mill A Series for Home Use 9ft",
"image": "/assets/erpnext_demo/images/wind-turbine.png",
"item_code": "Wind Mill A Series",
"item_group": "Products",
"item_name": "Wind Mill A Series"
},
{
"default_supplier": null,
"default_warehouse": "Finished Goods",
"description": "Small Wind Turbine for Home Use\n\n\n<!-- html -->",
"image": "/assets/erpnext_demo/images/wind-turbine-1.jpg",
"item_code": "Wind Turbine",
"item_group": "Products",
"item_name": "Wind Turbine",
"has_variants": 1,
"has_serial_no": 1,
"attributes":[
{ "attribute": "Size" }
]
},
{
"default_supplier": "HomeBase",
"default_warehouse": "Stores",
"description": "1.5 in. Diameter x 36 in. Mild Steel Tubing",
"image": null,
"item_code": "Bearing Pipe",
"item_group": "Raw Material",
"item_name": "Bearing Pipe"
},
{
"default_supplier": "New World Realty",
"default_warehouse": "Stores",
"description": "1/32 in. x 24 in. x 47 in. HDPE Opaque Sheet",
"image": null,
"item_code": "Wing Sheet",
"item_group": "Raw Material",
"item_name": "Wing Sheet"
},
{
"default_supplier": "Eagle Hardware",
"default_warehouse": "Stores",
"description": "3/16 in. x 6 in. x 6 in. Low Carbon Steel Plate",
"image": null,
"item_code": "Upper Bearing Plate",
"item_group": "Raw Material",
"item_name": "Upper Bearing Plate"
},
{
"default_supplier": "Asiatic Solutions",
"default_warehouse": "Stores",
"description": "Bearing Assembly",
"image": null,
"item_code": "Bearing Assembly",
"item_group": "Sub Assemblies",
"item_name": "Bearing Assembly"
},
{
"default_supplier": "HomeBase",
"default_warehouse": "Stores",
"description": "3/4 in. x 2 ft. x 4 ft. Pine Plywood",
"image": null,
"item_code": "Base Plate",
"item_group": "Raw Material",
"item_name": "Base Plate"
},
{
"default_supplier": "Scott Ties",
"default_warehouse": "Stores",
"description": "N/A",
"image": null,
"item_code": "Stand",
"item_group": "Raw Material",
"item_name": "Stand"
},
{
"default_supplier": "Eagle Hardware",
"default_warehouse": "Stores",
"description": "1 in. x 3 in. x 1 ft. Multipurpose Al Alloy Bar",
"image": null,
"item_code": "Bearing Collar",
"item_group": "Raw Material",
"item_name": "Bearing Collar"
},
{
"default_supplier": "Eagle Hardware",
"default_warehouse": "Stores",
"description": "1/4 in. x 6 in. x 6 in. Mild Steel Plate",
"image": null,
"item_code": "Base Bearing Plate",
"item_group": "Raw Material",
"item_name": "Base Bearing Plate"
},
{
"default_supplier": "HomeBase",
"default_warehouse": "Stores",
"description": "15/32 in. x 4 ft. x 8 ft. 3-Ply Rtd Sheathing",
"image": null,
"item_code": "External Disc",
"item_group": "Raw Material",
"item_name": "External Disc"
},
{
"default_supplier": "Eagle Hardware",
"default_warehouse": "Stores",
"description": "1.25 in. Diameter x 6 ft. Mild Steel Tubing",
"image": null,
"item_code": "Shaft",
"item_group": "Raw Material",
"item_name": "Shaft"
},
{
"default_supplier": "Ks Merchandise",
"default_warehouse": "Stores",
"description": "1/2 in. x 2 ft. x 4 ft. Pine Plywood",
"image": null,
"item_code": "Blade Rib",
"item_group": "Raw Material",
"item_name": "Blade Rib"
},
{
"default_supplier": "HomeBase",
"default_warehouse": "Stores",
"description": "For Bearing Collar",
"image": null,
"item_code": "Internal Disc",
"item_group": "Raw Material",
"item_name": "Internal Disc"
},
{
"default_supplier": null,
"default_warehouse": "Finished Goods",
"description": "Small Wind Turbine for Home Use\n\n\n<!-- html -->\n<p>Size: Small</p>",
"image": "/assets/erpnext_demo/images/wind-turbine-1.jpg",
"item_code": "Wind Turbine-S",
"item_group": "Products",
"item_name": "Wind Turbine-S",
"variant_of": "Wind Turbine",
"attributes":[
{
"attribute": "Size",
"attribute_value": "Small"
}
]
},
{
"default_supplier": null,
"default_warehouse": "Finished Goods",
"description": "Small Wind Turbine for Home Use\n\n\n<!-- html -->\n<p>Size: Medium</p>",
"image": "/assets/erpnext_demo/images/wind-turbine-1.jpg",
"item_code": "Wind Turbine-M",
"item_group": "Products",
"item_name": "Wind Turbine-M",
"variant_of": "Wind Turbine",
"attributes":[
{
"attribute": "Size",
"attribute_value": "Medium"
}
]
},
{
"default_supplier": null,
"default_warehouse": "Finished Goods",
"description": "Small Wind Turbine for Home Use\n\n\n<!-- html -->\n<p>Size: Large</p>",
"image": "/assets/erpnext_demo/images/wind-turbine-1.jpg",
"item_code": "Wind Turbine-L",
"item_group": "Products",
"item_name": "Wind Turbine-L",
"variant_of": "Wind Turbine",
"attributes":[
{
"attribute": "Size",
"attribute_value": "Large"
}
]
},
{
"is_stock_item": 0,
"description": "Wind Mill A Series with Spare Bearing",
"item_code": "Wind Mill A Series with Spare Bearing",
"item_group": "Products",
"item_name": "Wind Mill A Series with Spare Bearing"
},
{
"default_supplier": "HomeBase",
"default_warehouse": "Stores",
"description": "3/4 in. x 2 ft. x 4 ft. Pine Plywood",
"image": null,
"item_code": "Base Plate Un Painted",
"item_group": "Raw Material",
"item_name": "Base Plate Un Painted"
}
]

127
erpnext/demo/data/lead.json Normal file
View File

@ -0,0 +1,127 @@
[
{
"company_name": "Zany Brainy",
"email_id": "MartLakeman@example.com",
"lead_name": "Mart Lakeman"
},
{
"company_name": "Patterson-Fletcher",
"email_id": "SagaLundqvist@example.com",
"lead_name": "Saga Lundqvist"
},
{
"company_name": "Griff's Hamburgers",
"email_id": "AdnaSjoberg@example.com",
"lead_name": "Adna Sj\u00f6berg"
},
{
"company_name": "Rhodes Furniture",
"email_id": "IdaDSvendsen@example.com",
"lead_name": "Ida Svendsen"
},
{
"company_name": "Burger Chef",
"email_id": "EmppuHameenniemi@example.com",
"lead_name": "Emppu H\u00e4meenniemi"
},
{
"company_name": "Stratabiz",
"email_id": "EugenioPisano@example.com",
"lead_name": "Eugenio Pisano"
},
{
"company_name": "Home Quarters Warehouse",
"email_id": "SemharHagos@example.com",
"lead_name": "Semhar Hagos"
},
{
"company_name": "Enviro Architectural Designs",
"email_id": "BranimiraIvankovic@example.com",
"lead_name": "Branimira Ivankovi\u0107"
},
{
"company_name": "Ideal Garden Management",
"email_id": "ShellyLFields@example.com",
"lead_name": "Shelly Fields"
},
{
"company_name": "Listen Up",
"email_id": "LeoMikulic@example.com",
"lead_name": "Leo Mikuli\u0107"
},
{
"company_name": "I. Magnin",
"email_id": "DenisaJarosova@example.com",
"lead_name": "Denisa Jaro\u0161ov\u00e1"
},
{
"company_name": "First Rate Choice",
"email_id": "JanekRutkowski@example.com",
"lead_name": "Janek Rutkowski"
},
{
"company_name": "Multi Tech Development",
"email_id": "mm@example.com",
"lead_name": "\u7f8e\u6708 \u5b87\u85e4"
},
{
"company_name": "National Auto Parts",
"email_id": "dd@example.com",
"lead_name": "\u0414\u0430\u043d\u0438\u0438\u043b \u0410\u0444\u0430\u043d\u0430\u0441\u044c\u0435\u0432"
},
{
"company_name": "Integra Investment Plan",
"email_id": "ZorislavPetkovic@example.com",
"lead_name": "Zorislav Petkovi\u0107"
},
{
"company_name": "The Lawn Guru",
"email_id": "NanaoNiwa@example.com",
"lead_name": "Nanao Niwa"
},
{
"company_name": "Buena Vista Realty Service",
"email_id": "HreiarJorundsson@example.com",
"lead_name": "Hrei\u00f0ar J\u00f6rundsson"
},
{
"company_name": "Bountiful Harvest Health Food Store",
"email_id": "ChuThiBichLai@example.com",
"lead_name": "Lai Chu"
},
{
"company_name": "P. Samuels Men's Clothiers",
"email_id": "VictorAksakov@example.com",
"lead_name": "Victor Aksakov"
},
{
"company_name": "Vinyl Fever",
"email_id": "SaidalimBisliev@example.com",
"lead_name": "Saidalim Bisliev"
},
{
"company_name": "Garden Master",
"email_id": "TotteJakobsson@example.com",
"lead_name": "Totte Jakobsson"
},
{
"company_name": "Big Apple",
"email_id": "NanaArmasRobles@example.com",
"lead_name": "Nan\u00e1 Armas"
},
{
"company_name": "Monk House Sales",
"email_id": "WalerianDuda@example.com",
"lead_name": "Walerian Duda"
},
{
"company_name": "ManCharm",
"email_id": "Moarimikashi@example.com",
"lead_name": "Moarimikashi"
},
{
"company_name": "Custom Lawn Care",
"email_id": "DobromilDabrowski@example.com",
"lead_name": "Dobromi\u0142 D\u0105browski"
}
]

View File

@ -0,0 +1,32 @@
[
{
"description": "Setup Fixtures for Assembly",
"name": "Setup Fixtures",
"workstation": "Assembly Station 1"
},
{
"description": "Assemble Unit as per Standard Operating Procedures",
"name": "Assembly Operation",
"workstation": "Assembly Station 1"
},
{
"description": "Final Testing Checklist",
"name": "Testing",
"workstation": "Packing and Testing Station"
},
{
"description": "Final Packing and add Instructions",
"name": "Packing",
"workstation": "Packing and Testing Station"
},
{
"description": "Prepare frame for assembly",
"name": "Prepare Frame",
"workstation": "Drilling Machine 1"
},
{
"description": "Connect wires",
"name": "Wiring",
"workstation": "Assembly Station 1"
}
]

112
erpnext/demo/data/user.json Normal file
View File

@ -0,0 +1,112 @@
[
{
"email": "test_demo@erpnext.com",
"first_name": "Test",
"last_name": "User"
},
{
"email": "DikmanShervashidze@example.com",
"first_name": "Dikman",
"last_name": "Shervashidze"
},
{
"email": "Zukutakitoteka@example.com",
"first_name": "Zukutakitoteka",
"last_name": null
},
{
"email": "HatsueKashiwagi@example.com",
"first_name": "Hatsue",
"last_name": "Kashiwagi"
},
{
"email": "NuranVerkleij@example.com",
"first_name": "Nuran",
"last_name": "Verkleij"
},
{
"email": "aromn@example.com",
"first_name": "\u0414\u043c\u0438\u0442\u0440\u0438\u0439",
"last_name": "\u041f\u0438\u0440\u043e\u0433\u043e\u0432"
},
{
"email": "TildeLindqvist@example.com",
"first_name": "Tilde",
"last_name": "Lindqvist"
},
{
"email": "MichalSobczak@example.com",
"first_name": "Micha\u0142",
"last_name": "Sobczak"
},
{
"email": "GabrielleLoftus@example.com",
"first_name": "Gabrielle",
"last_name": "Loftus"
},
{
"email": "VakhitaRyzaev@example.com",
"first_name": "Vakhita",
"last_name": "Ryzaev"
},
{
"email": "CharmaineGaudreau@example.com",
"first_name": "Charmaine",
"last_name": "Gaudreau"
},
{
"email": "RafaelaMaartens@example.com",
"first_name": "Rafa\u00ebla",
"last_name": "Maartens"
},
{
"email": "NuguseYohannes@example.com",
"first_name": "Nuguse",
"last_name": "Yohannes"
},
{
"email": "panca@example.com",
"first_name": "\u0420\u0430\u0438\u0441\u0430",
"last_name": "\u0411\u0435\u043b\u044f\u043a\u043e\u0432\u0430"
},
{
"email": "CaYinLong@example.com",
"first_name": "\u80e4\u9686",
"last_name": "\u8521"
},
{
"email": "FreddieScott@example.com",
"first_name": "Freddie",
"last_name": "Scott"
},
{
"email": "BergoraVigfusdottir@example.com",
"first_name": "Berg\u00fe\u00f3ra",
"last_name": "Vigf\u00fasd\u00f3ttir"
},
{
"email": "WardNajmalDinKalb@example.com",
"first_name": "Ward",
"last_name": "Kalb"
},
{
"email": "WanMai@example.com",
"first_name": "Wan",
"last_name": "Mai"
},
{
"email": "LeonAbdulov@example.com",
"first_name": "Leon",
"last_name": "Abdulov"
},
{
"email": "SabinaNovotna@example.com",
"first_name": "Sabina",
"last_name": "Novotn\u00e1"
},
{
"email": "demo@erpnext.com",
"first_name": "Demo",
"last_name": "User"
}
]

54
erpnext/demo/demo.py Normal file
View File

@ -0,0 +1,54 @@
from __future__ import unicode_literals
import frappe, sys
import erpnext
import frappe.utils
from erpnext.demo.setup_data import setup_data
from erpnext.demo.user import hr, sales
def make(domain='Manufacturing'):
frappe.flags.domain = domain
setup_data()
simulate()
def simulate():
runs_for = frappe.flags.runs_for or 150
frappe.flags.company = erpnext.get_default_company()
if not frappe.flags.start_date:
# start date = 100 days back
frappe.flags.start_date = frappe.utils.add_days(frappe.utils.nowdate(), -1 * runs_for)
current_date = frappe.utils.getdate(frappe.flags.start_date)
# continue?
demo_last_date = frappe.db.get_global('demo_last_date')
if demo_last_date:
current_date = frappe.utils.add_days(demo_last_date, 1)
# run till today
if not runs_for:
runs_for = frappe.utils.date_diff(frappe.utils.nowdate(), current_date)
# runs_for = 100
for i in xrange(runs_for):
sys.stdout.write("\rSimulating {0}".format(current_date.strftime("%Y-%m-%d")))
sys.stdout.flush()
frappe.flags.current_date = current_date
if current_date.weekday() in (5, 6):
current_date = frappe.utils.add_days(current_date, 1)
continue
hr.work()
sales.work()
# run_purchase()
# run_manufacturing()
# run_stock()
# run_accounts()
# run_projects()
# run_messages()
current_date = frappe.utils.add_days(current_date, 1)
frappe.db.commit()

16
erpnext/demo/domains.py Normal file
View File

@ -0,0 +1,16 @@
from __future__ import unicode_literals
data = {
'Manufacturing': {
'company_name': 'Wind Power LLC'
},
'Retail': {
'company_name': 'Annapurna Dairy Shop',
},
'Distribution': {
'company_name': 'Soltice Hardware',
},
'Services': {
'company_name': 'Acme Consulting'
}
}

302
erpnext/demo/setup_data.py Normal file
View File

@ -0,0 +1,302 @@
from __future__ import unicode_literals
import random, json
from erpnext.demo.domains import data
import frappe, erpnext
import frappe.utils
def setup_data():
domain = frappe.flags.domain
complete_setup(domain)
setup_demo_page()
setup_fiscal_year()
setup_holiday_list()
setup_customer()
setup_supplier()
setup_item()
import_json('Address')
import_json('Contact')
setup_workstation()
import_json('Operation')
import_json('Lead')
setup_item_price()
show_item_groups_in_website()
setup_currency_exchange()
import_json('BOM', submit=True)
setup_user()
setup_employee()
setup_salary_structure()
setup_user_roles()
def complete_setup(domain='Manufacturing'):
print "Complete Setup..."
from frappe.desk.page.setup_wizard.setup_wizard import setup_complete
if not frappe.get_all('Company', limit=1):
setup_complete({
"first_name": "Test",
"last_name": "User",
"email": "test_demo@erpnext.com",
"company_tagline": 'Awesome Products and Services',
"password": "test",
"fy_start_date": "2015-01-01",
"fy_end_date": "2015-12-31",
"bank_account": "National Bank",
"industry": domain,
"company_name": data.get(domain).get('company_name'),
"chart_of_accounts": "Standard",
"company_abbr": ''.join([d[0] for d in data.get(domain).get('company_name').split()]).upper(),
"currency": 'USD',
"timezone": 'America/New_York',
"country": 'United States',
"language": "english"
})
def setup_demo_page():
# home page should always be "start"
website_settings = frappe.get_doc("Website Settings", "Website Settings")
website_settings.home_page = "demo"
website_settings.save()
def setup_fiscal_year():
fiscal_year = None
for year in xrange(2014, frappe.utils.now_datetime().year + 1, 1):
try:
fiscal_year = frappe.get_doc({
"doctype": "Fiscal Year",
"year": frappe.utils.cstr(year),
"year_start_date": "{0}-01-01".format(year),
"year_end_date": "{0}-12-31".format(year)
}).insert()
except frappe.DuplicateEntryError:
pass
# set the last fiscal year (current year) as default
fiscal_year.set_as_default()
def setup_holiday_list():
"""Setup Holiday List for the current year"""
year = frappe.utils.now_datetime().year
holiday_list = frappe.get_doc({
"doctype": "Holiday List",
"holiday_list_name": str(year),
"from_date": "{0}-01-01".format(year),
"to_date": "{0}-12-31".format(year),
})
holiday_list.insert()
holiday_list.weekly_off = "Saturday"
holiday_list.get_weekly_off_dates()
holiday_list.weekly_off = "Sunday"
holiday_list.get_weekly_off_dates()
holiday_list.save()
frappe.set_value("Company", erpnext.get_default_company(), "default_holiday_list", holiday_list.name)
def setup_customer():
customers = [u'Asian Junction', u'Life Plan Counselling', u'Two Pesos', u'Mr Fables', u'Intelacard', u'Big D Supermarkets', u'Adaptas', u'Nelson Brothers', u'Landskip Yard Care', u'Buttrey Food & Drug', u'Fayva', u'Asian Fusion', u'Crafts Canada', u'Consumers and Consumers Express', u'Netobill', u'Choices', u'Chi-Chis', u'Red Food', u'Endicott Shoes', u'Hind Enterprises']
for c in customers:
frappe.get_doc({
"doctype": "Customer",
"customer_name": c,
"customer_group": "Commercial",
"customer_type": random.choice(["Company", "Individual"]),
"territory": "Rest Of The World"
}).insert()
def setup_supplier():
suppliers = [u'Helios Air', u'Ks Merchandise', u'HomeBase', u'Scott Ties', u'Reliable Investments', u'Nan Duskin', u'Rainbow Records', u'New World Realty', u'Asiatic Solutions', u'Eagle Hardware', u'Modern Electricals']
for s in suppliers:
frappe.get_doc({
"doctype": "Supplier",
"supplier_name": s,
"supplier_type": random.choice(["Services", "Raw Material"]),
}).insert()
def setup_workstation():
workstations = [u'Drilling Machine 1', u'Lathe 1', u'Assembly Station 1', u'Assembly Station 2', u'Packing and Testing Station']
for w in workstations:
frappe.get_doc({
"doctype": "Workstation",
"workstation_name": w,
"holiday_list": frappe.get_all("Holiday List")[0].name,
"hour_rate_consumable": int(random.random() * 20),
"hour_rate_electricity": int(random.random() * 10),
"hour_rate_labour": int(random.random() * 40),
"hour_rate_rent": int(random.random() * 10),
"working_hours": [
{
"enabled": 1,
"start_time": "8:00:00",
"end_time": "15:00:00"
}
]
}).insert()
def show_item_groups_in_website():
"""set show_in_website=1 for Item Groups"""
products = frappe.get_doc("Item Group", "Products")
products.show_in_website = 1
products.route = 'products'
products.save()
def setup_item():
items = json.loads(open(frappe.get_app_path('erpnext', 'demo', 'data', 'item.json')).read())
for i in items:
item = frappe.new_doc('Item')
item.update(i)
item.default_warehouse = frappe.get_all('Warehouse', filters={'warehouse_name': item.default_warehouse}, limit=1)[0].name
item.insert()
def setup_currency_exchange():
frappe.get_doc({
'doctype': 'Currency Exchange',
'from_currency': 'EUR',
'to_currency': 'USD',
'exchange_rate': 1.13
}).insert()
frappe.get_doc({
'doctype': 'Currency Exchange',
'from_currency': 'CNY',
'to_currency': 'USD',
'exchange_rate': 0.16
}).insert()
def setup_product_bundle():
frappe.get_doc({
'doctype': 'Product Bundle',
'new_item_code': 'Wind Mill A Series with Spare Bearing',
'items': [
{'item_code': 'Wind Mill A Series', 'qty': 1},
{'item_code': 'Bearing Collar', 'qty': 1},
{'item_code': 'Bearing Assembly', 'qty': 1},
]
}).insert()
def setup_user():
frappe.db.sql('delete from tabUser where name not in ("Guest", "Administrator")')
for u in json.loads(open(frappe.get_app_path('erpnext', 'demo', 'data', 'user.json')).read()):
user = frappe.new_doc("User")
user.update(u)
user.flags.no_welcome_mail
user.password = 'demo'
user.insert()
def import_json(doctype, submit=False):
frappe.flags.in_import = True
data = json.loads(open(frappe.get_app_path('erpnext', 'demo', 'data',
frappe.scrub(doctype) + '.json')).read())
for d in data:
doc = frappe.new_doc(doctype)
doc.update(d)
doc.insert()
if submit:
doc.submit()
def setup_employee():
frappe.db.set_value("HR Settings", None, "emp_created_by", "Naming Series")
frappe.db.commit()
import_json('Employee')
def setup_item_price():
frappe.db.sql("delete from `tabItem Price`")
standard_selling = {
"Base Bearing Plate": 28,
"Base Plate": 21,
"Bearing Assembly": 300,
"Bearing Block": 14,
"Bearing Collar": 103.6,
"Bearing Pipe": 63,
"Blade Rib": 46.2,
"Disc Collars": 42,
"External Disc": 56,
"Internal Disc": 70,
"Shaft": 340,
"Stand": 400,
"Upper Bearing Plate": 300,
"Wind Mill A Series": 320,
"Wind Mill A Series with Spare Bearing": 750,
"Wind MIll C Series": 400,
"Wind Turbine": 400,
"Wing Sheet": 30.8
}
standard_buying = {
"Base Bearing Plate": 20,
"Base Plate": 28,
"Base Plate Un Painted": 16,
"Bearing Block": 13,
"Bearing Collar": 96.4,
"Bearing Pipe": 55,
"Blade Rib": 38,
"Disc Collars": 34,
"External Disc": 50,
"Internal Disc": 60,
"Shaft": 250,
"Stand": 300,
"Upper Bearing Plate": 200,
"Wing Sheet": 25
}
for price_list in ("standard_buying", "standard_selling"):
for item, rate in locals().get(price_list).iteritems():
frappe.get_doc({
"doctype": "Item Price",
"price_list": price_list.replace("_", " ").title(),
"item_code": item,
"selling": 1 if price_list=="standard_selling" else 0,
"buying": 1 if price_list=="standard_buying" else 0,
"price_list_rate": rate,
"currency": "USD"
}).insert()
def setup_salary_structure():
f = frappe.get_doc('Fiscal Year', frappe.defaults.get_global_default('fiscal_year'))
for e in frappe.get_all('Employee', fields=['name', 'date_of_joining']):
ss = frappe.new_doc('Salary Structure')
ss.employee = e.name
if not e.date_of_joining:
continue
ss.from_date = e.date_of_joining if (e.date_of_joining
and e.date_of_joining > f.year_start_date) else f.year_start_date
ss.to_date = f.year_end_date
ss.append('earnings', {
'earning_type': 'Basic',
'modified_value': random.random() * 10000
})
ss.append('deductions', {
'deduction_type': 'Income Tax',
'd_modified_amt': random.random() * 1000
})
ss.insert()
def setup_account():
frappe.flags.in_import = True
data = json.loads(open(frappe.get_app_path('erpnext', 'demo', 'data',
'account.json')).read())
for d in data:
doc = frappe.new_doc('Account')
doc.update(d)
doc.parent_account = frappe.db.get_value('Account', {'account_name': doc.parent_account})
doc.insert()
def setup_user_roles():
if not frappe.db.get_global('demo_hr_user'):
user = frappe.get_doc('User', 'CharmaineGaudreau@example.com')
user.add_roles('HR User', 'HR Manager', 'Accounts User')
frappe.db.set_global('demo_hr_user', user.name)
if not frappe.db.get_global('demo_sales_user_1'):
user = frappe.get_doc('User', 'VakhitaRyzaev@example.com')
user.add_roles('Sales User')
frappe.db.set_global('demo_sales_user_1', user.name)
if not frappe.db.get_global('demo_sales_user_2'):
user = frappe.get_doc('User', 'GabrielleLoftus@example.com')
user.add_roles('Sales User', 'Sales Manager', 'Accounts User')
frappe.db.set_global('demo_sales_user_2', user.name)

View File

26
erpnext/demo/user/hr.py Normal file
View File

@ -0,0 +1,26 @@
from __future__ import unicode_literals
import frappe
from frappe.utils import random_string
def work():
frappe.set_user(frappe.db.get_global('demo_hr_user'))
year, month = frappe.flags.current_date.strftime("%Y-%m").split("-")
# process payroll
if not frappe.db.get_value("Salary Slip", {"month": month, "fiscal_year": year}):
process_payroll = frappe.get_doc("Process Payroll", "Process Payroll")
process_payroll.company = frappe.flags.company
process_payroll.month = month
process_payroll.fiscal_year = year
process_payroll.create_sal_slip()
process_payroll.submit_salary_slip()
r = process_payroll.make_journal_entry(frappe.get_value('Account',
{'account_name': 'Salary'}))
journal_entry = frappe.get_doc(r)
journal_entry.cheque_no = random_string(10)
journal_entry.cheque_date = frappe.flags.current_date
journal_entry.posting_date = frappe.flags.current_date
journal_entry.insert()
journal_entry.submit()

View File

@ -0,0 +1,138 @@
# 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, random
from frappe.utils.make_random import how_many, can_make, get_random
from frappe.desk import query_report
from erpnext.setup.utils import get_exchange_rate
from erpnext.accounts.party import get_party_account_currency
from erpnext.exceptions import InvalidCurrency
from erpnext.stock.doctype.material_request.material_request import make_request_for_quotation
from erpnext.buying.doctype.request_for_quotation.request_for_quotation import \
make_supplier_quotation as make_quotation_from_rfq
def run_purchase(current_date):
if random.random() < 0.3:
report = "Items To Be Requested"
for row in query_report.run(report)["result"][:how_many("Material Request")]:
item_code, qty = row[0], abs(row[-1])
mr = make_material_request(item_code, qty)
if random.random() < 0.3:
for mr in frappe.get_all('Material Request', filters={'material_request_type': 'Purchase', 'status': 'Open'}):
rfq = make_request_for_quotation(mr.name)
rfq.transaction_date = frappe.flags.current_date
add_suppliers(rfq)
rfq.save()
rfq.submit()
# Make suppier quotation from RFQ against each supplier.
if random.random() < 0.3:
for supplier_quotation in frappe.get_all('Request for Quotation', {'status': 'Open'}):
rfq = frappe.get_doc('Request for Quotation', rfq.name)
for supplier in rfq.suppliers:
supplier_quotation = make_quotation_from_rfq(rfq.name, supplier.supplier)
supplier_quotation.save()
supplier_quotation.submit()
# get supplier details
supplier = get_random("Supplier")
company_currency = frappe.db.get_value("Company", "Wind Power LLC", "default_currency")
party_account_currency = get_party_account_currency("Supplier", supplier, "Wind Power LLC")
if company_currency == party_account_currency:
exchange_rate = 1
else:
exchange_rate = get_exchange_rate(party_account_currency, company_currency)
# make supplier quotations
if can_make("Supplier Quotation"):
from erpnext.stock.doctype.material_request.material_request import make_supplier_quotation
report = "Material Requests for which Supplier Quotations are not created"
for row in query_report.run(report)["result"][:how_many("Supplier Quotation")]:
if row[0] != "'Total'":
sq = frappe.get_doc(make_supplier_quotation(row[0]))
sq.transaction_date = current_date
sq.supplier = supplier
sq.currency = party_account_currency or company_currency
sq.conversion_rate = exchange_rate
sq.insert()
sq.submit()
frappe.db.commit()
# make purchase orders
if can_make("Purchase Order"):
from erpnext.stock.doctype.material_request.material_request import make_purchase_order
report = "Requested Items To Be Ordered"
for row in query_report.run(report)["result"][:how_many("Purchase Order")]:
if row[0] != "'Total'":
po = frappe.get_doc(make_purchase_order(row[0]))
po.supplier = supplier
po.currency = party_account_currency or company_currency
po.conversion_rate = exchange_rate
po.transaction_date = current_date
po.insert()
po.submit()
frappe.db.commit()
if can_make("Subcontract"):
make_subcontract(current_date)
def make_material_request(item_code, qty):
mr = frappe.new_doc("Material Request")
if frappe.db.get_value('BOM', {'item': item_code, 'is_default': 1, 'is_active': 1}):
mr.material_request_type = 'Manufacture'
else:
mr.material_request_type = "Purchase"
mr.transaction_date = frappe.flags.current_date
mr.append("items", {
"doctype": "Material Request Item",
"schedule_date": frappe.utils.add_days(mr.transaction_date, 7),
"item_code": item_code,
"qty": qty
})
mr.insert()
mr.submit()
return mr
def add_suppliers(rfq):
for i in xrange(2):
supplier = get_random("Supplier")
if supplier not in [d.supplier for d in rfq.get('suppliers')]:
rfq.append("suppliers", { "supplier": supplier })
def make_subcontract():
from erpnext.buying.doctype.purchase_order.purchase_order import make_stock_entry
# make sub-contract PO
po = frappe.new_doc("Purchase Order")
po.is_subcontracted = "Yes"
po.supplier = get_random("Supplier")
po.append("items", {
"item_code": get_random("Item", {"is_sub_contracted_item": 1}),
"schedule_date": frappe.utils.add_days(frappe.flags.current_date, 7),
"qty": 20
})
po.set_missing_values()
try:
po.insert()
except InvalidCurrency:
return
po.submit()
# make material request for
make_material_request(po.items[0].item_code, po.items[0].qty)
# transfer material for sub-contract
stock_entry = frappe.get_doc(make_stock_entry(po.name, po.items[0].item_code))
stock_entry.from_warehouse = "Stores - WP"
stock_entry.to_warehouse = "Supplier - WP"
stock_entry.insert()

109
erpnext/demo/user/sales.py Normal file
View File

@ -0,0 +1,109 @@
# 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, random
from frappe.utils.make_random import add_random_children, get_random
from erpnext.setup.utils import get_exchange_rate
from erpnext.accounts.party import get_party_account_currency
def work():
frappe.set_user(frappe.db.get_global('demo_sales_user_2'))
if random.random() < 0.5:
for i in xrange(random.randint(1,7)):
make_opportunity()
if random.random() < 0.5:
for i in xrange(random.randint(1,3)):
make_quotation()
# lost quotations / inquiries
if random.random() < 0.3:
for i in xrange(random.randint(1,3)):
quotation = get_random('Quotation', doc=True)
if quotation and quotation.status == 'Submitted':
quotation.declare_order_lost('Did not ask')
for i in xrange(random.randint(1,3)):
opportunity = get_random('Opportunity', doc=True)
if opportunity and opportunity.status in ('Open', 'Replied'):
opportunity.declare_enquiry_lost('Did not ask')
if random.random() < 0.3:
for i in xrange(random.randint(1,3)):
make_sales_order()
def make_opportunity():
b = frappe.get_doc({
"doctype": "Opportunity",
"enquiry_from": "Customer",
"customer": get_random("Customer"),
"enquiry_type": "Sales",
"transaction_date": frappe.flags.current_date,
})
add_random_children(b, "items", rows=4, randomize = {
"qty": (1, 5),
"item_code": ("Item", {"has_variants": "0"})
}, unique="item_code")
b.insert()
frappe.db.commit()
def make_quotation():
# get open opportunites
opportunity = get_random("Opportunity", {"status": "Open"})
if opportunity:
from erpnext.crm.doctype.opportunity.opportunity import make_quotation
qtn = frappe.get_doc(make_quotation(opportunity))
qtn.insert()
frappe.db.commit()
qtn.submit()
frappe.db.commit()
else:
# make new directly
# get customer, currency and exchange_rate
customer = get_random("Customer")
company_currency = frappe.db.get_value("Company", "Wind Power LLC", "default_currency")
party_account_currency = get_party_account_currency("Customer", customer, "Wind Power LLC")
if company_currency == party_account_currency:
exchange_rate = 1
else:
exchange_rate = get_exchange_rate(party_account_currency, company_currency)
qtn = frappe.get_doc({
"creation": frappe.flags.current_date,
"doctype": "Quotation",
"quotation_to": "Customer",
"customer": customer,
"currency": party_account_currency or company_currency,
"conversion_rate": exchange_rate,
"order_type": "Sales",
"transaction_date": frappe.flags.current_date,
})
add_random_children(qtn, "items", rows=3, randomize = {
"qty": (1, 5),
"item_code": ("Item", {"has_variants": "0"})
}, unique="item_code")
qtn.insert()
frappe.db.commit()
qtn.submit()
frappe.db.commit()
def make_sales_order():
q = get_random("Quotation", {"status": "Submitted"})
if q:
from erpnext.selling.doctype.quotation.quotation import make_sales_order
so = frappe.get_doc(make_sales_order(q))
so.transaction_date = frappe.flags.current_date
so.delivery_date = frappe.utils.add_days(frappe.flags.current_date, 10)
so.insert()
frappe.db.commit()
so.submit()
frappe.db.commit()

View File

@ -0,0 +1,43 @@
{% extends "templates/web.html" %}
{% block script %}
<script>{% include "templates/includes/start.js" %}</script>
{% endblock %}
{% block style %}
<style>
footer, .navbar {
display: none;
}
.page-content {
right: 0%;
width: 100%;
}
</style>
{% endblock %}
{% block title %}
{{ _("Login") }}
{% endblock %}
{% block page_content %}
<!-- no-header -->
<div class="page-hero text-center">
<img src="/assets/erpnext_demo/images/erp-icon-box.svg" style="max-width: 100px; max-height: 100px;">
<h1>ERPNext Demo</h1>
<p style="margin-top: 60px;">
<input id="lead-email" type="email"
class="form-control" placeholder="Your Email Id (optional)"
style="width: 75%; max-width: 400px; margin: auto;">
</p>
<button type="submit" id="login_btn" class="btn btn-default">Launch Demo</button>
<hr style="margin: 60px 0px;">
<p class="text-muted small">Some functionality is disabled for the demo app. The demo data will be cleared regulary.
<br class="hidden-xs">
To start your free ERPNext account, <a href="https://erpnext.com/signup?plan=Free-Solo">click here</a></p>
</div>
{% endblock %}