account_invoice_line.py 40 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015
  1. # -*- coding: utf-8 -*-
  2. from openerp.http import request as r
  3. def get_account_invoice_line_all_type():
  4. user_store = r.env.user.store_id.id
  5. company_currency_rate = r.env.user.company_id.currency_id.rate
  6. query = '''
  7. SELECT
  8. invoice.id AS invoice_id,
  9. line.id AS invoice_line_id,
  10. invoice.number,
  11. invoice.origin,
  12. invoice.date_invoice,
  13. invoice.type,
  14. line.price_unit * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1]) as price_unit,
  15. line.quantity AS cant,
  16. line.price_subtotal * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1]) AS subtotal,
  17. (line.quantity * (line.price_unit * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1]))) - (line.price_subtotal * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1])) AS impuestos,
  18. (array_agg(history.cost ORDER BY history.id DESC))[1] AS cost,
  19. --line.name,
  20. journal.store_id,
  21. template.categ_id
  22. FROM account_invoice AS invoice
  23. LEFT JOIN account_invoice_line AS line
  24. ON line.invoice_id = invoice.id
  25. LEFT JOIN product_product AS product
  26. ON line.product_id = product.id
  27. LEFT JOIN product_template AS template
  28. ON template.id = product.product_tmpl_id
  29. LEFT JOIN res_store_journal_rel AS journal
  30. ON journal.journal_id = invoice.journal_id
  31. LEFT JOIN product_price_history AS history
  32. ON history.product_template_id = product.product_tmpl_id
  33. LEFT JOIN res_currency_rate AS rate
  34. ON rate.currency_id = invoice.currency_id
  35. WHERE invoice.state NOT IN ('draft', 'cancel')
  36. GROUP BY
  37. invoice.id,
  38. line.id,
  39. invoice.number,
  40. invoice.origin,
  41. invoice.date_invoice,
  42. product.name_template,
  43. line.price_unit,
  44. line.quantity,
  45. line.price_subtotal,
  46. journal.store_id,
  47. template.categ_id
  48. '''
  49. r.cr.execute(query,(tuple([company_currency_rate,company_currency_rate,company_currency_rate,company_currency_rate])))
  50. return [
  51. {
  52. 'invoice_id': j[0],
  53. 'invoice_line_id': j[1],
  54. 'number': j[2],
  55. 'origin': j[3],
  56. 'date': j[4],
  57. 'type': j[5],
  58. 'product_name':j[6],
  59. 'price_unit':j[7],
  60. 'quantity':j[8],
  61. 'subtotal':j[9],
  62. 'tax': j[10],
  63. 'cost': j[11],
  64. 'store_id': j[12],
  65. 'categ_id': j[13],
  66. } for j in r.cr.fetchall()
  67. ]
  68. def get_account_invoice_line_out_invoice(): #analisis de venta
  69. user_store = r.env.user.store_id.id
  70. company_currency_rate = r.env.user.company_id.currency_id.rate
  71. validate_brand = '''
  72. SELECT EXISTS(
  73. SELECT table_name
  74. FROM information_schema.columns
  75. WHERE table_schema='public'
  76. AND table_name='product_brand')
  77. '''
  78. query_with_brand = '''
  79. SELECT
  80. invoice.id AS invoice_id,
  81. line.id AS invoice_line_id,
  82. invoice.number,
  83. invoice.origin,
  84. invoice.date_invoice,
  85. invoice.type,
  86. CASE
  87. WHEN product.default_code IS NOT NULL
  88. THEN ('[' || product.default_code || '] ' || product.name_template)
  89. ELSE product.name_template
  90. END AS display_name,
  91. line.price_unit * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1]) as price_unit,
  92. line.quantity AS cant,
  93. line.price_subtotal * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1]) AS subtotal,
  94. (line.quantity * (line.price_unit * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1]))) - (((line.quantity * (line.price_unit * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1]) * line.discount)/100))) - (line.price_subtotal * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1])) AS impuestos,
  95. (array_agg(history.cost ORDER BY history.id DESC))[1] AS cost,
  96. journal.store_id,
  97. template.categ_id,
  98. partner.ruc,
  99. partner.name,
  100. product.id,
  101. invoice.company_id,
  102. invoice.journal_id,
  103. (array_agg(attr_rel.att_id)) AS attr_rel,
  104. (array_agg(attr_value.name)) AS attr_value,
  105. (array_agg(attr.id)) AS attr,
  106. template.product_brand_id,
  107. brand.name,
  108. line.discount,
  109. line.name,
  110. sales_partner.name
  111. FROM account_invoice AS invoice
  112. LEFT JOIN account_invoice_line AS line
  113. ON line.invoice_id = invoice.id
  114. --Product
  115. LEFT JOIN product_product AS product
  116. ON line.product_id = product.id
  117. LEFT JOIN product_template AS template
  118. ON template.id = product.product_tmpl_id
  119. LEFT JOIN product_attribute_value_product_product_rel AS attr_rel
  120. ON attr_rel.prod_id = product.id
  121. LEFT JOIN product_attribute_value AS attr_value
  122. ON attr_value.id = attr_rel.att_id
  123. LEFT JOIN product_attribute AS attr
  124. ON attr.id = attr_value.attribute_id
  125. LEFT JOIN res_store_journal_rel AS journal
  126. ON journal.journal_id = invoice.journal_id
  127. LEFT JOIN product_price_history AS history
  128. ON history.product_template_id = product.product_tmpl_id
  129. LEFT JOIN res_currency_rate AS rate
  130. ON rate.currency_id = invoice.currency_id
  131. LEFT JOIN res_partner AS partner
  132. ON partner.id = invoice.partner_id
  133. LEFT JOIN product_brand AS brand
  134. ON brand.id = template.product_brand_id
  135. LEFT JOIN res_users AS sales_user
  136. ON sales_user.id = invoice.user_id
  137. LEFT JOIN res_partner AS sales_partner
  138. ON sales_partner.id = sales_user.partner_id
  139. WHERE invoice.state NOT IN ('draft', 'cancel')
  140. AND invoice.type = 'out_invoice'
  141. GROUP BY
  142. invoice.id,
  143. line.id,
  144. invoice.number,
  145. invoice.origin,
  146. invoice.date_invoice,
  147. product.name_template,
  148. line.price_unit,
  149. line.quantity,
  150. line.price_subtotal,
  151. journal.store_id,
  152. template.categ_id,
  153. product.default_code,
  154. partner.ruc,
  155. partner.name,
  156. product.id,
  157. invoice.company_id,
  158. invoice.journal_id,
  159. template.product_brand_id,
  160. brand.name,
  161. line.name,
  162. sales_partner.name
  163. '''
  164. query_without_brand = '''
  165. SELECT
  166. invoice.id AS invoice_id,
  167. line.id AS invoice_line_id,
  168. invoice.number,
  169. invoice.origin,
  170. invoice.date_invoice,
  171. invoice.type,
  172. CASE
  173. WHEN product.default_code IS NOT NULL
  174. THEN ('[' || product.default_code || '] ' || product.name_template)
  175. ELSE product.name_template
  176. END AS display_name,
  177. line.price_unit * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1]) as price_unit,
  178. line.quantity AS cant,
  179. line.price_subtotal * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1]) AS subtotal,
  180. (line.quantity * (line.price_unit * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1]))) - (((line.quantity * (line.price_unit * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1]) * line.discount)/100))) - (line.price_subtotal * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1])) AS impuestos,
  181. (array_agg(history.cost ORDER BY history.id DESC))[1] AS cost,
  182. journal.store_id,
  183. template.categ_id,
  184. partner.ruc,
  185. partner.name,
  186. product.id,
  187. invoice.company_id,
  188. invoice.journal_id,
  189. (array_agg(attr_rel.att_id)) AS attr_rel,
  190. (array_agg(attr_value.name)) AS attr_value,
  191. (array_agg(attr.id)) AS attr,
  192. line.discount,
  193. line.name,
  194. sales_partner.name
  195. FROM account_invoice AS invoice
  196. LEFT JOIN account_invoice_line AS line
  197. ON line.invoice_id = invoice.id
  198. --Product
  199. LEFT JOIN product_product AS product
  200. ON line.product_id = product.id
  201. LEFT JOIN product_template AS template
  202. ON template.id = product.product_tmpl_id
  203. LEFT JOIN product_attribute_value_product_product_rel AS attr_rel
  204. ON attr_rel.prod_id = product.id
  205. LEFT JOIN product_attribute_value AS attr_value
  206. ON attr_value.id = attr_rel.att_id
  207. LEFT JOIN product_attribute AS attr
  208. ON attr.id = attr_value.attribute_id
  209. LEFT JOIN res_store_journal_rel AS journal
  210. ON journal.journal_id = invoice.journal_id
  211. LEFT JOIN product_price_history AS history
  212. ON history.product_template_id = product.product_tmpl_id
  213. LEFT JOIN res_currency_rate AS rate
  214. ON rate.currency_id = invoice.currency_id
  215. LEFT JOIN res_partner AS partner
  216. ON partner.id = invoice.partner_id
  217. WHERE invoice.state NOT IN ('draft', 'cancel')
  218. AND invoice.type = 'out_invoice'
  219. GROUP BY
  220. invoice.id,
  221. line.id,
  222. invoice.number,
  223. invoice.origin,
  224. invoice.date_invoice,
  225. product.name_template,
  226. line.price_unit,
  227. line.quantity,
  228. line.price_subtotal,
  229. journal.store_id,
  230. template.categ_id,
  231. product.default_code,
  232. partner.ruc,
  233. partner.name,
  234. product.id,
  235. invoice.company_id,
  236. invoice.journal_id,
  237. line.name,
  238. sales_partner.name
  239. '''
  240. r.cr.execute(validate_brand)
  241. for j in r.cr.fetchall():
  242. brand = j[0]
  243. if brand == True:
  244. r.cr.execute(query_with_brand,[company_currency_rate,company_currency_rate,company_currency_rate,company_currency_rate,company_currency_rate])
  245. return [
  246. {
  247. 'invoice_id': j[0],
  248. 'invoice_line_id': j[1],
  249. 'number': j[2],
  250. 'origin': j[3],
  251. 'date': j[4],
  252. 'type': j[5],
  253. 'product_name':j[6],
  254. 'price_unit':j[7],
  255. 'quantity':j[8],
  256. 'subtotal':j[9],
  257. 'tax': j[10],
  258. 'cost': j[11],
  259. 'store_id': j[12],
  260. 'categ_id': j[13],
  261. 'partner_name': j[14],
  262. 'partner_ruc': j[15],
  263. 'product_id': j[16],
  264. 'company_id': j[17],
  265. 'journal_id': j[18],
  266. 'attribute_value_ids': j[19],
  267. 'attribute_values': j[20],
  268. 'attribute_ids': j[21],
  269. 'product_brand_id': j[22],
  270. 'brand_name': j[23],
  271. 'discount': j[24],
  272. 'name': j[25],
  273. 'vendor_name': j[26],
  274. } for j in r.cr.fetchall()
  275. ]
  276. else:
  277. r.cr.execute(query_without_brand,[company_currency_rate,company_currency_rate,company_currency_rate,company_currency_rate,company_currency_rate])
  278. return [
  279. {
  280. 'invoice_id': j[0],
  281. 'invoice_line_id': j[1],
  282. 'number': j[2],
  283. 'origin': j[3],
  284. 'date': j[4],
  285. 'type': j[5],
  286. 'product_name':j[6],
  287. 'price_unit':j[7],
  288. 'quantity':j[8],
  289. 'subtotal':j[9],
  290. 'tax': j[10],
  291. 'cost': j[11],
  292. 'store_id': j[12],
  293. 'categ_id': j[13],
  294. 'partner_ruc': j[14],
  295. 'partner_name': j[15],
  296. 'product_id': j[16],
  297. 'company_id': j[17],
  298. 'journal_id': j[18],
  299. 'attribute_value_ids': j[19],
  300. 'attribute_values': j[20],
  301. 'attribute_ids': j[21],
  302. 'discount': j[22],
  303. 'name': j[23],
  304. 'vendor_name': j[24],
  305. } for j in r.cr.fetchall()
  306. ]
  307. def get_account_invoice_line_out_invoice_and_out_refund():
  308. user_store = r.env.user.store_id.id
  309. company_currency_rate = r.env.user.company_id.currency_id.rate
  310. validate_brand = '''
  311. SELECT EXISTS(
  312. SELECT table_name
  313. FROM information_schema.columns
  314. WHERE table_schema='public'
  315. AND table_name='product_brand')
  316. '''
  317. query_with_brand = '''
  318. SELECT
  319. invoice.id AS invoice_id,
  320. line.id AS invoice_line_id,
  321. invoice.number,
  322. invoice.origin,
  323. invoice.date_invoice,
  324. invoice.type,
  325. CASE
  326. WHEN product.default_code IS NOT NULL
  327. THEN ('[' || product.default_code || '] ' || product.name_template)
  328. ELSE product.name_template
  329. END AS display_name,
  330. line.price_unit * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1]) as price_unit,
  331. line.quantity AS cant,
  332. line.price_subtotal * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1]) AS subtotal,
  333. (line.quantity * (line.price_unit * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1]))) - (line.price_subtotal * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1])) AS impuestos,
  334. (array_agg(history.cost ORDER BY history.id DESC))[1] AS cost,
  335. journal.store_id,
  336. template.categ_id,
  337. partner.name,
  338. product.id,
  339. invoice.company_id,
  340. invoice.journal_id,
  341. (array_agg(attr_rel.att_id)) AS attr_rel,
  342. (array_agg(attr_value.name)) AS attr_value,
  343. (array_agg(attr.id)) AS attr,
  344. template.product_brand_id,
  345. brand.name,
  346. partner.id
  347. FROM account_invoice AS invoice
  348. LEFT JOIN account_invoice_line AS line
  349. ON line.invoice_id = invoice.id
  350. --Product
  351. LEFT JOIN product_product AS product
  352. ON line.product_id = product.id
  353. LEFT JOIN product_template AS template
  354. ON template.id = product.product_tmpl_id
  355. LEFT JOIN product_attribute_value_product_product_rel AS attr_rel
  356. ON attr_rel.prod_id = product.id
  357. LEFT JOIN product_attribute_value AS attr_value
  358. ON attr_value.id = attr_rel.att_id
  359. LEFT JOIN product_attribute AS attr
  360. ON attr.id = attr_value.attribute_id
  361. LEFT JOIN res_store_journal_rel AS journal
  362. ON journal.journal_id = invoice.journal_id
  363. LEFT JOIN product_price_history AS history
  364. ON history.product_template_id = product.product_tmpl_id
  365. LEFT JOIN res_currency_rate AS rate
  366. ON rate.currency_id = invoice.currency_id
  367. LEFT JOIN res_partner AS partner
  368. ON partner.id = invoice.partner_id
  369. LEFT JOIN product_brand AS brand
  370. ON brand.id = template.product_brand_id
  371. WHERE invoice.state NOT IN ('draft', 'cancel')
  372. AND invoice.type in ('out_invoice','out_refund')
  373. GROUP BY
  374. invoice.id,
  375. line.id,
  376. invoice.number,
  377. invoice.origin,
  378. invoice.date_invoice,
  379. product.name_template,
  380. line.price_unit,
  381. line.quantity,
  382. line.price_subtotal,
  383. journal.store_id,
  384. template.categ_id,
  385. product.default_code,
  386. partner.name,
  387. product.id,
  388. invoice.company_id,
  389. invoice.journal_id,
  390. template.product_brand_id,
  391. brand.name,
  392. partner.id
  393. '''
  394. query_without_brand = '''
  395. SELECT
  396. invoice.id AS invoice_id,
  397. line.id AS invoice_line_id,
  398. invoice.number,
  399. invoice.origin,
  400. invoice.date_invoice,
  401. invoice.type,
  402. CASE
  403. WHEN product.default_code IS NOT NULL
  404. THEN ('[' || product.default_code || '] ' || product.name_template)
  405. ELSE product.name_template
  406. END AS display_name,
  407. line.price_unit * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1]) as price_unit,
  408. line.quantity AS cant,
  409. line.price_subtotal * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1]) AS subtotal,
  410. (line.quantity * (line.price_unit * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1]))) - (line.price_subtotal * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1])) AS impuestos,
  411. (array_agg(history.cost ORDER BY history.id DESC))[1] AS cost,
  412. --line.name
  413. journal.store_id,
  414. template.categ_id,
  415. partner.name,
  416. product.id,
  417. invoice.company_id,
  418. invoice.journal_id,
  419. (array_agg(attr_rel.att_id)) AS attr_rel,
  420. (array_agg(attr_value.name)) AS attr_value,
  421. (array_agg(attr.id)) AS attr,
  422. partner.id
  423. FROM account_invoice AS invoice
  424. LEFT JOIN account_invoice_line AS line
  425. ON line.invoice_id = invoice.id
  426. --Product
  427. LEFT JOIN product_product AS product
  428. ON line.product_id = product.id
  429. LEFT JOIN product_template AS template
  430. ON template.id = product.product_tmpl_id
  431. LEFT JOIN product_attribute_value_product_product_rel AS attr_rel
  432. ON attr_rel.prod_id = product.id
  433. LEFT JOIN product_attribute_value AS attr_value
  434. ON attr_value.id = attr_rel.att_id
  435. LEFT JOIN product_attribute AS attr
  436. ON attr.id = attr_value.attribute_id
  437. LEFT JOIN res_store_journal_rel AS journal
  438. ON journal.journal_id = invoice.journal_id
  439. LEFT JOIN product_price_history AS history
  440. ON history.product_template_id = product.product_tmpl_id
  441. LEFT JOIN res_currency_rate AS rate
  442. ON rate.currency_id = invoice.currency_id
  443. LEFT JOIN res_partner AS partner
  444. ON partner.id = invoice.partner_id
  445. WHERE invoice.state NOT IN ('draft', 'cancel')
  446. AND invoice.type = 'out_invoice'
  447. GROUP BY
  448. invoice.id,
  449. line.id,
  450. invoice.number,
  451. invoice.origin,
  452. invoice.date_invoice,
  453. product.name_template,
  454. line.price_unit,
  455. line.quantity,
  456. line.price_subtotal,
  457. journal.store_id,
  458. template.categ_id,
  459. product.default_code,
  460. partner.name,
  461. product.id,
  462. invoice.company_id,
  463. invoice.journal_id,
  464. partner.id
  465. '''
  466. r.cr.execute(validate_brand)
  467. for j in r.cr.fetchall():
  468. brand = j[0]
  469. if brand == True:
  470. r.cr.execute(query_with_brand,(tuple([company_currency_rate,company_currency_rate,company_currency_rate,company_currency_rate])))
  471. return [
  472. {
  473. 'invoice_id': j[0],
  474. 'invoice_line_id': j[1],
  475. 'number': j[2],
  476. 'origin': j[3],
  477. 'date': j[4],
  478. 'type': j[5],
  479. 'product_name':j[6],
  480. 'price_unit':j[7],
  481. 'quantity':j[8],
  482. 'subtotal':j[9],
  483. 'tax': j[10],
  484. 'cost': j[11],
  485. 'store_id': j[12],
  486. 'categ_id': j[13],
  487. 'partner_name': j[14],
  488. 'product_id': j[15],
  489. 'company_id': j[16],
  490. 'journal_id': j[17],
  491. 'attribute_value_ids': j[18],
  492. 'attribute_values': j[19],
  493. 'attribute_ids': j[20],
  494. 'product_brand_id': j[21],
  495. 'brand_name': j[22],
  496. 'partner_id': j[23],
  497. } for j in r.cr.fetchall()
  498. ]
  499. else:
  500. r.cr.execute(query_without_brand,(tuple([company_currency_rate,company_currency_rate,company_currency_rate,company_currency_rate])))
  501. return [
  502. {
  503. 'invoice_id': j[0],
  504. 'invoice_line_id': j[1],
  505. 'number': j[2],
  506. 'origin': j[3],
  507. 'date': j[4],
  508. 'type': j[5],
  509. 'product_name':j[6],
  510. 'price_unit':j[7],
  511. 'quantity':j[8],
  512. 'subtotal':j[9],
  513. 'tax': j[10],
  514. 'cost': j[11],
  515. 'store_id': j[12],
  516. 'categ_id': j[13],
  517. 'partner_name': j[14],
  518. 'product_id': j[15],
  519. 'company_id': j[16],
  520. 'journal_id': j[17],
  521. 'attribute_value_ids': j[18],
  522. 'attribute_values': j[19],
  523. 'attribute_ids': j[20],
  524. 'partner_id': j[21],
  525. } for j in r.cr.fetchall()
  526. ]
  527. def get_account_invoice_line_in_invoice_purchase():
  528. user_store = r.env.user.store_id.id
  529. company_currency_rate = r.env.user.company_id.currency_id.rate
  530. origin = '%PO%'
  531. validate_brand = '''
  532. SELECT EXISTS(
  533. SELECT table_name
  534. FROM information_schema.columns
  535. WHERE table_schema='public'
  536. AND table_name='product_brand')
  537. '''
  538. query_with_brand = '''
  539. SELECT
  540. invoice.id AS invoice_id,
  541. line.id AS invoice_line_id,
  542. invoice.number,
  543. invoice.origin,
  544. invoice.supplier_invoice_number,
  545. invoice.date_invoice,
  546. invoice.type,
  547. CASE
  548. WHEN product.default_code IS NOT NULL
  549. THEN ('[' || product.default_code || '] ' || product.name_template)
  550. ELSE product.name_template
  551. END AS display_name,
  552. line.price_unit * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1]) as price_unit,
  553. line.quantity AS cant,
  554. line.price_subtotal * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1]) AS subtotal,
  555. (line.quantity * (line.price_unit * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1]))) - (line.price_subtotal * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1])) AS impuestos,
  556. (array_agg(history.cost ORDER BY history.id DESC))[1] AS cost,
  557. journal.store_id,
  558. template.categ_id,
  559. partner.ruc,
  560. partner.name,
  561. product.id,
  562. invoice.company_id,
  563. invoice.journal_id,
  564. (array_agg(attr_rel.att_id)) AS attr_rel,
  565. (array_agg(attr_value.name)) AS attr_value,
  566. (array_agg(attr.id)) AS attr,
  567. template.product_brand_id,
  568. brand.name,
  569. line.name
  570. FROM account_invoice AS invoice
  571. LEFT JOIN account_invoice_line AS line
  572. ON line.invoice_id = invoice.id
  573. --Product
  574. LEFT JOIN product_product AS product
  575. ON line.product_id = product.id
  576. LEFT JOIN product_template AS template
  577. ON template.id = product.product_tmpl_id
  578. LEFT JOIN product_attribute_value_product_product_rel AS attr_rel
  579. ON attr_rel.prod_id = product.id
  580. LEFT JOIN product_attribute_value AS attr_value
  581. ON attr_value.id = attr_rel.att_id
  582. LEFT JOIN product_attribute AS attr
  583. ON attr.id = attr_value.attribute_id
  584. LEFT JOIN res_store_journal_rel AS journal
  585. ON journal.journal_id = invoice.journal_id
  586. LEFT JOIN product_price_history AS history
  587. ON history.product_template_id = product.product_tmpl_id
  588. LEFT JOIN res_currency_rate AS rate
  589. ON rate.currency_id = invoice.currency_id
  590. LEFT JOIN res_partner AS partner
  591. ON partner.id = invoice.partner_id
  592. LEFT JOIN product_brand AS brand
  593. ON brand.id = template.product_brand_id
  594. WHERE invoice.state NOT IN ('draft', 'cancel')
  595. AND invoice.type = 'in_invoice'
  596. AND invoice.origin LIKE %s
  597. GROUP BY
  598. invoice.id,
  599. line.id,
  600. invoice.number,
  601. invoice.origin,
  602. invoice.supplier_invoice_number,
  603. invoice.date_invoice,
  604. product.name_template,
  605. line.price_unit,
  606. line.quantity,
  607. line.price_subtotal,
  608. journal.store_id,
  609. template.categ_id,
  610. product.default_code,
  611. partner.ruc,
  612. partner.name,
  613. product.id,
  614. invoice.company_id,
  615. invoice.journal_id,
  616. template.product_brand_id,
  617. brand.name,
  618. line.name
  619. '''
  620. query_without_brand = '''
  621. SELECT
  622. invoice.id AS invoice_id,
  623. line.id AS invoice_line_id,
  624. invoice.number,
  625. invoice.origin,
  626. invoice.supplier_invoice_number,
  627. invoice.date_invoice,
  628. invoice.type,
  629. CASE
  630. WHEN product.default_code IS NOT NULL
  631. THEN ('[' || product.default_code || '] ' || product.name_template)
  632. ELSE product.name_template
  633. END AS display_name,
  634. line.price_unit * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1]) as price_unit,
  635. line.quantity AS cant,
  636. line.price_subtotal * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1]) AS subtotal,
  637. (line.quantity * (line.price_unit * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1]))) - (line.price_subtotal * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1])) AS impuestos,
  638. (array_agg(history.cost ORDER BY history.id DESC))[1] AS cost,
  639. journal.store_id,
  640. template.categ_id,
  641. partner.ruc,
  642. partner.name,
  643. product.id,
  644. invoice.company_id,
  645. invoice.journal_id,
  646. (array_agg(attr_rel.att_id)) AS attr_rel,
  647. (array_agg(attr_value.name)) AS attr_value,
  648. (array_agg(attr.id)) AS attr,
  649. line.name
  650. FROM account_invoice AS invoice
  651. LEFT JOIN account_invoice_line AS line
  652. ON line.invoice_id = invoice.id
  653. --Product
  654. LEFT JOIN product_product AS product
  655. ON line.product_id = product.id
  656. LEFT JOIN product_template AS template
  657. ON template.id = product.product_tmpl_id
  658. LEFT JOIN product_attribute_value_product_product_rel AS attr_rel
  659. ON attr_rel.prod_id = product.id
  660. LEFT JOIN product_attribute_value AS attr_value
  661. ON attr_value.id = attr_rel.att_id
  662. LEFT JOIN product_attribute AS attr
  663. ON attr.id = attr_value.attribute_id
  664. LEFT JOIN res_store_journal_rel AS journal
  665. ON journal.journal_id = invoice.journal_id
  666. LEFT JOIN product_price_history AS history
  667. ON history.product_template_id = product.product_tmpl_id
  668. LEFT JOIN res_currency_rate AS rate
  669. ON rate.currency_id = invoice.currency_id
  670. LEFT JOIN res_partner AS partner
  671. ON partner.id = invoice.partner_id
  672. WHERE invoice.state NOT IN ('draft', 'cancel')
  673. AND invoice.type = 'in_invoice'
  674. AND invoice.origin LIKE %s
  675. GROUP BY
  676. invoice.id,
  677. line.id,
  678. invoice.number,
  679. invoice.origin,
  680. invoice.supplier_invoice_number,
  681. invoice.date_invoice,
  682. product.name_template,
  683. line.price_unit,
  684. line.quantity,
  685. line.price_subtotal,
  686. journal.store_id,
  687. template.categ_id,
  688. product.default_code,
  689. partner.ruc,
  690. partner.name,
  691. product.id,
  692. invoice.company_id,
  693. invoice.journal_id,
  694. line.name
  695. '''
  696. r.cr.execute(validate_brand)
  697. for j in r.cr.fetchall():
  698. brand = j[0]
  699. if brand == True:
  700. r.cr.execute(query_with_brand,([company_currency_rate,company_currency_rate,company_currency_rate,company_currency_rate,origin]))
  701. return [
  702. {
  703. 'invoice_id': j[0],
  704. 'invoice_line_id': j[1],
  705. 'number': j[2],
  706. 'origin': j[3],
  707. 'supplier_invoice_number': j[4],
  708. 'date': j[5],
  709. 'type': j[6],
  710. 'product_name':j[7],
  711. 'price_unit':j[8],
  712. 'quantity':j[9],
  713. 'subtotal':j[10],
  714. 'tax': j[11],
  715. 'cost': j[12],
  716. 'store_id': j[13],
  717. 'categ_id': j[14],
  718. 'partner_ruc': j[15],
  719. 'partner_name': j[16],
  720. 'product_id': j[17],
  721. 'company_id': j[18],
  722. 'journal_id': j[19],
  723. 'attribute_value_ids': j[20],
  724. 'attribute_values': j[21],
  725. 'attribute_ids': j[22],
  726. 'product_brand_id': j[23],
  727. 'brand_name': j[24],
  728. 'name': j[25],
  729. } for j in r.cr.fetchall()
  730. ]
  731. else:
  732. r.cr.execute(query_without_brand,([company_currency_rate,company_currency_rate,company_currency_rate,company_currency_rate,origin]))
  733. return [
  734. {
  735. 'invoice_id': j[0],
  736. 'invoice_line_id': j[1],
  737. 'number': j[2],
  738. 'origin': j[3],
  739. 'supplier_invoice_number': j[4],
  740. 'date': j[5],
  741. 'type': j[6],
  742. 'product_name':j[7],
  743. 'price_unit':j[8],
  744. 'quantity':j[9],
  745. 'subtotal':j[10],
  746. 'tax': j[11],
  747. 'cost': j[12],
  748. 'store_id': j[13],
  749. 'categ_id': j[14],
  750. 'partner_ruc': j[15],
  751. 'partner_name': j[16],
  752. 'product_id': j[17],
  753. 'company_id': j[18],
  754. 'journal_id': j[19],
  755. 'attribute_value_ids': j[20],
  756. 'attribute_values': j[21],
  757. 'attribute_ids': j[22],
  758. 'name': j[23],
  759. } for j in r.cr.fetchall()
  760. ]
  761. def get_account_invoice_line_in_invoice_expense():
  762. user_store = r.env.user.store_id.id
  763. company_currency_rate = r.env.user.company_id.currency_id.rate
  764. origin = '%PO%'
  765. validate_brand = '''
  766. SELECT EXISTS(
  767. SELECT table_name
  768. FROM information_schema.columns
  769. WHERE table_schema='public'
  770. AND table_name='product_brand')
  771. '''
  772. query_with_brand = '''
  773. SELECT
  774. invoice.id AS invoice_id,
  775. line.id AS invoice_line_id,
  776. invoice.number,
  777. invoice.origin,
  778. invoice.date_invoice,
  779. invoice.type,
  780. CASE
  781. WHEN product.default_code IS NOT NULL
  782. THEN ('[' || product.default_code || '] ' || product.name_template)
  783. ELSE product.name_template
  784. END AS display_name,
  785. line.price_unit * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1]) as price_unit,
  786. line.quantity AS cant,
  787. line.price_subtotal * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1]) AS subtotal,
  788. (line.quantity * (line.price_unit * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1]))) - (line.price_subtotal * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1])) AS impuestos,
  789. (array_agg(history.cost ORDER BY history.id DESC))[1] AS cost,
  790. journal.store_id,
  791. template.categ_id,
  792. partner.ruc,
  793. partner.name,
  794. product.id,
  795. invoice.company_id,
  796. invoice.journal_id,
  797. (array_agg(attr_rel.att_id)) AS attr_rel,
  798. (array_agg(attr_value.name)) AS attr_value,
  799. (array_agg(attr.id)) AS attr,
  800. template.product_brand_id,
  801. brand.name,
  802. line.name
  803. FROM account_invoice AS invoice
  804. LEFT JOIN account_invoice_line AS line
  805. ON line.invoice_id = invoice.id
  806. --Product
  807. LEFT JOIN product_product AS product
  808. ON line.product_id = product.id
  809. LEFT JOIN product_template AS template
  810. ON template.id = product.product_tmpl_id
  811. LEFT JOIN product_attribute_value_product_product_rel AS attr_rel
  812. ON attr_rel.prod_id = product.id
  813. LEFT JOIN product_attribute_value AS attr_value
  814. ON attr_value.id = attr_rel.att_id
  815. LEFT JOIN product_attribute AS attr
  816. ON attr.id = attr_value.attribute_id
  817. LEFT JOIN res_store_journal_rel AS journal
  818. ON journal.journal_id = invoice.journal_id
  819. LEFT JOIN product_price_history AS history
  820. ON history.product_template_id = product.product_tmpl_id
  821. LEFT JOIN res_currency_rate AS rate
  822. ON rate.currency_id = invoice.currency_id
  823. LEFT JOIN res_partner AS partner
  824. ON partner.id = invoice.partner_id
  825. LEFT JOIN product_brand AS brand
  826. ON brand.id = template.product_brand_id
  827. WHERE invoice.state NOT IN ('draft', 'cancel')
  828. AND invoice.type = 'in_invoice'
  829. AND (invoice.origin NOT LIKE %s OR invoice.origin IS NULL)
  830. GROUP BY
  831. invoice.id,
  832. line.id,
  833. invoice.number,
  834. invoice.origin,
  835. invoice.date_invoice,
  836. product.name_template,
  837. line.price_unit,
  838. line.quantity,
  839. line.price_subtotal,
  840. journal.store_id,
  841. template.categ_id,
  842. product.default_code,
  843. partner.ruc,
  844. partner.name,
  845. product.id,
  846. invoice.company_id,
  847. invoice.journal_id,
  848. template.product_brand_id,
  849. brand.name,
  850. line.name
  851. '''
  852. query_without_brand = '''
  853. SELECT
  854. invoice.id AS invoice_id,
  855. line.id AS invoice_line_id,
  856. invoice.number,
  857. invoice.origin,
  858. invoice.date_invoice,
  859. invoice.type,
  860. CASE
  861. WHEN product.default_code IS NOT NULL
  862. THEN ('[' || product.default_code || '] ' || product.name_template)
  863. ELSE product.name_template
  864. END AS display_name,
  865. line.price_unit * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1]) as price_unit,
  866. line.quantity AS cant,
  867. line.price_subtotal * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1]) AS subtotal,
  868. (line.quantity * (line.price_unit * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1]))) - (line.price_subtotal * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1])) AS impuestos,
  869. (array_agg(history.cost ORDER BY history.id DESC))[1] AS cost,
  870. journal.store_id,
  871. template.categ_id,
  872. partner.ruc,
  873. partner.name,
  874. product.id,
  875. invoice.company_id,
  876. invoice.journal_id,
  877. (array_agg(attr_rel.att_id)) AS attr_rel,
  878. (array_agg(attr_value.name)) AS attr_value,
  879. (array_agg(attr.id)) AS attr,
  880. line.name
  881. FROM account_invoice AS invoice
  882. LEFT JOIN account_invoice_line AS line
  883. ON line.invoice_id = invoice.id
  884. --Product
  885. LEFT JOIN product_product AS product
  886. ON line.product_id = product.id
  887. LEFT JOIN product_template AS template
  888. ON template.id = product.product_tmpl_id
  889. LEFT JOIN product_attribute_value_product_product_rel AS attr_rel
  890. ON attr_rel.prod_id = product.id
  891. LEFT JOIN product_attribute_value AS attr_value
  892. ON attr_value.id = attr_rel.att_id
  893. LEFT JOIN product_attribute AS attr
  894. ON attr.id = attr_value.attribute_id
  895. LEFT JOIN res_store_journal_rel AS journal
  896. ON journal.journal_id = invoice.journal_id
  897. LEFT JOIN product_price_history AS history
  898. ON history.product_template_id = product.product_tmpl_id
  899. LEFT JOIN res_currency_rate AS rate
  900. ON rate.currency_id = invoice.currency_id
  901. LEFT JOIN res_partner AS partner
  902. ON partner.id = invoice.partner_id
  903. WHERE invoice.state NOT IN ('draft', 'cancel')
  904. AND invoice.type = 'in_invoice'
  905. AND (invoice.origin NOT LIKE %s OR invoice.origin IS NULL)
  906. GROUP BY
  907. invoice.id,
  908. line.id,
  909. invoice.number,
  910. invoice.origin,
  911. invoice.date_invoice,
  912. product.name_template,
  913. line.price_unit,
  914. line.quantity,
  915. line.price_subtotal,
  916. journal.store_id,
  917. template.categ_id,
  918. product.default_code,
  919. partner.ruc,
  920. partner.name,
  921. product.id,
  922. invoice.company_id,
  923. invoice.journal_id,
  924. line.name
  925. '''
  926. r.cr.execute(validate_brand)
  927. for j in r.cr.fetchall():
  928. brand = j[0]
  929. if brand == True:
  930. r.cr.execute(query_with_brand,([company_currency_rate,company_currency_rate,company_currency_rate,company_currency_rate,origin]))
  931. return [
  932. {
  933. 'invoice_id': j[0],
  934. 'invoice_line_id': j[1],
  935. 'number': j[2],
  936. 'origin': j[3],
  937. 'date': j[4],
  938. 'type': j[5],
  939. 'product_name':j[6],
  940. 'price_unit':j[7],
  941. 'quantity':j[8],
  942. 'subtotal':j[9],
  943. 'tax': j[10],
  944. 'cost': j[11],
  945. 'store_id': j[12],
  946. 'categ_id': j[13],
  947. 'partner_ruc': j[14],
  948. 'partner_name': j[15],
  949. 'product_id': j[16],
  950. 'company_id': j[17],
  951. 'journal_id': j[18],
  952. 'attribute_value_ids': j[19],
  953. 'attribute_values': j[20],
  954. 'attribute_ids': j[21],
  955. 'product_brand_id': j[22],
  956. 'brand_name': j[23],
  957. 'name': j[24],
  958. } for j in r.cr.fetchall()
  959. ]
  960. else:
  961. r.cr.execute(query_without_brand,([company_currency_rate,company_currency_rate,company_currency_rate,company_currency_rate,origin]))
  962. return [
  963. {
  964. 'invoice_id': j[0],
  965. 'invoice_line_id': j[1],
  966. 'number': j[2],
  967. 'origin': j[3],
  968. 'date': j[4],
  969. 'type': j[5],
  970. 'product_name':j[6],
  971. 'price_unit':j[7],
  972. 'quantity':j[8],
  973. 'subtotal':j[9],
  974. 'tax': j[10],
  975. 'cost': j[11],
  976. 'store_id': j[12],
  977. 'categ_id': j[13],
  978. 'partner_ruc': j[14],
  979. 'partner_name': j[15],
  980. 'product_id': j[16],
  981. 'company_id': j[17],
  982. 'journal_id': j[18],
  983. 'attribute_value_ids': j[19],
  984. 'attribute_values': j[20],
  985. 'attribute_ids': j[21],
  986. 'name': j[22],
  987. } for j in r.cr.fetchall()
  988. ]