blob: b22042d0fe98a71bd4cea63f5e6265523f31255c [file] [log] [blame]
Nabin Haitec52db82013-01-22 11:53:14 +05301# ERPNext - web based ERP (http://erpnext.com)
2# Copyright (C) 2012 Web Notes Technologies Pvt Ltd
3#
4# This program is free software: you can redistribute it and/or modify
5# it under the terms of the GNU General Public License as published by
6# the Free Software Foundation, either version 3 of the License, or
7# (at your option) any later version.
8#
9# This program is distributed in the hope that it will be useful,
10# but WITHOUT ANY WARRANTY; without even the implied warranty of
11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12# GNU General Public License for more details.
13#
14# You should have received a copy of the GNU General Public License
15# along with this program. If not, see <http://www.gnu.org/licenses/>.
16
17from __future__ import unicode_literals
18import webnotes
Nabin Hait6f1a5ec2013-02-20 16:25:05 +053019from webnotes.utils import cint
Nabin Haitec52db82013-01-22 11:53:14 +053020from setup.utils import get_company_currency
Nabin Hait0fc24542013-03-25 11:06:00 +053021from webnotes import msgprint, _
Nabin Haitec52db82013-01-22 11:53:14 +053022
Nabin Haitc3afb252013-03-19 12:01:24 +053023from controllers.stock_controller import StockController
Nabin Haitbf495c92013-01-30 12:49:08 +053024
Nabin Haitc3afb252013-03-19 12:01:24 +053025class SellingController(StockController):
Nabin Haitec52db82013-01-22 11:53:14 +053026 def validate(self):
Saurabh6f753182013-03-20 12:55:28 +053027 super(SellingController, self).validate()
Nabin Haitec52db82013-01-22 11:53:14 +053028 self.set_total_in_words()
29
30 def set_total_in_words(self):
31 from webnotes.utils import money_in_words
32 company_currency = get_company_currency(self.doc.company)
Nabin Hait6f1a5ec2013-02-20 16:25:05 +053033
34 disable_rounded_total = cint(webnotes.conn.get_value("Global Defaults", None,
35 "disable_rounded_total"))
36
Nabin Haitec52db82013-01-22 11:53:14 +053037 if self.meta.get_field("in_words"):
Nabin Hait6f1a5ec2013-02-20 16:25:05 +053038 self.doc.in_words = money_in_words(disable_rounded_total and
39 self.doc.grand_total or self.doc.rounded_total, company_currency)
Nabin Haitec52db82013-01-22 11:53:14 +053040 if self.meta.get_field("in_words_export"):
Nabin Hait6f1a5ec2013-02-20 16:25:05 +053041 self.doc.in_words_export = money_in_words(disable_rounded_total and
Nabin Hait8c7234f2013-03-11 16:32:33 +053042 self.doc.grand_total_export or self.doc.rounded_total_export, self.doc.currency)
Nabin Haita0e7c152013-03-21 18:37:06 +053043
Nabin Hait787c02e2013-03-29 16:42:33 +053044 def set_buying_amount(self, stock_ledger_entries = None):
Anand Doshi8c5844e2013-03-21 20:24:10 +053045 from stock.utils import get_buying_amount
Nabin Hait787c02e2013-03-29 16:42:33 +053046 if not stock_ledger_entries:
47 stock_ledger_entries = self.get_stock_ledger_entries()
Anand Doshi8c5844e2013-03-21 20:24:10 +053048
49 item_sales_bom = {}
50 for d in self.doclist.get({"parentfield": "packing_details"}):
51 new_d = webnotes._dict(d.fields.copy())
52 new_d.total_qty = -1 * d.qty
53 item_sales_bom.setdefault(d.parent_item, []).append(new_d)
Nabin Haita0e7c152013-03-21 18:37:06 +053054
55 if stock_ledger_entries:
56 for item in self.doclist.get({"parentfield": self.fname}):
57 if item.item_code in self.stock_items or \
58 (item_sales_bom and item_sales_bom.get(item.item_code)):
59 buying_amount = get_buying_amount(item.item_code, item.warehouse, -1*item.qty,
60 self.doc.doctype, self.doc.name, item.name, stock_ledger_entries,
61 item_sales_bom)
62 item.buying_amount = buying_amount > 0 and buying_amount or 0
Nabin Hait0fc24542013-03-25 11:06:00 +053063 webnotes.conn.set_value(item.doctype, item.name, "buying_amount",
64 item.buying_amount)
65
66 def check_expense_account(self, item):
67 if item.buying_amount and not item.expense_account:
68 msgprint(_("""Expense account is mandatory for item: """) + item.item_code,
Nabin Hait787c02e2013-03-29 16:42:33 +053069 raise_exception=1)
70
71 if item.buying_amount and not item.cost_center:
72 msgprint(_("""Cost Center is mandatory for item: """) + item.item_code,
Nabin Hait557d8582013-03-25 18:28:16 +053073 raise_exception=1)