account_invoice.py 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516
  1. # -*- coding: utf-8 -*-
  2. from openerp.http import request as r
  3. def get_account_invoice_all_type():
  4. company_currency_rate = r.env.user.company_id.currency_id.rate
  5. query = '''
  6. SELECT
  7. invoice.id,
  8. rate.currency_id,
  9. invoice.date_invoice,
  10. invoice.type,
  11. invoice.origin,
  12. invoice.partner_id,
  13. invoice.user_id,
  14. invoice.amount_total * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1]) as invoice_rate,
  15. invoice.number,
  16. partner.name,
  17. customer.name,
  18. invoice.amount_tax,
  19. invoice.state,
  20. journal.store_id,
  21. invoice.journal_id,
  22. invoice.state,
  23. customer.ruc,
  24. invoice.supplier_invoice_number
  25. FROM account_invoice AS invoice
  26. LEFT JOIN res_store_journal_rel AS journal
  27. ON journal.journal_id = invoice.journal_id
  28. LEFT JOIN res_currency_rate AS rate
  29. ON rate.currency_id = invoice.currency_id
  30. LEFT JOIN res_company AS company
  31. ON company.id = invoice.company_id
  32. LEFT JOIN res_users AS users
  33. ON users.id = invoice.user_id
  34. LEFT JOIN res_partner AS partner
  35. ON partner.id = users.partner_id
  36. LEFT JOIN res_partner AS customer
  37. ON customer.id = invoice.partner_id
  38. WHERE invoice.state NOT IN ('draft', 'cancel')
  39. GROUP BY
  40. invoice.id,
  41. rate.currency_id,
  42. invoice.date_invoice,
  43. invoice.type,
  44. invoice.origin,
  45. invoice.amount_total,
  46. invoice.partner_id,
  47. invoice.user_id,
  48. invoice.amount_total,
  49. partner.name,
  50. customer.name,
  51. invoice.amount_tax,
  52. invoice.state,
  53. journal.store_id,
  54. invoice.journal_id,
  55. invoice.state,
  56. customer.ruc,
  57. invoice.supplier_invoice_number
  58. '''
  59. r.cr.execute(query,(tuple([company_currency_rate])))
  60. return [
  61. {
  62. 'invoice_id': j[0],
  63. 'currency_id': j[1],
  64. 'date': j[2],
  65. 'type': j[3],
  66. 'origin': j[4],
  67. 'customer_id':j[5],
  68. 'user_id':j[6],
  69. 'amount':j[7],
  70. 'number':j[8],
  71. 'user_name':j[9],
  72. 'customer_name':j[10],
  73. 'amount_tax':j[11],
  74. 'state':j[12],
  75. 'store_id':j[13],
  76. 'journal_id':j[14],
  77. 'state':j[15],
  78. 'customer_ruc':j[16],
  79. 'supplier_invoice_number':j[17],
  80. } for j in r.cr.fetchall()
  81. ]
  82. def get_account_invoice_sale_type(): #historico de venta
  83. company_currency_rate = r.env.user.company_id.currency_id.rate
  84. validate_columns = '''
  85. SELECT EXISTS (SELECT 1 FROM information_schema.columns
  86. WHERE table_name='account_invoice' AND column_name in ('contado','credito'))'''
  87. query1 = '''
  88. SELECT
  89. invoice.id,
  90. rate.currency_id,
  91. invoice.date_invoice,
  92. invoice.type,
  93. invoice.origin,
  94. invoice.partner_id,
  95. invoice.user_id,
  96. invoice.amount_total * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1]),
  97. invoice.number,
  98. partner.name,
  99. customer.name,
  100. invoice.amount_tax * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1]),
  101. invoice.state,
  102. journal.store_id,
  103. invoice.journal_id,
  104. invoice.state,
  105. invoice.company_id,
  106. customer.ruc,
  107. invoice.supplier_invoice_number
  108. FROM account_invoice AS invoice
  109. LEFT JOIN res_store_journal_rel AS journal
  110. ON journal.journal_id = invoice.journal_id
  111. LEFT JOIN res_currency_rate AS rate
  112. ON rate.currency_id = invoice.currency_id
  113. LEFT JOIN res_company AS company
  114. ON company.id = invoice.company_id
  115. LEFT JOIN res_users AS users
  116. ON users.id = invoice.user_id
  117. LEFT JOIN res_partner AS partner
  118. ON partner.id = users.partner_id
  119. LEFT JOIN res_partner AS customer
  120. ON customer.id = invoice.partner_id
  121. WHERE invoice.state NOT IN ('draft', 'cancel')
  122. AND invoice.type IN ('out_invoice')
  123. GROUP BY
  124. invoice.id,
  125. rate.currency_id,
  126. invoice.date_invoice,
  127. invoice.type,
  128. invoice.origin,
  129. invoice.amount_total,
  130. invoice.partner_id,
  131. invoice.user_id,
  132. invoice.amount_total,
  133. partner.name,
  134. customer.name,
  135. invoice.amount_tax,
  136. invoice.state,
  137. journal.store_id,
  138. invoice.journal_id,
  139. invoice.state,
  140. invoice.company_id,
  141. customer.ruc,
  142. invoice.supplier_invoice_number
  143. '''
  144. query2 = '''
  145. SELECT
  146. invoice.id,
  147. rate.currency_id,
  148. invoice.date_invoice,
  149. invoice.type,
  150. invoice.origin,
  151. invoice.partner_id,
  152. invoice.user_id,
  153. invoice.amount_total * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1]),
  154. invoice.number,
  155. partner.name,
  156. customer.name,
  157. invoice.amount_tax * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1]),
  158. invoice.state,
  159. journal.store_id,
  160. invoice.journal_id,
  161. invoice.state,
  162. invoice.company_id,
  163. customer.ruc,
  164. invoice.supplier_invoice_number,
  165. invoice.contado,
  166. invoice.credito
  167. FROM account_invoice AS invoice
  168. LEFT JOIN res_store_journal_rel AS journal
  169. ON journal.journal_id = invoice.journal_id
  170. LEFT JOIN res_currency_rate AS rate
  171. ON rate.currency_id = invoice.currency_id
  172. LEFT JOIN res_company AS company
  173. ON company.id = invoice.company_id
  174. LEFT JOIN res_users AS users
  175. ON users.id = invoice.user_id
  176. LEFT JOIN res_partner AS partner
  177. ON partner.id = users.partner_id
  178. LEFT JOIN res_partner AS customer
  179. ON customer.id = invoice.partner_id
  180. WHERE invoice.state NOT IN ('draft', 'cancel')
  181. AND invoice.type IN ('out_invoice')
  182. GROUP BY
  183. invoice.id,
  184. rate.currency_id,
  185. invoice.date_invoice,
  186. invoice.type,
  187. invoice.origin,
  188. invoice.amount_total,
  189. invoice.partner_id,
  190. invoice.user_id,
  191. invoice.amount_total,
  192. partner.name,
  193. customer.name,
  194. invoice.amount_tax,
  195. invoice.state,
  196. journal.store_id,
  197. invoice.journal_id,
  198. invoice.state,
  199. invoice.company_id,
  200. customer.ruc,
  201. invoice.supplier_invoice_number
  202. '''
  203. r.cr.execute(validate_columns)
  204. for j in r.cr.fetchall():
  205. column = j[0]
  206. if column == True:
  207. r.cr.execute(query2,(tuple([company_currency_rate,company_currency_rate])))
  208. return [{
  209. 'invoice_id': j[0],
  210. 'currency_id': j[1],
  211. 'date': j[2],
  212. 'type': j[3],
  213. 'origin': j[4],
  214. 'customer_id':j[5],
  215. 'user_id':j[6],
  216. 'amount':j[7],
  217. 'number':j[8],
  218. 'user_name':j[9],
  219. 'customer_name':j[10],
  220. 'amount_tax':j[11],
  221. 'state':j[12],
  222. 'store_id':j[13],
  223. 'journal_id':j[14],
  224. 'state':j[15],
  225. 'company_id':j[16],
  226. 'customer_ruc':j[17],
  227. 'supplier_invoice_number':j[18],
  228. 'contado':j[19],
  229. 'credito':j[20],
  230. } for j in r.cr.fetchall()]
  231. else:
  232. r.cr.execute(query1,(tuple([company_currency_rate,company_currency_rate])))
  233. return [{
  234. 'invoice_id': j[0],
  235. 'currency_id': j[1],
  236. 'date': j[2],
  237. 'type': j[3],
  238. 'origin': j[4],
  239. 'customer_id':j[5],
  240. 'user_id':j[6],
  241. 'amount':j[7],
  242. 'number':j[8],
  243. 'user_name':j[9],
  244. 'customer_name':j[10],
  245. 'amount_tax':j[11],
  246. 'state':j[12],
  247. 'store_id':j[13],
  248. 'journal_id':j[14],
  249. 'state':j[15],
  250. 'company_id':j[16],
  251. 'customer_ruc':j[17],
  252. 'supplier_invoice_number':j[18],
  253. } for j in r.cr.fetchall()]
  254. def get_account_invoice_sale_and_refund_type():
  255. company_currency_rate = r.env.user.company_id.currency_id.rate
  256. query = '''
  257. SELECT
  258. invoice.id,
  259. rate.currency_id,
  260. invoice.date_invoice,
  261. invoice.type,
  262. invoice.origin,
  263. invoice.partner_id,
  264. invoice.user_id,
  265. invoice.amount_total * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1]) as invoice_rate,
  266. invoice.number,
  267. partner.name,
  268. customer.name,
  269. invoice.amount_tax,
  270. invoice.state,
  271. journal.store_id,
  272. invoice.journal_id,
  273. invoice.state,
  274. invoice.company_id
  275. FROM account_invoice AS invoice
  276. LEFT JOIN res_store_journal_rel AS journal
  277. ON journal.journal_id = invoice.journal_id
  278. LEFT JOIN res_currency_rate AS rate
  279. ON rate.currency_id = invoice.currency_id
  280. LEFT JOIN res_company AS company
  281. ON company.id = invoice.company_id
  282. LEFT JOIN res_users AS users
  283. ON users.id = invoice.user_id
  284. LEFT JOIN res_partner AS partner
  285. ON partner.id = users.partner_id
  286. LEFT JOIN res_partner AS customer
  287. ON customer.id = invoice.partner_id
  288. WHERE invoice.state NOT IN ('draft', 'cancel')
  289. AND invoice.type IN ('out_invoice','out_refund')
  290. GROUP BY
  291. invoice.id,
  292. rate.currency_id,
  293. invoice.date_invoice,
  294. invoice.type,
  295. invoice.origin,
  296. invoice.amount_total,
  297. invoice.partner_id,
  298. invoice.user_id,
  299. invoice.amount_total,
  300. partner.name,
  301. customer.name,
  302. invoice.amount_tax,
  303. invoice.state,
  304. journal.store_id,
  305. invoice.journal_id,
  306. invoice.state,
  307. invoice.company_id
  308. '''
  309. r.cr.execute(query,(tuple([company_currency_rate])))
  310. return [
  311. {
  312. 'invoice_id': j[0],
  313. 'currency_id': j[1],
  314. 'date': j[2],
  315. 'type': j[3],
  316. 'origin': j[4],
  317. 'customer_id':j[5],
  318. 'user_id':j[6],
  319. 'amount':j[7],
  320. 'number':j[8],
  321. 'user_name':j[9],
  322. 'customer_name':j[10],
  323. 'amount_tax':j[11],
  324. 'state':j[12],
  325. 'store_id':j[13],
  326. 'journal_id':j[14],
  327. 'state':j[15],
  328. 'company_id':j[16]
  329. } for j in r.cr.fetchall()
  330. ]
  331. def get_account_invoice_expense_type():
  332. company_currency_rate = r.env.user.company_id.currency_id.rate
  333. origin = '%PO%'
  334. query = '''
  335. SELECT
  336. invoice.id,
  337. rate.currency_id,
  338. invoice.date_invoice,
  339. invoice.type,
  340. invoice.origin,
  341. invoice.partner_id,
  342. invoice.user_id,
  343. invoice.amount_total * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1]) as invoice_rate,
  344. invoice.number,
  345. partner.name,
  346. customer.ruc,
  347. customer.name,
  348. invoice.amount_tax,
  349. invoice.state,
  350. journal.store_id,
  351. invoice.journal_id,
  352. invoice.state,
  353. invoice.company_id,
  354. invoice.supplier_invoice_number
  355. FROM account_invoice AS invoice
  356. LEFT JOIN res_store_journal_rel AS journal
  357. ON journal.journal_id = invoice.journal_id
  358. LEFT JOIN res_currency_rate AS rate
  359. ON rate.currency_id = invoice.currency_id
  360. LEFT JOIN res_company AS company
  361. ON company.id = invoice.company_id
  362. LEFT JOIN res_users AS users
  363. ON users.id = invoice.user_id
  364. LEFT JOIN res_partner AS partner
  365. ON partner.id = users.partner_id
  366. LEFT JOIN res_partner AS customer
  367. ON customer.id = invoice.partner_id
  368. WHERE invoice.state NOT IN ('draft', 'cancel')
  369. AND invoice.type IN ('in_invoice')
  370. AND (invoice.origin NOT LIKE %s OR invoice.origin IS NULL)
  371. GROUP BY
  372. invoice.id,
  373. rate.currency_id,
  374. invoice.date_invoice,
  375. invoice.type,
  376. invoice.origin,
  377. invoice.amount_total,
  378. invoice.partner_id,
  379. invoice.user_id,
  380. invoice.amount_total,
  381. partner.name,
  382. customer.ruc,
  383. customer.name,
  384. invoice.amount_tax,
  385. invoice.state,
  386. journal.store_id,
  387. invoice.journal_id,
  388. invoice.state,
  389. invoice.company_id,
  390. invoice.supplier_invoice_number
  391. '''
  392. r.cr.execute(query,([company_currency_rate,origin]))
  393. return [
  394. {
  395. 'invoice_id':j[0],
  396. 'currency_id':j[1],
  397. 'date':j[2],
  398. 'type':j[3],
  399. 'origin':j[4],
  400. 'customer_id':j[5],
  401. 'user_id':j[6],
  402. 'amount':j[7],
  403. 'number':j[8],
  404. 'user_name':j[9],
  405. 'supplier_ruc':j[10],
  406. 'supplier_name':j[11],
  407. 'amount_tax':j[12],
  408. 'state':j[13],
  409. 'store_id':j[14],
  410. 'journal_id':j[15],
  411. 'state':j[16],
  412. 'company_id':j[17],
  413. 'supplier_invoice_number':j[18],
  414. } for j in r.cr.fetchall()
  415. ]
  416. def get_account_invoice_purchase_type():
  417. company_currency_rate = r.env.user.company_id.currency_id.rate
  418. origin = '%PO%'
  419. query = '''
  420. SELECT
  421. invoice.id,
  422. rate.currency_id,
  423. invoice.date_invoice,
  424. invoice.type,
  425. invoice.origin,
  426. invoice.partner_id,
  427. invoice.user_id,
  428. invoice.amount_total * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1]) as invoice_rate,
  429. invoice.number,
  430. partner.name,
  431. customer.ruc,
  432. customer.name,
  433. invoice.amount_tax,
  434. invoice.state,
  435. journal.store_id,
  436. invoice.journal_id,
  437. invoice.state,
  438. invoice.company_id,
  439. invoice.supplier_invoice_number
  440. FROM account_invoice AS invoice
  441. LEFT JOIN res_store_journal_rel AS journal
  442. ON journal.journal_id = invoice.journal_id
  443. LEFT JOIN res_currency_rate AS rate
  444. ON rate.currency_id = invoice.currency_id
  445. LEFT JOIN res_company AS company
  446. ON company.id = invoice.company_id
  447. LEFT JOIN res_users AS users
  448. ON users.id = invoice.user_id
  449. LEFT JOIN res_partner AS partner
  450. ON partner.id = users.partner_id
  451. LEFT JOIN res_partner AS customer
  452. ON customer.id = invoice.partner_id
  453. WHERE invoice.state NOT IN ('draft', 'cancel')
  454. AND invoice.type IN ('in_invoice')
  455. AND (invoice.origin LIKE %s OR invoice.origin <> NULL)
  456. GROUP BY
  457. invoice.id,
  458. rate.currency_id,
  459. invoice.date_invoice,
  460. invoice.type,
  461. invoice.origin,
  462. invoice.amount_total,
  463. invoice.partner_id,
  464. invoice.user_id,
  465. invoice.amount_total,
  466. partner.name,
  467. customer.ruc,
  468. customer.name,
  469. invoice.amount_tax,
  470. invoice.state,
  471. journal.store_id,
  472. invoice.journal_id,
  473. invoice.state,
  474. invoice.company_id,
  475. invoice.supplier_invoice_number
  476. '''
  477. r.cr.execute(query,([company_currency_rate,origin]))
  478. return [
  479. {
  480. 'invoice_id':j[0],
  481. 'currency_id':j[1],
  482. 'date':j[2],
  483. 'type':j[3],
  484. 'origin':j[4],
  485. 'customer_id':j[5],
  486. 'user_id':j[6],
  487. 'amount':j[7],
  488. 'number':j[8],
  489. 'user_name':j[9],
  490. 'supplier_ruc':j[10],
  491. 'supplier_name':j[11],
  492. 'amount_tax':j[12],
  493. 'state':j[13],
  494. 'store_id':j[14],
  495. 'journal_id':j[15],
  496. 'state':j[16],
  497. 'company_id':j[17],
  498. 'supplier_invoice_number':j[18],
  499. } for j in r.cr.fetchall()
  500. ]