account_invoice_line.py 39 KB

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