Merge lp:~inddiana/sisb/sisb_add_modulo_unidad_de_calculo_plus_cchica into lp:sisb
- sisb_add_modulo_unidad_de_calculo_plus_cchica
- Merge into sisb
Proposed by
[SISB] Aryrosa Fuentes
Status: | Merged |
---|---|
Merged at revision: | 987 |
Proposed branch: | lp:~inddiana/sisb/sisb_add_modulo_unidad_de_calculo_plus_cchica |
Merge into: | lp:sisb |
Diff against target: |
783 lines (+742/-0) 7 files modified
sisb_calculation_unit/__init__.py (+3/-0) sisb_calculation_unit/__openerp__.py (+21/-0) sisb_calculation_unit/i18n/es_VE.po (+153/-0) sisb_calculation_unit/model/__init__.py (+3/-0) sisb_calculation_unit/model/sisb_calculation_unit.py (+379/-0) sisb_calculation_unit/security/ir.model.access.csv (+7/-0) sisb_calculation_unit/view/sisb_calculation_unit_view.xml (+176/-0) |
To merge this branch: | bzr merge lp:~inddiana/sisb/sisb_add_modulo_unidad_de_calculo_plus_cchica |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Juan Lugo | Pending | ||
Review via email: mp+337436@code.launchpad.net |
Commit message
Description of the change
[ADD] Módulo que toma en cuenta la nueva unidad para el cálculo aritmético del
umbral máximo y mínimo (UCAU), será utilizada como sustituto de la unidad
tributaria en las operaciones aritméticas basadas en dicho indicador para
el establecimiento del monto máximo de constitución de los fondos de
caja chica.
To post a comment you must log in.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === added directory 'sisb_calculation_unit' |
2 | === added file 'sisb_calculation_unit/__init__.py' |
3 | --- sisb_calculation_unit/__init__.py 1970-01-01 00:00:00 +0000 |
4 | +++ sisb_calculation_unit/__init__.py 2018-02-09 12:50:59 +0000 |
5 | @@ -0,0 +1,3 @@ |
6 | +# -*- coding: utf-8 -*- |
7 | + |
8 | +import model |
9 | |
10 | === added file 'sisb_calculation_unit/__openerp__.py' |
11 | --- sisb_calculation_unit/__openerp__.py 1970-01-01 00:00:00 +0000 |
12 | +++ sisb_calculation_unit/__openerp__.py 2018-02-09 12:50:59 +0000 |
13 | @@ -0,0 +1,21 @@ |
14 | +# -*- coding: utf-8 -*- |
15 | + |
16 | +{ |
17 | + 'name': 'Registration of Calculation Units', |
18 | + 'version': '0.1', |
19 | + 'category': 'Account', |
20 | + 'description':'Registration of Calculation Units for UCAU among others', |
21 | + 'author': 'Industrias Diana, C.A.', |
22 | + 'website': 'http://www.industriasdiana.gob.ve', |
23 | + 'depends': ['account', |
24 | + 'l10n_ve_caja_chica', |
25 | + ], |
26 | + 'update_xml': [ |
27 | + 'security/ir.model.access.csv', |
28 | + 'view/sisb_calculation_unit_view.xml', |
29 | + ], |
30 | + 'data': [ |
31 | + ], |
32 | + 'installable': True, |
33 | + 'active': False, |
34 | +} |
35 | |
36 | === added directory 'sisb_calculation_unit/i18n' |
37 | === added file 'sisb_calculation_unit/i18n/es_VE.mo' |
38 | Binary files sisb_calculation_unit/i18n/es_VE.mo 1970-01-01 00:00:00 +0000 and sisb_calculation_unit/i18n/es_VE.mo 2018-02-09 12:50:59 +0000 differ |
39 | === added file 'sisb_calculation_unit/i18n/es_VE.po' |
40 | --- sisb_calculation_unit/i18n/es_VE.po 1970-01-01 00:00:00 +0000 |
41 | +++ sisb_calculation_unit/i18n/es_VE.po 2018-02-09 12:50:59 +0000 |
42 | @@ -0,0 +1,153 @@ |
43 | +# Translation of OpenERP Server. |
44 | +# This file contains the translation of the following modules: |
45 | +# * sisb_calculation_unit |
46 | +# |
47 | +msgid "" |
48 | +msgstr "" |
49 | +"Project-Id-Version: OpenERP Server 6.0.4\n" |
50 | +"Report-Msgid-Bugs-To: support@openerp.com\n" |
51 | +"POT-Creation-Date: 2018-02-07 19:41+0000\n" |
52 | +"PO-Revision-Date: 2018-02-07 15:11-0400\n" |
53 | +"Last-Translator: Aryrosa Fuentes <afuentes@industriasdiana.gob.ve>\n" |
54 | +"Language-Team: \n" |
55 | +"MIME-Version: 1.0\n" |
56 | +"Content-Type: text/plain; charset=UTF-8\n" |
57 | +"Content-Transfer-Encoding: 8bit\n" |
58 | +"Plural-Forms: \n" |
59 | + |
60 | +#. module: sisb_calculation_unit |
61 | +#: help:sisb.calculation.unit,amount:0 |
62 | +msgid "Amount of the calculation unit in Bs" |
63 | +msgstr "Monto del cálculo en Bs." |
64 | + |
65 | +#. module: sisb_calculation_unit |
66 | +#: model:ir.model,name:sisb_calculation_unit.model_caja_reposicion |
67 | +msgid "Reposicion de Caja Chica" |
68 | +msgstr "Reposición de Caja Chica" |
69 | + |
70 | +#. module: sisb_calculation_unit |
71 | +#: field:caja.chica,calculation_unit:0 |
72 | +#: model:ir.actions.act_window,name:sisb_calculation_unit.act_sisb_calculation_unit_tree |
73 | +#: model:ir.model,name:sisb_calculation_unit.model_sisb_calculation_unit |
74 | +#: model:ir.ui.menu,name:sisb_calculation_unit.conf_sisb_calc_unit |
75 | +#: model:ir.ui.menu,name:sisb_calculation_unit.menu_action_sisb_calculation_unit_tree |
76 | +#: view:sisb.calculation.unit:0 |
77 | +msgid "Calculation Unit" |
78 | +msgstr "Unidad de Cálculo" |
79 | + |
80 | +#. module: sisb_calculation_unit |
81 | +#: constraint:caja.chica:0 |
82 | +msgid "El saldo de la caja chica es superior al monto permitido para una caja chica" |
83 | +msgstr "El saldo de la caja chica es superior al monto permitido para una caja chica" |
84 | + |
85 | +#. module: sisb_calculation_unit |
86 | +#: view:sisb.calculation.unit:0 |
87 | +msgid "Group By..." |
88 | +msgstr "Agrupado por..." |
89 | + |
90 | +#. module: sisb_calculation_unit |
91 | +#: selection:caja.chica,calculation_unit:0 |
92 | +msgid "Other" |
93 | +msgstr "Otra Unidad" |
94 | + |
95 | +#. module: sisb_calculation_unit |
96 | +#: model:ir.model,name:sisb_calculation_unit.model_caja_reposicion_linea |
97 | +msgid "Lineas la Reposicion de Caja" |
98 | +msgstr "Líneas la Reposición de Caja" |
99 | + |
100 | +#. module: sisb_calculation_unit |
101 | +#: selection:caja.chica,calculation_unit:0 |
102 | +msgid "U.T" |
103 | +msgstr "Unidad Tributaria" |
104 | + |
105 | +#. module: sisb_calculation_unit |
106 | +#: field:sisb.calculation.unit.type,name:0 |
107 | +#: help:sisb.calculation.unit.type,name:0 |
108 | +msgid "Unit type" |
109 | +msgstr "Tipo de unidad" |
110 | + |
111 | +#. module: sisb_calculation_unit |
112 | +#: field:caja.chica,unit_type_id:0 |
113 | +#: view:sisb.calculation.unit:0 |
114 | +#: field:sisb.calculation.unit,unit_type_id:0 |
115 | +msgid "Unit Type" |
116 | +msgstr "Tipo de Unidad" |
117 | + |
118 | +#. module: sisb_calculation_unit |
119 | +#: model:ir.actions.act_window,name:sisb_calculation_unit.act_sisb_calculation_unit_type_tree |
120 | +#: model:ir.model,name:sisb_calculation_unit.model_sisb_calculation_unit_type |
121 | +#: model:ir.ui.menu,name:sisb_calculation_unit.menu_action_sisb_calculation_unit_type_tree |
122 | +#: view:sisb.calculation.unit.type:0 |
123 | +msgid "Calculation Unit Type" |
124 | +msgstr "Tipo de unidad de cálculo" |
125 | + |
126 | +#. module: sisb_calculation_unit |
127 | +#: help:sisb.calculation.unit,name:0 |
128 | +msgid "Reference number under the law" |
129 | +msgstr "Número de referencia de la gaceta oficial" |
130 | + |
131 | +#. module: sisb_calculation_unit |
132 | +#: model:ir.actions.act_window,help:sisb_calculation_unit.act_sisb_calculation_unit_type_tree |
133 | +msgid "Defines the type of calculation unit." |
134 | +msgstr "Define el tipo de unidad de cálculo." |
135 | + |
136 | +#. module: sisb_calculation_unit |
137 | +#: field:sisb.calculation.unit,date:0 |
138 | +msgid "Date" |
139 | +msgstr "Fecha" |
140 | + |
141 | +#. module: sisb_calculation_unit |
142 | +#: constraint:caja.reposicion.linea:0 |
143 | +msgid "El monto de la linea excede las unidades de calculo permitidas. No puede ser aprobada la reposicion." |
144 | +msgstr "El monto de la linea excede las unidades de calculo permitidas. No puede ser aprobada la reposicion." |
145 | + |
146 | +#. module: sisb_calculation_unit |
147 | +#: help:sisb.calculation.unit,date:0 |
148 | +msgid "Date on which goes into effect the new Unit Calculation Unit" |
149 | +msgstr "Fecha donde entrará en vigencia la nueva unidad para la unidad de cálculo." |
150 | + |
151 | +#. module: sisb_calculation_unit |
152 | +#: field:sisb.calculation.unit,user_id:0 |
153 | +msgid "Responsible" |
154 | +msgstr "Responsable" |
155 | + |
156 | +#. module: sisb_calculation_unit |
157 | +#: model:ir.model,name:sisb_calculation_unit.model_caja_chica |
158 | +msgid "Caja Chica" |
159 | +msgstr "Caja Chica" |
160 | + |
161 | +#. module: sisb_calculation_unit |
162 | +#: view:sisb.calculation.unit.type:0 |
163 | +msgid "Search Calculation Unit Type" |
164 | +msgstr "Búsqueda de tipo de unidad de cálculo" |
165 | + |
166 | +#. module: sisb_calculation_unit |
167 | +#: field:sisb.calculation.unit,amount:0 |
168 | +msgid "Amount" |
169 | +msgstr "Monto" |
170 | + |
171 | +#. module: sisb_calculation_unit |
172 | +#: view:sisb.calculation.unit:0 |
173 | +msgid "Search Calculation Unit" |
174 | +msgstr "Búsqueda de unidad de cálculo" |
175 | + |
176 | +#. module: sisb_calculation_unit |
177 | +#: field:sisb.calculation.unit,name:0 |
178 | +msgid "Reference number" |
179 | +msgstr "Número de referencia" |
180 | + |
181 | +#. module: sisb_calculation_unit |
182 | +#: model:ir.actions.act_window,help:sisb_calculation_unit.act_sisb_calculation_unit_tree |
183 | +msgid "With Calculation Unit you can create and manage the calculation unit. The Calculation Unit is established under the law of each country, is used for the petty cash, viatical and travel expenses, among others." |
184 | +msgstr "Con la unidad de cálculo puede crear y administrar la unidad de cálculo aritmético. La unidad de cálculo se establece bajo la ley de cada país, se utiliza para el efectivo de caja chica, viáticos y gastos de viaje, entre others." |
185 | + |
186 | +#. module: sisb_calculation_unit |
187 | +#: view:caja.chica:0 |
188 | +msgid "Calculating Unit" |
189 | +msgstr "Unidad de Cálculo" |
190 | + |
191 | +#. module: sisb_calculation_unit |
192 | +#: view:sisb.calculation.unit:0 |
193 | +msgid "Calculation Unit per date" |
194 | +msgstr "Unidad de cálculo por fecha" |
195 | + |
196 | |
197 | === added directory 'sisb_calculation_unit/model' |
198 | === added file 'sisb_calculation_unit/model/__init__.py' |
199 | --- sisb_calculation_unit/model/__init__.py 1970-01-01 00:00:00 +0000 |
200 | +++ sisb_calculation_unit/model/__init__.py 2018-02-09 12:50:59 +0000 |
201 | @@ -0,0 +1,3 @@ |
202 | +# -*- coding: utf-8 -*- |
203 | + |
204 | +import sisb_calculation_unit |
205 | |
206 | === added file 'sisb_calculation_unit/model/sisb_calculation_unit.py' |
207 | --- sisb_calculation_unit/model/sisb_calculation_unit.py 1970-01-01 00:00:00 +0000 |
208 | +++ sisb_calculation_unit/model/sisb_calculation_unit.py 2018-02-09 12:50:59 +0000 |
209 | @@ -0,0 +1,379 @@ |
210 | +#!/usr/bin/python |
211 | +# -*- encoding: utf-8 -*- |
212 | +########################################################################### |
213 | +# Copyright (C) Industrias Diana, C.A. (www.industriasdiana.gob.ve) |
214 | +# All Rights Reserved |
215 | +###############Credits###################################################### |
216 | +# Developed by: Industrias Diana, C.A. |
217 | +############################################################################## |
218 | + |
219 | +from osv import osv |
220 | +from osv import fields |
221 | +from tools import config |
222 | +from tools.translate import _ |
223 | +import time |
224 | +import decimal_precision as dp |
225 | +import unicodedata |
226 | + |
227 | + |
228 | +def elimina_tildes(s): |
229 | + """ |
230 | + Funcion para eliminar las tildes de algun texto utilizando el modulo unicodedata. |
231 | + """ |
232 | + return ''.join((c for c in unicodedata.normalize('NFD', s) if unicodedata.category(c) != 'Mn')).replace("'","") |
233 | + |
234 | + |
235 | + |
236 | + |
237 | +class sisb_calculation_unit_type(osv.osv): |
238 | + |
239 | + _name = 'sisb.calculation.unit.type' |
240 | + _description = 'Calculation Unit Type' |
241 | + _columns = { |
242 | + 'name':fields.char('Unit type', size=64, required=True, readonly=False, help="Unit type"), |
243 | + } |
244 | + |
245 | +sisb_calculation_unit_type() |
246 | + |
247 | + |
248 | +class sisb_calculation_unit(osv.osv): |
249 | + |
250 | + _name = 'sisb.calculation.unit' |
251 | + _description = 'Calculation Unit' |
252 | + _order = 'date desc' |
253 | + _columns = { |
254 | + 'name':fields.char('Reference number', size=64, required=True, readonly=False, help="Reference number under the law"), |
255 | + 'date': fields.date('Date', required=True, help="Date on which goes into effect the new Unit Calculation Unit"), |
256 | + 'amount': fields.float('Amount',digits_compute= dp.get_precision('Amount Bs per UT'), help="Amount of the calculation unit in Bs", required=True), |
257 | + 'user_id': fields.many2one('res.users', 'Responsible', readonly=True), |
258 | + 'unit_type_id': fields.many2one('sisb.calculation.unit.type', 'Unit Type', required=True), |
259 | + } |
260 | + _defaults = { |
261 | + 'name': lambda *a: None, |
262 | + 'user_id': lambda s, cr, u, c: u, |
263 | + } |
264 | + |
265 | + |
266 | + def get_amount_cu(self, cr, uid, name_type_cu, date=False, *args): |
267 | + """ |
268 | + name_type_cu: nombre del tipo de unidad de calculo |
269 | + """ |
270 | + #consultar type_cu |
271 | + type_cu_obj = self.pool.get('sisb.calculation.unit.type') |
272 | + type_cu_id = type_cu_obj.search(cr, uid, [('name','=', name_type_cu)]) |
273 | + type_cu_id = type_cu_id and type_cu_id[0] or False |
274 | + #Extraer valor de la unidad segun el tipo |
275 | + rate = 0 |
276 | + if type_cu_id: |
277 | + date= date or time.strftime('%Y-%m-%d') |
278 | + cr.execute("SELECT amount FROM sisb_calculation_unit WHERE unit_type_id = '%s' and date <= '%s' ORDER BY date desc LIMIT 1" % (type_cu_id, date)) |
279 | + if cr.rowcount: |
280 | + rate=cr.fetchall()[0][0] |
281 | + return rate |
282 | + |
283 | + def compute(self, cr, uid, from_amount, name_type_cu, date=False, context={}): |
284 | + result = 0.0 |
285 | + cu = self.get_amount_cu(cr, uid, name_type_cu, date=False) |
286 | + if cu: |
287 | + result = from_amount / cu |
288 | + |
289 | + return result |
290 | + |
291 | + def compute_cu_to_money(self, cr, uid, amount_cu, name_type_cu, date=False, context={}): |
292 | + money = 0.0 |
293 | + cu = self.get_amount_cu(cr, uid, name_type_cu, date) |
294 | + if cu: |
295 | + money = amount_cu * cu |
296 | + return money |
297 | + |
298 | +sisb_calculation_unit() |
299 | + |
300 | +class caja_chica(osv.osv): |
301 | + _inherit = "caja.chica" |
302 | + |
303 | + #Se sobrescribe la funcion del constraint del modelo de caja.chica |
304 | + def _check_monto_caja_chica(self, cr, uid, ids, context=None): |
305 | + """ Verificar que el monto de la caja chica, no exceda la cantidad de |
306 | + unidades permitidas configurado para caja chica. |
307 | + @return: True (bien) or False (mal) |
308 | + """ |
309 | + print '_check_monto_caja_chica' |
310 | + if context is None: |
311 | + context = {} |
312 | + |
313 | + lista_ut = [] |
314 | + lista_uc = [] |
315 | + resultado = True |
316 | + for ca_ch in self.browse(cr, uid, ids): |
317 | + |
318 | + if ca_ch.calculation_unit == 'ut': |
319 | + lista_ut.append(ca_ch.id) |
320 | + else: |
321 | + lista_uc.append(ca_ch.id) |
322 | + |
323 | + if lista_ut: |
324 | + resultado = super(caja_chica, self)._check_monto_caja_chica(cr, uid, lista_ut, context=context) |
325 | + |
326 | + if resultado and lista_uc: |
327 | + for ca_ch in self.browse(cr, uid, lista_uc, context=context): |
328 | + if not ca_ch.config: |
329 | + raise osv.except_osv(('Error !'), ('No existe configuracion para caja chica creada')) |
330 | + |
331 | + |
332 | + ####OBTENER CONFIGURACION DE LA UNIDAD DE CALCULO##### |
333 | + calc_unit_type = ca_ch.unit_type_id and ca_ch.unit_type_id.name or False |
334 | + cu_obj = self.pool.get('sisb.calculation.unit') |
335 | + fecha_actual = time.strftime('%Y-%m-%d') |
336 | + ut_ser = cu_obj.get_amount_cu(cr, uid, calc_unit_type, fecha_actual) |
337 | + |
338 | + if not ut_ser: |
339 | + raise osv.except_osv(('Error !'), ('No existe unidad de calculo creada para la caja chica')) |
340 | + ########################################################### |
341 | + |
342 | + maximo_ut = float(ca_ch.config.max_reposicion) |
343 | + ut_amount = float(ut_ser) |
344 | + monto_caja = float(ca_ch.amount) |
345 | + monto_permitido = maximo_ut * ut_amount |
346 | + print 'monto_permitido',monto_permitido |
347 | + if (monto_permitido - monto_caja) < 0: |
348 | + raise osv.except_osv(('Error !'), ('El saldo de la caja chica es superior a las %s %s permitida'%(maximo_ut, calc_unit_type))) |
349 | + return False |
350 | + |
351 | + return True |
352 | + |
353 | + return resultado |
354 | + |
355 | + _columns = { |
356 | + 'calculation_unit': fields.selection([('other','Other'),('ut','U.T')], 'Calculation Unit', required=True, readonly=True, states={'draft': [('readonly', False)]}, select=True), |
357 | + 'unit_type_id': fields.many2one('sisb.calculation.unit.type', 'Unit Type', readonly=True, states={'draft': [('readonly', False)]}, select=True), |
358 | + } |
359 | + |
360 | + _defaults = { |
361 | + 'calculation_unit':'other', |
362 | + } |
363 | + |
364 | + _constraints = [(_check_monto_caja_chica, 'El saldo de la caja chica es superior al monto permitido para una caja chica', ['amount'])] |
365 | + |
366 | + def onchange_calculation_unit(self, cr, uid, ids, calculation_unit, context=None): |
367 | + if calculation_unit == 'ut': |
368 | + return {'value': {'unit_type_id': False}} |
369 | + else: |
370 | + return {'value': {}} |
371 | + |
372 | +caja_chica() |
373 | + |
374 | + |
375 | +class caja_reposicion_linea(osv.osv): |
376 | + _inherit = "caja.reposicion.linea" |
377 | + |
378 | + def _check_linea_reposicion(self, cr, uid, ids, context=None): |
379 | + """ Verificar que las lineas de la reposicion de caja chica, |
380 | + no exceda la cantidad de unidades permitidas configurado para caja chica. |
381 | + @return: True (bien) or False (mal) |
382 | + """ |
383 | + print '_check_linea_reposicion' |
384 | + if context is None: |
385 | + context = {} |
386 | + |
387 | + lista_repo_line_ut = [] |
388 | + lista_repo_line_uc = [] |
389 | + resultado = True |
390 | + for repo_line in self.browse(cr, uid, ids): |
391 | + |
392 | + if repo_line.caja_reposicion_id.caja_chica_id.calculation_unit == 'ut': |
393 | + lista_repo_line_ut.append(repo_line.id) |
394 | + else: |
395 | + lista_repo_line_uc.append(repo_line.id) |
396 | + |
397 | + if lista_repo_line_ut: |
398 | + resultado = super(caja_reposicion_linea, self)._check_linea_reposicion(cr, uid, lista_repo_line_ut, context=context) |
399 | + |
400 | + if resultado and lista_repo_line_uc: |
401 | + for lin_rep in self.browse(cr, uid, lista_repo_line_uc, context=context): |
402 | + if lin_rep.amount <= 0: |
403 | + raise osv.except_osv(('Error !'), ('Debe colocar un monto mayor a 0')) |
404 | + |
405 | + |
406 | + ####OBTENER CONFIGURACION DE LA UNIDAD DE CALCULO##### |
407 | + calc_unit_type = lin_rep.caja_reposicion_id.caja_chica_id.unit_type_id and lin_rep.caja_reposicion_id.caja_chica_id.unit_type_id.name or False |
408 | + cu_obj = self.pool.get('sisb.calculation.unit') |
409 | + fecha_actual = time.strftime('%Y-%m-%d') |
410 | + ut_ser = cu_obj.get_amount_cu(cr, uid, calc_unit_type, fecha_actual) |
411 | + |
412 | + if not ut_ser: |
413 | + raise osv.except_osv(('Error !'), ('No existe unidad de calculo creada para la caja chica')) |
414 | + ########################################################### |
415 | + |
416 | + max_line_total = 0 |
417 | + config_brw = lin_rep.caja_reposicion_id.caja_chica_id and lin_rep.caja_reposicion_id.caja_chica_id.config or False |
418 | + if not config_brw: |
419 | + config_brw = config_obj.browse(cr, uid, [config_ser[0]])[0] |
420 | + if not config_brw: |
421 | + raise osv.except_osv(('Error !'), ('Se debe crear una configuracion para el manejo de caja chica.')) |
422 | + |
423 | + ut_amount = float(ut_ser) |
424 | + max_line_ut = config_brw.max_linea |
425 | + max_line_total = max_line_ut * ut_amount |
426 | + print 'max_line_total',max_line_total |
427 | + if lin_rep.amount - max_line_total > 0.0001: |
428 | + raise osv.except_osv(('Error !'), ('La linea "%s" excede las %s de %s. No puede ser aprobada la reposicion.'%(lin_rep.name,max_line_ut,calc_unit_type))) |
429 | + return False |
430 | + |
431 | + return True |
432 | + |
433 | + return resultado |
434 | + |
435 | + |
436 | + _constraints = [(_check_linea_reposicion, 'El monto de la linea excede las unidades de calculo permitidas. No puede ser aprobada la reposicion.', ['amount'])] |
437 | + |
438 | + |
439 | +caja_reposicion_linea() |
440 | + |
441 | +class caja_reposicion(osv.osv): |
442 | + _inherit = "caja.reposicion" |
443 | + |
444 | + def validar_reposicion(self, cr, uid, ids, context=None): |
445 | + """ |
446 | + Aqui se aprueba y se generan los asientos contables al momento de aprobar |
447 | + la reposicion. |
448 | + """ |
449 | + print 'validar_reposicion' |
450 | + if context is None: |
451 | + context = {} |
452 | + |
453 | + lista_repo_ut = [] |
454 | + lista_repo_uc = [] |
455 | + resultado = True |
456 | + for repo in self.browse(cr, uid, ids): |
457 | + |
458 | + if repo.caja_chica_id.calculation_unit == 'ut': |
459 | + lista_repo_ut.append(repo.id) |
460 | + else: |
461 | + lista_repo_uc.append(repo.id) |
462 | + |
463 | + if lista_repo_ut: |
464 | + resultado = super(caja_reposicion, self).validar_reposicion(cr, uid, lista_repo_ut, context=context) |
465 | + |
466 | + if resultado and lista_repo_uc: |
467 | + move_obj = self.pool.get('account.move') |
468 | + move_line_obj = self.pool.get('account.move.line') |
469 | + repo_line_obj = self.pool.get('caja.reposicion.linea') |
470 | + config_obj = self.pool.get('caja.chica.configuracion') |
471 | + obj_company = self.pool.get('res.company') |
472 | + |
473 | + repo_brw = self.browse(cr, uid, lista_repo_uc, context=context) |
474 | + |
475 | + """ |
476 | + Inicio de validacion de las lineas de la caja chica para que no excedan |
477 | + el limite definido para las cajas chicas. |
478 | + """ |
479 | + |
480 | + for repo in repo_brw: |
481 | + |
482 | + ####OBTENER CONFIGURACION DE LA UNIDAD DE CALCULO##### |
483 | + #~ ut_ser |
484 | + calc_unit_type = repo.caja_chica_id.unit_type_id and repo.caja_chica_id.unit_type_id.name or False |
485 | + cu_obj = self.pool.get('sisb.calculation.unit') |
486 | + fecha_actual = time.strftime('%Y-%m-%d') |
487 | + ut_ser = cu_obj.get_amount_cu(cr, uid, calc_unit_type, fecha_actual) |
488 | + |
489 | + if not ut_ser: |
490 | + raise osv.except_osv(('Error !'), ('No existe unidad de calculo creada para la caja chica')) |
491 | + ##################################### |
492 | + |
493 | + max_line_total = 0 |
494 | + config_brw = repo.caja_chica_id.config |
495 | + if not config_brw: |
496 | + config_brw = config_obj.browse(cr, uid, [config_ser[0]])[0] |
497 | + if not config_brw: |
498 | + raise osv.except_osv(('Error !'), ('Se debe crear una configuracion para el manejo de caja chica.')) |
499 | + |
500 | + ut_amount = float(ut_ser) |
501 | + max_line_ut = config_brw.max_linea |
502 | + max_line_total = max_line_ut * ut_amount |
503 | + print 'max_line_total',max_line_total |
504 | + for line in repo.reposicion_linea_ids: |
505 | + if line.amount - max_line_total > 0.0001: |
506 | + raise osv.except_osv(('Error !'), ('La linea "%s" excede las %s de %s. No puede ser aprobada la reposicion.'%(lin_rep.name,max_line_ut,calc_unit_type))) |
507 | + if line.account_id.type == 'view': |
508 | + raise osv.except_osv(('Error !'), ('Imposible aprobar la reposicion. En la linea %s, se eligio una cuenta de tipo vista. (%s %s)' % (line.name, line.account_id.code, line.account_id.name))) |
509 | + |
510 | + #Fin de la validacion |
511 | + |
512 | + for repo in repo_brw: |
513 | + caja_brw = repo.caja_chica_id |
514 | + move_dict = {} |
515 | + ref = elimina_tildes(repo.name + ' / ' + repo.ref) |
516 | + move_dict = { |
517 | + 'ref': ref, |
518 | + 'journal_id': caja_brw.journal_move_id and caja_brw.journal_move_id.id or None, |
519 | + 'to_check': True, |
520 | + } |
521 | + move_id = move_obj.create(cr, uid, move_dict) |
522 | + move_brw = move_obj.browse(cr, uid, [move_id])[0] |
523 | + periodo_id = move_brw.period_id.id |
524 | + context.update({'period_id': periodo_id}) |
525 | + |
526 | + move_line_ids = [] |
527 | + company_id = obj_company._company_default_get(cr, uid, 'account.move', context=context) |
528 | + for line in repo.reposicion_linea_ids: |
529 | + move_line_dict = {} |
530 | + name = elimina_tildes(line.name + ' / ' + line.concepto) |
531 | + move_line_dict = { |
532 | + 'name': name[:64], |
533 | + 'ref': ref[:64], |
534 | + #~ 'quantity': , |
535 | + #~ 'product_uom_id': , |
536 | + 'product_id': line.product_id and line.product_id.id or None, |
537 | + 'debit': line.amount, |
538 | + 'credit': 0.00, |
539 | + 'account_id': line.account_id and line.account_id.id or None, |
540 | + 'move_id': move_id, |
541 | + 'journal_id': caja_brw.journal_move_id and caja_brw.journal_move_id.id or None, |
542 | + 'analytic_account_id': line.analytic_id and line.analytic_id.id or 'NULL', |
543 | + 'state': 'valid', |
544 | + 'period_id': periodo_id, |
545 | + } |
546 | + |
547 | + #Creacion de apunte contable para debito por medio de query |
548 | + cr.execute("insert into account_move_line (account_id,name,ref,centralisation,journal_id,company_id,currency_id,credit,state,period_id,debit,date,date_created,move_id,blocked,create_uid,create_date,product_id,analytic_account_id) values (%s,'%s','%s','normal',%s,%s,NULL,%s,'%s',%s,%s,'%s',now(),%s,False,%s,now(),%s,%s)"%(move_line_dict['account_id'],move_line_dict['name'],move_line_dict['ref'],move_line_dict['journal_id'],int(company_id),move_line_dict['credit'],move_line_dict['state'],move_line_dict['period_id'],move_line_dict['debit'],str(fecha_actual),move_line_dict['move_id'],uid,move_line_dict['product_id'],move_line_dict['analytic_account_id'])) |
549 | + cr.commit() |
550 | + |
551 | + move_line_dict.update({'debit': 0.00, 'credit': line.amount, 'account_id': caja_brw.account_id and caja_brw.account_id.id or None, 'partner_id': repo.company_id.partner_id.id}) |
552 | + |
553 | + #Creacion de apunte contable para credito por medio de query |
554 | + #se incorpora el partner en el apunte |
555 | + cr.execute("insert into account_move_line (account_id,name,ref,centralisation,journal_id,company_id,currency_id,credit,state,period_id,debit,date,date_created,move_id,blocked,create_uid,create_date,product_id,analytic_account_id,partner_id) values (%s,'%s','%s','normal',%s,%s,NULL,%s,'%s',%s,%s,'%s',now(),%s,False,%s,now(),%s,%s,%s)"%(move_line_dict['account_id'],move_line_dict['name'],move_line_dict['ref'],move_line_dict['journal_id'],int(company_id),move_line_dict['credit'],move_line_dict['state'],move_line_dict['period_id'],move_line_dict['debit'],str(fecha_actual),move_line_dict['move_id'],uid,move_line_dict['product_id'],move_line_dict['analytic_account_id'],move_line_dict['partner_id'])) |
556 | + cr.commit() |
557 | + |
558 | + #relacionar la linea de la reposicion con el apunte contable asociado a la caja chica |
559 | + apunte_id = move_line_obj.search(cr, uid, [('move_id', '=',move_id),('partner_id','!=',False)], context=context) |
560 | + if apunte_id: |
561 | + dict_linea = { |
562 | + 'move_line_id':apunte_id[0], |
563 | + } |
564 | + repo_line_obj.write(cr, uid, [line.id], dict_linea, context=context) |
565 | + else: |
566 | + raise osv.except_osv(('Error !'), ('Error in create the move.')) |
567 | + |
568 | + #Asentar el asiento contable de la caja chica. |
569 | + move_obj.button_validate(cr, uid, [move_id], context=context) |
570 | + |
571 | + #Unir lineas de asiento a la reposicion |
572 | + move_line_ids = [mo.id for mo in move_brw.line_id] |
573 | + self.write(cr, uid, [repo.id], {'move_ids': [(6, 0, move_line_ids)]}, context=context) |
574 | + |
575 | + |
576 | + self.write(cr, uid, lista_repo_uc, {'state': 'done', 'aprobado_por': uid, |
577 | + 'fecha_aprobado': fecha_actual, 'period_id': periodo_id}, context=context) |
578 | + for repo in self.browse(cr, uid, lista_repo_uc): |
579 | + context.update({'estado': repo.state}) |
580 | + self.log_reposicion(cr, uid, repo.id, context=context) |
581 | + |
582 | + return True |
583 | + |
584 | + |
585 | + return resultado |
586 | + |
587 | + |
588 | +caja_reposicion() |
589 | |
590 | === added directory 'sisb_calculation_unit/security' |
591 | === added file 'sisb_calculation_unit/security/ir.model.access.csv' |
592 | --- sisb_calculation_unit/security/ir.model.access.csv 1970-01-01 00:00:00 +0000 |
593 | +++ sisb_calculation_unit/security/ir.model.access.csv 2018-02-09 12:50:59 +0000 |
594 | @@ -0,0 +1,7 @@ |
595 | +"id","name","model_id:id","group_id:id","perm_read","perm_write","perm_create","perm_unlink" |
596 | +"access_account_sisb_calculation_unit_user","sisb.calculation.unit","model_sisb_calculation_unit","account.group_account_user",1,0,0,0 |
597 | +"access_account_sisb_calculation_unit_manager","sisb.calculation.unit","model_sisb_calculation_unit","account.group_account_manager",1,1,1,1 |
598 | +"access_account_sisb_calculation_unit_type_user","sisb.calculation.unit.type","model_sisb_calculation_unit_type","account.group_account_user",1,0,0,0 |
599 | +"access_account_sisb_calculation_unit_type_manager","sisb.calculation.unit.type","model_sisb_calculation_unit_type","account.group_account_manager",1,1,1,1 |
600 | + |
601 | + |
602 | |
603 | === added directory 'sisb_calculation_unit/view' |
604 | === added file 'sisb_calculation_unit/view/sisb_calculation_unit_view.xml' |
605 | --- sisb_calculation_unit/view/sisb_calculation_unit_view.xml 1970-01-01 00:00:00 +0000 |
606 | +++ sisb_calculation_unit/view/sisb_calculation_unit_view.xml 2018-02-09 12:50:59 +0000 |
607 | @@ -0,0 +1,176 @@ |
608 | +<?xml version="1.0"?> |
609 | +<openerp> |
610 | + <data> |
611 | +<!-- |
612 | +Calculation Unit |
613 | +--> |
614 | + <record id="view_sisb_calculation_unit_filter" model="ir.ui.view"> |
615 | + <field name="name">sisb.calculation.unit.search</field> |
616 | + <field name="model">sisb.calculation.unit</field> |
617 | + <field name="type">search</field> |
618 | + <field name="arch" type="xml"> |
619 | + <search string="Search Calculation Unit"> |
620 | + <group col="10" colspan="4"> |
621 | + <field name="name"/> |
622 | + <field name="unit_type_id" widget="selection"/> |
623 | + <field name="date"/> |
624 | + <field name="amount"/> |
625 | + </group> |
626 | + <newline/> |
627 | + <group expand="1" string="Group By..."> |
628 | + <filter string="Unit Type" icon="terp-go-month" domain="[]" context="{'group_by':'unit_type_id'}"/> |
629 | + </group> |
630 | + </search> |
631 | + </field> |
632 | + </record> |
633 | + |
634 | + <record model="ir.ui.view" id="view_sisb_calculation_unit_form"> |
635 | + <field name="name">sisb.calculation.unit.form</field> |
636 | + <field name="model">sisb.calculation.unit</field> |
637 | + <field name="type">form</field> |
638 | + <field name="arch" type="xml"> |
639 | + <form string="Calculation Unit"> |
640 | + <group col="6" colspan="4"> |
641 | + <field name="unit_type_id" select="1"/> |
642 | + <field name="name" select="1" colspan="4"/> |
643 | + <field name="date" select="1"/> |
644 | + <field name="amount" select="1"/> |
645 | + </group> |
646 | + </form> |
647 | + </field> |
648 | + </record> |
649 | + |
650 | + <record model="ir.ui.view" id="view_sisb_calculation_unit_tree"> |
651 | + <field name="name">sisb.calculation.unit.tree</field> |
652 | + <field name="model">sisb.calculation.unit</field> |
653 | + <field name="type">tree</field> |
654 | + <field name="arch" type="xml"> |
655 | + <tree string="Calculation Unit per date" editable="top"> |
656 | + <field name="unit_type_id" widget="selection"/> |
657 | + <field name="name"/> |
658 | + <field name="date"/> |
659 | + <field name="amount"/> |
660 | + </tree> |
661 | + </field> |
662 | + </record> |
663 | + |
664 | + <record id="act_sisb_calculation_unit_tree" model="ir.actions.act_window"> |
665 | + <field name="name">Calculation Unit</field> |
666 | + <field name="res_model">sisb.calculation.unit</field> |
667 | + <field name="view_type">form</field> |
668 | + <field name="view_mode">tree,form</field> |
669 | + <field name="search_view_id" ref="view_sisb_calculation_unit_filter"/> |
670 | + <field name="help">With Calculation Unit you can create and manage the calculation unit. The Calculation Unit is established under the law of each country, is used for the petty cash, viatical and travel expenses, among others.</field> |
671 | + </record> |
672 | + |
673 | + <menuitem id="conf_sisb_calc_unit" name="Calculation Unit" parent="account.menu_finance_accounting"/> |
674 | + <menuitem |
675 | + parent="conf_sisb_calc_unit" |
676 | + id="menu_action_sisb_calculation_unit_tree" |
677 | + action="act_sisb_calculation_unit_tree"/> |
678 | + |
679 | +<!-- |
680 | +Calculation Unit Type |
681 | +--> |
682 | + <record id="view_sisb_calculation_unit_type_filter" model="ir.ui.view"> |
683 | + <field name="name">sisb.calculation.unit.type.search</field> |
684 | + <field name="model">sisb.calculation.unit.type</field> |
685 | + <field name="type">search</field> |
686 | + <field name="arch" type="xml"> |
687 | + <search string="Search Calculation Unit Type"> |
688 | + <group col="10" colspan="4"> |
689 | + <field name="name"/> |
690 | + </group> |
691 | + </search> |
692 | + </field> |
693 | + </record> |
694 | + |
695 | + <record model="ir.ui.view" id="view_sisb_calculation_unit_type_form"> |
696 | + <field name="name">sisb.calculation.unit.type.form</field> |
697 | + <field name="model">sisb.calculation.unit.type</field> |
698 | + <field name="type">form</field> |
699 | + <field name="arch" type="xml"> |
700 | + <form string="Calculation Unit Type"> |
701 | + <group col="6" colspan="4"> |
702 | + <field name="name" select="1" colspan="4"/> |
703 | + </group> |
704 | + </form> |
705 | + </field> |
706 | + </record> |
707 | + |
708 | + <record model="ir.ui.view" id="view_sisb_calculation_unit_type_tree"> |
709 | + <field name="name">sisb.calculation.unit.type.tree</field> |
710 | + <field name="model">sisb.calculation.unit.type</field> |
711 | + <field name="type">tree</field> |
712 | + <field name="arch" type="xml"> |
713 | + <tree string="Calculation Unit Type" editable="top"> |
714 | + <field name="name"/> |
715 | + </tree> |
716 | + </field> |
717 | + </record> |
718 | + |
719 | + <record id="act_sisb_calculation_unit_type_tree" model="ir.actions.act_window"> |
720 | + <field name="name">Calculation Unit Type</field> |
721 | + <field name="res_model">sisb.calculation.unit.type</field> |
722 | + <field name="view_type">form</field> |
723 | + <field name="view_mode">tree,form</field> |
724 | + <field name="search_view_id" ref="view_sisb_calculation_unit_type_filter"/> |
725 | + <field name="help">Defines the type of calculation unit.</field> |
726 | + </record> |
727 | + <menuitem |
728 | + parent="conf_sisb_calc_unit" |
729 | + id="menu_action_sisb_calculation_unit_type_tree" |
730 | + action="act_sisb_calculation_unit_type_tree"/> |
731 | + |
732 | +<!-- |
733 | + Herencia Caja Chica |
734 | +--> |
735 | + |
736 | +<!-- |
737 | + Arbol |
738 | +--> |
739 | + <record id="inherit_view_caja_chica_tree" model="ir.ui.view"> |
740 | + <field name="name">inherit.view.caja.chica.tree</field> |
741 | + <field name="model">caja.chica</field> |
742 | + <field name="type">tree</field> |
743 | + <field name="inherit_id" ref="l10n_ve_caja_chica.view_caja_chica_tree"/> |
744 | + <field name="arch" type="xml"> |
745 | + <xpath expr='/tree/field[@name="state"]' position='after'> |
746 | + <field name="calculation_unit"/> |
747 | + </xpath> |
748 | + </field> |
749 | + </record> |
750 | +<!-- |
751 | + Formulario |
752 | +--> |
753 | + <record id="inherit_unit_calc_view_caja_chica_form" model="ir.ui.view"> |
754 | + <field name="name">inherit.unit.calc.view.caja.chica.form</field> |
755 | + <field name="model">caja.chica</field> |
756 | + <field name="type">form</field> |
757 | + <field name="inherit_id" ref="l10n_ve_caja_chica.view_caja_chica_form"/> |
758 | + <field name="arch" type="xml"> |
759 | + <xpath expr='/form/notebook/page/group' position="after"> |
760 | + <separator string="Calculating Unit" /> |
761 | + <field name='calculation_unit' on_change="onchange_calculation_unit(calculation_unit)"/> |
762 | + <field name='unit_type_id' widget="selection" attrs="{'invisible':[('calculation_unit','=','ut')], 'required':[('calculation_unit','!=','ut')]}"/> |
763 | + </xpath> |
764 | + </field> |
765 | + </record> |
766 | + |
767 | + |
768 | +<!-- |
769 | + Busqueda |
770 | +--> |
771 | + <record id="view_caja_chica_filter_inherit" model="ir.ui.view"> |
772 | + <field name="name">caja.chica.search.inherit</field> |
773 | + <field name="model">caja.chica</field> |
774 | + <field name="inherit_id" ref="l10n_ve_caja_chica.view_caja_chica_filter"/> |
775 | + <field name="type">search</field> |
776 | + <field name="arch" type="xml"> |
777 | + <xpath expr="/search/group/field[@name='fiscalyear_id']" position="after"> |
778 | + <field name="calculation_unit"/> |
779 | + </xpath> |
780 | + </field> |
781 | + </record> |
782 | + </data> |
783 | +</openerp> |