From a6c7ae947aa50fced963fc913718e026a8e4be0c Mon Sep 17 00:00:00 2001 From: Priya Date: Fri, 16 Aug 2013 12:00:12 +0530 Subject: [PATCH 01/50] [docs] --- docs/docs.user.stock.sub_contracting.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs.user.stock.sub_contracting.md b/docs/docs.user.stock.sub_contracting.md index 7538404269..43d1784b95 100644 --- a/docs/docs.user.stock.sub_contracting.md +++ b/docs/docs.user.stock.sub_contracting.md @@ -10,7 +10,7 @@ To setup sub-contracting: 1. Create separate Items for the unprocessed and the processed product. For example if you supply unpainted X to your Supplier and the Supplier returns you X, you can create two Items: “X-unpainted” and “X”. 1. Create a Warehouse for your Supplier so that you can keep track of Items supplied. (you may supply a months worth of Items in one go). 1. For the processed Item, in the Item master, set “Is Sub Contracted Item” to “Yes”. -1. Make a Bill of Materials for the processed Item, with the unprocessed Items as sub-items. +1. Make a Bill of Materials for the processed Item, with the unprocessed Items as sub-items.For example, If you are manufacturing a pen, the processed pen will be named under Bill of Materials(BOM), whereas, the refill, knob, and other items which go into the making of pen, will be categorised as sub-items. 1. Make a Purchase Order for the processed Item. When you “Save”, in the “Raw Materials Detail”, all your un-processed Items will be updated based on your Bill of Materials. 1. Make sure that the “Rate” of this Item is the processing rate (excluding the raw material rate). 1. ERPNext will automatically add the raw material rate for your valuation purpose when you receive the finished Item in your stock.
 From 92f48cfccc411d0162a6d32c09bb03ea91122146 Mon Sep 17 00:00:00 2001 From: Priya Date: Fri, 16 Aug 2013 12:33:32 +0530 Subject: [PATCH 02/50] [docs] --- docs/docs.user.stock.purchase_receipt.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs.user.stock.purchase_receipt.md b/docs/docs.user.stock.purchase_receipt.md index 1d403d50b4..14b2a2f847 100644 --- a/docs/docs.user.stock.purchase_receipt.md +++ b/docs/docs.user.stock.purchase_receipt.md @@ -21,7 +21,7 @@ If you reject, you are required to enter a “Rejected Warehouse” to indicate ### Quality Inspections -If for certain Items it is mandatory for you to record Quality Inspections (you have set it in your Item master), you will need to update the “Quality Inspection No” (QA No) column. The system will only allow you to “Submit” the Purchase Receipt if you update the “Quality Inspection No”. +If for certain Items, it is mandatory to record Quality Inspections (if you have set it in your Item master), you will need to update the “Quality Inspection No” (QA No) column. The system will only allow you to “Submit” the Purchase Receipt if you update the “Quality Inspection No”. ### UOM Conversions From caa17513753781bd994580e59dd14ef745f6c0b6 Mon Sep 17 00:00:00 2001 From: Priya Date: Tue, 20 Aug 2013 13:36:26 +0530 Subject: [PATCH 03/50] [docs] --- docs/docs.user.mfg.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs.user.mfg.md b/docs/docs.user.mfg.md index 9f01f762ca..a7ac5643ab 100644 --- a/docs/docs.user.mfg.md +++ b/docs/docs.user.mfg.md @@ -3,7 +3,7 @@ "_label": "Manufacturing" } --- -The Manufacturing module in ERPNext helps you maintain multi-level Bill of Materials (BOMs) for your Items, help you in Product Costing, plan your production via Production Plan, create Production Orders for your manufacturing shop floor and plan your inventory by getting your material requirement via your BOMs (also called Material Requirements Planning MRP). +The Manufacturing module in ERPNext helps you to maintain multi-level Bill of Materials (BOMs) for your Items. It helps you in Product Costing, planing your production via Production Plan, creating Production Orders for your manufacturing shop floor, and planing your inventory by getting your material requirement via BOMs (also called Material Requirements Planning MRP). ### Types of Production Planning @@ -19,7 +19,7 @@ For engineer-to-order systems, the Manufacturing module should be used along wit #### Manufacturing and Inventory  -You can track you work-in-progress by creating work-in-progress Warehouses. +You can track work-in-progress by creating work-in-progress Warehouses. ERPNext will help you track material movement by automatically creating Stock Entries from your Production Orders by building form Bill of Materials. From 36b54324acbd30da59b51799b08bea84ae98e7a8 Mon Sep 17 00:00:00 2001 From: Priya Date: Thu, 22 Aug 2013 12:28:07 +0530 Subject: [PATCH 04/50] [docs] --- docs/docs.user.mfg.md | 2 +- docs/docs.user.setup.accounting.md | 10 +++++----- docs/docs.user.stock.md | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/docs.user.mfg.md b/docs/docs.user.mfg.md index a7ac5643ab..37559876a0 100644 --- a/docs/docs.user.mfg.md +++ b/docs/docs.user.mfg.md @@ -3,7 +3,7 @@ "_label": "Manufacturing" } --- -The Manufacturing module in ERPNext helps you to maintain multi-level Bill of Materials (BOMs) for your Items. It helps you in Product Costing, planing your production via Production Plan, creating Production Orders for your manufacturing shop floor, and planing your inventory by getting your material requirement via BOMs (also called Material Requirements Planning MRP). +The Manufacturing module in ERPNext helps you to maintain multi-level Bill of Materials (BOMs) for your Items. It helps you in Product Costing, planing your production via Production Plan, creating Production Orders for your manufacturing shop floor,s and planing your inventory by getting your material requirement via BOMs (also called Material Requirements Planning MRP). ### Types of Production Planning diff --git a/docs/docs.user.setup.accounting.md b/docs/docs.user.setup.accounting.md index af915397df..10c7a15c75 100644 --- a/docs/docs.user.setup.accounting.md +++ b/docs/docs.user.setup.accounting.md @@ -9,15 +9,15 @@ --- The Chart of Accounts forms the blueprint of your organization. The overall structure of your Chart of Accounts is based on a system of double entry accounting that has become a standard all over the world to quantify how a company is doing financially. -The Chart of Accounts helps you answer: +The Chart of Accounts helps you to answer: -- What is your organization worth? +- What is your organisation worth? - How much debt have you taken? - How much profit are you making (and hence paying tax)? - How much are you selling? -- What is your expense break- up +- What is your expense break-up - You may note that as a business manager,it is very valuable to see how well your business is doing. + You may note that as a business manager,it is very valuable to see how well your business is doing. > Tip: If you can’t read a Balance Sheet (I confess it took me a long time to figure this out) its a good opportunity to start learning about this. It will be worth the effort. You can also take the help of your accountant to setup your Chart of Accounts. @@ -39,7 +39,7 @@ The Balance Sheet has Application of Funds (Assets) and Sources of Funds (Liabil > Accounting: If you are new to accounting, you might be wondering, how can Assets be equal to Liabilities? That would mean the company has nothing of its own. Thats right. All the “investment” made in the company to buy assets (like land, furniture, machines) is made by the owners and is a liability to the company. If the company would want to shut down, it would need to sell all the assets and pay back all the liabilities (including profits) to the owners, leaving itself with nothing. -All the accounts under this represent an asset owned by company like "Bank Account", "Land and Property", "Furniture" or a liability (funds that the company owes to others) like "Owners funds", "Debt" etc. +All the accounts under this represent an asset owned by the company like "Bank Account", "Land and Property", "Furniture" or a liability (funds that the company owes to others) like "Owners funds", "Debt" etc. Two special accounts to note here are Accounts Receivable (money you have to collect from your customers) and Accounts Payable (money you have to pay to your suppliers) under Assets and Liabilities respectively. diff --git a/docs/docs.user.stock.md b/docs/docs.user.stock.md index 820a4c7885..310fde8862 100644 --- a/docs/docs.user.stock.md +++ b/docs/docs.user.stock.md @@ -10,7 +10,7 @@ For most small business that deal in physical goods, a large part of their net w There are two aspects to good material management: - **Good housekeeping / visual control:** Keep all your items in separate bins,neatly stacked and labelled.

“A place for everything and everything in its place”
 -- **Accurate Data:** Accurate data comes from good processes and recording each and every transaction. If you are only partially recording your inventory then your reports will be incorrect

“Garbage In Garbage Out” +- **Accurate Data:** Accurate data comes from good processes and recording each and every transaction. If you are only partially recording your inventory then your reports will be incorrect

 “Garbage In Garbage Out” If you have good processes to control movement of goods within your organization, implementation in ERPNext will be a breeze. From b0a20792724cdd9f63b931c4a16ccfb2258faa0a Mon Sep 17 00:00:00 2001 From: Priya Date: Thu, 22 Aug 2013 13:57:47 +0530 Subject: [PATCH 05/50] [docs] --- docs/docs.user.setup.cost_centers.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/docs.user.setup.cost_centers.md b/docs/docs.user.setup.cost_centers.md index ca5e595cdb..4e36ceddc7 100644 --- a/docs/docs.user.setup.cost_centers.md +++ b/docs/docs.user.setup.cost_centers.md @@ -8,9 +8,9 @@ } --- -Your Chart of Accounts is mainly for reporting your information for governmental purposes and less for how your business actually performs. Though you can tweak it a bit to resemble your business. +Your Chart of Accounts is mainly designed to provide reports to the government and tax authorities.  -Most businesses have multiple activities like different product lines, market segments, areas of business that share some common overheads but should ideally have their own structure to report whether they are profitable or not. For this purpose, there is an alternate structure, called the Chart of Cost Centers. +Most businesses have multiple activities like different product lines, market segments, areas of business, etc that share some common overheads.They should ideally have their own structure to report, whether they are profitable or not. For this purpose, there is an alternate structure, called the Chart of Cost Centers. You can create a tree of Cost Centers to represent your business better. Each Income / Expense entry is also tagged against a Cost Center. @@ -21,7 +21,7 @@ For example, if you have two types of sales: You may not have shipping expenses for your walk-in customers, and no shop-rent for your online customers. If you want to get the profitability of each of these separately, you create the two as Cost Centers and you can mark all sales as either "Walk-in" or "Online" and also all your purchases in the same way. -So when you do your analysis you get a better understanding as to which side of your business is doing better. Since ERPNext has an option to add multiple Companies, you can create Cost Centers for each Company and manage it separately. +So when you do your analysis you get a better understanding as to which side of your business is doing better. Since ERPNext has an option to add multiple Companies, you can create Cost Centers for each Company and manage it separately. ### Chart of Cost Centers @@ -35,7 +35,7 @@ Cost centers help you in one more activity, budgeting. ERPNext will help you set and manage budgets on your Cost Centers. This is useful when, for example, you are doing online sales. You have a budget for search ads, and you want ERPNext to stop or warn you from over spending, based on that budget. -Budgets are also great for planning purposes. When you are making your plans for the next financial year, you would typically target a revenue based on which you would set your expenses. Setting a budget will ensure that your expenses do not get out of hand, at any point,as per your plans. +Budgets are also great for planning purposes. When you are making plans for the next financial year, you would typically target a revenue based on which you would set your expenses. Setting a budget will ensure that your expenses do not get out of hand, at any point, as per your plans. You can define it in the Cost Center. If you have seasonal sales you can also define a budget distribution that the budget will follow.  From d980e5c2d29d1ded3d25754f5cd11f02d74efd0b Mon Sep 17 00:00:00 2001 From: Priya Date: Mon, 26 Aug 2013 11:59:08 +0530 Subject: [PATCH 06/50] [docs] --- docs/docs.user.accounts.sales_invoice.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/docs.user.accounts.sales_invoice.md b/docs/docs.user.accounts.sales_invoice.md index c30b16627b..3130fbebc8 100644 --- a/docs/docs.user.accounts.sales_invoice.md +++ b/docs/docs.user.accounts.sales_invoice.md @@ -3,9 +3,9 @@ "_label": "Sales Invoice" } --- -A Sales Invoice is a bill you send to your Customers against which they will process your payment. +A Sales Invoice is a bill that you send to your Customers, against which they will process your payment. -If you have managed to create Sales Orders or Delivery Notes, creating a Sales Invoice should be more of the same. +If you have managed to create Sales Orders or Delivery Notes, creating a Sales Invoice follows the same process. You can create a Sales Invoice directly from @@ -21,7 +21,7 @@ All Sales must be booked against an “Income Account”. This refers to an Acco The other account that is affected is the Account of the Customer. That is automatically set from “Debit To” in the heading section. -You must also mention the Cost Centers in which your Income must be booked. Remember that your Cost Centers tell you the profitability of the different lines of business or product. Again, you can set a default Cost Center in your Item master. +You must also mention the Cost Centers in which your Income must be booked. Remember that your Cost Centers tell you the profitability of the different lines of business or product. You can also set a default Cost Center in the Item master. #### Accounting entries (GL Entry) for a typical double entry “Sale”: From e6348511ea9dc81fd31c467c53266e1c09d7cf50 Mon Sep 17 00:00:00 2001 From: Priya Date: Mon, 26 Aug 2013 12:55:25 +0530 Subject: [PATCH 07/50] [docs] --- docs/docs.user.accounts.purchase_invoice.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/docs/docs.user.accounts.purchase_invoice.md b/docs/docs.user.accounts.purchase_invoice.md index 371a26fcd7..8a49353577 100644 --- a/docs/docs.user.accounts.purchase_invoice.md +++ b/docs/docs.user.accounts.purchase_invoice.md @@ -11,11 +11,11 @@ To make a new Purchase Invoice, go to: or click on “Make Purchase Invoice” in Purchase Order or Purchase Receipt. -The concept of “Posting Date” is again same as Sales Invoice. “Bill No” and “Bill Date” help you to track the bill number as set by your Supplier for reference. +The concept of “Posting Date” is again same as Sales Invoice. “Bill No” and “Bill Date” helps to track the bill number as set by your Supplier for reference. #### Accounting Impact -Like in Sales Invoice, you have to enter an Expense or Asset account for each row in your Items table to indicate if the Item is an Asset or an Expense. You must also enter a Cost Center. These can also be set in the Item master. +Like in Sales Invoice, you have to enter an Expense or an Asset account for each row in your Items table. This helps to indicate if the Item is an Asset or an Expense. You must also enter a Cost Center. These can also be set in the Item master. The Purchase Invoice will affect your accounts as follows: @@ -36,17 +36,15 @@ To see entries in your Purchase Invoice after you “Submit”, click on “View #### Is a purchase an “Expense” or “Asset”? -If the Item is consumed immediately on purchase or if it is a service, then the purchase becomes an “Expense”. For example, a telephone bill or travel bill is an “Expense” - it is already consumed. +If the Item is consumed immediately on purchase, or if it is a service, then the purchase becomes an “Expense”. For example, a telephone bill or travel bill is an “Expense” - it is already consumed. For inventory Items, that have a value, these purchases are not yet “Expense”, because they still have a value while they remain in your stock. They are “Assets”. If they are raw-materials (used in a process), they will become “Expense” the moment they are consumed in the process. If they are to be sold to a Customer, they become “Expense” when you ship them to the Customer. -Note: In ERPNext, this conversion from “Asset” to “Expense” is not clear. As of the current version, you will have to manually convert an item from an “Asset” to “Expense” via a Journal Voucher. We know its a shortcoming and will be fixed in an upcoming version pretty soon. - --- #### Deducting Taxes at Source -In many countries, your laws may require to deduct taxes by a standard rate when you make payments to your Suppliers. Under these type of schemes, typically if a Supplier crosses a certain threshold of payment and if the type of product is taxable, you may have to deduct some tax (that you pay back to your government, on your Supplier’s behalf). +In many countries, the law may require you to deduct taxes, while paying your suppliers. These taxes could be based on a standard rate. Under these type of schemes, typically if a Supplier crosses a certain threshold of payment, and if the type of product is taxable, you may have to deduct some tax (which you pay back to your government, on your Supplier’s behalf). To do this, you will have to make a new Tax Account under “Tax Liabilities” or similar and credit this Account by the percent you are bound to deduct for every transaction. From cff4cfb3ecd9aba98d1f6879c2b23a296c99a015 Mon Sep 17 00:00:00 2001 From: Priya Date: Mon, 26 Aug 2013 14:40:51 +0530 Subject: [PATCH 08/50] [docs] --- docs/docs.user.accounts.payments.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/docs.user.accounts.payments.md b/docs/docs.user.accounts.payments.md index 4bb064ca6a..d64d94707b 100644 --- a/docs/docs.user.accounts.payments.md +++ b/docs/docs.user.accounts.payments.md @@ -7,7 +7,7 @@ Payments made against Sales Invoices or Purchase Invoices can be made by clickin 1. Update the “Bank Account” (you can also set the default account in the Company master). 1. Update posting date. -1. Enter the check number, check date. +1. Enter the cheque number, cheque date. 1. Save and Submit. Payments can also be made independent of invoices by creating a new Journal Voucher and selecting the type of payment. @@ -32,7 +32,7 @@ For payments to Suppliers, --- -### Reconciling Cheque (Check) Payments +### Reconciling Cheque Payments If you are receiving payments or making payments via cheques, the bank statements will not accurately match the dates of your entry, this is because the bank usually takes time to “clear” these payments. Also you may have mailed a cheque to your Supplier and it may be a few days before it is received and deposited by the Supplier. In ERPNext you can synchronize your bank statements and your Journal Vouchers using the “Bank Reconciliation” tool. @@ -42,13 +42,13 @@ To use this, go to: Select your “Bank” Account and enter the dates of your statement. Here you will get all the “Bank Voucher” type entries. In each of the entry on the right most column, update the “Clearance Date” and click on “Update”. -This way you will be able to sync your bank statements and entries in the system. +By doing this you will be able to sync your bank statements and entries into the system. --- ## Managing Outstanding Payments -In most cases, apart from retail sales, billing and payment are separate activities. There are several combinations in which these payments are done. These cases apply to both sales and purchases. +In most cases, apart from retail sales, billing and payments are separate activities. There are several combinations in which these payments are done. These cases apply to both sales and purchases. - They can be upfront (100% in advance). - Post shipment. Either on delivery or within a few days of delivery. @@ -62,7 +62,7 @@ The total outstanding amount against an invoice is the sum of all the accounting ### Matching Payments to Invoices  -In complex scenarios, especially in the capital goods industry, sometimes there is no direct link between payments and invoices. You send invoices to your Customers and your Customer send you block payments or payments based on some schedule that is not linked to your invoices. +In complex scenarios, especially in the capital goods industry, sometimes there is no direct link between payments and invoices. You send invoices to your Customers and your Customer sends you block payments or payments based on some schedule that is not linked to your invoices. In such cases, you can use the Payment to Invoice Matching Tool. From 25407785c4e2301b8724e6451498c9d219277307 Mon Sep 17 00:00:00 2001 From: Priya Date: Mon, 26 Aug 2013 14:59:24 +0530 Subject: [PATCH 09/50] [docs] --- docs/docs.user.accounts.closing.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs.user.accounts.closing.md b/docs/docs.user.accounts.closing.md index 2c40bfa5db..a825918120 100644 --- a/docs/docs.user.accounts.closing.md +++ b/docs/docs.user.accounts.closing.md @@ -12,7 +12,7 @@ At the end of every year (or quarter or maybe even monthly) after you complete y etc. and book your Profit or Loss. -By doing this, your Income and Expense Accounts become zero and you start a new Fiscal Year (or period) with a balanced Balance Sheet and fresh Profit and Loss. +By doing this, your Income and Expense Accounts become zero .You start a new Fiscal Year (or period) with a balanced Balance Sheet and fresh Profit and Loss account. In ERPNext after making all the special entries via Journal Voucher, you can make all your Income and Expense accounts to zero via: From 6a8778f1965d8b54834e7d698e729b63ce0229d3 Mon Sep 17 00:00:00 2001 From: Priya Date: Mon, 26 Aug 2013 15:31:30 +0530 Subject: [PATCH 10/50] [docs] --- docs/docs.user.accounts.reports.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs.user.accounts.reports.md b/docs/docs.user.accounts.reports.md index 84356f65c5..9d4ec1b7bc 100644 --- a/docs/docs.user.accounts.reports.md +++ b/docs/docs.user.accounts.reports.md @@ -28,4 +28,4 @@ You can also get your payables and receivables from direct reports on Sales Invo ### Sales and Purchase Register -This is useful for making your tax statements invoice and Item wise. In this report, each tax Account is transposed in columns and for each Invoice and invoice Item, you will get the amount of individual tax that has been paid based on the Taxes and Charges table. +In this report, each tax Account is transposed in columns.For each Invoice and invoice Item, you will get the amount of individual tax that has been paid, based on the Taxes and Charges table. From 6ea078aded110b5f47aa31875d7ab328ab8819ff Mon Sep 17 00:00:00 2001 From: Priya Date: Tue, 27 Aug 2013 10:27:52 +0530 Subject: [PATCH 11/50] [docs] --- docs/docs.user.hr.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/docs/docs.user.hr.md b/docs/docs.user.hr.md index e6f88b7819..86574544f2 100644 --- a/docs/docs.user.hr.md +++ b/docs/docs.user.hr.md @@ -3,10 +3,6 @@ "_label": "Human Resource Management" } --- -The Human Resources (HR) Module covers the processes linked to administering a team of co-workers. Most common among this is processing payroll by using the Salary Manager to generate Salary Slips. Most countries have complex tax rules stating what expenses can the company make on behalf of Employees and also expect the company to deduct taxes and social security from their payroll. +The Human Resources (HR) Module covers the processes linked to managing a team of co-workers. Most important feature here is processing the payroll by using the Salary Manager to generate Salary Slips. Most countries have complex tax rules stating which expenses the company can make on behalf of the Employees. There are a set of rules for the company to deduct taxes and social security from employee payroll. ERPNext allows to accomodate all types of taxes and their calculation. -Apart from that you can also track Leave Applications and balances, Expense Claims and upload Attendance data (even though the world has moved to a result-oriented culture, some countries still mandate companies to maintain an attendance register to ensure you are not over-working your team). - -You can also create a template for Appraisals and also record the performance using the Appraisal record. - -> Confession: No, we don’t like the terms human “resources” and “employees” either, but since this terms are widely used and accepted for administrative procedures, we will use them here. \ No newline at end of file +It also maintains a complete employee database including contact information, salary details, attendance, performance evaluation, and appraisal records. \ No newline at end of file From 1b6621d44edc047249d7ffc57145f2e3135d5f35 Mon Sep 17 00:00:00 2001 From: Priya Date: Tue, 27 Aug 2013 10:50:19 +0530 Subject: [PATCH 12/50] [docs] --- docs/docs.user.hr.employee.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs.user.hr.employee.md b/docs/docs.user.hr.employee.md index a3f065dfdd..f63b9ac35a 100644 --- a/docs/docs.user.hr.employee.md +++ b/docs/docs.user.hr.employee.md @@ -3,7 +3,7 @@ "_label": "Employee Master" } --- -There are many fields you can add in your Employee records and the more information you update it will be useful as your organization keeps growing and more and more people come and go. +There are many fields you can add in your Employee records. As the organisation grows, it becomes difficult to manage more records. It is advisable to keep updating and entering records to facilitate data management of employees. Employee records also help in keeping a list of your team’s skills, previous employment history and also emergency information. From e3f5031828a398fd9bb82ba5d30a5c68a097dcda Mon Sep 17 00:00:00 2001 From: Priya Date: Tue, 27 Aug 2013 10:53:23 +0530 Subject: [PATCH 13/50] [docs] --- docs/docs.user.hr.expense_claim.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs.user.hr.expense_claim.md b/docs/docs.user.hr.expense_claim.md index 37c63cc22b..53218b2be6 100644 --- a/docs/docs.user.hr.expense_claim.md +++ b/docs/docs.user.hr.expense_claim.md @@ -3,7 +3,7 @@ "_label": "Expense Claim" } --- -When Employee’s make expenses out of their pocket on behalf of the company, for example, if they take a customer out for lunch, they can make a request for reimbursement via the Expense Claim form. +Expense Claim is made when Employee’s make expenses out of their pocket on behalf of the company. For example, if they take a customer out for lunch, they can make a request for reimbursement via the Expense Claim form. To make a new Expense Claim, go to: From 535255da3174448d53c2b656dc470c509b9a39c4 Mon Sep 17 00:00:00 2001 From: Priya Date: Thu, 29 Aug 2013 17:09:54 +0530 Subject: [PATCH 14/50] [docs] --- docs/docs.user.buying.material_request.md | 34 +++++++++++++++++---- docs/docs.user.buying.md | 22 +++++++++++-- docs/docs.user.buying.purchase_order.md | 6 ++++ docs/docs.user.buying.supplier.md | 24 ++++++++++++--- docs/docs.user.buying.supplier_quotation.md | 20 +++++++++--- docs/docs.user.setup.price_list.md | 5 --- docs/docs.user.stock.sub_contracting.md | 10 ++++++ 7 files changed, 98 insertions(+), 23 deletions(-) delete mode 100644 docs/docs.user.setup.price_list.md diff --git a/docs/docs.user.buying.material_request.md b/docs/docs.user.buying.material_request.md index 2ccb3996a3..19d558b602 100644 --- a/docs/docs.user.buying.material_request.md +++ b/docs/docs.user.buying.material_request.md @@ -5,6 +5,23 @@ --- A Material Request is a simple document identifying a requirement of a set of Items (products or services) for a particular reason. + +![Workflow](img/material-request-workflow.jpg) + + + + +To generate a Material Request manually go to: + +> Buying > Material Request > New Material Request + +**Step 1** + +![Material Request](img/material-request-1.png) + + + + A Material Request can be generated: - By a User. @@ -12,20 +29,25 @@ A Material Request can be generated: - Automatically when the Projected Quantity of an Item in stores reaches a particular level. - Automatically from your Bill of Materials if you use Production Plan to plan your manufacturing activities. -To generate a Material Request manually go to: +**Step 2** + +![Material Request 2](img/material-request-2.png) + + -> Buying > Material Request > New Material Request In the Material Request form, - Fill in the Items you want and their quantities. -- If your Items are inventory items, you must also mention the Warehouse where you expect these Items to be delivered. This helps to keep track of the Projected Quantity for this Item. -- You can also automatically get the Items from a Sales Order. + +- If your Items are inventory items, you must also mention the Warehouse where you expect these Items to be delivered. This helps to keep track of the Projected Quantity for this Item. Projected Quantity is the level of stock that is predicted for a particular Item, based on the current stock levels and other requirements.It is the quantity of gross inventory, including supply and demand in the past that is done as part of the planning process. The projected inventory is used by the planning system to monitor the reorder point and to determine the reorder quantity. The projected Quantity is used by the planning engine to monitor the safety stock levels. These levels are maintained to serve unexpected demands. Having a tight control of the projected inventory is crucial to detect when the reorder point is being crossed and to calculate the right order quantity. + + - You can optionally add the Terms, using the Terms and Conditions master and also the reason. + > Info: Material Request is not mandatory. It is ideal if you have centralized buying so that you can collect this information from various departments. #### Authorization -If you want your Material Request to be authorized by a senior person like a Purchase Manager then you can give “Submit” rights only to that person. Everyone can create requests, but only the authorized person can “Submit”. - +If you want your Material Request to be authorized by a senior person like a Purchase Manager then you can give “Submit” rights only to that person. Everyone can create requests, but only the authorized person can “Submit”. \ No newline at end of file diff --git a/docs/docs.user.buying.md b/docs/docs.user.buying.md index 55e8437550..8247475868 100644 --- a/docs/docs.user.buying.md +++ b/docs/docs.user.buying.md @@ -1,10 +1,28 @@ --- { - "_label": "Buying" + "_label": "Buying", + "_toc": [ + "docs.user.buying.supplier_type", + "docs.user.buying.supplier", + "docs.user.buying.material_request", + "docs.user.buying.supplier_quotation", + "docs.user.buying.purchase_order", + "docs.user.buying.purchase_taxes", + "docs.user.buying.price_lists", + "docs.user.buying.sub_contracting" + ] } --- + + + +![Buying](img/buying-home.png) + + + + If your business involves physical goods, buying is one of your core business activity. Your suppliers are as important as your customers and they must be provided with as much accurate information as possible. Buying in right amounts, in right quantities, can affect your cash flow and profitability. -ERPNext contains a set of transactions that will make your buying process as efficient and seamless as possible. +ERPNext contains a set of transactions that will make your buying process as efficient and seamless as possible. \ No newline at end of file diff --git a/docs/docs.user.buying.purchase_order.md b/docs/docs.user.buying.purchase_order.md index 90db2bda82..d78b2b559f 100644 --- a/docs/docs.user.buying.purchase_order.md +++ b/docs/docs.user.buying.purchase_order.md @@ -11,6 +11,12 @@ In ERPNext, you can make a Purchase Order by going to:  A Purchase Order can also be automatically created from a Purchase Request or Supplier Quotation. + +![Purchase Order](img/purchase-order.png) + + + + Entering a Purchase Order is very similar to a Purchase Request, additionally you will have to set: - Supplier.
 diff --git a/docs/docs.user.buying.supplier.md b/docs/docs.user.buying.supplier.md index aa53a784f0..f9d0803db6 100644 --- a/docs/docs.user.buying.supplier.md +++ b/docs/docs.user.buying.supplier.md @@ -5,13 +5,27 @@ --- Suppliers are companies or individuals who provide you with products or services. They are treated in exactly the same manner as Customers in ERPNext. -1. Separate Account Ledgers are created for the Supplier in the Company under “Accounts Payable”. -1. You can have multiple Addresses and Contacts for Suppliers. -1. Suppliers are categorized as Supplier Type. -1. If you set “Credit Days”, ERPNext will automatically set the due date in Purchase Invoices. You can create a new Supplier via: > Buying > Supplier > New Supplier -or import from the Data Import Tool +![Supplier](img/supplier.png) + + +Contacts and Addresses in ERPNext are stored separately so that you can attach multiple Contacts or Addresses to Customers and Suppliers. To add a Contact or Address go to Buying and click on “New Contact” or “New Address”. + + +> Tip: When you select a Supplier in any transaction, one Contact and Address gets pre-selected. This is the “Default Contact or Address”. So make sure you set your defaults correctly! + + + + +> Buying > Contact > New Contact + +![Contact](img/contact.png) + + + + +You can also import from the Data Import Tool \ No newline at end of file diff --git a/docs/docs.user.buying.supplier_quotation.md b/docs/docs.user.buying.supplier_quotation.md index 37431f3353..13081825fc 100644 --- a/docs/docs.user.buying.supplier_quotation.md +++ b/docs/docs.user.buying.supplier_quotation.md @@ -3,6 +3,21 @@ "_label": "Supplier Quotation" } --- +A Supplier Quotation is a formal statement of promise by potential supplier to supply the goods or services required by a buyer, at specified prices, and within a specified period. A quotation may also contain terms of sale and payment, and warranties. Acceptance of quotation by the buyer constitutes an agreement binding on both parties. + + +You can make a Supplier Quotation directly from: + +> Buying > Supplier Quotation > New Supplier Quotation + +or directly from the Purchase Request. + + + +![Supplier Quotation](img/supplier-quotation.png) + + + If you have multiple **Suppliers** who supply you with the same **Item**, you usually send out a message (Request for Quote) to various **Suppliers**. In many cases, especially if you have centralized buying, you may want to record all the quotes so that - You can easily compare prices in the future @@ -10,8 +25,3 @@ If you have multiple **Suppliers** who supply you with the same **Item**, you us Supplier Quotations are not necessary for most small businesses. Always evaluate the cost of collecting information to the value it really provides! You could only do this for high value items. -You can make a Supplier Quotation directly from: - -> Buying > Supplier Quotation > New Supplier Quotation - -or directly from the Purchase Request. diff --git a/docs/docs.user.setup.price_list.md b/docs/docs.user.setup.price_list.md deleted file mode 100644 index c746ee7ccf..0000000000 --- a/docs/docs.user.setup.price_list.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -{ - "_label": "Price Lists" -} ---- \ No newline at end of file diff --git a/docs/docs.user.stock.sub_contracting.md b/docs/docs.user.stock.sub_contracting.md index 43d1784b95..23a102cfd0 100644 --- a/docs/docs.user.stock.sub_contracting.md +++ b/docs/docs.user.stock.sub_contracting.md @@ -10,6 +10,16 @@ To setup sub-contracting: 1. Create separate Items for the unprocessed and the processed product. For example if you supply unpainted X to your Supplier and the Supplier returns you X, you can create two Items: “X-unpainted” and “X”. 1. Create a Warehouse for your Supplier so that you can keep track of Items supplied. (you may supply a months worth of Items in one go). 1. For the processed Item, in the Item master, set “Is Sub Contracted Item” to “Yes”. + + + +![Subcontract](img/subcontract.png) + + + + + + 1. Make a Bill of Materials for the processed Item, with the unprocessed Items as sub-items.For example, If you are manufacturing a pen, the processed pen will be named under Bill of Materials(BOM), whereas, the refill, knob, and other items which go into the making of pen, will be categorised as sub-items. 1. Make a Purchase Order for the processed Item. When you “Save”, in the “Raw Materials Detail”, all your un-processed Items will be updated based on your Bill of Materials. 1. Make sure that the “Rate” of this Item is the processing rate (excluding the raw material rate). From f7e5648365c6f5c2fee902100b45953ce0fc1fd3 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Thu, 29 Aug 2013 17:46:40 +0530 Subject: [PATCH 15/50] [minor] customer login start --- config.json | 9 ++- public/build.json | 3 +- selling/doctype/sales_order/sales_order.py | 36 +--------- website/helpers/transaction.py | 63 +++++++++++++++++ website/templates/html/outer.html | 3 +- website/templates/pages/account.html | 23 ++++-- website/templates/pages/address.html | 4 +- website/templates/pages/addresses.html | 4 +- website/templates/pages/order.html | 4 +- website/templates/pages/orders.html | 70 ------------------- website/templates/pages/profile.html | 8 +-- website/templates/pages/ticket.html | 10 +-- website/templates/pages/tickets.html | 4 +- website/templates/pages/transaction_list.html | 69 ++++++++++++++++++ 14 files changed, 173 insertions(+), 137 deletions(-) create mode 100644 website/helpers/transaction.py delete mode 100644 website/templates/pages/orders.html create mode 100644 website/templates/pages/transaction_list.html diff --git a/config.json b/config.json index 5412b017b2..f9c71b4b19 100644 --- a/config.json +++ b/config.json @@ -106,8 +106,13 @@ }, "orders": { "no_cache": true, - "template": "app/website/templates/pages/orders", - "args_method": "selling.doctype.sales_order.sales_order.get_currency_and_number_format" + "template": "app/website/templates/pages/transaction_list", + "args_method": "website.helpers.transaction.order_list_args" + }, + "invoices": { + "no_cache": true, + "template": "app/website/templates/pages/transaction_list", + "args_method": "website.helpers.transaction.invoice_list_args" }, "product_search": { "template": "app/website/templates/pages/product_search" diff --git a/public/build.json b/public/build.json index 24abde20b2..b8d7dd4452 100644 --- a/public/build.json +++ b/public/build.json @@ -7,8 +7,7 @@ "app/public/js/startup.css" ], "public/js/all-web.min.js": [ - "app/public/js/website_utils.js", - "lib/public/js/wn/misc/number_format.js" + "app/public/js/website_utils.js" ], "public/js/all-app.min.js": [ "app/public/js/startup.js", diff --git a/selling/doctype/sales_order/sales_order.py b/selling/doctype/sales_order/sales_order.py index 8e3ed701ff..604c5eb7c9 100644 --- a/selling/doctype/sales_order/sales_order.py +++ b/selling/doctype/sales_order/sales_order.py @@ -4,7 +4,6 @@ from __future__ import unicode_literals import webnotes import webnotes.utils -import json from webnotes.utils import cstr, flt, getdate from webnotes.model.bean import getlist @@ -287,31 +286,6 @@ class DocType(SellingController): def on_update(self): pass -@webnotes.whitelist() -def get_orders(): - # find customer id - customer = webnotes.conn.get_value("Contact", {"email_id": webnotes.session.user}, - "customer") - - if customer: - orders = webnotes.conn.sql("""select - name, creation, currency from `tabSales Order` - where customer=%s - and docstatus=1 - order by creation desc - limit 20 - """, customer, as_dict=1) - for order in orders: - order.items = webnotes.conn.sql("""select - item_name, qty, export_rate, export_amount, delivered_qty, stock_uom - from `tabSales Order Item` - where parent=%s - order by idx""", order.name, as_dict=1) - - return orders - else: - return [] - def get_website_args(): customer = webnotes.conn.get_value("Contact", {"email_id": webnotes.session.user}, "customer") @@ -325,17 +299,9 @@ def get_website_args(): "doc": bean.doc, "doclist": bean.doclist, "webnotes": webnotes, - "utils": webnotes.utils + "utils": webnotes.utils, } -def get_currency_and_number_format(): - return { - "global_number_format": webnotes.conn.get_default("number_format") or "#,###.##", - "currency": webnotes.conn.get_default("currency"), - "currency_symbols": json.dumps(dict(webnotes.conn.sql("""select name, symbol - from tabCurrency where ifnull(enabled,0)=1"""))) - } - def set_missing_values(source, target): bean = webnotes.bean(target) bean.run_method("onload_post_render") diff --git a/website/helpers/transaction.py b/website/helpers/transaction.py new file mode 100644 index 0000000000..336be2a1e2 --- /dev/null +++ b/website/helpers/transaction.py @@ -0,0 +1,63 @@ +# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. +# License: GNU General Public License v3. See license.txt + +from __future__ import unicode_literals +import webnotes +from webnotes.utils import cint, formatdate +import json + +def get_transaction_list(doctype, start): + # find customer id + customer = webnotes.conn.get_value("Contact", {"email_id": webnotes.session.user}, + "customer") + + if customer: + transactions = webnotes.conn.sql("""select name, creation, currency, grand_total_export + from `tab%s` where customer=%s and docstatus=1 + order by creation desc + limit %s, 20""" % (doctype, "%s", "%s"), (customer, cint(start)), as_dict=1) + for doc in transactions: + doc.items = ", ".join(webnotes.conn.sql_list("""select item_name + from `tab%s Item` where parent=%s limit 5""" % (doctype, "%s"), doc.name)) + doc.creation = formatdate(doc.creation) + return transactions + else: + return [] + +def get_common_args(): + return { + "global_number_format": webnotes.conn.get_default("number_format") or "#,###.##", + "currency": webnotes.conn.get_default("currency"), + "currency_symbols": json.dumps(dict(webnotes.conn.sql("""select name, symbol + from tabCurrency where ifnull(enabled,0)=1"""))) + } + +@webnotes.whitelist() +def get_orders(start=0): + return get_transaction_list("Sales Order", start) + +def order_list_args(): + args = get_common_args() + args.update({ + "title": "My Orders", + "method": "website.helpers.transaction.get_orders", + "icon": "icon-list", + "empty_list_message": "No Orders Yet", + "page": "order", + }) + return args + +@webnotes.whitelist() +def get_invoices(start=0): + return get_transaction_list("Sales Invoice", start) + +def invoice_list_args(): + args = get_common_args() + args.update({ + "title": "Invoices", + "method": "website.helpers.transaction.get_invoices", + "icon": "icon-file-text", + "empty_list_message": "No Invoices Found", + "page": "invoice" + }) + return args \ No newline at end of file diff --git a/website/templates/html/outer.html b/website/templates/html/outer.html index 0f0f4002ea..8e26f0962f 100644 --- a/website/templates/html/outer.html +++ b/website/templates/html/outer.html @@ -10,8 +10,7 @@ Login
- | - My Account | + | {% if shopping_cart_enabled -%} | diff --git a/website/templates/pages/account.html b/website/templates/pages/account.html index 539e014ae2..6dcc497a56 100644 --- a/website/templates/pages/account.html +++ b/website/templates/pages/account.html @@ -8,12 +8,23 @@
  • Home
  • My Account
  • -

    My Account

    -

    Change my name, password

    -

    My Addresses

    -

    My Orders

    -

    My Tickets

    -

    Logout

    + +
    {% endblock %} \ No newline at end of file diff --git a/website/templates/pages/address.html b/website/templates/pages/address.html index faf7bb04ec..6544b1225d 100644 --- a/website/templates/pages/address.html +++ b/website/templates/pages/address.html @@ -42,9 +42,9 @@
  • Home
  • My Account
  • My Addresses
  • -
  • {{ title }}
  • +
  • {{ title }}
  • -

    {{ title }}

    +

    {{ title }}

    diff --git a/website/templates/pages/addresses.html b/website/templates/pages/addresses.html index 90d0d13845..04fc47ba73 100644 --- a/website/templates/pages/addresses.html +++ b/website/templates/pages/addresses.html @@ -7,10 +7,8 @@ -

    My Addresses

    -

    New Address


    diff --git a/website/templates/pages/order.html b/website/templates/pages/order.html index 1893575358..c70dcb1124 100644 --- a/website/templates/pages/order.html +++ b/website/templates/pages/order.html @@ -8,9 +8,9 @@
  • Home
  • My Account
  • My Orders
  • -
  • {{ doc.name }}
  • +
  • {{ doc.name }}
  • -

    {{ doc.name }}

    +

    {{ doc.name }}


    {%- if doc.status -%}
    diff --git a/website/templates/pages/orders.html b/website/templates/pages/orders.html deleted file mode 100644 index e0bf4d7ad8..0000000000 --- a/website/templates/pages/orders.html +++ /dev/null @@ -1,70 +0,0 @@ -{% extends "app/website/templates/html/page.html" %} - -{% set title="My Orders" %} - -{% block content %} - -
    - -

    My Orders

    -
    -
    -
    -
    -
    -
    -
    - -{% endblock %} \ No newline at end of file diff --git a/website/templates/pages/profile.html b/website/templates/pages/profile.html index ea2433bae5..4c03b400b9 100644 --- a/website/templates/pages/profile.html +++ b/website/templates/pages/profile.html @@ -5,12 +5,10 @@ {% block content %}
    -

    My Profile

    -
    diff --git a/website/templates/pages/ticket.html b/website/templates/pages/ticket.html index 1ae2e88dbb..2f85ac0bbc 100644 --- a/website/templates/pages/ticket.html +++ b/website/templates/pages/ticket.html @@ -5,12 +5,12 @@ {% block content %}
    -

    {{ doc.name }}

    +

    {{ doc.name }}


    {%- if doc.status -%}
    diff --git a/website/templates/pages/tickets.html b/website/templates/pages/tickets.html index 3d5cf21d5d..9c476ffa00 100644 --- a/website/templates/pages/tickets.html +++ b/website/templates/pages/tickets.html @@ -7,10 +7,8 @@ -

    My Tickets

    -
    diff --git a/website/templates/pages/transaction_list.html b/website/templates/pages/transaction_list.html new file mode 100644 index 0000000000..e92764a5ff --- /dev/null +++ b/website/templates/pages/transaction_list.html @@ -0,0 +1,69 @@ +{% extends "app/website/templates/html/page.html" %} + +{% block content %} +
    + +
    +
    +
    +
    +
    +
    + + +{% endblock %} \ No newline at end of file From 2997ba098f39a7f82c0ba6812b8d97b1ab6c7660 Mon Sep 17 00:00:00 2001 From: Priya Date: Fri, 30 Aug 2013 16:35:31 +0530 Subject: [PATCH 16/50] [docs] stock and buying documentation completed --- docs/docs.user.buying.material_request.md | 2 +- docs/docs.user.buying.supplier.md | 4 +- docs/docs.user.md | 6 +- docs/docs.user.stock.delivery_note.md | 10 +++ docs/docs.user.stock.item.md | 83 +++++++++++------------ docs/docs.user.stock.purchase_receipt.md | 8 +++ docs/docs.user.stock.serialized.md | 34 +++++++++- docs/docs.user.stock.stock_entry.md | 20 ++++-- 8 files changed, 111 insertions(+), 56 deletions(-) diff --git a/docs/docs.user.buying.material_request.md b/docs/docs.user.buying.material_request.md index 19d558b602..c6a77854c9 100644 --- a/docs/docs.user.buying.material_request.md +++ b/docs/docs.user.buying.material_request.md @@ -40,7 +40,7 @@ In the Material Request form, - Fill in the Items you want and their quantities. -- If your Items are inventory items, you must also mention the Warehouse where you expect these Items to be delivered. This helps to keep track of the Projected Quantity for this Item. Projected Quantity is the level of stock that is predicted for a particular Item, based on the current stock levels and other requirements.It is the quantity of gross inventory, including supply and demand in the past that is done as part of the planning process. The projected inventory is used by the planning system to monitor the reorder point and to determine the reorder quantity. The projected Quantity is used by the planning engine to monitor the safety stock levels. These levels are maintained to serve unexpected demands. Having a tight control of the projected inventory is crucial to detect when the reorder point is being crossed and to calculate the right order quantity. +- If your Items are inventory items, you must also mention the Warehouse where you expect these Items to be delivered. This helps to keep track of the [Projected Quantity](docs.user.stock.projected_quantity.html)for this Item. - You can optionally add the Terms, using the Terms and Conditions master and also the reason. diff --git a/docs/docs.user.buying.supplier.md b/docs/docs.user.buying.supplier.md index f9d0803db6..e477fa2bed 100644 --- a/docs/docs.user.buying.supplier.md +++ b/docs/docs.user.buying.supplier.md @@ -13,7 +13,9 @@ You can create a new Supplier via: ![Supplier](img/supplier.png) -Contacts and Addresses in ERPNext are stored separately so that you can attach multiple Contacts or Addresses to Customers and Suppliers. To add a Contact or Address go to Buying and click on “New Contact” or “New Address”. +### Contacts and Addresses + + Contacts and Addresses in ERPNext are stored separately so that you can attach multiple Contacts or Addresses to Customers and Suppliers. To add a Contact or Address go to Buying and click on “New Contact” or “New Address”. > Tip: When you select a Supplier in any transaction, one Contact and Address gets pre-selected. This is the “Default Contact or Address”. So make sure you set your defaults correctly! diff --git a/docs/docs.user.md b/docs/docs.user.md index 00128f08f1..1d22e8c13f 100644 --- a/docs/docs.user.md +++ b/docs/docs.user.md @@ -74,7 +74,7 @@ Contents 1. [Price Lists](docs.user.setup.price_lists.html) 1. [Sub Contracting](docs.user.stock.sub_contracting.html) 1. [Stock (Inventory)](docs.user.stock.html) - 1. [Warehouse](docs.user.stock.item.html) + 1. [Warehouse](docs.user.stock.warehouse.html) 1. [Item Group](docs.user.stock.item_group.html) 1. [Item](docs.user.stock.item.html) 1. [Serialized Inventory](docs.user.stock.serialized.html) @@ -82,9 +82,9 @@ Contents 1. [Delivery Note](docs.user.stock.delivery_note.html) 1. [Stock Entry / Material Transfer](docs.user.stock.stock_entry.html) 1. [Material Issue](docs.user.stock.material_issue.html) - 1. [Material Issue](docs.user.stock.material_issue.html) 1. [Sales Return](docs.user.stock.sales_return.html) - 1. [Purchase Return](docs.user.stock.sales_return.html) + 1. [Purchase Return](docs.user.stock.purchase_return.html) + 1. [Projected Quantity](docs.user.stock.projected_quantity.html) 1. [Accounting](docs.user.accounting.html) 1. [Chart of Accounts](docs.user.setup.accounting.html) 1. [Chart of Cost Centers](docs.user.setup.cost_centers.html) diff --git a/docs/docs.user.stock.delivery_note.md b/docs/docs.user.stock.delivery_note.md index b1d1736d6c..3017a1bd0e 100644 --- a/docs/docs.user.stock.delivery_note.md +++ b/docs/docs.user.stock.delivery_note.md @@ -13,6 +13,16 @@ The entry of the Delivery Note is very similar to a Purchase Receipt. You can cr or from a “Submitted” Sales Order (that is not already shipped) by clicking on “Make Delivery Note”. + + + +![Delivery Note](img/delivery-note.png) + + + + + + You can also “fetch” the details from an unshipped Sales Order. You will notice that all the information about unshipped Items and other details are carried over from your Sales Order. diff --git a/docs/docs.user.stock.item.md b/docs/docs.user.stock.item.md index 958c45465b..c5c58bd0cf 100644 --- a/docs/docs.user.stock.item.md +++ b/docs/docs.user.stock.item.md @@ -7,64 +7,59 @@ ] } --- -An Item is simply a product or service which you sell or buy from your Customers or Suppliers. ERPNext is optimized for itemized management of your sales and purchase. However, you can skip creating Items. If you are in services, you can create an Item for each services that your offer. +An Item is your company's product or a service.The term Item is applicable to your core products as well as your raw materials. It can be a product or service that you buy/sell from your customers/ suppliers. ERPNext allows you to manage all sorts of items like raw-materials, sub-assemblies, finished goods, item variants and service items. -There are two main categories of Items in ERPNext +ERPNext is optimized for itemized management of your sales and purchase. If you are in services, you can create an Item for each services that your offer. Completing the Item Master is very essential for successful implementation of ERPNext. -- Stock Items -- Non Stock Items +## Item Properties -As you may have guessed, inventory balances are tracked for stock items and not for -non-stock items. Non-stock items could be services or consumables that are not tracked. +- **Item Name:** Item name is the actual name of your product or service. +- **Item Code:** Item Code is a short-form to denote your Item. If you have very few Items, it is advisable to keep the Item Name and the Item Code same. This helps new users to recognise and update Item details in all transactions. In case you have lot of Items with long names and the list runs in hundreds, it is advisable to code. To understand naming Item codes see [Item Codification](docs.user.setup.codification.html) +- **Item Group:** Item Group is used to categorize an Item under various criterias like products, raw materials, services, sub-assemblies, consumables or all Item groups. Create your default Item Group list under Setup> Item Group and pre-select the option while filling your New Item details under Item Group. +- **Default Unit of Measure:** This is the default measuring unit that you will use for your product. It could be in nos, kgs, meters, etc. You can store all the UOM’s that your product will require under Set Up> Master Data > UOM. These can be preselected while filling New Item by using % sign to get a pop up of the UOM list. +- **Brand:** If you have more than one brand save them under Set Up> Master Data> Brand and pre-select them while filling a New Item. -### Item Groups +![Item Properties](img/item-properties.png) -ERPNext allows you to classify items into groups. This will help you in getting reports about various classes of items and also help in cataloging your items for the website. +### Upload an Image -### Warehouses +To upload an image for your icon that will appear in all transactions, save the partially filled form. Only after your file is saved a “+” button will appear besides the Image icon. Click on this sign and upload the image. -In ERPNext you can create Warehouses to identify where your Items reside. +![Item Properties](img/item-add-image.png) -There are two main Warehouse Types that are significant in ERPNext. +### Item Pricing -Stores: These are where your incoming Items are kept before they are consumed or sold. You can have as many “Stores” type Warehouses as you wish. Stores type warehouses are significant because if you set an Item for automatic re-order, ERPNext will check its quantities in all “Stores” type Warehouses when deciding whether to re-order or not. +Item Price and Price Lists: ERPNext lets you maintain multiple selling prices for an Item using Price Lists. A Price List is a place where different rate plans can be stored. It’s a name you can give to a set of Item prices. In case you have different zones (based on the shipping costs), for different currencies etc, you can maintain different Price Lists. A Price List is formed when you create different Item Prices. To import Item Price visit “Import Item Price”. -Asset: Items marked as type “Fixed Asset” are maintained in Asset Type Warehouses. This helps you to separate them for the Items that are consumed as a part of your regular operations or “Cost of Goods Sold”. +## Inventory : Warehouse and Stock Setting -### Item Taxes +In ERPNext, you can select different type of Warehouses to stock your different Items. This can be selected based on Item types. It could be Fixed Asset Item, Stock Item or even Manufacturing Item. -These settings are only required if this particular Item has a different tax rate than what is the rate defined in the standard tax Account. +- **Stock Item:** If you are maintaining stock of this Item in your Inventory, ERPNext will make a stock ledger entry for each transaction of this item. +- **Default Warehouse:** This is the Warehouse that is automatically selected in your transactions. +- **Allowance Percentage:** This is the percent by which you will be allowed to over-bill or over-deliver this Item. If not set, it will select from the Global Defaults. +- **Valuation Method:** There are two options to maintain valuation of stock. FIFO (first in - first out) and Moving Average. To understand this topic in detail please visit “ Item Valuation, FIFO and Moving Average”. -For example, you have a tax Account, “VAT 10%” and this particular item is exempted from this tax, then you select “VAT 10%” in the first column, and set “0” as the tax rate in the second column. +### Serialized and Batched Inventory + +These numbers help to track individual units or batches of Items which you sell. It also tracks warranty and returns. In case any individual Item is recalled by the supplier the number system helps to track individual Item. The numbering system also manages expiry dates. Please note that if you sell your items in thousands, and if the items are very small like pens or erasers, you need not serialize them. In ERPNext, you will have to mention the serial number in some accounting entries. To create serial numbers you will have to manually create all the numbers in your entries. If your product is not a big consumer durable Item, if it has no warranty and has no chances of being recalled, avoid giving serial numbers. + +> Important: Once you mark an item as serialized or batched or neither, you cannot change it after you have made any stock entry. + +- [Disucssion on Serialized Inventory](docs.user.stock.serialized.html) + +### Re Ordering + +- **Re-order level** suggests the amount of stock balance in the Warehouse. +- **Re-order Qty** suggests the amount of stock to be ordered to maintain minimum stock levels. +- **Minimum Order Qty** is the minimum quantity for which a Material Request / Purchase Order must be made. + +### Item Tax + +These settings are required only if a particular Item has a different tax rate than the rate defined in the standard tax Account. For example, If you have a tax Account, “VAT 10%” and this particular Item is exempted from tax, then you select “VAT 10%” in the first column, and set “0” as the tax rate in the second column. ### Inspection -Inspection Required: If an incoming inspection (at the time of delivery from the Supplier) is mandatory for this Item, mention “Inspection Required” as “Yes”. The system will ensure that a Quality Inspection will be prepared and approved before a Purchase Receipt is submitted. +Inspection Required: If an incoming inspection (at the time of delivery from the Supplier) is mandatory for this Item, mention “Inspection Required” as “Yes”. The system will ensure that a Quality Inspection will be prepared and approved before a Purchase Receipt is submitted. -Inspection Criteria: If a Quality Inspection is prepared for this Item, then this template of criteria will automatically be updated in the Quality Inspection table of the Quality Inspection.

Examples of Criteria are: Weight, Length, Finish etc. - -### Item Pricing and Price Lists - -ERPNext lets you maintain multiple selling prices for an Item using Price Lists. A Price List is a name you can give to a set of Item prices. - -Why would you want Price Lists? You have different prices for different zones (based on the shipping costs), for different currencies, regions etc. - -#### Negative Stock - -FIFO is the more accurate system of the two but has a disadvantage. You cannot have negative stock in FIFO. This means that you cannot make forward transactions that would make your stock negative. Why is this? Because sequences are so important to FIFO, you cannot track the value of the stock if it does not exist! - -In Moving Average, since each item has an “average” value, the value of the negative stock is also based on this “average”. - -### Serial Numbers and Batches - -In scenarios where you may have to track individual units or batches of Items you sell, ERPNext allows you to manage Serial Numbers and Batches. - -Why is this useful? - -- To track warranty and returns. -- To trace individual Items incase they are recalled by the Supplier. -- To manage expiry. - -In ERPNext, Serial Number and Batch are separate entities and all stock transactions for Items that serialized or batches must be tagged with either the Batch or Serial Number. - -> Important: Once you mark an item as serialized or batched or neither, you cannot change it after you have made any stock entry. +Inspection Criteria: If a Quality Inspection is prepared for this Item, then this template of criteria will automatically be updated in the Quality Inspection table of the Quality Inspection. Examples of Criteria are: Weight, Length, Finish etc. diff --git a/docs/docs.user.stock.purchase_receipt.md b/docs/docs.user.stock.purchase_receipt.md index 14b2a2f847..a2e428d8b3 100644 --- a/docs/docs.user.stock.purchase_receipt.md +++ b/docs/docs.user.stock.purchase_receipt.md @@ -13,6 +13,14 @@ You can make a Purchase Receipt directly from: or from a “Submitted” Purchase Order, by clicking on “Make Purchase Receipt”. + + +![Purchase Receipt](img/purchase-receipt.png) + + + + + ### Rejections In the Purchase Receipt, you are required to enter whether all the materials you receive are of accepted quality (in case you check). If you have any rejections, update the “Rejected Quantity” column in the Items table. diff --git a/docs/docs.user.stock.serialized.md b/docs/docs.user.stock.serialized.md index 5a9f32b3bd..8c1253498c 100644 --- a/docs/docs.user.stock.serialized.md +++ b/docs/docs.user.stock.serialized.md @@ -11,10 +11,40 @@ You can also track from which **Supplier** you purchased the **Serial No** and t If your Item is *serialized* you will have to enter the Serial Nos in the related column with each Serial No in a new line. +### Serial Nos and Inventory + +Inventory of an Item can only be affected if the Serial No is transacted via a Stock transaction (Stock Entry, Purchase Receipt, Delivery Note, Sales Invoice). When a new Serial No is created directly, its warehouse cannot be set. + +### Using Serial Nos + +To add a Serial No to a stock transaction, you can set the Serial No in the serial no field: + +![Serial No Entry](img/serial-no-entry.png) + +### Creation + +Serial Nos can automatically be created from a Stock Entry or Purchase Receipt. If you mention Serial No in the Serial Nos column, it will automatically create those serial Nos. + +### Automatic Series + +If in the Item Master, the Serial No Series is mentioned, you can leave the Serial No column blank in a Stock Entry / Purchase Receipt and Serial Nos will automatically be set from that series. + +#### Step 1: Mention the Series in the Item + +![Automatic Series](img/item-serial-no-series.png) + +#### Step 2: Keep Serial No field blank in your entry + +#### Step 3: Save / Submit your transaction (Serial Nos Automatically Updated) + +![Serial No Created Message](img/serial-no-auto-1.png) + +![Serial No Updated in Transaction](img/serial-no-auto-2.png) + + ### Importing and Updating Serial Nos -Serial Nos cannot be imported from Stock Reconciliation. To import Serial Nos, you will have to use the Data Import Tool. When you import the Serial Nos, the stock level of its corresponding Item will be automatically updated. - +Serial Nos cannot be imported from Stock Reconciliation. To import Serial Nos, you will have to use the Data Import Tool. ### Using Serial Numbers for Multiple Purposes diff --git a/docs/docs.user.stock.stock_entry.md b/docs/docs.user.stock.stock_entry.md index 8eda7434d1..0b49585dae 100644 --- a/docs/docs.user.stock.stock_entry.md +++ b/docs/docs.user.stock.stock_entry.md @@ -5,6 +5,20 @@ --- A Stock Entry is a simple document that lets you record Item movement from a Warehouse, to a Warehouse and between Warehouses. +To make a Stock Entry you have to go to: + +> Stock > Stock Entry + + + + + +![Stock Entry](img/stock-entry.png) + + + + + This can also be useful in tracking: - Material Issues from Stores @@ -13,11 +27,7 @@ This can also be useful in tracking: We will look into the special features of the Stock Entry later when we discuss Accounting and Manufacturing processes. -To make a Stock Entry you have to go to: - -> Stock > Stock Entry In the Stock Entry you have to update the Items table with all your transactions. For each row, you must enter a “Source Warehouse” or a “Target Warehouse” or both (if you are recording a movement). -> **Note:** To update Stock from a spreadsheet, see Stock Reconciliation. - +> **Note:** To update Stock from a spreadsheet, see Stock Reconciliation. \ No newline at end of file From 330f0e48ab4cb7686b535b87d8cf4968d2216b30 Mon Sep 17 00:00:00 2001 From: Priya Date: Fri, 30 Aug 2013 17:41:14 +0530 Subject: [PATCH 17/50] [docs] --- docs/docs.user.buying.purchase_taxes.md | 37 ++++++++++++++++++++++ docs/docs.user.buying.supplier_type.md | 19 +++++++++++ docs/docs.user.setup.price_lists.md | 16 ++++++++++ docs/docs.user.stock.item_group.md | 9 ++++++ docs/docs.user.stock.material_issue | 26 +++++++++++++++ docs/docs.user.stock.material_issue.md | 26 +++++++++++++++ docs/docs.user.stock.md | 10 ++++-- docs/docs.user.stock.projected_quantity.md | 27 ++++++++++++++++ docs/docs.user.stock.purchase_receipt | 24 ++++++++++++++ docs/docs.user.stock.purchase_return.md | 23 ++++++++++++++ docs/docs.user.stock.sales_return.md | 21 ++++++++++++ docs/docs.user.stock.warehouse.md | 30 ++++++++++++++++++ 12 files changed, 266 insertions(+), 2 deletions(-) create mode 100644 docs/docs.user.buying.purchase_taxes.md create mode 100644 docs/docs.user.buying.supplier_type.md create mode 100644 docs/docs.user.setup.price_lists.md create mode 100644 docs/docs.user.stock.item_group.md create mode 100644 docs/docs.user.stock.material_issue create mode 100644 docs/docs.user.stock.material_issue.md create mode 100644 docs/docs.user.stock.projected_quantity.md create mode 100644 docs/docs.user.stock.purchase_receipt create mode 100644 docs/docs.user.stock.purchase_return.md create mode 100644 docs/docs.user.stock.sales_return.md create mode 100644 docs/docs.user.stock.warehouse.md diff --git a/docs/docs.user.buying.purchase_taxes.md b/docs/docs.user.buying.purchase_taxes.md new file mode 100644 index 0000000000..31e58bf300 --- /dev/null +++ b/docs/docs.user.buying.purchase_taxes.md @@ -0,0 +1,37 @@ +--- +{ + + "_label": "Purchase Taxes" +} +--- +For Tax Accounts that you want to use in the tax templates, you must mention them as type “Tax” in your Chart of Accounts. + +Similar to your Sales Taxes and Charges Master is the Purchase Taxes and Charges Master. This is the tax template that you can use in your Purchase Orders and Purchase Invoices. + +> Buying > Purchase Taxes and Charges Master > New Purchase Taxes and Charges Master + + +![Purchase-Taxes](img/purchase-taxes.png) + + +
    + + +You can specify if the tax / charge is only for valuation (not a part of total) or only for total (does not add value to the item) or for both. + +If you select a particular tax as your Default tax, the system will apply this tax to all the purchase transactions by default. +Calculation Type: + +This can be on Net Total (that is the sum of basic amount). +On Previous Row Total / Amount (for cumulative taxes or charges). If you select this option, the tax will be applied as a percentage of the previous row (in the tax table) amount or total. +Actual (as mentioned). + +- **Account Head:** The Account ledger under which this tax will be booked. +- **Cost Center:** If the tax / charge is an income (like shipping) or expense it needs to be booked against a Cost Center. +- **Description:** Description of the tax (that will be printed in invoices / quotes). +- **Rate:** Tax rate. +- **Amount:** Tax amount. +- **Total:** Cumulative total to this point. +- **Enter Row:** If based on "Previous Row Total" you can select the row number which will be taken as a base for this calculation (default is the previous row). +- **Consider Tax or Charge for:** In this section you can specify if the tax / charge is only for valuation (not a part of total) or only for total (does not add value to the item) or for both. +- **Add or Deduct:** Whether you want to add or deduct the tax. diff --git a/docs/docs.user.buying.supplier_type.md b/docs/docs.user.buying.supplier_type.md new file mode 100644 index 0000000000..deaf01fcfc --- /dev/null +++ b/docs/docs.user.buying.supplier_type.md @@ -0,0 +1,19 @@ +--- +{ + "_label": "Supplier Type" +} +--- + +Based on what the suppliers supply, they are classified into different categories called Supplier Type. +There can be different types of suppliers. You can create your own category of Supplier Type. + +> Buying > Supplier Type > New Supplier Type + +![Buying](img/supplier-type.png) + +You can classify your suppliers from a range of choice available in ERPNext. Choose from a set of given options like Distributor, Electrical,Hardware, Local, Pharmaceutical, Raw material, Services etc. + +Classifying your supplier into different types facilitates accounting and payments. + + +Type your new supplier category and Save. diff --git a/docs/docs.user.setup.price_lists.md b/docs/docs.user.setup.price_lists.md new file mode 100644 index 0000000000..36f00f4c5c --- /dev/null +++ b/docs/docs.user.setup.price_lists.md @@ -0,0 +1,16 @@ +--- +{ + "_label": "Price Lists" +} +--- + +Price List is a table of sale price for an Item. An Item can have multiple prices based on customer, currency, region, shipping cost etc. + +A Price List is a place where different rate plans can be stored. It’s a name you can give to a set of Item prices. In case you have different zones (based on the shipping costs), for different currencies etc, you can maintain different Price Lists.You can maintain a Price List for your international customers with USD as transacting currency. + + +![Price-List](img/price-lists.png) + + + + A Price List is formed when you create different Item Prices. To import Item Price visit “Import Item Price”. \ No newline at end of file diff --git a/docs/docs.user.stock.item_group.md b/docs/docs.user.stock.item_group.md new file mode 100644 index 0000000000..aca2a7876a --- /dev/null +++ b/docs/docs.user.stock.item_group.md @@ -0,0 +1,9 @@ +--- +{ + "_label": "Item Group" +} +--- + +Item Group is the classification category. Depending on the type of product, you have to categorise it under its respective field. If the product is service oriented, you have to name it under the group head Service. If the product is used as a raw-material, you have to name it under the Raw-material category. In case, your product is used only in trading, you can categorise it under Trading. + +You can also create your own groups . Go to Setup- Master Data- Item Group- Item Group Tree- Add Child. diff --git a/docs/docs.user.stock.material_issue b/docs/docs.user.stock.material_issue new file mode 100644 index 0000000000..e372e7f55e --- /dev/null +++ b/docs/docs.user.stock.material_issue @@ -0,0 +1,26 @@ +--- +{ + "_label": "Material Issue" +} +--- + +A Warehouse stocks materials required for manufacturing or trading. The Material Issue form has to be submitted to order materials out of a Warehouse by any department. + +> Stock > Stock Entry > New Stock Entry + + +Go to Stock Entry. +Click on New Stock Entry +Select the option “Material Issue” under Purpose. +Provide Source Warehouse details. +Provide the BOM Number. +Save + + +![Material Issue](img/material-issue.png) + + + + + +Note: If you have done a stock entry and selected “Material Issue” under Purpose, that particular amount of stock will reflect as negative in stock details. diff --git a/docs/docs.user.stock.material_issue.md b/docs/docs.user.stock.material_issue.md new file mode 100644 index 0000000000..45e3d98acf --- /dev/null +++ b/docs/docs.user.stock.material_issue.md @@ -0,0 +1,26 @@ +--- +{ + "_label": "Material Issue" +} +--- + +A Warehouse stocks materials required for manufacturing or trading. The Material Issue form has to be submitted to order materials out of a Warehouse by any department. + +> Stock > Stock Entry > New Stock Entry + + +Go to Stock Entry. +Click on New Stock Entry +Select the option “Material Issue” under Purpose. +Provide Source Warehouse details. +Provide the BOM Number. +Save + + +![Material Issue](img/material-issue.png) + + + + + +Note: If you have done a stock entry and selected “Material Issue” under Purpose, that particular amount of stock will reflect as negative in stock details. \ No newline at end of file diff --git a/docs/docs.user.stock.md b/docs/docs.user.stock.md index 310fde8862..85392eac20 100644 --- a/docs/docs.user.stock.md +++ b/docs/docs.user.stock.md @@ -3,6 +3,13 @@ "_label": "Stock / Inventory" } --- + +![Stock-Inventory](img/stock-inventory.png) + + + + + For most small business that deal in physical goods, a large part of their net worth is invested in the stock in hand. ### Best Practice @@ -30,5 +37,4 @@ Tracking stock is not just about adding and subtracting quantities. Some complic - Stock has to be valued based on First-in-First-out: ERPNext needs to maintain a sequence of all transactions to know the exact value of your Items. - Stock reports are required at any point in time in the past: You have to lookup what was the quantity / value your stock of Item X on date Y. -To manage this, ERPNext collects all inventory transactions in a table called the Stock Ledger Entry. All Purchase Receipts, Stock Entries and Delivery Notes update this table. - +To manage this, ERPNext collects all inventory transactions in a table called the Stock Ledger Entry. All Purchase Receipts, Stock Entries and Delivery Notes update this table. \ No newline at end of file diff --git a/docs/docs.user.stock.projected_quantity.md b/docs/docs.user.stock.projected_quantity.md new file mode 100644 index 0000000000..8fff1336b9 --- /dev/null +++ b/docs/docs.user.stock.projected_quantity.md @@ -0,0 +1,27 @@ +--- +{ + "_label": "Projected Quantity" +} +--- + +Projected Quantity is the level of stock that is predicted for a particular Item, based on the current stock levels and other requirements.It is the quantity of gross inventory that includes supply and demand in the past which is done as part of the planning process. + +The projected inventory is used by the planning system to monitor the reorder point and to determine the reorder quantity. The projected Quantity is used by the planning engine to monitor the safety stock levels. These levels are maintained to serve unexpected demands. + +Having a tight control of the projected inventory is crucial to determine shortages and to calculate the right order quantity. + + + +![Projected Quantity Stock Report](img/projected-quantity-stock-report.png) + + + + + +> Projected Qty = Actual Qty + Planned Qty + Requested Qty + Ordered Qty - Reserved Qty + +- Actual Qty: Quantity available in the warehouse. +- Planned Qty: Quantity, for which, Production Order has been raised, but is pending to be manufactured. +- Requested Qty: Quantity requested for purchase, but not ordered. +- Ordered Qty: Quantity ordered for purchase, but not received. +- Reserved Qty: Quantity ordered for sale, but not delivered. \ No newline at end of file diff --git a/docs/docs.user.stock.purchase_receipt b/docs/docs.user.stock.purchase_receipt new file mode 100644 index 0000000000..fd934d2186 --- /dev/null +++ b/docs/docs.user.stock.purchase_receipt @@ -0,0 +1,24 @@ +--- +{ + "_label": "Purchase Return" +} +--- +ERPNext has an option to account for products that are returned to the supplier. This may be on account of a number of reasons like defects in goods, quality not matching, the buyer not needing the stock, etc. The transactions dealing with return of goods are also accounting transactions and have to be recorded in the books of accounts just like any other accounting transaction. + + +> Stock > Stock Entry > New Stock Entry + + +![Purchase Return](img/purchase-return.png) + + + + + + +- To select Purchase Return go to Stock Entry. +- Select Purchase Return under Purpose. +- Enter Purchase Receipt number. +- Enter Source Warehouse details. +- Provide Supplier Information. +- Save the document. \ No newline at end of file diff --git a/docs/docs.user.stock.purchase_return.md b/docs/docs.user.stock.purchase_return.md new file mode 100644 index 0000000000..13a325a98f --- /dev/null +++ b/docs/docs.user.stock.purchase_return.md @@ -0,0 +1,23 @@ +--- +{ + "_label": "Purchase Return" +} +--- +ERPNext has an option to account for products that are returned to the supplier.This may be on account of a number of reasons like defects in goods, quality not matching, the buyer not needing the stock, etc. The transactions dealing with return of goods are also accounting transactions and have to be recorded in the books of accounts just like any other accounting transaction. + + +> Stock > Stock Entry > New Stock Entry + + +![Purchase Return](img/purchase-return.png) + + + + +- To select Purchase Return go to Stock Entry. +- Select Purchase Return under Purpose. +- Enter Purchase Receipt number. +- Enter Source Warehouse details. +- Provide Supplier Information. +- Save the document. + diff --git a/docs/docs.user.stock.sales_return.md b/docs/docs.user.stock.sales_return.md new file mode 100644 index 0000000000..3198db0f0e --- /dev/null +++ b/docs/docs.user.stock.sales_return.md @@ -0,0 +1,21 @@ +--- +{ + "_label": "Sales Return" +} +--- +Goods sold being returned is quite a common practice in Business. They could be returned by the customer on quality issues, non-delivery on agreed date, or any other reason. ERPNext allows this transaction for ease of accounting. + +> Stock > Stock Entry > New Stock Entry + + + +![Sales Return](img/sales-return.png) + + + + +- For Sales Return click on Stock Entry +- Select Sales Return under Purpose +- Mention the Delivery Note number and the Sales Invoice number. +- Mention Contact Information of the Customer. +- Save the file. \ No newline at end of file diff --git a/docs/docs.user.stock.warehouse.md b/docs/docs.user.stock.warehouse.md new file mode 100644 index 0000000000..dd8273ab4d --- /dev/null +++ b/docs/docs.user.stock.warehouse.md @@ -0,0 +1,30 @@ +--- +{ + "_label": "Warehouse" +} +--- + +A warehouse is a commercial building for storage of goods. Warehouses are used by manufacturers, importers, exporters, wholesalers, transport businesses, customs, etc. They are usually large plain buildings in industrial areas of cities,towns, and villages. They usually have loading docks to load and unload goods from trucks. + +To go to Warehouse, click on Stock and go to Warehouse under Masters. + + +> Stock > Warehouse > New Warehouse + + + +![Warehouse](img/warehouse.png) + + + + +In ERPNext, every different company can have a separate Warehouse. Every Warehouse will belong to a specific company. User can get company wise accurate stock balance. The Warehouses are saved with their respective company’s abbreviations. This facilitates in identifying which Warehouse belongs to which company, at a glance. + +You can include user restrictions for these Warehouses. In case you do not wish a particular user to operate on a particular Warehouse, you can refrain the user from accessing that Warehouse. + +### Merge Warehouse + +In day to day transactions, if duplicate entries are done by mistake resulting in duplicate Warehouse, these mistakes can be rectified. Duplicate records can be merged into a single Warehouse. Enter the place where you want to keep all the warehouse records. Click on the Merge button. Once this transaction is done, delete the empty Warehouse. + +ERPNext system maintains stock balance for every distinct combination of Item and Warehouse. Thus you can get stock balance for any specific Item in a particular Warehouse on any particular date. + From c8e39b09659728e5a452f9e7b26077f509c1d865 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Fri, 30 Aug 2013 18:22:58 +0530 Subject: [PATCH 18/50] [fix] [minor] use prop instead of attr to disable a field --- accounts/doctype/sales_invoice/pos.js | 2 +- public/js/website_utils.js | 4 ++-- stock/page/stock_ledger/stock_ledger.js | 4 ++-- stock/page/stock_level/stock_level.js | 4 ++-- utilities/demo/demo-login.js | 6 +++--- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/accounts/doctype/sales_invoice/pos.js b/accounts/doctype/sales_invoice/pos.js index 1bd6de1030..b5a781cd09 100644 --- a/accounts/doctype/sales_invoice/pos.js +++ b/accounts/doctype/sales_invoice/pos.js @@ -395,7 +395,7 @@ erpnext.POS = Class.extend({ }); dialog.show(); - dialog.get_input("total_amount").attr("disabled", "disabled"); + dialog.get_input("total_amount").prop("disabled", true); dialog.fields_dict.pay.input.onclick = function() { cur_frm.set_value("mode_of_payment", dialog.get_values().mode_of_payment); diff --git a/public/js/website_utils.js b/public/js/website_utils.js index 95cae1bbc6..d22d7655fc 100644 --- a/public/js/website_utils.js +++ b/public/js/website_utils.js @@ -18,7 +18,7 @@ erpnext.send_message = function(opts) { wn.call = function(opts) { if(opts.btn) { - $(opts.btn).attr("disabled", "disabled"); + $(opts.btn).prop("disabled", true); } if(opts.msg) { @@ -51,7 +51,7 @@ wn.call = function(opts) { dataType: "json", success: function(data) { if(opts.btn) { - $(opts.btn).attr("disabled", false); + $(opts.btn).prop("disabled", false); } if(data.exc) { if(opts.btn) { diff --git a/stock/page/stock_ledger/stock_ledger.js b/stock/page/stock_ledger/stock_ledger.js index dacd78c21e..c83fc0ec12 100644 --- a/stock/page/stock_ledger/stock_ledger.js +++ b/stock/page/stock_ledger/stock_ledger.js @@ -100,11 +100,11 @@ erpnext.StockLedger = erpnext.StockGridReport.extend({ toggle_enable_brand: function() { if(!this.filter_inputs.item_code.val()) { - this.filter_inputs.brand.removeAttr("disabled"); + this.filter_inputs.brand.prop("disabled", false); } else { this.filter_inputs.brand .val(this.filter_inputs.brand.get(0).opts.default_value) - .attr("disabled", "disabled"); + .prop("disabled", true); } }, diff --git a/stock/page/stock_level/stock_level.js b/stock/page/stock_level/stock_level.js index 0699b7d7cd..df7c8c5d4d 100644 --- a/stock/page/stock_level/stock_level.js +++ b/stock/page/stock_level/stock_level.js @@ -115,11 +115,11 @@ erpnext.StockLevel = erpnext.StockGridReport.extend({ toggle_enable_brand: function() { if(!this.filter_inputs.item_code.val()) { - this.filter_inputs.brand.removeAttr("disabled"); + this.filter_inputs.brand.prop("disabled", false); } else { this.filter_inputs.brand .val(this.filter_inputs.brand.get(0).opts.default_value) - .attr("disabled", "disabled"); + .prop("disabled", true); } }, diff --git a/utilities/demo/demo-login.js b/utilities/demo/demo-login.js index 229d1690e5..509057b9ef 100644 --- a/utilities/demo/demo-login.js +++ b/utilities/demo/demo-login.js @@ -3,7 +3,7 @@ $(document).ready(function() { $("#login_btn").click(function() { var me = this; - $(this).html("Logging In...").attr("disabled", "disabled"); + $(this).html("Logging In...").prop("disabled", true); wn.call({ "method": "login", args: { @@ -12,7 +12,7 @@ $(document).ready(function() { lead_email: $("#lead-email").val(), }, callback: function(r) { - $(me).attr("disabled", false); + $(me).prop("disabled", false); if(r.exc) { alert("Error, please contact support@erpnext.com"); } else { @@ -23,5 +23,5 @@ $(document).ready(function() { }) return false; }) - .attr("disabled", false); + .prop("disabled", false); }) \ No newline at end of file From 6c8ef7729f5d249709245bacf1f92f24c38d35bb Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Fri, 30 Aug 2013 18:23:50 +0530 Subject: [PATCH 19/50] [customer login] [minor] commonified listing of orders, invoices, shipments, tickets and messages --- config.json | 17 +++- public/js/website_utils.js | 19 ++++- .../doctype/support_ticket/support_ticket.py | 11 --- website/css/website.css | 17 +++- website/helpers/transaction.py | 60 +++++++++++++- website/templates/html/transactions.html | 59 +++++++++++++ website/templates/pages/account.html | 6 +- website/templates/pages/messages.html | 31 +++++++ .../templates/pages/sales_transactions.html | 25 ++++++ website/templates/pages/tickets.html | 82 ++++++++----------- website/templates/pages/transaction_list.html | 69 ---------------- 11 files changed, 252 insertions(+), 144 deletions(-) create mode 100644 website/templates/html/transactions.html create mode 100644 website/templates/pages/messages.html create mode 100644 website/templates/pages/sales_transactions.html delete mode 100644 website/templates/pages/transaction_list.html diff --git a/config.json b/config.json index f9c71b4b19..6656ed37de 100644 --- a/config.json +++ b/config.json @@ -106,14 +106,24 @@ }, "orders": { "no_cache": true, - "template": "app/website/templates/pages/transaction_list", + "template": "app/website/templates/pages/sales_transactions", "args_method": "website.helpers.transaction.order_list_args" }, "invoices": { "no_cache": true, - "template": "app/website/templates/pages/transaction_list", + "template": "app/website/templates/pages/sales_transactions", "args_method": "website.helpers.transaction.invoice_list_args" }, + "shipments": { + "no_cache": true, + "template": "app/website/templates/pages/sales_transactions", + "args_method": "website.helpers.transaction.shipment_list_args" + }, + "messages": { + "no_cache": true, + "template": "app/website/templates/pages/messages", + "args_method": "website.helpers.transaction.message_list_args" + }, "product_search": { "template": "app/website/templates/pages/product_search" }, @@ -123,7 +133,8 @@ "args_method": "support.doctype.support_ticket.support_ticket.get_website_args" }, "tickets": { - "template": "app/website/templates/pages/tickets" + "template": "app/website/templates/pages/tickets", + "args_method": "website.helpers.transaction.ticket_list_args" }, "address": { "no_cache": true, diff --git a/public/js/website_utils.js b/public/js/website_utils.js index d22d7655fc..1b7f0f728d 100644 --- a/public/js/website_utils.js +++ b/public/js/website_utils.js @@ -2,8 +2,8 @@ // License: GNU General Public License v3. See license.txt -var erpnext = {}; -var wn = {}; +if(!window.erpnext) erpnext = {}; +if(!window.wn) wn = {}; // Add / update a new Lead / Communication // subject, sender, description @@ -229,4 +229,17 @@ $.extend(wn.cart, { if(cart_count) $(".cart-count").html("( "+ cart_count +" )") } -}); \ No newline at end of file +}); + +function remove_script_and_style(txt) { + return (!txt || (txt.indexOf(" -{% endblock %} \ No newline at end of file +var status_label = { + "Open": "label-success", + "Waiting for Customer": "label-danger", + "Closed": "label-default" +} + +var render = function(doc) { + doc.status = doc.status.trim(); + doc.label_class = status_label[doc.status] || "label-default"; + if(doc.status==="Waiting for Customer") doc.status = "To Reply"; + + $(repl('\ +
    \ +
    \ +
    %(name)s
    \ +
    %(subject)s
    \ +
    \ +
    \ +
    \ + %(status)s\ +
    \ +
    \ + %(creation)s\ +
    \ +
    \ +
    \ +
    ', doc)).appendTo($list); +}; +{%- endblock %} \ No newline at end of file diff --git a/website/templates/pages/transaction_list.html b/website/templates/pages/transaction_list.html deleted file mode 100644 index e92764a5ff..0000000000 --- a/website/templates/pages/transaction_list.html +++ /dev/null @@ -1,69 +0,0 @@ -{% extends "app/website/templates/html/page.html" %} - -{% block content %} -
    - -
    -
    -
    -
    -
    -
    - - -{% endblock %} \ No newline at end of file From 98429afe91214cd17dae463f17c74582d941b331 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Mon, 2 Sep 2013 18:52:27 +0530 Subject: [PATCH 20/50] [communication] [minor] --- selling/doctype/lead/lead.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/selling/doctype/lead/lead.js b/selling/doctype/lead/lead.js index 4088739388..9a86b22d63 100644 --- a/selling/doctype/lead/lead.js +++ b/selling/doctype/lead/lead.js @@ -51,7 +51,7 @@ erpnext.LeadController = wn.ui.form.Controller.extend({ } cur_frm.communication_view = new wn.views.CommunicationList({ - list: wn.model.get("Communication", {"lead": this.frm.doc.name}), + list: wn.model.get("Communication", {"parenttype": "Lead", "parent":this.frm.doc.name}), parent: this.frm.fields_dict.communication_html.wrapper, doc: this.frm.doc, recipients: this.frm.doc.email_id From d2b87268c9341536bd4b21a413f91ffa74eecffe Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 2 Sep 2013 20:12:53 +0530 Subject: [PATCH 21/50] [fix] [minor] in fetching pos settings --- utilities/transaction_base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utilities/transaction_base.py b/utilities/transaction_base.py index 22bc531851..ea807c248e 100644 --- a/utilities/transaction_base.py +++ b/utilities/transaction_base.py @@ -87,7 +87,7 @@ class TransactionBase(StatusUpdater): if self.meta.get_field(fieldname): self.doc.fields[fieldname] = val - if self.meta.get_field("sales_team"): + if self.meta.get_field("sales_team") and self.doc.customer: self.set_sales_team_for_customer() def set_sales_team_for_customer(self): From b15e5de78eed4dfcda653683ef5b0930247a2e90 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Tue, 3 Sep 2013 10:19:10 +0530 Subject: [PATCH 22/50] [docs] moved into folders --- docs/{ => dev}/docs.dev.api.md | 0 docs/dev/docs.dev.client_script.md | 10 ++++++++++ docs/{ => dev}/docs.dev.docs.md | 0 docs/{ => dev}/docs.dev.install.md | 0 docs/{ => dev}/docs.dev.install.restore_from_backup.md | 0 docs/{ => dev}/docs.dev.md | 3 ++- docs/{ => dev}/docs.dev.modules.md | 0 docs/{ => dev}/docs.dev.translate.md | 0 docs/{ => user/accounts}/docs.user.accounts.closing.md | 0 .../accounts}/docs.user.accounts.journal_voucher.md | 0 docs/{ => user/accounts}/docs.user.accounts.md | 0 .../{ => user/accounts}/docs.user.accounts.payments.md | 0 docs/{ => user/accounts}/docs.user.accounts.pos.md | 0 .../accounts}/docs.user.accounts.purchase_invoice.md | 0 docs/{ => user/accounts}/docs.user.accounts.reports.md | 0 docs/{ => user/accounts}/docs.user.accounts.returns.md | 0 .../accounts}/docs.user.accounts.sales_invoice.md | 0 .../buying}/docs.user.buying.material_request.md | 0 docs/{ => user/buying}/docs.user.buying.md | 0 .../buying}/docs.user.buying.purchase_order.md | 0 docs/{ => user/buying}/docs.user.buying.supplier.md | 0 .../buying}/docs.user.buying.supplier_quotation.md | 0 .../customize}/docs.user.customize.custom_field.md | 0 .../customize}/docs.user.customize.custom_form.md | 0 docs/{ => user/customize}/docs.user.customize.md | 0 .../customize}/docs.user.customize.modules.md | 0 .../customize}/docs.user.customize.print_format.md | 0 docs/{ => user}/docs.user.help.md | 0 docs/{ => user}/docs.user.md | 0 docs/{ => user}/docs.user.projects.md | 0 docs/{ => user}/docs.user.reports.builder.md | 0 docs/{ => user}/docs.user.reports.md | 0 docs/{ => user/hr}/docs.user.hr.appraisal.md | 0 docs/{ => user/hr}/docs.user.hr.employee.md | 0 docs/{ => user/hr}/docs.user.hr.expense_claim.md | 0 docs/{ => user/hr}/docs.user.hr.leave.md | 0 docs/{ => user/hr}/docs.user.hr.md | 0 docs/{ => user/hr}/docs.user.hr.payroll.md | 0 docs/{ => user/hr}/docs.user.hr.setup.md | 0 docs/{ => user/intro}/docs.user.implement.concepts.md | 0 docs/{ => user/intro}/docs.user.implement.md | 0 docs/{ => user/intro}/docs.user.implement.strategy.md | 0 docs/{ => user/intro}/docs.user.intro.md | 0 docs/{ => user/intro}/docs.user.intro.open_source.md | 0 docs/{ => user/intro}/docs.user.intro.try.md | 0 docs/{ => user/mfg}/docs.user.mfg.bom.md | 0 docs/{ => user/mfg}/docs.user.mfg.md | 0 docs/{ => user/mfg}/docs.user.mfg.planning.md | 0 docs/{ => user/mfg}/docs.user.mfg.production_order.md | 0 docs/{ => user/selling}/docs.user.selling.customer.md | 0 docs/{ => user/selling}/docs.user.selling.lead.md | 0 docs/{ => user/selling}/docs.user.selling.md | 0 .../selling}/docs.user.selling.opportunity.md | 0 docs/{ => user/selling}/docs.user.selling.quotation.md | 0 .../selling}/docs.user.selling.sales_order.md | 0 docs/{ => user/setup}/docs.user.setup.accounting.md | 0 docs/{ => user/setup}/docs.user.setup.codification.md | 0 docs/{ => user/setup}/docs.user.setup.cost_centers.md | 0 docs/{ => user/setup}/docs.user.setup.data_import.md | 0 docs/{ => user/setup}/docs.user.setup.email.md | 0 docs/{ => user/setup}/docs.user.setup.first.md | 0 docs/{ => user/setup}/docs.user.setup.letter_head.md | 0 docs/{ => user/setup}/docs.user.setup.masters.md | 0 docs/{ => user/setup}/docs.user.setup.md | 0 docs/{ => user/setup}/docs.user.setup.opening.md | 0 docs/{ => user/setup}/docs.user.setup.permissions.md | 0 docs/{ => user/setup}/docs.user.setup.price_list.md | 0 docs/{ => user/setup}/docs.user.setup.series.md | 0 docs/{ => user/setup}/docs.user.setup.taxes.md | 0 docs/{ => user/stock}/docs.user.stock.delivery_note.md | 0 docs/{ => user/stock}/docs.user.stock.item.md | 0 docs/{ => user/stock}/docs.user.stock.md | 0 .../stock}/docs.user.stock.purchase_receipt.md | 0 docs/{ => user/stock}/docs.user.stock.serialized.md | 0 docs/{ => user/stock}/docs.user.stock.stock_entry.md | 0 .../stock}/docs.user.stock.sub_contracting.md | 0 docs/{ => user/stock}/docs.user.stock.valuation.md | 0 .../support}/docs.user.support.customer_issue.md | 0 .../support}/docs.user.support.maintenance_schedule.md | 0 .../support}/docs.user.support.maintenance_visit.md | 0 docs/{ => user/support}/docs.user.support.md | 0 .../support}/docs.user.support.support_ticket.md | 0 docs/{ => user/tools}/docs.user.tools.calendar.md | 0 docs/{ => user/tools}/docs.user.tools.form_tools.md | 0 docs/{ => user/tools}/docs.user.tools.md | 0 docs/{ => user/tools}/docs.user.tools.messages.md | 0 docs/{ => user/tools}/docs.user.tools.notes.md | 0 docs/{ => user/tools}/docs.user.tools.todo.md | 0 docs/{ => user/website}/docs.user.website.blog.md | 0 docs/{ => user/website}/docs.user.website.md | 0 docs/{ => user/website}/docs.user.website.setup.md | 0 docs/{ => user/website}/docs.user.website.style.md | 0 docs/{ => user/website}/docs.user.website.web_page.md | 0 93 files changed, 12 insertions(+), 1 deletion(-) rename docs/{ => dev}/docs.dev.api.md (100%) create mode 100644 docs/dev/docs.dev.client_script.md rename docs/{ => dev}/docs.dev.docs.md (100%) rename docs/{ => dev}/docs.dev.install.md (100%) rename docs/{ => dev}/docs.dev.install.restore_from_backup.md (100%) rename docs/{ => dev}/docs.dev.md (96%) rename docs/{ => dev}/docs.dev.modules.md (100%) rename docs/{ => dev}/docs.dev.translate.md (100%) rename docs/{ => user/accounts}/docs.user.accounts.closing.md (100%) rename docs/{ => user/accounts}/docs.user.accounts.journal_voucher.md (100%) rename docs/{ => user/accounts}/docs.user.accounts.md (100%) rename docs/{ => user/accounts}/docs.user.accounts.payments.md (100%) rename docs/{ => user/accounts}/docs.user.accounts.pos.md (100%) rename docs/{ => user/accounts}/docs.user.accounts.purchase_invoice.md (100%) rename docs/{ => user/accounts}/docs.user.accounts.reports.md (100%) rename docs/{ => user/accounts}/docs.user.accounts.returns.md (100%) rename docs/{ => user/accounts}/docs.user.accounts.sales_invoice.md (100%) rename docs/{ => user/buying}/docs.user.buying.material_request.md (100%) rename docs/{ => user/buying}/docs.user.buying.md (100%) rename docs/{ => user/buying}/docs.user.buying.purchase_order.md (100%) rename docs/{ => user/buying}/docs.user.buying.supplier.md (100%) rename docs/{ => user/buying}/docs.user.buying.supplier_quotation.md (100%) rename docs/{ => user/customize}/docs.user.customize.custom_field.md (100%) rename docs/{ => user/customize}/docs.user.customize.custom_form.md (100%) rename docs/{ => user/customize}/docs.user.customize.md (100%) rename docs/{ => user/customize}/docs.user.customize.modules.md (100%) rename docs/{ => user/customize}/docs.user.customize.print_format.md (100%) rename docs/{ => user}/docs.user.help.md (100%) rename docs/{ => user}/docs.user.md (100%) rename docs/{ => user}/docs.user.projects.md (100%) rename docs/{ => user}/docs.user.reports.builder.md (100%) rename docs/{ => user}/docs.user.reports.md (100%) rename docs/{ => user/hr}/docs.user.hr.appraisal.md (100%) rename docs/{ => user/hr}/docs.user.hr.employee.md (100%) rename docs/{ => user/hr}/docs.user.hr.expense_claim.md (100%) rename docs/{ => user/hr}/docs.user.hr.leave.md (100%) rename docs/{ => user/hr}/docs.user.hr.md (100%) rename docs/{ => user/hr}/docs.user.hr.payroll.md (100%) rename docs/{ => user/hr}/docs.user.hr.setup.md (100%) rename docs/{ => user/intro}/docs.user.implement.concepts.md (100%) rename docs/{ => user/intro}/docs.user.implement.md (100%) rename docs/{ => user/intro}/docs.user.implement.strategy.md (100%) rename docs/{ => user/intro}/docs.user.intro.md (100%) rename docs/{ => user/intro}/docs.user.intro.open_source.md (100%) rename docs/{ => user/intro}/docs.user.intro.try.md (100%) rename docs/{ => user/mfg}/docs.user.mfg.bom.md (100%) rename docs/{ => user/mfg}/docs.user.mfg.md (100%) rename docs/{ => user/mfg}/docs.user.mfg.planning.md (100%) rename docs/{ => user/mfg}/docs.user.mfg.production_order.md (100%) rename docs/{ => user/selling}/docs.user.selling.customer.md (100%) rename docs/{ => user/selling}/docs.user.selling.lead.md (100%) rename docs/{ => user/selling}/docs.user.selling.md (100%) rename docs/{ => user/selling}/docs.user.selling.opportunity.md (100%) rename docs/{ => user/selling}/docs.user.selling.quotation.md (100%) rename docs/{ => user/selling}/docs.user.selling.sales_order.md (100%) rename docs/{ => user/setup}/docs.user.setup.accounting.md (100%) rename docs/{ => user/setup}/docs.user.setup.codification.md (100%) rename docs/{ => user/setup}/docs.user.setup.cost_centers.md (100%) rename docs/{ => user/setup}/docs.user.setup.data_import.md (100%) rename docs/{ => user/setup}/docs.user.setup.email.md (100%) rename docs/{ => user/setup}/docs.user.setup.first.md (100%) rename docs/{ => user/setup}/docs.user.setup.letter_head.md (100%) rename docs/{ => user/setup}/docs.user.setup.masters.md (100%) rename docs/{ => user/setup}/docs.user.setup.md (100%) rename docs/{ => user/setup}/docs.user.setup.opening.md (100%) rename docs/{ => user/setup}/docs.user.setup.permissions.md (100%) rename docs/{ => user/setup}/docs.user.setup.price_list.md (100%) rename docs/{ => user/setup}/docs.user.setup.series.md (100%) rename docs/{ => user/setup}/docs.user.setup.taxes.md (100%) rename docs/{ => user/stock}/docs.user.stock.delivery_note.md (100%) rename docs/{ => user/stock}/docs.user.stock.item.md (100%) rename docs/{ => user/stock}/docs.user.stock.md (100%) rename docs/{ => user/stock}/docs.user.stock.purchase_receipt.md (100%) rename docs/{ => user/stock}/docs.user.stock.serialized.md (100%) rename docs/{ => user/stock}/docs.user.stock.stock_entry.md (100%) rename docs/{ => user/stock}/docs.user.stock.sub_contracting.md (100%) rename docs/{ => user/stock}/docs.user.stock.valuation.md (100%) rename docs/{ => user/support}/docs.user.support.customer_issue.md (100%) rename docs/{ => user/support}/docs.user.support.maintenance_schedule.md (100%) rename docs/{ => user/support}/docs.user.support.maintenance_visit.md (100%) rename docs/{ => user/support}/docs.user.support.md (100%) rename docs/{ => user/support}/docs.user.support.support_ticket.md (100%) rename docs/{ => user/tools}/docs.user.tools.calendar.md (100%) rename docs/{ => user/tools}/docs.user.tools.form_tools.md (100%) rename docs/{ => user/tools}/docs.user.tools.md (100%) rename docs/{ => user/tools}/docs.user.tools.messages.md (100%) rename docs/{ => user/tools}/docs.user.tools.notes.md (100%) rename docs/{ => user/tools}/docs.user.tools.todo.md (100%) rename docs/{ => user/website}/docs.user.website.blog.md (100%) rename docs/{ => user/website}/docs.user.website.md (100%) rename docs/{ => user/website}/docs.user.website.setup.md (100%) rename docs/{ => user/website}/docs.user.website.style.md (100%) rename docs/{ => user/website}/docs.user.website.web_page.md (100%) diff --git a/docs/docs.dev.api.md b/docs/dev/docs.dev.api.md similarity index 100% rename from docs/docs.dev.api.md rename to docs/dev/docs.dev.api.md diff --git a/docs/dev/docs.dev.client_script.md b/docs/dev/docs.dev.client_script.md new file mode 100644 index 0000000000..fc82f9d5ff --- /dev/null +++ b/docs/dev/docs.dev.client_script.md @@ -0,0 +1,10 @@ +--- +{ + "_label": "Client Scripts: Custoimzing ERPNext" + +} +--- + + + + diff --git a/docs/docs.dev.docs.md b/docs/dev/docs.dev.docs.md similarity index 100% rename from docs/docs.dev.docs.md rename to docs/dev/docs.dev.docs.md diff --git a/docs/docs.dev.install.md b/docs/dev/docs.dev.install.md similarity index 100% rename from docs/docs.dev.install.md rename to docs/dev/docs.dev.install.md diff --git a/docs/docs.dev.install.restore_from_backup.md b/docs/dev/docs.dev.install.restore_from_backup.md similarity index 100% rename from docs/docs.dev.install.restore_from_backup.md rename to docs/dev/docs.dev.install.restore_from_backup.md diff --git a/docs/docs.dev.md b/docs/dev/docs.dev.md similarity index 96% rename from docs/docs.dev.md rename to docs/dev/docs.dev.md index 3f645d84fe..285f1767c7 100644 --- a/docs/docs.dev.md +++ b/docs/dev/docs.dev.md @@ -5,8 +5,9 @@ "docs.dev.install", "docs.dev.quickstart", "docs.dev.framework", - "docs.dev.api", "docs.dev.modules", + "docs.dev.client_script", + "docs.dev.api", "docs.dev.translate", "docs.dev.docs" ] diff --git a/docs/docs.dev.modules.md b/docs/dev/docs.dev.modules.md similarity index 100% rename from docs/docs.dev.modules.md rename to docs/dev/docs.dev.modules.md diff --git a/docs/docs.dev.translate.md b/docs/dev/docs.dev.translate.md similarity index 100% rename from docs/docs.dev.translate.md rename to docs/dev/docs.dev.translate.md diff --git a/docs/docs.user.accounts.closing.md b/docs/user/accounts/docs.user.accounts.closing.md similarity index 100% rename from docs/docs.user.accounts.closing.md rename to docs/user/accounts/docs.user.accounts.closing.md diff --git a/docs/docs.user.accounts.journal_voucher.md b/docs/user/accounts/docs.user.accounts.journal_voucher.md similarity index 100% rename from docs/docs.user.accounts.journal_voucher.md rename to docs/user/accounts/docs.user.accounts.journal_voucher.md diff --git a/docs/docs.user.accounts.md b/docs/user/accounts/docs.user.accounts.md similarity index 100% rename from docs/docs.user.accounts.md rename to docs/user/accounts/docs.user.accounts.md diff --git a/docs/docs.user.accounts.payments.md b/docs/user/accounts/docs.user.accounts.payments.md similarity index 100% rename from docs/docs.user.accounts.payments.md rename to docs/user/accounts/docs.user.accounts.payments.md diff --git a/docs/docs.user.accounts.pos.md b/docs/user/accounts/docs.user.accounts.pos.md similarity index 100% rename from docs/docs.user.accounts.pos.md rename to docs/user/accounts/docs.user.accounts.pos.md diff --git a/docs/docs.user.accounts.purchase_invoice.md b/docs/user/accounts/docs.user.accounts.purchase_invoice.md similarity index 100% rename from docs/docs.user.accounts.purchase_invoice.md rename to docs/user/accounts/docs.user.accounts.purchase_invoice.md diff --git a/docs/docs.user.accounts.reports.md b/docs/user/accounts/docs.user.accounts.reports.md similarity index 100% rename from docs/docs.user.accounts.reports.md rename to docs/user/accounts/docs.user.accounts.reports.md diff --git a/docs/docs.user.accounts.returns.md b/docs/user/accounts/docs.user.accounts.returns.md similarity index 100% rename from docs/docs.user.accounts.returns.md rename to docs/user/accounts/docs.user.accounts.returns.md diff --git a/docs/docs.user.accounts.sales_invoice.md b/docs/user/accounts/docs.user.accounts.sales_invoice.md similarity index 100% rename from docs/docs.user.accounts.sales_invoice.md rename to docs/user/accounts/docs.user.accounts.sales_invoice.md diff --git a/docs/docs.user.buying.material_request.md b/docs/user/buying/docs.user.buying.material_request.md similarity index 100% rename from docs/docs.user.buying.material_request.md rename to docs/user/buying/docs.user.buying.material_request.md diff --git a/docs/docs.user.buying.md b/docs/user/buying/docs.user.buying.md similarity index 100% rename from docs/docs.user.buying.md rename to docs/user/buying/docs.user.buying.md diff --git a/docs/docs.user.buying.purchase_order.md b/docs/user/buying/docs.user.buying.purchase_order.md similarity index 100% rename from docs/docs.user.buying.purchase_order.md rename to docs/user/buying/docs.user.buying.purchase_order.md diff --git a/docs/docs.user.buying.supplier.md b/docs/user/buying/docs.user.buying.supplier.md similarity index 100% rename from docs/docs.user.buying.supplier.md rename to docs/user/buying/docs.user.buying.supplier.md diff --git a/docs/docs.user.buying.supplier_quotation.md b/docs/user/buying/docs.user.buying.supplier_quotation.md similarity index 100% rename from docs/docs.user.buying.supplier_quotation.md rename to docs/user/buying/docs.user.buying.supplier_quotation.md diff --git a/docs/docs.user.customize.custom_field.md b/docs/user/customize/docs.user.customize.custom_field.md similarity index 100% rename from docs/docs.user.customize.custom_field.md rename to docs/user/customize/docs.user.customize.custom_field.md diff --git a/docs/docs.user.customize.custom_form.md b/docs/user/customize/docs.user.customize.custom_form.md similarity index 100% rename from docs/docs.user.customize.custom_form.md rename to docs/user/customize/docs.user.customize.custom_form.md diff --git a/docs/docs.user.customize.md b/docs/user/customize/docs.user.customize.md similarity index 100% rename from docs/docs.user.customize.md rename to docs/user/customize/docs.user.customize.md diff --git a/docs/docs.user.customize.modules.md b/docs/user/customize/docs.user.customize.modules.md similarity index 100% rename from docs/docs.user.customize.modules.md rename to docs/user/customize/docs.user.customize.modules.md diff --git a/docs/docs.user.customize.print_format.md b/docs/user/customize/docs.user.customize.print_format.md similarity index 100% rename from docs/docs.user.customize.print_format.md rename to docs/user/customize/docs.user.customize.print_format.md diff --git a/docs/docs.user.help.md b/docs/user/docs.user.help.md similarity index 100% rename from docs/docs.user.help.md rename to docs/user/docs.user.help.md diff --git a/docs/docs.user.md b/docs/user/docs.user.md similarity index 100% rename from docs/docs.user.md rename to docs/user/docs.user.md diff --git a/docs/docs.user.projects.md b/docs/user/docs.user.projects.md similarity index 100% rename from docs/docs.user.projects.md rename to docs/user/docs.user.projects.md diff --git a/docs/docs.user.reports.builder.md b/docs/user/docs.user.reports.builder.md similarity index 100% rename from docs/docs.user.reports.builder.md rename to docs/user/docs.user.reports.builder.md diff --git a/docs/docs.user.reports.md b/docs/user/docs.user.reports.md similarity index 100% rename from docs/docs.user.reports.md rename to docs/user/docs.user.reports.md diff --git a/docs/docs.user.hr.appraisal.md b/docs/user/hr/docs.user.hr.appraisal.md similarity index 100% rename from docs/docs.user.hr.appraisal.md rename to docs/user/hr/docs.user.hr.appraisal.md diff --git a/docs/docs.user.hr.employee.md b/docs/user/hr/docs.user.hr.employee.md similarity index 100% rename from docs/docs.user.hr.employee.md rename to docs/user/hr/docs.user.hr.employee.md diff --git a/docs/docs.user.hr.expense_claim.md b/docs/user/hr/docs.user.hr.expense_claim.md similarity index 100% rename from docs/docs.user.hr.expense_claim.md rename to docs/user/hr/docs.user.hr.expense_claim.md diff --git a/docs/docs.user.hr.leave.md b/docs/user/hr/docs.user.hr.leave.md similarity index 100% rename from docs/docs.user.hr.leave.md rename to docs/user/hr/docs.user.hr.leave.md diff --git a/docs/docs.user.hr.md b/docs/user/hr/docs.user.hr.md similarity index 100% rename from docs/docs.user.hr.md rename to docs/user/hr/docs.user.hr.md diff --git a/docs/docs.user.hr.payroll.md b/docs/user/hr/docs.user.hr.payroll.md similarity index 100% rename from docs/docs.user.hr.payroll.md rename to docs/user/hr/docs.user.hr.payroll.md diff --git a/docs/docs.user.hr.setup.md b/docs/user/hr/docs.user.hr.setup.md similarity index 100% rename from docs/docs.user.hr.setup.md rename to docs/user/hr/docs.user.hr.setup.md diff --git a/docs/docs.user.implement.concepts.md b/docs/user/intro/docs.user.implement.concepts.md similarity index 100% rename from docs/docs.user.implement.concepts.md rename to docs/user/intro/docs.user.implement.concepts.md diff --git a/docs/docs.user.implement.md b/docs/user/intro/docs.user.implement.md similarity index 100% rename from docs/docs.user.implement.md rename to docs/user/intro/docs.user.implement.md diff --git a/docs/docs.user.implement.strategy.md b/docs/user/intro/docs.user.implement.strategy.md similarity index 100% rename from docs/docs.user.implement.strategy.md rename to docs/user/intro/docs.user.implement.strategy.md diff --git a/docs/docs.user.intro.md b/docs/user/intro/docs.user.intro.md similarity index 100% rename from docs/docs.user.intro.md rename to docs/user/intro/docs.user.intro.md diff --git a/docs/docs.user.intro.open_source.md b/docs/user/intro/docs.user.intro.open_source.md similarity index 100% rename from docs/docs.user.intro.open_source.md rename to docs/user/intro/docs.user.intro.open_source.md diff --git a/docs/docs.user.intro.try.md b/docs/user/intro/docs.user.intro.try.md similarity index 100% rename from docs/docs.user.intro.try.md rename to docs/user/intro/docs.user.intro.try.md diff --git a/docs/docs.user.mfg.bom.md b/docs/user/mfg/docs.user.mfg.bom.md similarity index 100% rename from docs/docs.user.mfg.bom.md rename to docs/user/mfg/docs.user.mfg.bom.md diff --git a/docs/docs.user.mfg.md b/docs/user/mfg/docs.user.mfg.md similarity index 100% rename from docs/docs.user.mfg.md rename to docs/user/mfg/docs.user.mfg.md diff --git a/docs/docs.user.mfg.planning.md b/docs/user/mfg/docs.user.mfg.planning.md similarity index 100% rename from docs/docs.user.mfg.planning.md rename to docs/user/mfg/docs.user.mfg.planning.md diff --git a/docs/docs.user.mfg.production_order.md b/docs/user/mfg/docs.user.mfg.production_order.md similarity index 100% rename from docs/docs.user.mfg.production_order.md rename to docs/user/mfg/docs.user.mfg.production_order.md diff --git a/docs/docs.user.selling.customer.md b/docs/user/selling/docs.user.selling.customer.md similarity index 100% rename from docs/docs.user.selling.customer.md rename to docs/user/selling/docs.user.selling.customer.md diff --git a/docs/docs.user.selling.lead.md b/docs/user/selling/docs.user.selling.lead.md similarity index 100% rename from docs/docs.user.selling.lead.md rename to docs/user/selling/docs.user.selling.lead.md diff --git a/docs/docs.user.selling.md b/docs/user/selling/docs.user.selling.md similarity index 100% rename from docs/docs.user.selling.md rename to docs/user/selling/docs.user.selling.md diff --git a/docs/docs.user.selling.opportunity.md b/docs/user/selling/docs.user.selling.opportunity.md similarity index 100% rename from docs/docs.user.selling.opportunity.md rename to docs/user/selling/docs.user.selling.opportunity.md diff --git a/docs/docs.user.selling.quotation.md b/docs/user/selling/docs.user.selling.quotation.md similarity index 100% rename from docs/docs.user.selling.quotation.md rename to docs/user/selling/docs.user.selling.quotation.md diff --git a/docs/docs.user.selling.sales_order.md b/docs/user/selling/docs.user.selling.sales_order.md similarity index 100% rename from docs/docs.user.selling.sales_order.md rename to docs/user/selling/docs.user.selling.sales_order.md diff --git a/docs/docs.user.setup.accounting.md b/docs/user/setup/docs.user.setup.accounting.md similarity index 100% rename from docs/docs.user.setup.accounting.md rename to docs/user/setup/docs.user.setup.accounting.md diff --git a/docs/docs.user.setup.codification.md b/docs/user/setup/docs.user.setup.codification.md similarity index 100% rename from docs/docs.user.setup.codification.md rename to docs/user/setup/docs.user.setup.codification.md diff --git a/docs/docs.user.setup.cost_centers.md b/docs/user/setup/docs.user.setup.cost_centers.md similarity index 100% rename from docs/docs.user.setup.cost_centers.md rename to docs/user/setup/docs.user.setup.cost_centers.md diff --git a/docs/docs.user.setup.data_import.md b/docs/user/setup/docs.user.setup.data_import.md similarity index 100% rename from docs/docs.user.setup.data_import.md rename to docs/user/setup/docs.user.setup.data_import.md diff --git a/docs/docs.user.setup.email.md b/docs/user/setup/docs.user.setup.email.md similarity index 100% rename from docs/docs.user.setup.email.md rename to docs/user/setup/docs.user.setup.email.md diff --git a/docs/docs.user.setup.first.md b/docs/user/setup/docs.user.setup.first.md similarity index 100% rename from docs/docs.user.setup.first.md rename to docs/user/setup/docs.user.setup.first.md diff --git a/docs/docs.user.setup.letter_head.md b/docs/user/setup/docs.user.setup.letter_head.md similarity index 100% rename from docs/docs.user.setup.letter_head.md rename to docs/user/setup/docs.user.setup.letter_head.md diff --git a/docs/docs.user.setup.masters.md b/docs/user/setup/docs.user.setup.masters.md similarity index 100% rename from docs/docs.user.setup.masters.md rename to docs/user/setup/docs.user.setup.masters.md diff --git a/docs/docs.user.setup.md b/docs/user/setup/docs.user.setup.md similarity index 100% rename from docs/docs.user.setup.md rename to docs/user/setup/docs.user.setup.md diff --git a/docs/docs.user.setup.opening.md b/docs/user/setup/docs.user.setup.opening.md similarity index 100% rename from docs/docs.user.setup.opening.md rename to docs/user/setup/docs.user.setup.opening.md diff --git a/docs/docs.user.setup.permissions.md b/docs/user/setup/docs.user.setup.permissions.md similarity index 100% rename from docs/docs.user.setup.permissions.md rename to docs/user/setup/docs.user.setup.permissions.md diff --git a/docs/docs.user.setup.price_list.md b/docs/user/setup/docs.user.setup.price_list.md similarity index 100% rename from docs/docs.user.setup.price_list.md rename to docs/user/setup/docs.user.setup.price_list.md diff --git a/docs/docs.user.setup.series.md b/docs/user/setup/docs.user.setup.series.md similarity index 100% rename from docs/docs.user.setup.series.md rename to docs/user/setup/docs.user.setup.series.md diff --git a/docs/docs.user.setup.taxes.md b/docs/user/setup/docs.user.setup.taxes.md similarity index 100% rename from docs/docs.user.setup.taxes.md rename to docs/user/setup/docs.user.setup.taxes.md diff --git a/docs/docs.user.stock.delivery_note.md b/docs/user/stock/docs.user.stock.delivery_note.md similarity index 100% rename from docs/docs.user.stock.delivery_note.md rename to docs/user/stock/docs.user.stock.delivery_note.md diff --git a/docs/docs.user.stock.item.md b/docs/user/stock/docs.user.stock.item.md similarity index 100% rename from docs/docs.user.stock.item.md rename to docs/user/stock/docs.user.stock.item.md diff --git a/docs/docs.user.stock.md b/docs/user/stock/docs.user.stock.md similarity index 100% rename from docs/docs.user.stock.md rename to docs/user/stock/docs.user.stock.md diff --git a/docs/docs.user.stock.purchase_receipt.md b/docs/user/stock/docs.user.stock.purchase_receipt.md similarity index 100% rename from docs/docs.user.stock.purchase_receipt.md rename to docs/user/stock/docs.user.stock.purchase_receipt.md diff --git a/docs/docs.user.stock.serialized.md b/docs/user/stock/docs.user.stock.serialized.md similarity index 100% rename from docs/docs.user.stock.serialized.md rename to docs/user/stock/docs.user.stock.serialized.md diff --git a/docs/docs.user.stock.stock_entry.md b/docs/user/stock/docs.user.stock.stock_entry.md similarity index 100% rename from docs/docs.user.stock.stock_entry.md rename to docs/user/stock/docs.user.stock.stock_entry.md diff --git a/docs/docs.user.stock.sub_contracting.md b/docs/user/stock/docs.user.stock.sub_contracting.md similarity index 100% rename from docs/docs.user.stock.sub_contracting.md rename to docs/user/stock/docs.user.stock.sub_contracting.md diff --git a/docs/docs.user.stock.valuation.md b/docs/user/stock/docs.user.stock.valuation.md similarity index 100% rename from docs/docs.user.stock.valuation.md rename to docs/user/stock/docs.user.stock.valuation.md diff --git a/docs/docs.user.support.customer_issue.md b/docs/user/support/docs.user.support.customer_issue.md similarity index 100% rename from docs/docs.user.support.customer_issue.md rename to docs/user/support/docs.user.support.customer_issue.md diff --git a/docs/docs.user.support.maintenance_schedule.md b/docs/user/support/docs.user.support.maintenance_schedule.md similarity index 100% rename from docs/docs.user.support.maintenance_schedule.md rename to docs/user/support/docs.user.support.maintenance_schedule.md diff --git a/docs/docs.user.support.maintenance_visit.md b/docs/user/support/docs.user.support.maintenance_visit.md similarity index 100% rename from docs/docs.user.support.maintenance_visit.md rename to docs/user/support/docs.user.support.maintenance_visit.md diff --git a/docs/docs.user.support.md b/docs/user/support/docs.user.support.md similarity index 100% rename from docs/docs.user.support.md rename to docs/user/support/docs.user.support.md diff --git a/docs/docs.user.support.support_ticket.md b/docs/user/support/docs.user.support.support_ticket.md similarity index 100% rename from docs/docs.user.support.support_ticket.md rename to docs/user/support/docs.user.support.support_ticket.md diff --git a/docs/docs.user.tools.calendar.md b/docs/user/tools/docs.user.tools.calendar.md similarity index 100% rename from docs/docs.user.tools.calendar.md rename to docs/user/tools/docs.user.tools.calendar.md diff --git a/docs/docs.user.tools.form_tools.md b/docs/user/tools/docs.user.tools.form_tools.md similarity index 100% rename from docs/docs.user.tools.form_tools.md rename to docs/user/tools/docs.user.tools.form_tools.md diff --git a/docs/docs.user.tools.md b/docs/user/tools/docs.user.tools.md similarity index 100% rename from docs/docs.user.tools.md rename to docs/user/tools/docs.user.tools.md diff --git a/docs/docs.user.tools.messages.md b/docs/user/tools/docs.user.tools.messages.md similarity index 100% rename from docs/docs.user.tools.messages.md rename to docs/user/tools/docs.user.tools.messages.md diff --git a/docs/docs.user.tools.notes.md b/docs/user/tools/docs.user.tools.notes.md similarity index 100% rename from docs/docs.user.tools.notes.md rename to docs/user/tools/docs.user.tools.notes.md diff --git a/docs/docs.user.tools.todo.md b/docs/user/tools/docs.user.tools.todo.md similarity index 100% rename from docs/docs.user.tools.todo.md rename to docs/user/tools/docs.user.tools.todo.md diff --git a/docs/docs.user.website.blog.md b/docs/user/website/docs.user.website.blog.md similarity index 100% rename from docs/docs.user.website.blog.md rename to docs/user/website/docs.user.website.blog.md diff --git a/docs/docs.user.website.md b/docs/user/website/docs.user.website.md similarity index 100% rename from docs/docs.user.website.md rename to docs/user/website/docs.user.website.md diff --git a/docs/docs.user.website.setup.md b/docs/user/website/docs.user.website.setup.md similarity index 100% rename from docs/docs.user.website.setup.md rename to docs/user/website/docs.user.website.setup.md diff --git a/docs/docs.user.website.style.md b/docs/user/website/docs.user.website.style.md similarity index 100% rename from docs/docs.user.website.style.md rename to docs/user/website/docs.user.website.style.md diff --git a/docs/docs.user.website.web_page.md b/docs/user/website/docs.user.website.web_page.md similarity index 100% rename from docs/docs.user.website.web_page.md rename to docs/user/website/docs.user.website.web_page.md From 0c3421b978cd212fd386f5a4aade8c8fee1bc02c Mon Sep 17 00:00:00 2001 From: Priya Date: Tue, 3 Sep 2013 11:14:58 +0530 Subject: [PATCH 23/50] [docs] --- docs/docs.user.accounts.pos.md | 74 ++++++++++++++++++++++++---- docs/docs.user.help.md | 7 +-- docs/docs.user.implement.concepts.md | 10 ++-- docs/docs.user.implement.md | 10 ++-- docs/docs.user.implement.strategy.md | 7 ++- docs/docs.user.intro.md | 32 ++++++------ docs/docs.user.intro.open_source.md | 9 ++-- docs/docs.user.intro.try.md | 2 +- docs/docs.user.md | 1 + 9 files changed, 105 insertions(+), 47 deletions(-) diff --git a/docs/docs.user.accounts.pos.md b/docs/docs.user.accounts.pos.md index a4ca430139..9cb5079b6d 100644 --- a/docs/docs.user.accounts.pos.md +++ b/docs/docs.user.accounts.pos.md @@ -3,7 +3,7 @@ "_label": "Point of Sale (POS) Invoice" } --- -For retail operations, the delivery of goods, accrual of sale and payment all happens in one event, that is usually called the “Point of Sale”. +Point of sale (POS) is the place where a retail transaction is completed. It is the point at which a customer makes a payment to the merchant in exchange for goods or services. For retail operations, the delivery of goods, accrual of sale and payment all happens in one event, that is usually called the “Point of Sale”. You can make a Sales Invoice of type POS by checking on “Is POS”. When you check this, you will notice that some fields get hidden and some new ones emerge. @@ -11,20 +11,74 @@ You can make a Sales Invoice of type POS by checking on “Is POS”. When you c #### Different sections of the POS -- Update Stock: If this is checked, Stock Ledger Entries will be made when you “Submit” this Sales Invoice and there is no need for a separate Delivery Note.
 -- In your Items table, you will also have to update inventory information like “Warehouse” (can come as default), “Serial Number” or “Batch Number” if applicable.
 -- Update “Payment Details” like your Bank / Cash Account, paid amount etc.
 -- If you are writing off certain amount, for example change or you get extra change, check on “Write off Outstanding Amount” and set the Account. +- Update Stock: If this is checked, Stock Ledger Entries will be made when you “Submit” this Sales Invoice thereby eliminating the need for a separate Delivery Note.
 +- In your Items table, update inventory information like Warehouse (saved as default), Serial Number, or Batch Number if applicable.
 +- Update Payment Details like your Bank / Cash Account, paid amount etc.
 +- If you are writing off certain amount. For example when you receive extra cash as a result of not having exact denomination of change, check on ‘Write off Outstanding Amount’ and set the Account. #### POS Settings +POS includes advanced features to cater to different functionality, such as inventory management, CRM, financials, warehousing, etc., all built into the POS software. Prior to the modern POS, all of these functions were done independently and required the manual re-keying of information, which could lead to entry errors. + If you are in retail operations, you want your Point of Sale to be as quick and efficient as possible. To do this, you can create a POS Setting for a user from: -Accounts > Point of Sale (POS) Setting +> Accounts > Point-of-Sale Setting -and set default values as defined. +Set default values as defined. ---- +![POS Settings](img/settings-pos-view.png) + +#### Enable POS View + +Sales Invoice has 2 different interfaces, Invoice View and POS View. The current view used by most users is the Invoice View. This view is preferred by non-retailing companies.The POS view is used by retailing companies. For retailers it is very important to provide bill or sales invoice at the point of sale. Their customers cannot wait to receive the bill by post. The customers want an immediate bill for the payment which they make. In such cases, the POS View is preferred. + + > Setup > Show/Hide Features + +![POS View](img/enable-pos-view.png) + +### Adding an Item + +At the billing counter, the retailer needs to select Items which the consumer buys. In the POS interface you can select an Item by two methods. One, is by clicking on the Item image and the other, is through the Barcode. + +**Select Item** - To select a product click on the Item image and add it into the cart. A cart is an area that prepares a customer for checkout by allowing to edit product information, adjust taxes and add discounts. + +![POS](img/add-item-image-click.png) + +**Barcode** - A Barcode is an optical machine-readable representation of data relating to the object to which it is attached. Enter Barcode in the barcode box and pause for a second. The Item will be automatically added to the cart. + +![POS](img/add-item-barcode.png) + +> Tip: To change the quantity of an Item, enter your desired quantity in the quantity box. These are mostly used if the same Item is purchased in bulk. + + +If your product list is very long use the universal search field, to type the product name and select faster. + +### Removing an Item + +There are two ways to remove an Item. + +- Select an Item by clicking on the row of that Item from Item cart. Then click on “Del” button. OR + + +- Type 0 in the ‘select quantity’ field to delete the record. + +To remove multiple Items together, select multiple rows & click on “Del” button. + +> Delete button appears only when Items are selected. + +![POS](img/delete-item.png) + +### Make Payment + +After all the Items and their quantities are added into the cart, you are ready to make the Payment. Payment process is divided into 3 steps - + +1. Click on “Make Payment” to get the Payment window. +1. Select your “Mode of Payment”. +1. Click on “Pay” button to Save the Sales Invoice. + +![POS Payment](img/make-payment.png) + +Submit the document to finalise the record. After the Invoice is submitted, you can either print an invoice or email it directly to the customer. #### Accounting entries (GL Entry) for a Point of Sale: @@ -40,5 +94,5 @@ Credits: - Customer (payment) - Write Off (optional) -To see entries after “Submit”, click on “View Ledger”. - +To see entries after “Submit”, click on “View Ledger”. + diff --git a/docs/docs.user.help.md b/docs/docs.user.help.md index 55d12d231e..9563ce1592 100644 --- a/docs/docs.user.help.md +++ b/docs/docs.user.help.md @@ -4,11 +4,12 @@ "_icon": "question" } --- -If you are stuck and have searched all the help that is available online and need to talk to someone, here is how you do it: +If you are stuck, have searched all the posible help that is available online, and need to talk to someone, here is how you do it: ### 1. Head to the Forums -- If you are a user or evaluating and want to talk to other ERPNext users, go to the [ERPNext User Forum](groups.google.com/group/erpnext-user-forum/) +- If you are a user or you are evaluating and want to talk to other ERPNext users, go to the [ERPNext User Forum](groups.google.com/group/erpnext-user-forum/) + - If you are a developer and want help in customizing or extending ERPNext, head to the developer forums [ERPNext Developer Forum](groups.google.com/group/erpnext-developer-forum/) ### 2. Report an Issue / Suggestion at GitHub @@ -19,7 +20,7 @@ We use GitHub to manage the development of ERPNext. So if you encounter a bug or ### 3. Get in touch with a local partner. -ERPNext has an expanding partner community so check this page out if there is a local partner in your region. +ERPNext has an expanding partner community. So check this page out if there is a local partner in your region. - [ERPNext Parter List](https://erpnext.com/partners) diff --git a/docs/docs.user.implement.concepts.md b/docs/docs.user.implement.concepts.md index ac481d4f9e..31b4358142 100644 --- a/docs/docs.user.implement.concepts.md +++ b/docs/docs.user.implement.concepts.md @@ -3,7 +3,7 @@ "_label": "Concepts and Terms" } --- -Before you start implementation, lets get familiar with the terminology used and some basic concepts in ERPNext. +Before you start implementation, lets get familiar with the terminology that is used and some basic concepts in ERPNext. --- @@ -77,7 +77,7 @@ Represents a Financial Year or Accounting Year. You can operate multiple Fiscal #### Cost Center -A Cost Center is like an Account, but the only difference is that it's structure represents your business more closely than Accounts. For example in your Chart of Accounts, you separate your expenses by type (say travel, marketing etc). In your Chart of Cost Centers, you can separate them by product line or business group (for example online sales, retail sales) +A Cost Center is like an Account, but the only difference is that its structure represents your business more closely than Accounts. For example in your Chart of Accounts, you separate your expenses by type (say travel, marketing etc). In your Chart of Cost Centers, you can separate them by product line or business group (for example online sales, retail sales) > Accounts > Chart of Cost Centers @@ -101,7 +101,7 @@ A bill sent by a Supplier for delivery of Items (goods or services). #### Currency -ERPNext allows you to book transactions in multiple currencies. There is only one currency for your books of accounts though. While posting your Invoices, payments in different currencies, the amounts are converted to the default currency by the specified conversion rate. +ERPNext allows you to book transactions in multiple currencies. There is only one currency for your book of accounts though. While posting your Invoices, payments in different currencies, the amount is converted to the default currency by the specified conversion rate. > Setup > Company > Currencies @@ -209,7 +209,7 @@ A number given to a group of units of a particular Item that may be purchased or #### Stock Ledger Entry -A unified table for all material movement from one warehouse to another. This is the table that is updated when a Stock Entry, Delivery Note, Purchase Receipt, Sales Invoice (POS) is made. +A unified table for all material movement from one warehouse to another. This is the table that is updated when a Stock Entry, Delivery Note, Purchase Receipt, and Sales Invoice (POS) is made. #### Stock Reconciliation @@ -265,7 +265,7 @@ A record of the monthly salary given to an Employee. #### Salary Structure -A template identifying all the components of an Employee’s salary (earnings) and tax and other social security deductions. +A template identifying all the components of an Employees' salary (earnings) and tax and other social security deductions. > Human Resource > Salary and Payroll > Salary Structure diff --git a/docs/docs.user.implement.md b/docs/docs.user.implement.md index f42d6617cc..59f2c498a1 100644 --- a/docs/docs.user.implement.md +++ b/docs/docs.user.implement.md @@ -7,7 +7,7 @@ ] } --- -We have seem dozens of ERP implementations over the past few years and we realize that successful implementations are a lot about intangibles and attitude. +We have seen dozens of ERP implementations over the past few years and we realize that successful implementation is a lot about intangibles and attitude. **ERPs are not required.** @@ -23,12 +23,12 @@ So when you start implementing an ERP, keep your sight on the long term benefits ## The Champion -ERP means organization wide change and it does not happen without effort. Every change requires a champion and it is the duty of the champion to organize and energize the entire team towards implementation. The champion is all the fall guy (or fall gal) incase something goes wrong and hence needs to be resilient. Who becomes a champion without putting effort anyways? +ERP means organization wide change and it does not happen without effort. Every change requires a champion and it is the duty of the champion to organize and energize the entire team towards implementation. The champion needs to be resilient incase something goes wrong . -In many organizations we have seen, the champion is most often the owner or a senior manager. Occasionally, the champion is an outsider who is hired for the purpose. +In many organizations we have seen, the champion is most often the owner or a senior manager. Occasionally, the champion is an outsider who is hired for a particular purpose. In either case, you must identify your champion first. -Most likely its **you!** +Most likely it's **you!** -Lets Begin! +Lets Begin! \ No newline at end of file diff --git a/docs/docs.user.implement.strategy.md b/docs/docs.user.implement.strategy.md index 3abb91a1c2..9ec58e8874 100644 --- a/docs/docs.user.implement.strategy.md +++ b/docs/docs.user.implement.strategy.md @@ -10,7 +10,7 @@ Before you start managing your Operations in EPRNext, you must first become fami ### Test Phase - Read the Manual -- Create your first Customer, Supplier and Item. Add a few more so you get familiar. +- Create your first Customer, Supplier and Item. Add a few more so you get familiar with them. - Create Customer Groups, Item Groups, Warehouses, Supplier Groups, so that you can classify your Items. - Complete a standard sales cycle - Lead > Opportunity > Quotation > Sales Order > Delivery Note > Sales Invoice > Payment (Journal Voucher) - Complete a standard purchase cycle - Purchase Request > Purchase Order > Purchase Receipt > Payment (Journal Voucher). @@ -20,11 +20,10 @@ Before you start managing your Operations in EPRNext, you must first become fami ### Live Phase -Once you have made yourself familiar with ERPNext, start entering your live data! +Once you are familiar with ERPNext, start entering your live data! - Clean up the account of test data or better, start a fresh install. - Setup all the modules with Customer Groups, Item Groups, Warehouses, BOMs etc. - Import Customers, Suppliers, Items, Contacts and Addresses using Data Import Tool. - Import opening stock using Stock Reconciliation Tool. -- Create opening accounting entries via Journal Voucher and create outstanding Sales Invoices and Purchase Invoices. - +- Create opening accounting entries via Journal Voucher and create outstanding Sales Invoices and Purchase Invoices. \ No newline at end of file diff --git a/docs/docs.user.intro.md b/docs/docs.user.intro.md index a6debe84af..5c1cb5625f 100644 --- a/docs/docs.user.intro.md +++ b/docs/docs.user.intro.md @@ -11,18 +11,15 @@ --- ## What is an ERP and why should I care? -(If you are already convinced you need an all-in-one system for your organization, you can skip this.) +(If you are already convinced you need an all-in-one system for your organization, you can skip this page.) + +If you are running a small business that has a few employees, you understand that it's hard to manage the dynamic nature of doing businesses. You are already using a software like Accounting, and may be some more to manage your inventory and sales (or CRM). -If you are running a small business that has some employees, you understand its hard to manage the dynamic nature of doing businesses. -You are already using software like Accounting, and may be some other one to manage your inventory and sales (or CRM). An ERP brings all of this together in one place. -Small businesses are not so different from large ones. They contain most of the complexities of a large business along with many other constraints. -Small businesses have to communicate with customers, do accounts, pay taxes, do payroll, manage timelines, deliver quality, answer questions -and keep everyone happy just like in large businesses. +Small businesses are not so different from large ones. They contain most of the complexities of a large business along with many other constraints. Small businesses have to communicate with customers, do accounts, pay taxes, do payroll, manage timelines, deliver quality, answer questions, and keep everyone happy just like in large businesses. -Large businesses have the advantage of using advanced data systems to manage their process efficiently. -Small businesses typically struggle to keep things organized. They often use a mix of apps like spreadsheets, accounting software, web CRM etc to manage.The problem is, not everyone is on the same page. An ERP changes that. +Large businesses have the advantage of using advanced data systems to manage their process efficiently. Small businesses, on the other hand, typically struggle to keep things organized. They often use a mix of apps like spreadsheets, accounting software, web CRM etc to manage.The problem is, not everyone is on the same page. An ERP changes that. --- @@ -30,6 +27,13 @@ Small businesses typically struggle to keep things organized. They often use a m ERPNext helps you to manage all your business information in one application and use it to manage operations and take decisions based on data. + + +![ERPNext-Introduction](img/erpnext-introduction.png) + + + + Among other things, ERPNext will help you to: - Track all Invoices and Payments. @@ -48,19 +52,19 @@ And a lot lot lot more. ## Why Should I Use ERPNext? -ERPNext is a modern tool that covers not only accounting but also all other business functions on an integrated platform. It has many benefits over both traditional accounting as well as ERP applications. +ERPNext is a modern tool that covers not only accounting but also all other business functions, on an integrated platform. It has many benefits over both traditional accounting as well as ERP applications. ### Benefits over traditional accounting software: - Do a lot more than just accounting! Manage inventory, billing, quotes, leads, payroll and a lot more. - Keep all your data safe and in one place. Don’t keep hunting for data when you need it across spreadsheets and different computers. -Manage everyone on the same page. All users get the same updated data. -- Stop repetitive work. Don’t enter the same information from your word processor to your accounting tool. Its all integrated. +- Stop repetitive work. Don’t enter the same information from your word processor to your accounting tool. It's all integrated. - Keep track. Get the entire history of a customer or a deal in one place. ### Benefits over big ERPs -- $$$ - Save money. -- Easier to configure. Big ERPs are notoriously hard to setup and will ask you a zillion questions before you can do something meaningful. -- Easier to use. Modern web like user interface will keep your users happy and in familiar territory. -- Open Source. This software is always free and you can host it anywhere you like. +- $$$ - Saves money. +- **Easier to configure:** Big ERPs are notoriously hard to setup and will ask you a zillion questions before you can do something meaningful. +- **Easier to use:** Modern web like user interface will keep your users happy and in familiar territory. +- **Open Source :** This software is always free and you can host it anywhere you like. \ No newline at end of file diff --git a/docs/docs.user.intro.open_source.md b/docs/docs.user.intro.open_source.md index 37e23c403b..bc36ce4aff 100644 --- a/docs/docs.user.intro.open_source.md +++ b/docs/docs.user.intro.open_source.md @@ -8,9 +8,9 @@ The source code is an Open Source software. It is open for anyone to understand, Advantages of an Open Source software are: 1. You can choose to change your service provider anytime. -1. You can host the application anywhere, including your own server so you have complete ownership and privacy of the data. -1. There will always be a community to support you incase you need help and you are not dependant only on your service provider. -1. The product is critiqued and used by a wide range of people who have reported hundreds of issues and suggestions to make this product better, and this will always continue. +1. You can host the application anywhere, including your own server to gain complete ownership and privacy of the data. +1. You can access a community to support you, incase you need help. You are not dependant on your service provider. +1. You can benefit from using a product that is critiqued and used by a wide range of people, who have reported hundreds of issues and suggestions to make this product better, and this will always continue. --- @@ -22,5 +22,4 @@ There are many Open Source ERPs you can consider. Popular ones are: 1. OpenBravo 1. Apache OfBiz 1. xTuple -1. Compiere (and forks) - +1. Compiere (and forks) \ No newline at end of file diff --git a/docs/docs.user.intro.try.md b/docs/docs.user.intro.try.md index 051caab2b7..2a53ca5694 100644 --- a/docs/docs.user.intro.try.md +++ b/docs/docs.user.intro.try.md @@ -7,7 +7,7 @@ There are many ways to get started with ERPNext. ### 1. See the Demo -If you just want to check out the user interface and **feel** the application, just see the demo at: +If you want to check out the user interface and **feel** the application, just see the demo at: - [https://demo.erpnext.com](https://demo.erpnext.com) diff --git a/docs/docs.user.md b/docs/docs.user.md index 1d22e8c13f..4086521143 100644 --- a/docs/docs.user.md +++ b/docs/docs.user.md @@ -96,6 +96,7 @@ Contents 1. [Period Closing](docs.user.accounts.closing.html) 1. [Accounting Reports](docs.user.accounts.reports.html) 1. [Upload Journal Entries in Bulk](docs.user.accounts.voucher_import.html) + 1. [Point of Sale (POS) Invoice](docs.user.accounts.pos.html) 1. [Human Resources (HR)](docs.user.hr.html) 1. [HR Setup](docs.user.hr.setup.html) 1. [Employee](docs.user.hr.employee.html) From 1d0f9d1543430b2314839028d5db682543fd24d6 Mon Sep 17 00:00:00 2001 From: Priya Date: Tue, 3 Sep 2013 15:32:43 +0530 Subject: [PATCH 24/50] [docs]minor changes --- docs/user/selling/docs.user.selling.customer.md | 2 +- docs/user/setup/docs.user.setup.accounting.md | 6 +++--- docs/user/setup/docs.user.setup.first.md | 8 ++++---- docs/user/setup/docs.user.setup.md | 7 +++---- 4 files changed, 11 insertions(+), 12 deletions(-) diff --git a/docs/user/selling/docs.user.selling.customer.md b/docs/user/selling/docs.user.selling.customer.md index 05c4d9663a..396aef01f3 100644 --- a/docs/user/selling/docs.user.selling.customer.md +++ b/docs/user/selling/docs.user.selling.customer.md @@ -61,4 +61,4 @@ Sales Persons behave exactly like Territories. You can create an organization ch A Sales Partner is a third party distributor / dealer / commission agent / affiliate / reseller who sells the companies products, for a commission. This is useful if you make the end sale to the Customer, involving your Sales Partner. -If you sell to your Sales Partner who in-turn sells it to the Customer, then you must make a Customer instead. +If you sell to your Sales Partner who in-turn sells it to the Customer, then you must make a Customer instead. \ No newline at end of file diff --git a/docs/user/setup/docs.user.setup.accounting.md b/docs/user/setup/docs.user.setup.accounting.md index 10c7a15c75..baa05851df 100644 --- a/docs/user/setup/docs.user.setup.accounting.md +++ b/docs/user/setup/docs.user.setup.accounting.md @@ -19,7 +19,7 @@ The Chart of Accounts helps you to answer: You may note that as a business manager,it is very valuable to see how well your business is doing. -> Tip: If you can’t read a Balance Sheet (I confess it took me a long time to figure this out) its a good opportunity to start learning about this. It will be worth the effort. You can also take the help of your accountant to setup your Chart of Accounts. +> Tip: If you can’t read a Balance Sheet (I confess it took me a long time to figure this out) it's a good opportunity to start learning about this. It will be worth the effort. You can also take the help of your accountant to setup your Chart of Accounts. To edit your Chart of Accounts in ERPNext go to: @@ -65,7 +65,7 @@ Accounting Transactions can only be made against Ledger Accounts (not Groups) ### Other Account Types -In ERPNext, you can also specify more information when you create a new Account, this is there to help you select that particular account in a scenario like Bank Account or a Tax Account and has no affect on the Chart itself. +In ERPNext, you can also specify more information when you create a new Account, this is there to help you select that particular account in a scenario like Bank Account or a Tax Account and has no effect on the Chart itself. You can also tag if an account represents a Customer, Supplier or Employee in "Master Type". @@ -84,4 +84,4 @@ Typically, you might want to create Accounts for - Types of Expenses (travel, salaries, telephone etc) under Expenses. - Taxes (VAT, Sales Tax etc based on your country) under Current Liabilities. - Types of Sales (for example, Product Sales, Service Sales etc.) under Income. -- Types of Assets (building, machinery, furniture etc.) under Fixed Assets. +- Types of Assets (building, machinery, furniture etc.) under Fixed Assets. \ No newline at end of file diff --git a/docs/user/setup/docs.user.setup.first.md b/docs/user/setup/docs.user.setup.first.md index c7d4aff815..5e1c5d87e0 100644 --- a/docs/user/setup/docs.user.setup.first.md +++ b/docs/user/setup/docs.user.setup.first.md @@ -2,8 +2,8 @@ { "_label": "Initial Setup" } ---- -After a successful sign-up / installation of ERPNext, on your first sign-in, you will be shown a form to fill. +---` +After a successful sign-up / installation of ERPNext, on your first sign-in, you will get a form to fill. ![First Screen](img/setup-first-screen.png)  @@ -11,11 +11,11 @@ This form will create your first **Company** and **Fiscal Year** (accounting or Some definitions: -- Fiscal Year: is your financial year, the fiscal year usually starts on 1st Jan or 1st March for most regions. If you are not sure, consult an accountant. +- Fiscal Year: This is your financial year, the fiscal year usually starts on 1st Jan or 1st March for most regions. If you are not sure, consult an accountant. - Abbreviation: In a multi-company setup, the abbreviation is appended to each account, so keep it small (2-4) characters and all caps. This will also set the default **Currency** and time zone for your account. Once you complete this, your first **Company** and **Chart of Accounts** will be created. Congrats! You are already on your way. -The next step is to follow implementation instructions. +The next step is to follow implementation instructions. \ No newline at end of file diff --git a/docs/user/setup/docs.user.setup.md b/docs/user/setup/docs.user.setup.md index 847a2155d3..4663ccc0f6 100644 --- a/docs/user/setup/docs.user.setup.md +++ b/docs/user/setup/docs.user.setup.md @@ -23,9 +23,8 @@ ] } --- -Setting up an ERP system is like starting your business all over again, but in the virtual -world. Thankfully it is not as hard as the real thing and you get to do a trial too. +Setting up an ERP system is like starting your business all over again, although in the virtual world. Thankfully it is not as hard as the real business and you get to do a trial too! -Implementation requires the implementer to take a step back and set aside some time to do this right. This is usually not a couple-of-hours after-work kind of a project. +Implementation requires the implementer to take a step back and set aside some time to do this right. This is usually not a couple-of-hours, after-work kind of a project. -Let us start with the screen which you see the first time you login. +Let us start with the screen that you see, the first time you login. \ No newline at end of file From 36b63a44b9d74a010df1f6878cd4a812e64ca761 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Tue, 3 Sep 2013 15:33:56 +0530 Subject: [PATCH 25/50] [fix] [minor] profile query --- accounts/doctype/pos_setting/pos_setting.js | 2 +- controllers/queries.py | 29 +------------------ hr/doctype/employee/employee.js | 2 +- public/js/queries.js | 2 +- selling/doctype/lead/lead.js | 4 +-- .../authorization_rule/authorization_rule.js | 4 +-- 6 files changed, 8 insertions(+), 35 deletions(-) diff --git a/accounts/doctype/pos_setting/pos_setting.js b/accounts/doctype/pos_setting/pos_setting.js index 18f555b919..641b3ef1cf 100755 --- a/accounts/doctype/pos_setting/pos_setting.js +++ b/accounts/doctype/pos_setting/pos_setting.js @@ -70,5 +70,5 @@ cur_frm.fields_dict["expense_account"].get_query = function(doc) { } cur_frm.fields_dict.user.get_query = function(doc,cdt,cdn) { - return{ query:"controllers.queries.profile_query"} + return{ query:"core.doctype.profile.profile.profile_query"} } diff --git a/controllers/queries.py b/controllers/queries.py index 0e23d5cd1e..81040a25e3 100644 --- a/controllers/queries.py +++ b/controllers/queries.py @@ -3,6 +3,7 @@ from __future__ import unicode_literals import webnotes +from webnotes.widgets.reportview import get_match_cond def get_filters_cond(doctype, filters, conditions): if filters: @@ -22,34 +23,6 @@ def get_filters_cond(doctype, filters, conditions): cond = '' return cond -def get_match_cond(doctype, searchfield = 'name'): - from webnotes.widgets.reportview import build_match_conditions - cond = build_match_conditions(doctype) - - if cond: - cond = ' and ' + cond - else: - cond = '' - return cond - - # searches for enabled profiles -def profile_query(doctype, txt, searchfield, start, page_len, filters): - return webnotes.conn.sql("""select name, concat_ws(' ', first_name, middle_name, last_name) - from `tabProfile` - where ifnull(enabled, 0)=1 - and docstatus < 2 - and name not in ('Administrator', 'Guest') - and (%(key)s like "%(txt)s" - or concat_ws(' ', first_name, middle_name, last_name) like "%(txt)s") - %(mcond)s - order by - case when name like "%(txt)s" then 0 else 1 end, - case when concat_ws(' ', first_name, middle_name, last_name) like "%(txt)s" - then 0 else 1 end, - name asc - limit %(start)s, %(page_len)s""" % {'key': searchfield, 'txt': "%%%s%%" % txt, - 'mcond':get_match_cond(doctype, searchfield), 'start': start, 'page_len': page_len}) - # searches for active employees def employee_query(doctype, txt, searchfield, start, page_len, filters): return webnotes.conn.sql("""select name, employee_name from `tabEmployee` diff --git a/hr/doctype/employee/employee.js b/hr/doctype/employee/employee.js index 9ee7c618e6..05aec3efa3 100644 --- a/hr/doctype/employee/employee.js +++ b/hr/doctype/employee/employee.js @@ -6,7 +6,7 @@ erpnext.hr.EmployeeController = wn.ui.form.Controller.extend({ setup: function() { this.setup_leave_approver_select(); this.frm.fields_dict.user_id.get_query = function(doc,cdt,cdn) { - return { query:"controllers.queries.profile_query"} } + return { query:"core.doctype.profile.profile.profile_query"} } this.frm.fields_dict.reports_to.get_query = function(doc,cdt,cdn) { return{ query:"controllers.queries.employee_query"} } }, diff --git a/public/js/queries.js b/public/js/queries.js index fbd294757f..d0346e0cbd 100644 --- a/public/js/queries.js +++ b/public/js/queries.js @@ -5,7 +5,7 @@ wn.provide("erpnext.queries"); $.extend(erpnext.queries, { profile: function() { - return { query: "controllers.queries.profile_query" }; + return { query: "core.doctype.profile.profile.profile_query" }; }, lead: function() { diff --git a/selling/doctype/lead/lead.js b/selling/doctype/lead/lead.js index 9a86b22d63..a3ae783867 100644 --- a/selling/doctype/lead/lead.js +++ b/selling/doctype/lead/lead.js @@ -14,12 +14,12 @@ erpnext.LeadController = wn.ui.form.Controller.extend({ onload: function() { if(cur_frm.fields_dict.lead_owner.df.options.match(/^Profile/)) { cur_frm.fields_dict.lead_owner.get_query = function(doc,cdt,cdn) { - return { query:"controllers.queries.profile_query" } } + return { query:"core.doctype.profile.profile.profile_query" } } } if(cur_frm.fields_dict.contact_by.df.options.match(/^Profile/)) { cur_frm.fields_dict.contact_by.get_query = function(doc,cdt,cdn) { - return { query:"controllers.queries.profile_query" } } + return { query:"core.doctype.profile.profile.profile_query" } } } if(in_list(user_roles,'System Manager')) { diff --git a/setup/doctype/authorization_rule/authorization_rule.js b/setup/doctype/authorization_rule/authorization_rule.js index 02747a0351..00f5260b38 100644 --- a/setup/doctype/authorization_rule/authorization_rule.js +++ b/setup/doctype/authorization_rule/authorization_rule.js @@ -69,10 +69,10 @@ cur_frm.cscript.transaction = function(doc,cdt,cdn){ cur_frm.fields_dict.system_user.get_query = function(doc,cdt,cdn) { - return{ query:"controllers.queries.profile_query" } } + return{ query:"core.doctype.profile.profile.profile_query" } } cur_frm.fields_dict.approving_user.get_query = function(doc,cdt,cdn) { - return{ query:"controllers.queries.profile_query" } } + return{ query:"core.doctype.profile.profile.profile_query" } } cur_frm.fields_dict['approving_role'].get_query = cur_frm.fields_dict['system_role'].get_query; From 627c42bdb6ad73bf7a9952244659ba40ecfa404d Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Tue, 3 Sep 2013 15:34:24 +0530 Subject: [PATCH 26/50] [fix] [minor] quotation to sales order, if not able to create customer, show message --- selling/doctype/customer/customer.py | 3 +-- selling/doctype/quotation/quotation.py | 5 ++++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/selling/doctype/customer/customer.py b/selling/doctype/customer/customer.py index cb19d4f931..fb3c0062a7 100644 --- a/selling/doctype/customer/customer.py +++ b/selling/doctype/customer/customer.py @@ -40,8 +40,7 @@ class DocType(TransactionBase): def validate_values(self): if webnotes.defaults.get_global_default('cust_master_name') == 'Naming Series' and not self.doc.naming_series: - msgprint("Series is Mandatory.") - raise Exception + webnotes.throw("Series is Mandatory.", webnotes.MandatoryError) def validate(self): self.validate_values() diff --git a/selling/doctype/quotation/quotation.py b/selling/doctype/quotation/quotation.py index c1b529ca69..6ac254298c 100644 --- a/selling/doctype/quotation/quotation.py +++ b/selling/doctype/quotation/quotation.py @@ -7,7 +7,7 @@ import webnotes from webnotes.utils import cstr, getdate from webnotes.model.bean import getlist from webnotes.model.code import get_obj -from webnotes import msgprint +from webnotes import _, msgprint sql = webnotes.conn.sql @@ -276,5 +276,8 @@ def _make_customer(source_name, ignore_permissions=False): customer.doc.name += "-" + lead_name customer.insert() return customer + elif webnotes.MandatoryError: + msgprint(_("You will need to make Customer from Lead") + (" - %s" % lead_name)) + return else: raise e From 3139973662f1e6426dc8fc1fb678077bd1e9264b Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Tue, 3 Sep 2013 15:41:31 +0530 Subject: [PATCH 27/50] [fix] [minor] quotation to sales order, if not able to create customer, show message --- selling/doctype/quotation/quotation.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/selling/doctype/quotation/quotation.py b/selling/doctype/quotation/quotation.py index 6ac254298c..588d8d6e1f 100644 --- a/selling/doctype/quotation/quotation.py +++ b/selling/doctype/quotation/quotation.py @@ -276,8 +276,9 @@ def _make_customer(source_name, ignore_permissions=False): customer.doc.name += "-" + lead_name customer.insert() return customer - elif webnotes.MandatoryError: - msgprint(_("You will need to make Customer from Lead") + (" - %s" % lead_name)) - return else: raise e + except webnotes.MandatoryError: + from webnotes.utils import get_url_to_form + webnotes.throw(_("Before proceeding, please create Customer from Lead") + \ + (" - %s" % get_url_to_form("Lead", lead_name))) From 1dadf35fc739c79f3f5af0d2df8462fbf6e5187d Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Tue, 3 Sep 2013 16:21:01 +0530 Subject: [PATCH 28/50] [fix] [minor] [query] sales invoice from delivery note --- accounts/doctype/sales_invoice/sales_invoice.js | 1 - controllers/queries.py | 4 +++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/accounts/doctype/sales_invoice/sales_invoice.js b/accounts/doctype/sales_invoice/sales_invoice.js index 109d9f8a07..0c8fc3714c 100644 --- a/accounts/doctype/sales_invoice/sales_invoice.js +++ b/accounts/doctype/sales_invoice/sales_invoice.js @@ -80,7 +80,6 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte source_doctype: "Delivery Note", get_query: function() { var filters = { - docstatus: 1, company: cur_frm.doc.company }; if(cur_frm.doc.customer) filters["customer"] = cur_frm.doc.customer; diff --git a/controllers/queries.py b/controllers/queries.py index 81040a25e3..02c992b729 100644 --- a/controllers/queries.py +++ b/controllers/queries.py @@ -169,10 +169,12 @@ def get_price_list_currency(doctype, txt, searchfield, start, page_len, filters) def get_delivery_notes_to_be_billed(doctype, txt, searchfield, start, page_len, filters): return webnotes.conn.sql("""select `tabDelivery Note`.name, `tabDelivery Note`.customer_name from `tabDelivery Note` - where `tabDelivery Note`.`%(key)s` like %(txt)s %(fcond)s and + where `tabDelivery Note`.`%(key)s` like %(txt)s and + `tabDelivery Note`.docstatus = 1 %(fcond)s and (ifnull((select sum(qty) from `tabDelivery Note Item` where `tabDelivery Note Item`.parent=`tabDelivery Note`.name), 0) > ifnull((select sum(qty) from `tabSales Invoice Item` where + `tabSales Invoice Item`.docstatus = 1 and `tabSales Invoice Item`.delivery_note=`tabDelivery Note`.name), 0)) %(mcond)s order by `tabDelivery Note`.`%(key)s` asc limit %(start)s, %(page_len)s""" % { From 4263344cd2a71ef2c743fd78695ea47f0323afab Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Tue, 3 Sep 2013 16:21:21 +0530 Subject: [PATCH 29/50] [fix] [minor] customer-wise discount --- selling/utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/selling/utils.py b/selling/utils.py index 53ebbeef34..ca995125d1 100644 --- a/selling/utils.py +++ b/selling/utils.py @@ -161,7 +161,7 @@ def _get_item_discount(item_group, customer): FROM `tabItem Group` AS node, `tabItem Group` AS parent WHERE parent.lft <= node.lft and parent.rgt >= node.rgt and node.name = %s GROUP BY parent.name - ORDER BY parent.lft desc""", item_group)] + ORDER BY parent.lft desc""", (item_group,))] discount = 0 for d in parent_item_groups: From 15cdb3964d115bc0e14176776a183db0c129e72d Mon Sep 17 00:00:00 2001 From: Priya Date: Tue, 3 Sep 2013 16:27:16 +0530 Subject: [PATCH 30/50] [docs] pos documentation --- docs/user/accounts/docs.user.accounts.pos.md | 22 +++++-------------- .../user/setup/docs.user.setup.pos_setting.md | 21 ++++++++++++++++++ 2 files changed, 26 insertions(+), 17 deletions(-) create mode 100644 docs/user/setup/docs.user.setup.pos_setting.md diff --git a/docs/user/accounts/docs.user.accounts.pos.md b/docs/user/accounts/docs.user.accounts.pos.md index 9cb5079b6d..654a5d6dfa 100644 --- a/docs/user/accounts/docs.user.accounts.pos.md +++ b/docs/user/accounts/docs.user.accounts.pos.md @@ -16,17 +16,7 @@ You can make a Sales Invoice of type POS by checking on “Is POS”. When you c - Update Payment Details like your Bank / Cash Account, paid amount etc.
 - If you are writing off certain amount. For example when you receive extra cash as a result of not having exact denomination of change, check on ‘Write off Outstanding Amount’ and set the Account. -#### POS Settings - -POS includes advanced features to cater to different functionality, such as inventory management, CRM, financials, warehousing, etc., all built into the POS software. Prior to the modern POS, all of these functions were done independently and required the manual re-keying of information, which could lead to entry errors. - -If you are in retail operations, you want your Point of Sale to be as quick and efficient as possible. To do this, you can create a POS Setting for a user from: - -> Accounts > Point-of-Sale Setting - -Set default values as defined. - -![POS Settings](img/settings-pos-view.png) +Setup [POS Setting](docs.user.setup.pos_setting.html) #### Enable POS View @@ -34,7 +24,7 @@ Sales Invoice has 2 different interfaces, Invoice View and POS View. The current > Setup > Show/Hide Features -![POS View](img/enable-pos-view.png) +![POS View](img/pos-features-setup.png) ### Adding an Item @@ -42,11 +32,9 @@ At the billing counter, the retailer needs to select Items which the consumer bu **Select Item** - To select a product click on the Item image and add it into the cart. A cart is an area that prepares a customer for checkout by allowing to edit product information, adjust taxes and add discounts. -![POS](img/add-item-image-click.png) - **Barcode** - A Barcode is an optical machine-readable representation of data relating to the object to which it is attached. Enter Barcode in the barcode box and pause for a second. The Item will be automatically added to the cart. -![POS](img/add-item-barcode.png) +![POS](img/pos-add-item.png) > Tip: To change the quantity of an Item, enter your desired quantity in the quantity box. These are mostly used if the same Item is purchased in bulk. @@ -66,7 +54,7 @@ To remove multiple Items together, select multiple rows & click on “Del” but > Delete button appears only when Items are selected. -![POS](img/delete-item.png) +![POS](img/pos-remove-item.png) ### Make Payment @@ -76,7 +64,7 @@ After all the Items and their quantities are added into the cart, you are ready 1. Select your “Mode of Payment”. 1. Click on “Pay” button to Save the Sales Invoice. -![POS Payment](img/make-payment.png) +![POS Payment](img/pos-make-payment.png) Submit the document to finalise the record. After the Invoice is submitted, you can either print an invoice or email it directly to the customer. diff --git a/docs/user/setup/docs.user.setup.pos_setting.md b/docs/user/setup/docs.user.setup.pos_setting.md new file mode 100644 index 0000000000..8ea863bb3d --- /dev/null +++ b/docs/user/setup/docs.user.setup.pos_setting.md @@ -0,0 +1,21 @@ +--- +{ + "_label": "POS Setting" +} +--- + +#### POS Settings + +POS includes advanced features to cater to different functionality, such as inventory management, CRM, financials, warehousing, etc., all built into the POS software. Prior to the modern POS, all of these functions were done independently and required the manual re-keying of information, which could lead to entry errors. + +If you are in retail operations, you want your Point of Sale to be as quick and efficient as possible. To do this, you can create a POS Setting for a user from: + +> Accounts > Point-of-Sale Setting + +Set default values as defined. + + +![POS Setting](img/pos-setting.png) + + +> Important : If you specify a particular User, the POS setting will be applied only to that User. If the User option is left blank, the setting will be set for all users. From 41eba5f8d1818c2c3f01cfed4e3d70c01a4f6264 Mon Sep 17 00:00:00 2001 From: Priya Date: Tue, 3 Sep 2013 16:49:34 +0530 Subject: [PATCH 31/50] [docs] [minor] --- docs/docs.user.buying.purchase_taxes.md | 37 ---------------------- docs/docs.user.buying.supplier_type.md | 19 ----------- docs/docs.user.setup.price_lists.md | 16 ---------- docs/docs.user.stock.item_group.md | 9 ------ docs/docs.user.stock.material_issue | 26 --------------- docs/docs.user.stock.material_issue.md | 26 --------------- docs/docs.user.stock.projected_quantity.md | 27 ---------------- docs/docs.user.stock.purchase_receipt | 24 -------------- docs/docs.user.stock.purchase_return.md | 23 -------------- docs/docs.user.stock.sales_return.md | 21 ------------ docs/docs.user.stock.warehouse.md | 30 ------------------ docs/user/docs.user.md | 1 + docs/user/setup/docs.user.setup.md | 3 +- 13 files changed, 3 insertions(+), 259 deletions(-) delete mode 100644 docs/docs.user.buying.purchase_taxes.md delete mode 100644 docs/docs.user.buying.supplier_type.md delete mode 100644 docs/docs.user.setup.price_lists.md delete mode 100644 docs/docs.user.stock.item_group.md delete mode 100644 docs/docs.user.stock.material_issue delete mode 100644 docs/docs.user.stock.material_issue.md delete mode 100644 docs/docs.user.stock.projected_quantity.md delete mode 100644 docs/docs.user.stock.purchase_receipt delete mode 100644 docs/docs.user.stock.purchase_return.md delete mode 100644 docs/docs.user.stock.sales_return.md delete mode 100644 docs/docs.user.stock.warehouse.md diff --git a/docs/docs.user.buying.purchase_taxes.md b/docs/docs.user.buying.purchase_taxes.md deleted file mode 100644 index 31e58bf300..0000000000 --- a/docs/docs.user.buying.purchase_taxes.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -{ - - "_label": "Purchase Taxes" -} ---- -For Tax Accounts that you want to use in the tax templates, you must mention them as type “Tax” in your Chart of Accounts. - -Similar to your Sales Taxes and Charges Master is the Purchase Taxes and Charges Master. This is the tax template that you can use in your Purchase Orders and Purchase Invoices. - -> Buying > Purchase Taxes and Charges Master > New Purchase Taxes and Charges Master - - -![Purchase-Taxes](img/purchase-taxes.png) - - -
    - - -You can specify if the tax / charge is only for valuation (not a part of total) or only for total (does not add value to the item) or for both. - -If you select a particular tax as your Default tax, the system will apply this tax to all the purchase transactions by default. -Calculation Type: - -This can be on Net Total (that is the sum of basic amount). -On Previous Row Total / Amount (for cumulative taxes or charges). If you select this option, the tax will be applied as a percentage of the previous row (in the tax table) amount or total. -Actual (as mentioned). - -- **Account Head:** The Account ledger under which this tax will be booked. -- **Cost Center:** If the tax / charge is an income (like shipping) or expense it needs to be booked against a Cost Center. -- **Description:** Description of the tax (that will be printed in invoices / quotes). -- **Rate:** Tax rate. -- **Amount:** Tax amount. -- **Total:** Cumulative total to this point. -- **Enter Row:** If based on "Previous Row Total" you can select the row number which will be taken as a base for this calculation (default is the previous row). -- **Consider Tax or Charge for:** In this section you can specify if the tax / charge is only for valuation (not a part of total) or only for total (does not add value to the item) or for both. -- **Add or Deduct:** Whether you want to add or deduct the tax. diff --git a/docs/docs.user.buying.supplier_type.md b/docs/docs.user.buying.supplier_type.md deleted file mode 100644 index deaf01fcfc..0000000000 --- a/docs/docs.user.buying.supplier_type.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -{ - "_label": "Supplier Type" -} ---- - -Based on what the suppliers supply, they are classified into different categories called Supplier Type. -There can be different types of suppliers. You can create your own category of Supplier Type. - -> Buying > Supplier Type > New Supplier Type - -![Buying](img/supplier-type.png) - -You can classify your suppliers from a range of choice available in ERPNext. Choose from a set of given options like Distributor, Electrical,Hardware, Local, Pharmaceutical, Raw material, Services etc. - -Classifying your supplier into different types facilitates accounting and payments. - - -Type your new supplier category and Save. diff --git a/docs/docs.user.setup.price_lists.md b/docs/docs.user.setup.price_lists.md deleted file mode 100644 index 36f00f4c5c..0000000000 --- a/docs/docs.user.setup.price_lists.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -{ - "_label": "Price Lists" -} ---- - -Price List is a table of sale price for an Item. An Item can have multiple prices based on customer, currency, region, shipping cost etc. - -A Price List is a place where different rate plans can be stored. It’s a name you can give to a set of Item prices. In case you have different zones (based on the shipping costs), for different currencies etc, you can maintain different Price Lists.You can maintain a Price List for your international customers with USD as transacting currency. - - -![Price-List](img/price-lists.png) - - - - A Price List is formed when you create different Item Prices. To import Item Price visit “Import Item Price”. \ No newline at end of file diff --git a/docs/docs.user.stock.item_group.md b/docs/docs.user.stock.item_group.md deleted file mode 100644 index aca2a7876a..0000000000 --- a/docs/docs.user.stock.item_group.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -{ - "_label": "Item Group" -} ---- - -Item Group is the classification category. Depending on the type of product, you have to categorise it under its respective field. If the product is service oriented, you have to name it under the group head Service. If the product is used as a raw-material, you have to name it under the Raw-material category. In case, your product is used only in trading, you can categorise it under Trading. - -You can also create your own groups . Go to Setup- Master Data- Item Group- Item Group Tree- Add Child. diff --git a/docs/docs.user.stock.material_issue b/docs/docs.user.stock.material_issue deleted file mode 100644 index e372e7f55e..0000000000 --- a/docs/docs.user.stock.material_issue +++ /dev/null @@ -1,26 +0,0 @@ ---- -{ - "_label": "Material Issue" -} ---- - -A Warehouse stocks materials required for manufacturing or trading. The Material Issue form has to be submitted to order materials out of a Warehouse by any department. - -> Stock > Stock Entry > New Stock Entry - - -Go to Stock Entry. -Click on New Stock Entry -Select the option “Material Issue” under Purpose. -Provide Source Warehouse details. -Provide the BOM Number. -Save - - -![Material Issue](img/material-issue.png) - - - - - -Note: If you have done a stock entry and selected “Material Issue” under Purpose, that particular amount of stock will reflect as negative in stock details. diff --git a/docs/docs.user.stock.material_issue.md b/docs/docs.user.stock.material_issue.md deleted file mode 100644 index 45e3d98acf..0000000000 --- a/docs/docs.user.stock.material_issue.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -{ - "_label": "Material Issue" -} ---- - -A Warehouse stocks materials required for manufacturing or trading. The Material Issue form has to be submitted to order materials out of a Warehouse by any department. - -> Stock > Stock Entry > New Stock Entry - - -Go to Stock Entry. -Click on New Stock Entry -Select the option “Material Issue” under Purpose. -Provide Source Warehouse details. -Provide the BOM Number. -Save - - -![Material Issue](img/material-issue.png) - - - - - -Note: If you have done a stock entry and selected “Material Issue” under Purpose, that particular amount of stock will reflect as negative in stock details. \ No newline at end of file diff --git a/docs/docs.user.stock.projected_quantity.md b/docs/docs.user.stock.projected_quantity.md deleted file mode 100644 index 8fff1336b9..0000000000 --- a/docs/docs.user.stock.projected_quantity.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -{ - "_label": "Projected Quantity" -} ---- - -Projected Quantity is the level of stock that is predicted for a particular Item, based on the current stock levels and other requirements.It is the quantity of gross inventory that includes supply and demand in the past which is done as part of the planning process. - -The projected inventory is used by the planning system to monitor the reorder point and to determine the reorder quantity. The projected Quantity is used by the planning engine to monitor the safety stock levels. These levels are maintained to serve unexpected demands. - -Having a tight control of the projected inventory is crucial to determine shortages and to calculate the right order quantity. - - - -![Projected Quantity Stock Report](img/projected-quantity-stock-report.png) - - - - - -> Projected Qty = Actual Qty + Planned Qty + Requested Qty + Ordered Qty - Reserved Qty - -- Actual Qty: Quantity available in the warehouse. -- Planned Qty: Quantity, for which, Production Order has been raised, but is pending to be manufactured. -- Requested Qty: Quantity requested for purchase, but not ordered. -- Ordered Qty: Quantity ordered for purchase, but not received. -- Reserved Qty: Quantity ordered for sale, but not delivered. \ No newline at end of file diff --git a/docs/docs.user.stock.purchase_receipt b/docs/docs.user.stock.purchase_receipt deleted file mode 100644 index fd934d2186..0000000000 --- a/docs/docs.user.stock.purchase_receipt +++ /dev/null @@ -1,24 +0,0 @@ ---- -{ - "_label": "Purchase Return" -} ---- -ERPNext has an option to account for products that are returned to the supplier. This may be on account of a number of reasons like defects in goods, quality not matching, the buyer not needing the stock, etc. The transactions dealing with return of goods are also accounting transactions and have to be recorded in the books of accounts just like any other accounting transaction. - - -> Stock > Stock Entry > New Stock Entry - - -![Purchase Return](img/purchase-return.png) - - - - - - -- To select Purchase Return go to Stock Entry. -- Select Purchase Return under Purpose. -- Enter Purchase Receipt number. -- Enter Source Warehouse details. -- Provide Supplier Information. -- Save the document. \ No newline at end of file diff --git a/docs/docs.user.stock.purchase_return.md b/docs/docs.user.stock.purchase_return.md deleted file mode 100644 index 13a325a98f..0000000000 --- a/docs/docs.user.stock.purchase_return.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -{ - "_label": "Purchase Return" -} ---- -ERPNext has an option to account for products that are returned to the supplier.This may be on account of a number of reasons like defects in goods, quality not matching, the buyer not needing the stock, etc. The transactions dealing with return of goods are also accounting transactions and have to be recorded in the books of accounts just like any other accounting transaction. - - -> Stock > Stock Entry > New Stock Entry - - -![Purchase Return](img/purchase-return.png) - - - - -- To select Purchase Return go to Stock Entry. -- Select Purchase Return under Purpose. -- Enter Purchase Receipt number. -- Enter Source Warehouse details. -- Provide Supplier Information. -- Save the document. - diff --git a/docs/docs.user.stock.sales_return.md b/docs/docs.user.stock.sales_return.md deleted file mode 100644 index 3198db0f0e..0000000000 --- a/docs/docs.user.stock.sales_return.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -{ - "_label": "Sales Return" -} ---- -Goods sold being returned is quite a common practice in Business. They could be returned by the customer on quality issues, non-delivery on agreed date, or any other reason. ERPNext allows this transaction for ease of accounting. - -> Stock > Stock Entry > New Stock Entry - - - -![Sales Return](img/sales-return.png) - - - - -- For Sales Return click on Stock Entry -- Select Sales Return under Purpose -- Mention the Delivery Note number and the Sales Invoice number. -- Mention Contact Information of the Customer. -- Save the file. \ No newline at end of file diff --git a/docs/docs.user.stock.warehouse.md b/docs/docs.user.stock.warehouse.md deleted file mode 100644 index dd8273ab4d..0000000000 --- a/docs/docs.user.stock.warehouse.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -{ - "_label": "Warehouse" -} ---- - -A warehouse is a commercial building for storage of goods. Warehouses are used by manufacturers, importers, exporters, wholesalers, transport businesses, customs, etc. They are usually large plain buildings in industrial areas of cities,towns, and villages. They usually have loading docks to load and unload goods from trucks. - -To go to Warehouse, click on Stock and go to Warehouse under Masters. - - -> Stock > Warehouse > New Warehouse - - - -![Warehouse](img/warehouse.png) - - - - -In ERPNext, every different company can have a separate Warehouse. Every Warehouse will belong to a specific company. User can get company wise accurate stock balance. The Warehouses are saved with their respective company’s abbreviations. This facilitates in identifying which Warehouse belongs to which company, at a glance. - -You can include user restrictions for these Warehouses. In case you do not wish a particular user to operate on a particular Warehouse, you can refrain the user from accessing that Warehouse. - -### Merge Warehouse - -In day to day transactions, if duplicate entries are done by mistake resulting in duplicate Warehouse, these mistakes can be rectified. Duplicate records can be merged into a single Warehouse. Enter the place where you want to keep all the warehouse records. Click on the Merge button. Once this transaction is done, delete the empty Warehouse. - -ERPNext system maintains stock balance for every distinct combination of Item and Warehouse. Thus you can get stock balance for any specific Item in a particular Warehouse on any particular date. - diff --git a/docs/user/docs.user.md b/docs/user/docs.user.md index 4086521143..c537fd1da9 100644 --- a/docs/user/docs.user.md +++ b/docs/user/docs.user.md @@ -50,6 +50,7 @@ Contents 1. [Setting up Taxes](docs.user.setup.taxes.html) 1. [Price Lists](docs.user.setup.price_lists.html) 1. [Adding Opening Entries](docs.user.setup.opening.html) + 1. [POS Setting](docs.user.setup.pos_setting.html) 1. [Selling](docs.user.selling.html) 1. Selling Setup 1. [Customer Group](docs.user.selling.customer_groups.html) diff --git a/docs/user/setup/docs.user.setup.md b/docs/user/setup/docs.user.setup.md index 4663ccc0f6..493021d826 100644 --- a/docs/user/setup/docs.user.setup.md +++ b/docs/user/setup/docs.user.setup.md @@ -19,7 +19,8 @@ "docs.user.setup.sms", "docs.user.setup.taxes", "docs.user.setup.price_lists", - "docs.user.setup.opening" + "docs.user.setup.opening", + "docs.user.setup.pos_setting" ] } --- From d50d924ee5f9df04fe511a0153e92481b3647f34 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Tue, 3 Sep 2013 17:04:05 +0530 Subject: [PATCH 32/50] [docs] custom script examples, [build] move CMS make to app via event_handlers.on_build --- .../docs.dev.custom_script.calculate.md | 24 +++++++++++++ .../docs.dev.custom_script.fetch.md | 20 +++++++++++ .../docs.dev.custom_script.item_code.md | 35 +++++++++++++++++++ .../docs.dev.custom_script.read_only.md | 13 +++++++ .../docs.dev.custom_script.validate.md | 12 +++++++ .../docs.dev.custom_script.validate1.md | 12 +++++++ .../docs.dev.custom_script.validate2.md | 22 ++++++++++++ .../docs.dev.custom_script.validate3.md | 17 +++++++++ docs/dev/docs.dev.client_script.md | 10 ------ docs/dev/docs.dev.custom_script.md | 31 ++++++++++++++++ docs/dev/docs.dev.md | 2 +- startup/event_handlers.py | 3 ++ 12 files changed, 190 insertions(+), 11 deletions(-) create mode 100644 docs/dev/custom_script_examples/docs.dev.custom_script.calculate.md create mode 100644 docs/dev/custom_script_examples/docs.dev.custom_script.fetch.md create mode 100644 docs/dev/custom_script_examples/docs.dev.custom_script.item_code.md create mode 100644 docs/dev/custom_script_examples/docs.dev.custom_script.read_only.md create mode 100644 docs/dev/custom_script_examples/docs.dev.custom_script.validate.md create mode 100644 docs/dev/custom_script_examples/docs.dev.custom_script.validate1.md create mode 100644 docs/dev/custom_script_examples/docs.dev.custom_script.validate2.md create mode 100644 docs/dev/custom_script_examples/docs.dev.custom_script.validate3.md delete mode 100644 docs/dev/docs.dev.client_script.md create mode 100644 docs/dev/docs.dev.custom_script.md diff --git a/docs/dev/custom_script_examples/docs.dev.custom_script.calculate.md b/docs/dev/custom_script_examples/docs.dev.custom_script.calculate.md new file mode 100644 index 0000000000..6744e2b6f1 --- /dev/null +++ b/docs/dev/custom_script_examples/docs.dev.custom_script.calculate.md @@ -0,0 +1,24 @@ +--- +{ + "_label": "Calculate Incentive for Sales Team" +} +--- +Can be used in any Sales Transaction with **Sales Team** Table: + + + cur_frm.cscript.custom_validate = function(doc) { + // calculate incentives for each person on the deal + total_incentive = 0 + $.each(wn.model.get("Sales Team", {parent:doc.name}), function(i, d) { + + // calculate incentive + var incentive_percent = 2; + if(doc.grand_total > 400) incentive_percent = 4; + + // actual incentive + d.incentives = flt(doc.grand_total) * incentive_percent / 100; + total_incentive += flt(d.incentives) + }); + + doc.total_incentive = total_incentive; + } \ No newline at end of file diff --git a/docs/dev/custom_script_examples/docs.dev.custom_script.fetch.md b/docs/dev/custom_script_examples/docs.dev.custom_script.fetch.md new file mode 100644 index 0000000000..d0414fbeca --- /dev/null +++ b/docs/dev/custom_script_examples/docs.dev.custom_script.fetch.md @@ -0,0 +1,20 @@ +--- +{ + "_label": "Custom Script: Fetch Values from Master" +} +--- +To pull a value of a link on selection, use the `add_fetch` method. + + add_fetch(link_fieldname, source_fieldname, target_fieldname) + +### Example + +You create Custom Field **VAT ID** (`vat_id`) in **Customer** and **Sales Invoice** and want to make sure this value gets updated every time you select a Customer in a Sales Invoice. + +Then in the Sales Invoice Custom Script, add this line: + + cur_frm.add_fetch('customer','vat_id','vat_id') + + +--- +See: [How to create a custom script](!docs.dev.custom_script.html) \ No newline at end of file diff --git a/docs/dev/custom_script_examples/docs.dev.custom_script.item_code.md b/docs/dev/custom_script_examples/docs.dev.custom_script.item_code.md new file mode 100644 index 0000000000..22e75c943c --- /dev/null +++ b/docs/dev/custom_script_examples/docs.dev.custom_script.item_code.md @@ -0,0 +1,35 @@ +--- +{ + "_label": "Generate Item Code based on Custom Logic" +} +--- +Add this in the Custom Script of **Item**, so that the new Item Code is generated just before the a new Item is saved. + + cur_frm.cscript.custom_validate = function(doc) { + // clear item_code (name is from item_code) + doc.item_code = ""; + + // first 2 characters based on item_group + switch(doc.item_group) { + case "Test A": + doc.item_code = "TA"; + break; + case "Test B": + doc.item_code = "TB"; + break; + default: + doc.item_code = "XX"; + } + + // add next 2 characters based on brand + switch(doc.brand) { + case "Brand A": + doc.item_code += "BA"; + break; + case "Brand B": + doc.item_code += "BB"; + break; + default: + doc.item_code += "BX"; + } + } \ No newline at end of file diff --git a/docs/dev/custom_script_examples/docs.dev.custom_script.read_only.md b/docs/dev/custom_script_examples/docs.dev.custom_script.read_only.md new file mode 100644 index 0000000000..9da3e858f3 --- /dev/null +++ b/docs/dev/custom_script_examples/docs.dev.custom_script.read_only.md @@ -0,0 +1,13 @@ +--- +{ + "_label": "Make an Item read-only after Saving" +} +--- +Use the method `cur_frm.set_df_property` to update the field's display. + +In this script we also use the `__islocal` property of the doc to check if the document has been saved atleast once or is never saved. If `__islocal` is `1`, then the document has never been saved. + + cur_frm.cscript.custom_refresh = function(doc) { + // use the __islocal value of doc, to check if the doc is saved or not + cur_frm.set_df_property("myfield", "read_only", doc.__islocal ? 0 : 1); + } \ No newline at end of file diff --git a/docs/dev/custom_script_examples/docs.dev.custom_script.validate.md b/docs/dev/custom_script_examples/docs.dev.custom_script.validate.md new file mode 100644 index 0000000000..a22851cd26 --- /dev/null +++ b/docs/dev/custom_script_examples/docs.dev.custom_script.validate.md @@ -0,0 +1,12 @@ +--- +{ + "_label": "Date Validation: Do not allow past dates in a date field" +} +--- + + cur_frm.cscript.custom_validate = function(doc) { + if (doc.from_date < get_today()) { + msgprint("You can not select past date in From Date"); + validated = false; + } + } \ No newline at end of file diff --git a/docs/dev/custom_script_examples/docs.dev.custom_script.validate1.md b/docs/dev/custom_script_examples/docs.dev.custom_script.validate1.md new file mode 100644 index 0000000000..b12c61fa4a --- /dev/null +++ b/docs/dev/custom_script_examples/docs.dev.custom_script.validate1.md @@ -0,0 +1,12 @@ +--- +{ + "_label": "Restrict Purpose of Stock Entry" +} +--- + + cur_frm.cscript.custom_validate = function(doc) { + if(user=="user1@example.com" && doc.purpose!="Material Receipt") { + msgprint("You are only allowed Material Receipt"); + validated = false; + } + } \ No newline at end of file diff --git a/docs/dev/custom_script_examples/docs.dev.custom_script.validate2.md b/docs/dev/custom_script_examples/docs.dev.custom_script.validate2.md new file mode 100644 index 0000000000..05d662e67c --- /dev/null +++ b/docs/dev/custom_script_examples/docs.dev.custom_script.validate2.md @@ -0,0 +1,22 @@ +--- +{ + "_label": "Restrict User Based on Child Record (Warehouse)" +} +--- + + // restrict certain warehouse to Material Manager + cur_frm.cscript.custom_validate = function(doc) { + if(user_roles.indexOf("Material Manager")==-1) { + + var restricted_in_source = wn.model.get("Stock Entry Detail", + {parent:cur_frm.doc.name, s_warehouse:"Restricted"}); + + var restricted_in_target = wn.model.get("Stock Entry Detail", + {parent:cur_frm.doc.name, t_warehouse:"Restricted"}) + + if(restricted_in_source.length || restricted_in_target.length) { + msgprint("Only Material Manager can make entry in Restricted Warehouse"); + validated = false; + } + } + } \ No newline at end of file diff --git a/docs/dev/custom_script_examples/docs.dev.custom_script.validate3.md b/docs/dev/custom_script_examples/docs.dev.custom_script.validate3.md new file mode 100644 index 0000000000..629f1c186d --- /dev/null +++ b/docs/dev/custom_script_examples/docs.dev.custom_script.validate3.md @@ -0,0 +1,17 @@ +--- +{ + "_label": "Restrict Cancel Rights based on Certain Order Value" +} +--- +Add a handler to `custom_before_cancel` event: + + cur_frm.cscript.custom_before_cancel = function(doc) { + if (user_roles.indexOf("Accounts User")!=-1 && user_roles.indexOf("Accounts Manager")==-1 + && user_roles.indexOf("System Manager")==-1) { + if (flt(doc.grand_total) > 10000) { + msgprint("You can not cancel this transaction, because grand total \ + is greater than 10000"); + validated = false; + } + } + } diff --git a/docs/dev/docs.dev.client_script.md b/docs/dev/docs.dev.client_script.md deleted file mode 100644 index fc82f9d5ff..0000000000 --- a/docs/dev/docs.dev.client_script.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -{ - "_label": "Client Scripts: Custoimzing ERPNext" - -} ---- - - - - diff --git a/docs/dev/docs.dev.custom_script.md b/docs/dev/docs.dev.custom_script.md new file mode 100644 index 0000000000..ad50637473 --- /dev/null +++ b/docs/dev/docs.dev.custom_script.md @@ -0,0 +1,31 @@ +--- +{ + "_label": "Custom Script Examples", + "_toc": [ + "docs.dev.custom_script.fetch", + "docs.dev.custom_script.validate", + "docs.dev.custom_script.validate1", + "docs.dev.custom_script.validate2", + "docs.dev.custom_script.validate3", + "docs.dev.custom_script.read_only", + "docs.dev.custom_script.calculate", + "docs.dev.custom_script.item_code" + ] +} +--- +### How to Create a Custom Script + +Create a Custom Script (you must have System Manager role for this): + +1. Got to: Setup > Custom Script > New Custom Script +1. Select the DocType in which you want to add the Custom Script + +--- +### Notes + +1. Server Custom Scripts are only available for the Administrator. +1. Client Custom Scripts are in Javascript and Server Custom Scripts are in Python. +1. For testing, make sure to go to Tools > Clear Cache and refresh after updating a Custom Script. + + + diff --git a/docs/dev/docs.dev.md b/docs/dev/docs.dev.md index 285f1767c7..15afea8e25 100644 --- a/docs/dev/docs.dev.md +++ b/docs/dev/docs.dev.md @@ -6,7 +6,7 @@ "docs.dev.quickstart", "docs.dev.framework", "docs.dev.modules", - "docs.dev.client_script", + "docs.dev.custom_script", "docs.dev.api", "docs.dev.translate", "docs.dev.docs" diff --git a/startup/event_handlers.py b/startup/event_handlers.py index e807797a32..71eed7481c 100644 --- a/startup/event_handlers.py +++ b/startup/event_handlers.py @@ -64,6 +64,9 @@ def check_if_expired(): webnotes.response['message'] = 'Account Expired' raise webnotes.AuthenticationError +def on_build(): + from website.helpers.make_web_include_files import make + make() def comment_added(doc): """add comment to feed""" From 430b4a77b41066f4ae22c1a09d452241548905a8 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Tue, 3 Sep 2013 17:13:50 +0530 Subject: [PATCH 33/50] [build] move latest update to app via event_handlers.on_build --- startup/event_handlers.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/startup/event_handlers.py b/startup/event_handlers.py index 71eed7481c..fa08962fc2 100644 --- a/startup/event_handlers.py +++ b/startup/event_handlers.py @@ -67,6 +67,9 @@ def check_if_expired(): def on_build(): from website.helpers.make_web_include_files import make make() + + from home.page.latest_updates import latest_updates + latest_updates.make() def comment_added(doc): """add comment to feed""" From 9dd25b35d7a1f6b487f72bc7171fd14cb98d98b2 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Tue, 3 Sep 2013 17:36:41 +0530 Subject: [PATCH 34/50] [minor] [boot] moved load_country_and_currency to framework --- startup/boot.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/startup/boot.py b/startup/boot.py index 79f0a7bd04..ce446e9ecf 100644 --- a/startup/boot.py +++ b/startup/boot.py @@ -16,7 +16,9 @@ def boot_session(bootinfo): if webnotes.session['user']!='Guest': bootinfo['letter_heads'] = get_letter_heads() - + + load_country_and_currency(bootinfo) + import webnotes.model.doctype bootinfo['notification_settings'] = webnotes.doc("Notification Control", "Notification Control").get_values() @@ -36,7 +38,15 @@ def boot_session(bootinfo): bootinfo['docs'] += webnotes.conn.sql("""select name, default_currency, cost_center from `tabCompany`""", as_dict=1, update={"doctype":":Company"}) - + +def load_country_and_currency(bootinfo): + if bootinfo.control_panel.country and \ + webnotes.conn.exists("Country", bootinfo.control_panel.country): + bootinfo["docs"] += [webnotes.doc("Country", bootinfo.control_panel.country)] + + bootinfo["docs"] += webnotes.conn.sql("""select * from tabCurrency + where ifnull(enabled,0)=1""", as_dict=1, update={"doctype":":Currency"}) + def get_letter_heads(): """load letter heads with startup""" import webnotes From 3b152ba6c72f9687b9e6f40c801ae3bd845e7443 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 3 Sep 2013 23:19:08 +0530 Subject: [PATCH 35/50] [fix] [minor] make bank voucher from expense claim and serial no status --- hr/doctype/expense_claim/expense_claim.js | 4 ++-- stock/doctype/serial_no/serial_no.py | 4 +--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/hr/doctype/expense_claim/expense_claim.js b/hr/doctype/expense_claim/expense_claim.js index ad3dacebda..65c557947f 100644 --- a/hr/doctype/expense_claim/expense_claim.js +++ b/hr/doctype/expense_claim/expense_claim.js @@ -27,8 +27,8 @@ erpnext.hr.ExpenseClaimController = wn.ui.form.Controller.extend({ var d1 = wn.model.add_child(jv, 'Journal Voucher Detail', 'entries'); d1.credit = cur_frm.doc.total_sanctioned_amount; if(r.message) { - d1.account = r.message[0].account; - d1.balance = r.message[0].balance; + d1.account = r.message.account; + d1.balance = r.message.balance; } loaddoc('Journal Voucher', jv.name); diff --git a/stock/doctype/serial_no/serial_no.py b/stock/doctype/serial_no/serial_no.py index e7018a2beb..1feab02cf5 100644 --- a/stock/doctype/serial_no/serial_no.py +++ b/stock/doctype/serial_no/serial_no.py @@ -52,9 +52,7 @@ class DocType(StockController): webnotes.throw(_("Item Code cannot be changed for Serial No."), SerialNoCannotCannotChangeError) if not self.via_stock_ledger and warehouse != self.doc.warehouse: webnotes.throw(_("Warehouse cannot be changed for Serial No."), SerialNoCannotCannotChangeError) - - if not self.doc.warehouse and self.doc.status=="Available": - self.doc.status = "Not Available" + def validate_item(self): """ From c8c229dcc0c62d95b4517f5ee6b6a7220a12d69e Mon Sep 17 00:00:00 2001 From: Priya Date: Wed, 4 Sep 2013 12:39:43 +0530 Subject: [PATCH 36/50] [docs] backup manager docs --- .../accounts/docs.user.accounts.payments.md | 11 +++++ .../docs.user.accounts.purchase_invoice.md | 10 ++++ .../docs.user.accounts.sales_invoice.md | 13 +++++ docs/user/docs.user.md | 1 + .../setup/docs.user.setup.cost_centers.md | 4 +- docs/user/setup/docs.user.setup.md | 3 +- .../docs.user.setup.third_party_backups.md | 47 +++++++++++++++++++ 7 files changed, 86 insertions(+), 3 deletions(-) create mode 100644 docs/user/setup/docs.user.setup.third_party_backups.md diff --git a/docs/user/accounts/docs.user.accounts.payments.md b/docs/user/accounts/docs.user.accounts.payments.md index d64d94707b..ce81073df8 100644 --- a/docs/user/accounts/docs.user.accounts.payments.md +++ b/docs/user/accounts/docs.user.accounts.payments.md @@ -10,6 +10,17 @@ Payments made against Sales Invoices or Purchase Invoices can be made by clickin 1. Enter the cheque number, cheque date. 1. Save and Submit. + + + + +![Payment Entry](img/payment-entry.png) + + + + + + Payments can also be made independent of invoices by creating a new Journal Voucher and selecting the type of payment. #### Incoming Payment diff --git a/docs/user/accounts/docs.user.accounts.purchase_invoice.md b/docs/user/accounts/docs.user.accounts.purchase_invoice.md index 8a49353577..32be689df2 100644 --- a/docs/user/accounts/docs.user.accounts.purchase_invoice.md +++ b/docs/user/accounts/docs.user.accounts.purchase_invoice.md @@ -11,6 +11,16 @@ To make a new Purchase Invoice, go to: or click on “Make Purchase Invoice” in Purchase Order or Purchase Receipt. + + + +![Purchase Invoice](img/purchase-invoice.png) + + + + + + The concept of “Posting Date” is again same as Sales Invoice. “Bill No” and “Bill Date” helps to track the bill number as set by your Supplier for reference. #### Accounting Impact diff --git a/docs/user/accounts/docs.user.accounts.sales_invoice.md b/docs/user/accounts/docs.user.accounts.sales_invoice.md index 3130fbebc8..fff37a57d4 100644 --- a/docs/user/accounts/docs.user.accounts.sales_invoice.md +++ b/docs/user/accounts/docs.user.accounts.sales_invoice.md @@ -13,6 +13,19 @@ You can create a Sales Invoice directly from or from the “Make Sales Invoice” button in the Sales Order or Delivery Note. + + + + + + + +![Sales Invoice](img/sales-invoice.png) + + + + + #### Accounting Impact All Sales must be booked against an “Income Account”. This refers to an Account in the “Income” section of your Chart of Accounts. It is a good practice to classify your income by type (like product income, service income etc). The Income Account must be set for each row of the Items table. diff --git a/docs/user/docs.user.md b/docs/user/docs.user.md index c537fd1da9..3382e99169 100644 --- a/docs/user/docs.user.md +++ b/docs/user/docs.user.md @@ -51,6 +51,7 @@ Contents 1. [Price Lists](docs.user.setup.price_lists.html) 1. [Adding Opening Entries](docs.user.setup.opening.html) 1. [POS Setting](docs.user.setup.pos_setting.html) + 1. [Third Party Backups](docs.user.setup.third_party_backups.html) 1. [Selling](docs.user.selling.html) 1. Selling Setup 1. [Customer Group](docs.user.selling.customer_groups.html) diff --git a/docs/user/setup/docs.user.setup.cost_centers.md b/docs/user/setup/docs.user.setup.cost_centers.md index 4e36ceddc7..e4841d8795 100644 --- a/docs/user/setup/docs.user.setup.cost_centers.md +++ b/docs/user/setup/docs.user.setup.cost_centers.md @@ -19,9 +19,9 @@ For example, if you have two types of sales: - Walk-in Sales - Online Sales -You may not have shipping expenses for your walk-in customers, and no shop-rent for your online customers. If you want to get the profitability of each of these separately, you create the two as Cost Centers and you can mark all sales as either "Walk-in" or "Online" and also all your purchases in the same way. +You may not have shipping expenses for your walk-in customers, and no shop-rent for your online customers. If you want to get the profitability of each of these separately, you should create the two as Cost Centers and mark all sales as either "Walk-in" or "Online". Mark your all your purchases in the same way. -So when you do your analysis you get a better understanding as to which side of your business is doing better. Since ERPNext has an option to add multiple Companies, you can create Cost Centers for each Company and manage it separately. +Thus when you do your analysis you get a better understanding as to which side of your business is doing better. Since ERPNext has an option to add multiple Companies, you can create Cost Centers for each Company and manage it separately. ### Chart of Cost Centers diff --git a/docs/user/setup/docs.user.setup.md b/docs/user/setup/docs.user.setup.md index 493021d826..bd5c499745 100644 --- a/docs/user/setup/docs.user.setup.md +++ b/docs/user/setup/docs.user.setup.md @@ -20,7 +20,8 @@ "docs.user.setup.taxes", "docs.user.setup.price_lists", "docs.user.setup.opening", - "docs.user.setup.pos_setting" + "docs.user.setup.pos_setting", + "docs.user.setup.third_party_backups" ] } --- diff --git a/docs/user/setup/docs.user.setup.third_party_backups.md b/docs/user/setup/docs.user.setup.third_party_backups.md new file mode 100644 index 0000000000..04f6a4c6b3 --- /dev/null +++ b/docs/user/setup/docs.user.setup.third_party_backups.md @@ -0,0 +1,47 @@ +--- +{ + "_label": "Third Party Backups" +} +--- + +If you wish to store your backups on a periodic basis,on Dropbox, you can do it directly through ERPNext. + +> Setup > Manage 3rd Party Backups + + + +![Third Party Backups](img/third-party-backups.png) + + +On the Backup Manager page, enter the email addresses of those people whom you wish to notify about the upload status. Under the topic 'Sync with Dropbox', select whether you wish to upload Daily, Weekly or Never. The third step is to click on **Allow Dropbox Access**. + +> Tip: In future, if you wish to discontinue uploading backups to dropbox, then select the Never option. + +![Backup Manager](img/backup-manager.png) + + + + You need to login to your dropbox account, with your user id and password. + + + +![Dropbox Access](img/dropbox-access.png) + + + +## Open Source Users + + +Installing Pre-Requisites + + pip install dropbox + pip install google-api-python-client + +
    +#### Create an App in Dropbox + +First create your Dropbox account.After successful creation of account you will receive `app_key`, `app_secret` and `access_type`. Now open `conf.py` and set `app_key` as `dropbox_access_key` and `app_secret` as `dropbox_secret_key` + + +
    +> Note: Please ensure Allow Pop-ups are enabled in your browser. From 3e34a6d0e1329ead54c0ef65d2405b9e495daa26 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 4 Sep 2013 12:54:33 +0530 Subject: [PATCH 37/50] [fix] [minor] serial no status update for material transfer --- patches/patch_list.py | 1 + .../p02_fix_serial_no_status.py | 28 +++++++++++++++++++ stock/doctype/stock_entry/stock_entry.py | 6 +++- .../stock_ledger_entry/stock_ledger_entry.py | 9 +++--- 4 files changed, 39 insertions(+), 5 deletions(-) create mode 100644 patches/september_2013/p02_fix_serial_no_status.py diff --git a/patches/patch_list.py b/patches/patch_list.py index 320614a23d..ff28031a8f 100644 --- a/patches/patch_list.py +++ b/patches/patch_list.py @@ -259,4 +259,5 @@ patch_list = [ "execute:webnotes.bean('Style Settings').save() #2013-08-20", "patches.september_2013.p01_fix_buying_amount_gl_entries", "patches.september_2013.p01_update_communication", + "patches.september_2013.p02_fix_serial_no_status", ] \ No newline at end of file diff --git a/patches/september_2013/p02_fix_serial_no_status.py b/patches/september_2013/p02_fix_serial_no_status.py new file mode 100644 index 0000000000..8c91d72fb9 --- /dev/null +++ b/patches/september_2013/p02_fix_serial_no_status.py @@ -0,0 +1,28 @@ +# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. +# License: GNU General Public License v3. See license.txt + +from __future__ import unicode_literals +import webnotes + +def execute(): + stock_entries = webnotes.conn.sql("""select ste_item.serial_no, ste.name + from `tabStock Entry Detail` ste_item, `tabStock Entry` ste + where ste.name = ste_item.parent + and ifnull(ste_item.serial_no, '') != '' + and ste.purpose='Material Transfer' + and ste.modified>='2013-08-14' + order by ste.posting_date desc, ste.posting_time desc, ste.name desc""", as_dict=1) + + for d in stock_entries: + serial_nos = d.serial_no.split("\n") + for serial_no in serial_nos: + serial_bean = webnotes.bean("Serial No", serial_no) + if serial_bean.doc.status == "Not Available": + latest_sle = webnotes.conn.sql("""select voucher_no from `tabStock Ledger Entry` + where item_code=%s and warehouse=%s and serial_no like %s + order by name desc limit 1""", + (serial_bean.doc.item_code, serial_bean.doc.warehouse, "%%%s%%" % serial_no)) + + if latest_sle and latest_sle[0][0] == d.name: + serial_bean.doc.status = "Available" + serial_bean.save() \ No newline at end of file diff --git a/stock/doctype/stock_entry/stock_entry.py b/stock/doctype/stock_entry/stock_entry.py index e3fc67e0fc..6a61461ac5 100644 --- a/stock/doctype/stock_entry/stock_entry.py +++ b/stock/doctype/stock_entry/stock_entry.py @@ -343,10 +343,14 @@ class DocType(StockController): def update_stock_ledger(self, is_cancelled=0): self.values = [] for d in getlist(self.doclist, 'mtn_details'): - if cstr(d.s_warehouse): + if cstr(d.s_warehouse) and not is_cancelled: self.add_to_values(d, cstr(d.s_warehouse), -flt(d.transfer_qty), is_cancelled) + if cstr(d.t_warehouse): self.add_to_values(d, cstr(d.t_warehouse), flt(d.transfer_qty), is_cancelled) + + if cstr(d.s_warehouse) and is_cancelled: + self.add_to_values(d, cstr(d.s_warehouse), -flt(d.transfer_qty), is_cancelled) get_obj('Stock Ledger', 'Stock Ledger').update_stock(self.values, self.doc.amended_from and 'Yes' or 'No') diff --git a/stock/doctype/stock_ledger_entry/stock_ledger_entry.py b/stock/doctype/stock_ledger_entry/stock_ledger_entry.py index 58fc828f2d..2f365383fd 100644 --- a/stock/doctype/stock_ledger_entry/stock_ledger_entry.py +++ b/stock/doctype/stock_ledger_entry/stock_ledger_entry.py @@ -119,13 +119,14 @@ class DocType(DocListController): if self.doc.actual_qty < 0: if sr.doc.warehouse!=self.doc.warehouse: - webnotes.throw(_("Warehouse does not belong to Item") + \ - (": %s (%s)" % (self.doc.item_code, serial_no)), SerialNoWarehouseError) + webnotes.throw(_("Serial No") + ": " + serial_no + + _(" does not belong to Warehouse") + ": " + self.doc.warehouse, + SerialNoWarehouseError) if self.doc.voucher_type in ("Delivery Note", "Sales Invoice") \ and sr.doc.status != "Available": - webnotes.throw(_("Serial No status must be 'Available' to Deliver") + \ - ": " + serial_no, SerialNoStatusError) + webnotes.throw(_("Serial No status must be 'Available' to Deliver") + + ": " + serial_no, SerialNoStatusError) sr.doc.warehouse = None From 2851bc051445c490f49896989ef918c044d00efe Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 4 Sep 2013 13:02:58 +0530 Subject: [PATCH 38/50] [minor] [tetscases] for serialized item --- stock/doctype/stock_entry/test_stock_entry.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/stock/doctype/stock_entry/test_stock_entry.py b/stock/doctype/stock_entry/test_stock_entry.py index b9b32306d8..3beb61ddc8 100644 --- a/stock/doctype/stock_entry/test_stock_entry.py +++ b/stock/doctype/stock_entry/test_stock_entry.py @@ -648,6 +648,9 @@ class TestStockEntry(unittest.TestCase): self.assertTrue(webnotes.conn.exists("Serial No", "ABCD")) self.assertTrue(webnotes.conn.exists("Serial No", "EFGH")) + se.cancel() + self.assertFalse(webnotes.conn.get_value("Serial No", "ABCD", "warehouse")) + def test_serial_no_not_exists(self): se = webnotes.bean(copy=test_records[0]) se.doc.purpose = "Material Issue" @@ -699,6 +702,9 @@ class TestStockEntry(unittest.TestCase): se.insert() se.submit() self.assertTrue(webnotes.conn.get_value("Serial No", serial_no, "warehouse"), "_Test Warehouse 1 - _TC") + + se.cancel() + self.assertTrue(webnotes.conn.get_value("Serial No", serial_no, "warehouse"), "_Test Warehouse - _TC") def test_serial_warehouse_error(self): make_serialized_item() @@ -720,7 +726,6 @@ class TestStockEntry(unittest.TestCase): serial_no = get_serial_nos(se.doclist[1].serial_no)[0] self.assertFalse(webnotes.conn.get_value("Serial No", serial_no, "warehouse")) - self.assertTrue(webnotes.conn.get_value("Serial No", serial_no, "status"), "Not Available") def make_serialized_item(): se = webnotes.bean(copy=test_records[0]) From df1854f0b5f465eaf8bc5fb656d03362b8ef0cab Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Wed, 4 Sep 2013 13:07:17 +0530 Subject: [PATCH 39/50] [fix] [minor] serial no status update for material transfer --- .../p02_fix_serial_no_status.py | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/patches/september_2013/p02_fix_serial_no_status.py b/patches/september_2013/p02_fix_serial_no_status.py index 8c91d72fb9..714cd7a377 100644 --- a/patches/september_2013/p02_fix_serial_no_status.py +++ b/patches/september_2013/p02_fix_serial_no_status.py @@ -15,14 +15,16 @@ def execute(): for d in stock_entries: serial_nos = d.serial_no.split("\n") - for serial_no in serial_nos: - serial_bean = webnotes.bean("Serial No", serial_no) - if serial_bean.doc.status == "Not Available": - latest_sle = webnotes.conn.sql("""select voucher_no from `tabStock Ledger Entry` - where item_code=%s and warehouse=%s and serial_no like %s - order by name desc limit 1""", - (serial_bean.doc.item_code, serial_bean.doc.warehouse, "%%%s%%" % serial_no)) + for sr in serial_nos: + serial_no = sr.strip() + if serial_no: + serial_bean = webnotes.bean("Serial No", serial_no) + if serial_bean.doc.status == "Not Available": + latest_sle = webnotes.conn.sql("""select voucher_no from `tabStock Ledger Entry` + where item_code=%s and warehouse=%s and serial_no like %s + order by name desc limit 1""", (serial_bean.doc.item_code, + serial_bean.doc.warehouse, "%%%s%%" % serial_no)) - if latest_sle and latest_sle[0][0] == d.name: - serial_bean.doc.status = "Available" - serial_bean.save() \ No newline at end of file + if latest_sle and latest_sle[0][0] == d.name: + serial_bean.doc.status = "Available" + serial_bean.save() \ No newline at end of file From fdaf5fd08772319cb031658c51457a76b850dbf2 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Wed, 4 Sep 2013 14:42:38 +0530 Subject: [PATCH 40/50] [bug] [minor] fix #790 --- home/__init__.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/home/__init__.py b/home/__init__.py index 9667efd212..086179813a 100644 --- a/home/__init__.py +++ b/home/__init__.py @@ -88,4 +88,5 @@ def update_feed(controller, method=None): if method in ['on_update', 'on_submit']: subject, color = feed_dict.get(doc.doctype, [None, None]) if subject: - make_feed('', doc.doctype, doc.name, doc.owner, subject % doc.fields, color) + from webnotes.utils import encode_dict + make_feed('', doc.doctype, doc.name, doc.owner, subject % encode_dict(doc.fields.copy()), color) From 140f9052a962a3c17c1f028ab03c99e72db25b5f Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Wed, 4 Sep 2013 14:58:15 +0530 Subject: [PATCH 41/50] [webutils] [minor] [bugfix] --- website/helpers/make_web_include_files.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/helpers/make_web_include_files.py b/website/helpers/make_web_include_files.py index 7ff3d6ad99..a9df23bb1c 100644 --- a/website/helpers/make_web_include_files.py +++ b/website/helpers/make_web_include_files.py @@ -3,14 +3,14 @@ import os import webnotes -import webnotes.webutils def make(): + from startup.webutils import get_home_page if not webnotes.conn: webnotes.connect() - home_page = webnotes.webutils.get_home_page() + home_page = get_home_page() fname = 'js/wn-web.js' if os.path.basename(os.path.abspath('.'))!='public': From d5c18d46d00a2964d195c00a86599d9e89218ba1 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Wed, 4 Sep 2013 15:07:00 +0530 Subject: [PATCH 42/50] [minor] [customer login] renamed order template to sale and use it for order, invoice and delivery note --- config.json | 20 ++++- selling/doctype/sales_order/sales_order.py | 16 ---- website/helpers/transaction.py | 26 ++++++ website/templates/pages/invoice.html | 88 +++++++++++++++++++ .../templates/pages/{order.html => sale.html} | 0 5 files changed, 131 insertions(+), 19 deletions(-) create mode 100644 website/templates/pages/invoice.html rename website/templates/pages/{order.html => sale.html} (100%) diff --git a/config.json b/config.json index 61df211d01..396905c590 100644 --- a/config.json +++ b/config.json @@ -101,19 +101,32 @@ }, "order": { "no_cache": true, - "template": "app/website/templates/pages/order", - "args_method": "selling.doctype.sales_order.sales_order.get_website_args" + "template": "app/website/templates/pages/sale", + "args_method": "website.helpers.transaction.get_order_args", + "for_doctype": "Sales Order" }, "orders": { "no_cache": true, "template": "app/website/templates/pages/sales_transactions", "args_method": "website.helpers.transaction.order_list_args" }, + "invoice": { + "no_cache": true, + "template": "app/website/templates/pages/sale", + "args_method": "website.helpers.transaction.get_invoice_args", + "for_doctype": "Sales Invoice" + }, "invoices": { "no_cache": true, "template": "app/website/templates/pages/sales_transactions", "args_method": "website.helpers.transaction.invoice_list_args" }, + "shipment": { + "no_cache": true, + "template": "app/website/templates/pages/sale", + "args_method": "website.helpers.transaction.get_shipment_args", + "for_doctype": "Delivery Note" + }, "shipments": { "no_cache": true, "template": "app/website/templates/pages/sales_transactions", @@ -130,7 +143,8 @@ "ticket": { "no_cache": true, "template": "app/website/templates/pages/ticket", - "args_method": "support.doctype.support_ticket.support_ticket.get_website_args" + "args_method": "support.doctype.support_ticket.support_ticket.get_website_args", + "for_doctype": "Support Ticket" }, "tickets": { "template": "app/website/templates/pages/tickets", diff --git a/selling/doctype/sales_order/sales_order.py b/selling/doctype/sales_order/sales_order.py index 604c5eb7c9..03530dce48 100644 --- a/selling/doctype/sales_order/sales_order.py +++ b/selling/doctype/sales_order/sales_order.py @@ -286,22 +286,6 @@ class DocType(SellingController): def on_update(self): pass -def get_website_args(): - customer = webnotes.conn.get_value("Contact", {"email_id": webnotes.session.user}, - "customer") - bean = webnotes.bean("Sales Order", webnotes.form_dict.name) - if bean.doc.customer != customer: - return { - "doc": {"name": "Not Allowed"} - } - else: - return { - "doc": bean.doc, - "doclist": bean.doclist, - "webnotes": webnotes, - "utils": webnotes.utils, - } - def set_missing_values(source, target): bean = webnotes.bean(target) bean.run_method("onload_post_render") diff --git a/website/helpers/transaction.py b/website/helpers/transaction.py index 1aded2efc5..900956b6f1 100644 --- a/website/helpers/transaction.py +++ b/website/helpers/transaction.py @@ -117,3 +117,29 @@ def message_list_args(): "icon": "icon-comments", "empty_list_message": "No Messages Found", } + +def get_transaction_args(doctype, name): + customer = webnotes.conn.get_value("Contact", {"email_id": webnotes.session.user}, + "customer") + + bean = webnotes.bean(doctype, name) + if bean.doc.customer != customer: + return { + "doc": {"name": "Not Allowed"} + } + else: + return { + "doc": bean.doc, + "doclist": bean.doclist, + "webnotes": webnotes, + "utils": webnotes.utils + } + +def get_order_args(): + return get_transaction_args("Sales Order", webnotes.form_dict.name) + +def get_invoice_args(): + return get_transaction_args("Sales Invoice", webnotes.form_dict.name) + +def get_shipment_args(): + return get_transaction_args("Delivery Note", webnotes.form_dict.name) diff --git a/website/templates/pages/invoice.html b/website/templates/pages/invoice.html new file mode 100644 index 0000000000..26ddea43d2 --- /dev/null +++ b/website/templates/pages/invoice.html @@ -0,0 +1,88 @@ +{% extends "app/website/templates/html/page.html" %} + +{% set title=doc.name %} + +{% block content %} +
    + +

    {{ doc.name }}

    +
    + {%- if doc.status -%} +
    +
    +
    +
    {{ doc.status }}
    +
    +
    + {{ utils.formatdate(doc.transaction_date) }} +
    +
    +
    +
    +
    + + + + + + + + + + + + {%- for row in doclist.get({"doctype":"Sales Order Item"}) %} + + + + + + + + + + {% endfor -%} + +
    SrItem NameDescriptionQtyUoMBasic RateAmount
    {{ row.idx }}{{ row.item_name }}{{ row.description }}{{ row.qty }}{{ row.stock_uom }}{{ utils.fmt_money(row.export_rate, currency=doc.currency) }}{{ utils.fmt_money(row.export_amount, currency=doc.currency) }}
    +
    +
    +
    +
    +
    + + + + + + + {%- for charge in doclist.get({"doctype":"Sales Taxes and Charges"}) -%} + {%- if not charge.included_in_print_rate -%} + + + + + {%- endif -%} + {%- endfor -%} + + + + + + + + + +
    Net Total{{ + utils.fmt_money(doc.net_total/doc.conversion_rate, currency=doc.currency) + }}
    {{ charge.description }}{{ utils.fmt_money(charge.tax_amount / doc.conversion_rate, currency=doc.currency) }}
    Grand Total{{ utils.fmt_money(doc.grand_total_export, currency=doc.currency) }}
    Rounded Total{{ utils.fmt_money(doc.rounded_total_export, currency=doc.currency) }}
    +
    +
    +
    + {%- endif -%} +
    +{% endblock %} \ No newline at end of file diff --git a/website/templates/pages/order.html b/website/templates/pages/sale.html similarity index 100% rename from website/templates/pages/order.html rename to website/templates/pages/sale.html From 090d410498a4590e7f71933a1264d7ce1dad15fa Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Wed, 4 Sep 2013 16:20:18 +0530 Subject: [PATCH 43/50] [minor] communication, webnotes/erpnext#790 --- home/__init__.py | 3 +-- selling/doctype/quotation/quotation.js | 4 ++-- support/doctype/support_ticket/get_support_mails.py | 7 ++++--- utilities/doctype/contact/contact.js | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/home/__init__.py b/home/__init__.py index 086179813a..9667efd212 100644 --- a/home/__init__.py +++ b/home/__init__.py @@ -88,5 +88,4 @@ def update_feed(controller, method=None): if method in ['on_update', 'on_submit']: subject, color = feed_dict.get(doc.doctype, [None, None]) if subject: - from webnotes.utils import encode_dict - make_feed('', doc.doctype, doc.name, doc.owner, subject % encode_dict(doc.fields.copy()), color) + make_feed('', doc.doctype, doc.name, doc.owner, subject % doc.fields, color) diff --git a/selling/doctype/quotation/quotation.js b/selling/doctype/quotation/quotation.js index fcebe357f8..ea1b62aa0a 100644 --- a/selling/doctype/quotation/quotation.js +++ b/selling/doctype/quotation/quotation.js @@ -62,11 +62,11 @@ erpnext.selling.QuotationController = erpnext.selling.SellingController.extend({ if (!doc.__islocal) { cur_frm.communication_view = new wn.views.CommunicationList({ - list: wn.model.get("Communication", {"quotation": doc.name}), + list: wn.model.get("Communication", {"parent": doc.name, "parenttype": "Quotation"}), parent: cur_frm.fields_dict.communication_html.wrapper, doc: doc, recipients: doc.contact_email - }); + }); } this.quotation_to(); diff --git a/support/doctype/support_ticket/get_support_mails.py b/support/doctype/support_ticket/get_support_mails.py index fb26e570d7..fa4f304e53 100644 --- a/support/doctype/support_ticket/get_support_mails.py +++ b/support/doctype/support_ticket/get_support_mails.py @@ -3,7 +3,7 @@ from __future__ import unicode_literals import webnotes -from webnotes.utils import cstr, cint +from webnotes.utils import cstr, cint, decode_dict from webnotes.utils.email_lib import sendmail from webnotes.utils.email_lib.receive import POP3Mailbox from core.doctype.communication.communication import make @@ -31,14 +31,15 @@ class SupportMailbox(POP3Mailbox): ticket.doc.save() else: - ticket = webnotes.bean([{ + ticket = webnotes.bean([decode_dict({ "doctype":"Support Ticket", "description": mail.content, "subject": mail.subject, "raised_by": mail.from_email, "content_type": mail.content_type, "status": "Open", - }]) + })]) + ticket.insert() new_ticket = True diff --git a/utilities/doctype/contact/contact.js b/utilities/doctype/contact/contact.js index 608b1e7c56..3b5255ccc6 100644 --- a/utilities/doctype/contact/contact.js +++ b/utilities/doctype/contact/contact.js @@ -5,7 +5,7 @@ wn.require('app/controllers/js/contact_address_common.js'); cur_frm.cscript.refresh = function(doc) { cur_frm.communication_view = new wn.views.CommunicationList({ - list: wn.model.get("Communication", {"contact": doc.name}), + list: wn.model.get("Communication", {"parent": doc.name, "parenttype": "Contact"}), parent: cur_frm.fields_dict.communication_html.wrapper, doc: doc, recipients: doc.email_id From 85ef50274586c54363ef812c8e8286c4220d69d3 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Wed, 4 Sep 2013 16:46:08 +0530 Subject: [PATCH 44/50] [minor] [customer login] removed messages, fixes in sale, ticket --- config.json | 5 ---- website/css/website.css | 4 +++ website/helpers/transaction.py | 42 ++++++++++++---------------- website/templates/pages/account.html | 1 - website/templates/pages/sale.html | 16 +++++------ website/templates/pages/ticket.html | 31 ++++++++++++++------ website/templates/pages/tickets.html | 12 +++----- 7 files changed, 55 insertions(+), 56 deletions(-) diff --git a/config.json b/config.json index 396905c590..d30c6976e0 100644 --- a/config.json +++ b/config.json @@ -132,11 +132,6 @@ "template": "app/website/templates/pages/sales_transactions", "args_method": "website.helpers.transaction.shipment_list_args" }, - "messages": { - "no_cache": true, - "template": "app/website/templates/pages/messages", - "args_method": "website.helpers.transaction.message_list_args" - }, "product_search": { "template": "app/website/templates/pages/product_search" }, diff --git a/website/css/website.css b/website/css/website.css index 47a969c046..4cd7ac7735 100644 --- a/website/css/website.css +++ b/website/css/website.css @@ -198,3 +198,7 @@ fieldset[disabled] .btn-default.active { background-color: #a7a9aa; border-color: #a7a9aa; } + +.label { + padding-top: 0.3em; +} \ No newline at end of file diff --git a/website/helpers/transaction.py b/website/helpers/transaction.py index 900956b6f1..8943575c6c 100644 --- a/website/helpers/transaction.py +++ b/website/helpers/transaction.py @@ -96,27 +96,6 @@ def ticket_list_args(): "empty_list_message": "No Tickets Raised", "page": "ticket" } - -@webnotes.whitelist() -def get_messages(start=0): - search_term = "%%%s%%" % webnotes.session.user - messages = webnotes.conn.sql("""select name, subject, creation, - sender, recipients, content - from `tabCommunication` where sender like %s or recipients like %s - order by creation desc - limit %s, 20""", (search_term, search_term, cint(start)), as_dict=True) - for m in messages: - m.creation = formatdate(m.creation) - - return messages - -def message_list_args(): - return { - "title": "Messages", - "method": "website.helpers.transaction.get_messages", - "icon": "icon-comments", - "empty_list_message": "No Messages Found", - } def get_transaction_args(doctype, name): customer = webnotes.conn.get_value("Contact", {"email_id": webnotes.session.user}, @@ -136,10 +115,25 @@ def get_transaction_args(doctype, name): } def get_order_args(): - return get_transaction_args("Sales Order", webnotes.form_dict.name) + args = get_transaction_args("Sales Order", webnotes.form_dict.name) + args.update({ + "parent_link": "orders", + "parent_title": "My Orders" + }) + return args def get_invoice_args(): - return get_transaction_args("Sales Invoice", webnotes.form_dict.name) + args = get_transaction_args("Sales Invoice", webnotes.form_dict.name) + args.update({ + "parent_link": "invoices", + "parent_title": "Invoices" + }) + return args def get_shipment_args(): - return get_transaction_args("Delivery Note", webnotes.form_dict.name) + args = get_transaction_args("Delivery Note", webnotes.form_dict.name) + args.update({ + "parent_link": "shipments", + "parent_title": "Shipments" + }) + return args diff --git a/website/templates/pages/account.html b/website/templates/pages/account.html index 9d29589ec8..2a5acf67e3 100644 --- a/website/templates/pages/account.html +++ b/website/templates/pages/account.html @@ -19,7 +19,6 @@
  • Invoices
  • Shipments
  • -
  • Messages
  • Logout
  • diff --git a/website/templates/pages/sale.html b/website/templates/pages/sale.html index c70dcb1124..669a3807f8 100644 --- a/website/templates/pages/sale.html +++ b/website/templates/pages/sale.html @@ -7,19 +7,18 @@

    {{ doc.name }}


    - {%- if doc.status -%} -
    +
    -
    -
    {{ doc.status }}
    +
    + {% if doc.status -%}
    {{ doc.status }}
    {%- endif %}
    -
    - {{ utils.formatdate(doc.transaction_date) }} +
    + {{ utils.formatdate(doc.posting_date or doc.transaction_date) }}

    @@ -36,7 +35,7 @@ Basic Rate Amount - {%- for row in doclist.get({"doctype":"Sales Order Item"}) %} + {%- for row in doclist.get({"doctype": doc.doctype + " Item"}) %} {{ row.idx }} {{ row.item_name }} @@ -83,6 +82,5 @@
    - {%- endif -%}
    {% endblock %} \ No newline at end of file diff --git a/website/templates/pages/ticket.html b/website/templates/pages/ticket.html index 2f85ac0bbc..eeb485a064 100644 --- a/website/templates/pages/ticket.html +++ b/website/templates/pages/ticket.html @@ -2,6 +2,12 @@ {% set title=doc.name %} +{% set status_label = { + "Open": "label-success", + "To Reply": "label-danger", + "Closed": "label-default" +} %} + {% block content %}