blob: ab002be801d236bccbfa9e623092df2060d8c65d [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
44 def set_buying_amount(self):
Anand Doshi8c5844e2013-03-21 20:24:10 +053045 from stock.utils import get_buying_amount
Nabin Haita0e7c152013-03-21 18:37:06 +053046 stock_ledger_entries = self.get_stock_ledger_entries()
Anand Doshi8c5844e2013-03-21 20:24:10 +053047
48 item_sales_bom = {}
49 for d in self.doclist.get({"parentfield": "packing_details"}):
50 new_d = webnotes._dict(d.fields.copy())
51 new_d.total_qty = -1 * d.qty
52 item_sales_bom.setdefault(d.parent_item, []).append(new_d)
Nabin Haita0e7c152013-03-21 18:37:06 +053053
54 if stock_ledger_entries:
55 for item in self.doclist.get({"parentfield": self.fname}):
56 if item.item_code in self.stock_items or \
57 (item_sales_bom and item_sales_bom.get(item.item_code)):
58 buying_amount = get_buying_amount(item.item_code, item.warehouse, -1*item.qty,
59 self.doc.doctype, self.doc.name, item.name, stock_ledger_entries,
60 item_sales_bom)
61 item.buying_amount = buying_amount > 0 and buying_amount or 0
Nabin Hait0fc24542013-03-25 11:06:00 +053062 webnotes.conn.set_value(item.doctype, item.name, "buying_amount",
63 item.buying_amount)
64
65 def check_expense_account(self, item):
66 if item.buying_amount and not item.expense_account:
67 msgprint(_("""Expense account is mandatory for item: """) + item.item_code,
68 raise_exception=1)