blob: db5cc072a0240318f7590593910f8c41086ee6ff [file] [log] [blame]
Rushabh Mehta3966f1d2012-02-23 12:35:32 +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
Anand Doshi486f9df2012-07-19 13:40:31 +053017from __future__ import unicode_literals
Pratik Vyasc1e6e4c2011-06-08 14:37:15 +053018import webnotes
Anand Doshi1dde46a2013-05-15 21:15:57 +053019from webnotes import msgprint, _
Anand Doshiee3d5cc2013-03-13 12:58:54 +053020from webnotes.utils import load_json, cstr, flt, now_datetime
Anand Doshi0fd99e72012-11-30 16:38:04 +053021from webnotes.model.doc import addchild
Pratik Vyasc1e6e4c2011-06-08 14:37:15 +053022
Nabin Hait0feebc12013-06-03 16:45:38 +053023from controllers.status_updater import StatusUpdater
Anand Doshi756dca72013-01-15 18:39:21 +053024
Nabin Hait0feebc12013-06-03 16:45:38 +053025class TransactionBase(StatusUpdater):
Anand Doshi99100a42013-07-04 17:13:53 +053026 def get_default_address_and_contact(self, party_field, party_name=None):
Anand Doshiedc5f2e2013-04-26 17:21:49 +053027 """get a dict of default field values of address and contact for a given party type
28 party_type can be one of: customer, supplier"""
Anand Doshi99100a42013-07-04 17:13:53 +053029 if not party_name:
30 party_name = self.doc.fields.get(party_field)
Anand Doshiedc5f2e2013-04-26 17:21:49 +053031
Anand Doshi99100a42013-07-04 17:13:53 +053032 return get_default_address_and_contact(party_field, party_name,
33 fetch_shipping_address=True if self.meta.get_field("shipping_address_name") else False)
34
Anand Doshi2ac0a832013-07-10 20:49:44 +053035 def set_address_fields(self):
36 party_type, party_name = self.get_party_type_and_name()
37
38 if party_type in ("Customer", "Lead"):
39 if self.doc.customer_address:
40 self.doc.address_display = get_address_display(self.doc.customer_address)
41
42 if self.doc.shipping_address_name:
43 self.doc.shipping_address = get_address_display(self.doc.shipping_address_name)
44
45 elif self.doc.supplier_address:
46 self.doc.address_display = get_address_display(self.doc.supplier_address)
47
48 def set_contact_fields(self):
49 party_type, party_name = self.get_party_type_and_name()
50
51 if party_type == "Lead":
52 contact_dict = map_lead_contact_details(party_name)
53 else:
54 contact_dict = map_party_contact_details(self.doc.contact_person, party_type, party_name)
55
56 for fieldname, value in contact_dict.items():
57 if self.meta.get_field(fieldname):
58 self.doc.fields[fieldname] = value
59
60 def get_party_type_and_name(self):
61 if not hasattr(self, "_party_type_and_name"):
62 for party_type in ("Lead", "Customer", "Supplier"):
63 party_field = party_type.lower()
64 if self.meta.get_field(party_field) and self.doc.fields.get(party_field):
65 self._party_type_and_name = (party_type, self.doc.fields.get(party_field))
66 break
67
68 return self._party_type_and_name
69
Anand Doshi99100a42013-07-04 17:13:53 +053070 def get_customer_defaults(self):
71 out = self.get_default_address_and_contact("customer")
72
73 customer = webnotes.doc("Customer", self.doc.customer)
74 for f in ['customer_name', 'customer_group', 'territory']:
75 out[f] = customer.fields.get(f)
Anand Doshiedc5f2e2013-04-26 17:21:49 +053076
Anand Doshi99100a42013-07-04 17:13:53 +053077 # fields prepended with default in Customer doctype
78 for f in ['sales_partner', 'commission_rate', 'currency', 'price_list']:
79 out[f] = customer.fields.get("default_" + f)
80
81 return out
82
83 def set_customer_defaults(self):
84 """
85 For a customer:
86 1. Sets default address and contact
87 2. Sets values like Territory, Customer Group, etc.
88 3. Clears existing Sales Team and fetches the one mentioned in Customer
89 """
90 customer_defaults = self.get_customer_defaults()
Anand Doshi2ac0a832013-07-10 20:49:44 +053091
Anand Doshi99100a42013-07-04 17:13:53 +053092 customer_defaults["price_list"] = customer_defaults["price_list"] or \
93 webnotes.conn.get_value("Customer Group", self.doc.customer_group, "default_price_list") or \
94 self.doc.price_list
95
96 self.doc.fields.update(customer_defaults)
97
98 if self.meta.get_field("sales_team"):
99 self.set_sales_team_for_customer()
100
101 def set_sales_team_for_customer(self):
102 from webnotes.model import default_fields
103
104 # clear table
105 self.doclist = self.doc.clear_table(self.doclist, "sales_team")
106
107 sales_team = webnotes.conn.sql("""select * from `tabSales Team`
108 where parenttype="Customer" and parent=%s""", self.doc.customer, as_dict=True)
109 for i, sales_person in enumerate(sales_team):
110 # remove default fields
111 for fieldname in default_fields:
112 if fieldname in sales_person:
113 del sales_person[fieldname]
114
115 sales_person.update({
116 "doctype": "Sales Team",
117 "parentfield": "sales_team",
118 "idx": i+1
119 })
120
121 # add child
122 self.doclist.append(sales_person)
Anand Doshiedc5f2e2013-04-26 17:21:49 +0530123
Anand Doshi99100a42013-07-04 17:13:53 +0530124 def get_lead_defaults(self):
125 out = self.get_default_address_and_contact("lead")
Pratik Vyasc1e6e4c2011-06-08 14:37:15 +0530126
Anand Doshi99100a42013-07-04 17:13:53 +0530127 lead = webnotes.conn.get_value("Lead", self.doc.lead,
128 ["territory", "company_name", "lead_name"], as_dict=True) or {}
Pratik Vyasc1e6e4c2011-06-08 14:37:15 +0530129
Anand Doshi99100a42013-07-04 17:13:53 +0530130 out["territory"] = lead.get("territory")
131 out["customer_name"] = lead.get("company_name") or lead.get("lead_name")
132
133 return out
134
135 def set_lead_defaults(self):
136 self.doc.fields.update(self.get_lead_defaults())
137
138
Pratik Vyasc1e6e4c2011-06-08 14:37:15 +0530139 # Get Customer Address
140 # -----------------------
141 def get_customer_address(self, args):
142 args = load_json(args)
Pratik Vyasc1e6e4c2011-06-08 14:37:15 +0530143 ret = {
Anand Doshi2ac0a832013-07-10 20:49:44 +0530144 'customer_address' : args["address"],
145 'address_display' : get_address_display(args["address"]),
Pratik Vyasc1e6e4c2011-06-08 14:37:15 +0530146 }
Anand Doshiae30e012012-10-26 15:01:22 +0530147
Anand Doshi2ac0a832013-07-10 20:49:44 +0530148 ret.update(map_party_contact_details(args['contact']))
Pratik Vyasc1e6e4c2011-06-08 14:37:15 +0530149
Anand Doshi2ac0a832013-07-10 20:49:44 +0530150 return ret
Pratik Vyasc1e6e4c2011-06-08 14:37:15 +0530151
Anand Doshi99100a42013-07-04 17:13:53 +0530152 # TODO deprecate this - used only in sales_order.js
Pratik Vyasc1e6e4c2011-06-08 14:37:15 +0530153 def get_shipping_address(self, name):
Anand Doshi2ac0a832013-07-10 20:49:44 +0530154 shipping_address = get_default_address("customer", name, is_shipping_address=True)
155 return {
156 'shipping_address_name' : shipping_address,
157 'shipping_address' : get_address_display(shipping_address) if shipping_address else None
Pratik Vyasc1e6e4c2011-06-08 14:37:15 +0530158 }
Pratik Vyasc1e6e4c2011-06-08 14:37:15 +0530159
Pratik Vyasc1e6e4c2011-06-08 14:37:15 +0530160 # Get Supplier Default Primary Address - first load
161 # -----------------------
162 def get_default_supplier_address(self, args):
Anand Doshi923d41d2013-05-28 17:23:36 +0530163 if isinstance(args, basestring):
164 args = load_json(args)
Anand Doshi2ac0a832013-07-10 20:49:44 +0530165
166 address_name = get_default_address("supplier", args["supplier"])
Pratik Vyasc1e6e4c2011-06-08 14:37:15 +0530167 ret = {
168 'supplier_address' : address_name,
Anand Doshi2ac0a832013-07-10 20:49:44 +0530169 'address_display' : get_address_display(address_name),
Pratik Vyasc1e6e4c2011-06-08 14:37:15 +0530170 }
Anand Doshi2ac0a832013-07-10 20:49:44 +0530171 ret.update(map_party_contact_details(None, "supplier", args["supplier"]))
Pratik Vyasc1e6e4c2011-06-08 14:37:15 +0530172 ret.update(self.get_supplier_details(args['supplier']))
Nabin Hait06c4de82011-08-16 16:38:11 +0530173 return ret
Pratik Vyasc1e6e4c2011-06-08 14:37:15 +0530174
175 # Get Supplier Address
176 # -----------------------
177 def get_supplier_address(self, args):
178 args = load_json(args)
Pratik Vyasc1e6e4c2011-06-08 14:37:15 +0530179 ret = {
Anand Doshi2ac0a832013-07-10 20:49:44 +0530180 'supplier_address' : args['address'],
181 'address_display' : get_address_display(args["address"]),
Pratik Vyasc1e6e4c2011-06-08 14:37:15 +0530182 }
Anand Doshi2ac0a832013-07-10 20:49:44 +0530183 ret.update(map_party_contact_details(contact_name=args['contact']))
Nabin Hait06c4de82011-08-16 16:38:11 +0530184 return ret
Pratik Vyasc1e6e4c2011-06-08 14:37:15 +0530185
186 # Get Supplier Details
187 # -----------------------
Anand Doshif2f5c942012-07-18 20:13:52 +0530188 def get_supplier_details(self, name):
189 supplier_details = webnotes.conn.sql("""\
190 select supplier_name, default_currency
191 from `tabSupplier`
192 where name = %s and docstatus < 2""", name, as_dict=1)
193 if supplier_details:
194 return {
195 'supplier_name': (supplier_details[0]['supplier_name']
196 or self.doc.fields.get('supplier_name')),
197 'currency': (supplier_details[0]['default_currency']
198 or self.doc.fields.get('currency')),
199 }
200 else:
201 return {}
Pratik Vyasc1e6e4c2011-06-08 14:37:15 +0530202
203 # Get Sales Person Details of Customer
204 # ------------------------------------
205 def get_sales_person(self, name):
Anand Doshi8ae5ba92012-06-25 20:05:35 +0530206 self.doclist = self.doc.clear_table(self.doclist,'sales_team')
Pratik Vyasc1e6e4c2011-06-08 14:37:15 +0530207 idx = 0
Anand Doshi74d1b652012-01-27 12:25:09 +0530208 for d in webnotes.conn.sql("select sales_person, allocated_percentage, allocated_amount, incentives from `tabSales Team` where parent = '%s'" % name):
Anand Doshif5d90ab2012-12-24 17:02:38 +0530209 ch = addchild(self.doc, 'sales_team', 'Sales Team', self.doclist)
Pratik Vyasc1e6e4c2011-06-08 14:37:15 +0530210 ch.sales_person = d and cstr(d[0]) or ''
211 ch.allocated_percentage = d and flt(d[1]) or 0
212 ch.allocated_amount = d and flt(d[2]) or 0
213 ch.incentives = d and flt(d[3]) or 0
214 ch.idx = idx
215 idx += 1
Nabin Hait41cc3272012-04-30 14:36:18 +0530216
Rushabh Mehta35c017a2012-11-30 10:57:28 +0530217 def load_notification_message(self):
218 dt = self.doc.doctype.lower().replace(" ", "_")
219 if int(webnotes.conn.get_value("Notification Control", None, dt) or 0):
220 self.doc.fields["__notification_message"] = \
221 webnotes.conn.get_value("Notification Control", None, dt + "_message")
222
Rushabh Mehtac4e7b682012-11-26 18:18:10 +0530223 def add_communication_list(self):
224 # remove communications if present
225 self.doclist = webnotes.doclist(self.doclist).get({
226 "doctype": ["!=", "Communcation"]})
227
228 comm_list = webnotes.conn.sql("""select * from tabCommunication
229 where %s=%s order by modified desc limit 20""" \
230 % (self.doc.doctype.replace(" ", "_").lower(), "%s"),
Anand Doshi060d9242013-06-12 17:40:36 +0530231 self.doc.name, as_dict=1, update={"doctype":"Communication"})
Rushabh Mehtac4e7b682012-11-26 18:18:10 +0530232
233 self.doclist.extend(webnotes.doclist([webnotes.doc(fielddata=d) \
Anand Doshiee3d5cc2013-03-13 12:58:54 +0530234 for d in comm_list]))
235
236 def validate_posting_time(self):
237 if not self.doc.posting_time:
Anand Doshiacec0222013-03-26 12:33:43 +0530238 self.doc.posting_time = now_datetime().strftime('%H:%M:%S')
Anand Doshie53a81d2013-06-10 15:15:40 +0530239
Anand Doshi670199b2013-06-10 15:38:01 +0530240 def add_calendar_event(self, opts, force=False):
Anand Doshie53a81d2013-06-10 15:15:40 +0530241 if self.doc.contact_by != cstr(self._prev.contact_by) or \
Anand Doshi670199b2013-06-10 15:38:01 +0530242 self.doc.contact_date != cstr(self._prev.contact_date) or force:
Anand Doshie53a81d2013-06-10 15:15:40 +0530243
244 self.delete_events()
245 self._add_calendar_event(opts)
246
247 def delete_events(self):
248 webnotes.delete_doc("Event", webnotes.conn.sql_list("""select name from `tabEvent`
249 where ref_type=%s and ref_name=%s""", (self.doc.doctype, self.doc.name)))
250
251 def _add_calendar_event(self, opts):
252 opts = webnotes._dict(opts)
253
254 if self.doc.contact_date:
255 event_doclist = [{
256 "doctype": "Event",
257 "owner": opts.owner or self.doc.owner,
258 "subject": opts.subject,
259 "description": opts.description,
260 "starts_on": self.doc.contact_date + " 10:00:00",
261 "event_type": "Private",
262 "ref_type": self.doc.doctype,
263 "ref_name": self.doc.name
264 }]
265
266 if webnotes.conn.exists("Profile", self.doc.contact_by):
267 event_doclist.append({
268 "doctype": "Event User",
269 "parentfield": "event_individuals",
270 "person": self.doc.contact_by
271 })
272
273 webnotes.bean(event_doclist).insert()
Nabin Hait2bd37772013-07-08 19:00:29 +0530274
275 def validate_with_previous_doc(self, source_dt, ref):
276 for key, val in ref.items():
Nabin Hait6e68e0e2013-07-10 15:33:29 +0530277 is_child = val.get("is_child_table")
Nabin Hait2bd37772013-07-08 19:00:29 +0530278 ref_doc = {}
279 for d in self.doclist.get({"doctype": source_dt}):
Nabin Hait6e68e0e2013-07-10 15:33:29 +0530280 ref_dn = d.fields.get(val["ref_dn_field"])
281 if ref_dn:
282 if is_child:
283 self.compare_values({key: [ref_dn]}, val["compare_fields"], d)
284 elif ref_dn:
285 ref_doc.setdefault(key, [])
286 if ref_dn not in ref_doc[key]:
287 ref_doc[key].append(ref_dn)
288 if ref_doc:
Nabin Hait2bd37772013-07-08 19:00:29 +0530289 self.compare_values(ref_doc, val["compare_fields"])
290
291 def compare_values(self, ref_doc, fields, doc=None):
Nabin Hait6e68e0e2013-07-10 15:33:29 +0530292 for ref_doctype, ref_dn_list in ref_doc.items():
293 for ref_docname in ref_dn_list:
294 prevdoc_values = webnotes.conn.get_value(ref_doctype, ref_docname,
295 [d[0] for d in fields], as_dict=1)
296
297 for field, condition in fields:
Anand Doshi63d844b2013-07-10 20:55:15 +0530298 if prevdoc_values[field] is not None:
299 self.validate_value(field, condition, prevdoc_values[field], doc)
Anand Doshi99100a42013-07-04 17:13:53 +0530300
301def get_default_address_and_contact(party_field, party_name, fetch_shipping_address=False):
302 out = {}
303
304 # get addresses
Anand Doshi2ac0a832013-07-10 20:49:44 +0530305 billing_address = get_default_address(party_field, party_name)
Anand Doshi99100a42013-07-04 17:13:53 +0530306 if billing_address:
Anand Doshi2ac0a832013-07-10 20:49:44 +0530307 out[party_field + "_address"] = billing_address
Anand Doshi99100a42013-07-04 17:13:53 +0530308 out["address_display"] = get_address_display(billing_address)
309 else:
310 out[party_field + "_address"] = out["address_display"] = None
311
312 if fetch_shipping_address:
Anand Doshi2ac0a832013-07-10 20:49:44 +0530313 shipping_address = get_default_address(party_field, party_name, is_shipping_address=True)
Anand Doshi99100a42013-07-04 17:13:53 +0530314 if shipping_address:
Anand Doshi2ac0a832013-07-10 20:49:44 +0530315 out["shipping_address_name"] = shipping_address
Anand Doshi99100a42013-07-04 17:13:53 +0530316 out["shipping_address"] = get_address_display(shipping_address)
317 else:
318 out["shipping_address_name"] = out["shipping_address"] = None
319
320 # get contact
321 if party_field == "lead":
322 out["customer_address"] = out.get("lead_address")
Anand Doshi2ac0a832013-07-10 20:49:44 +0530323 out.update(map_lead_contact_details(party_name))
Anand Doshi99100a42013-07-04 17:13:53 +0530324 else:
Anand Doshi2ac0a832013-07-10 20:49:44 +0530325 out.update(map_party_contact_details(None, party_field, party_name))
Anand Doshi99100a42013-07-04 17:13:53 +0530326
327 return out
Anand Doshi99100a42013-07-04 17:13:53 +0530328
Anand Doshi2ac0a832013-07-10 20:49:44 +0530329def get_default_address(party_field, party_name, is_shipping_address=False):
330 if is_shipping_address:
331 order_by = "is_shipping_address desc, is_primary_address desc, name asc"
332 else:
333 order_by = "is_primary_address desc, name asc"
334
335 address = webnotes.conn.sql("""select name from `tabAddress` where `%s`=%s order by %s
336 limit 1""" % (party_field, "%s", order_by), party_name)
337
338 return address[0][0] if address else None
339
340def get_default_contact(party_field, party_name):
341 contact = webnotes.conn.sql("""select name from `tabContact` where `%s`=%s
342 order by is_primary_contact desc, name asc limit 1""" % (party_field, "%s"),
343 (party_name,))
344
345 return contact[0][0] if contact else None
346
Anand Doshiedbf3e12013-07-02 11:40:16 +0530347def get_address_display(address_dict):
Anand Doshi2ac0a832013-07-10 20:49:44 +0530348 if not isinstance(address_dict, dict):
349 address_dict = webnotes.conn.get_value("Address", address_dict, "*", as_dict=True)
Anand Doshi99100a42013-07-04 17:13:53 +0530350
Anand Doshiedbf3e12013-07-02 11:40:16 +0530351 meta = webnotes.get_doctype("Address")
Anand Doshi2ac0a832013-07-10 20:49:44 +0530352 sequence = (("", "address_line1"), ("\n", "address_line2"), ("\n", "city"),
Anand Doshiedbf3e12013-07-02 11:40:16 +0530353 ("\n", "state"), ("\n" + meta.get_label("pincode") + ": ", "pincode"), ("\n", "country"),
354 ("\n" + meta.get_label("phone") + ": ", "phone"), ("\n" + meta.get_label("fax") + ": ", "fax"))
355
Anand Doshi2ac0a832013-07-10 20:49:44 +0530356 display = ""
357 for separator, fieldname in sequence:
358 if address_dict.get(fieldname):
359 display += separator + address_dict.get(fieldname)
360
361 return display.strip()
Anand Doshi99100a42013-07-04 17:13:53 +0530362
Anand Doshi2ac0a832013-07-10 20:49:44 +0530363def map_lead_contact_details(party_name):
Anand Doshi99100a42013-07-04 17:13:53 +0530364 out = {}
365 for fieldname in ["contact_display", "contact_email", "contact_mobile", "contact_phone"]:
366 out[fieldname] = None
367
368 lead = webnotes.conn.sql("""select * from `tabLead` where name=%s""", party_name, as_dict=True)
369 if lead:
370 lead = lead[0]
371 out.update({
372 "contact_display": lead.get("lead_name"),
373 "contact_email": lead.get("email_id"),
374 "contact_mobile": lead.get("mobile_no"),
375 "contact_phone": lead.get("phone"),
376 })
377
378 return out
379
Anand Doshi2ac0a832013-07-10 20:49:44 +0530380def map_party_contact_details(contact_name=None, party_field=None, party_name=None):
Anand Doshi99100a42013-07-04 17:13:53 +0530381 out = {}
382 for fieldname in ["contact_person", "contact_display", "contact_email",
383 "contact_mobile", "contact_phone", "contact_designation", "contact_department"]:
384 out[fieldname] = None
385
Anand Doshi2ac0a832013-07-10 20:49:44 +0530386 if not contact_name:
387 contact_name = get_default_contact(party_field, party_name)
388
Anand Doshi99100a42013-07-04 17:13:53 +0530389 contact = webnotes.conn.sql("""select * from `tabContact` where `%s`=%s
390 order by is_primary_contact desc, name asc limit 1""" % (party_field, "%s"),
391 (party_name,), as_dict=True)
Anand Doshi2ac0a832013-07-10 20:49:44 +0530392
Anand Doshi99100a42013-07-04 17:13:53 +0530393 if contact:
394 contact = contact[0]
395 out.update({
396 "contact_person": contact.get("name"),
397 "contact_display": " ".join(filter(None,
398 [contact.get("first_name"), contact.get("last_name")])),
399 "contact_email": contact.get("email_id"),
400 "contact_mobile": contact.get("mobile_no"),
401 "contact_phone": contact.get("phone"),
402 "contact_designation": contact.get("designation"),
403 "contact_department": contact.get("department")
404 })
405
406 return out
407
408def get_address_territory(address_doc):
409 territory = None
410 for fieldname in ("city", "state", "country"):
411 value = address_doc.fields.get(fieldname)
412 if value:
413 territory = webnotes.conn.get_value("Territory", value.strip())
414 if territory:
415 break
416
417 return territory
Anand Doshi1dde46a2013-05-15 21:15:57 +0530418
419def validate_conversion_rate(currency, conversion_rate, conversion_rate_label, company):
420 """common validation for currency and price list currency"""
421 if conversion_rate == 0:
422 msgprint(conversion_rate_label + _(' cannot be 0'), raise_exception=True)
423
424 company_currency = webnotes.conn.get_value("Company", company, "default_currency")
425
426 # parenthesis for 'OR' are necessary as we want it to evaluate as
427 # mandatory valid condition and (1st optional valid condition
428 # or 2nd optional valid condition)
429 valid_conversion_rate = (conversion_rate and
430 ((currency == company_currency and conversion_rate == 1.00)
431 or (currency != company_currency and conversion_rate != 1.00)))
432
433 if not valid_conversion_rate:
434 msgprint(_('Please enter valid ') + conversion_rate_label + (': ')
435 + ("1 %s = [?] %s" % (currency, company_currency)),
436 raise_exception=True)
437
438def validate_item_fetch(args, item):
439 from stock.utils import validate_end_of_life
440 validate_end_of_life(item.name, item.end_of_life)
441
442 # validate company
443 if not args.company:
444 msgprint(_("Please specify Company"), raise_exception=True)
445
Anand Doshif3096132013-05-21 19:35:06 +0530446def validate_currency(args, item, meta=None):
Anand Doshifc777182013-05-27 19:29:07 +0530447 from webnotes.model.meta import get_field_precision
Anand Doshif3096132013-05-21 19:35:06 +0530448 if not meta:
449 meta = webnotes.get_doctype(args.doctype)
Anand Doshifc777182013-05-27 19:29:07 +0530450
Anand Doshif3096132013-05-21 19:35:06 +0530451 # validate conversion rate
Anand Doshi1dde46a2013-05-15 21:15:57 +0530452 if meta.get_field("currency"):
Anand Doshi1dde46a2013-05-15 21:15:57 +0530453 validate_conversion_rate(args.currency, args.conversion_rate,
454 meta.get_label("conversion_rate"), args.company)
Anand Doshifc777182013-05-27 19:29:07 +0530455
456 # round it
457 args.conversion_rate = flt(args.conversion_rate,
Anand Doshie961af42013-05-31 14:30:46 +0530458 get_field_precision(meta.get_field("conversion_rate"),
459 webnotes._dict({"fields": args})))
Anand Doshi1dde46a2013-05-15 21:15:57 +0530460
Anand Doshif3096132013-05-21 19:35:06 +0530461 # validate price list conversion rate
462 if meta.get_field("price_list_currency") and args.price_list_name and \
463 args.price_list_currency:
464 validate_conversion_rate(args.price_list_currency, args.plc_conversion_rate,
Anand Doshifc777182013-05-27 19:29:07 +0530465 meta.get_label("plc_conversion_rate"), args.company)
466
467 # round it
468 args.plc_conversion_rate = flt(args.plc_conversion_rate,
Anand Doshie961af42013-05-31 14:30:46 +0530469 get_field_precision(meta.get_field("plc_conversion_rate"),
470 webnotes._dict({"fields": args})))
Anand Doshi097ac352013-06-10 15:38:31 +0530471
Anand Doshi11d31132013-06-17 12:51:36 +0530472def delete_events(ref_type, ref_name):
473 webnotes.delete_doc("Event", webnotes.conn.sql_list("""select name from `tabEvent`
Anand Doshib5fd7882013-06-17 12:55:05 +0530474 where ref_type=%s and ref_name=%s""", (ref_type, ref_name)), for_reload=True)