account_invoice.py 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540
  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. customer.phone,
  109. customer.mobile,
  110. customer.city,
  111. customer.email
  112. FROM account_invoice AS invoice
  113. LEFT JOIN res_store_journal_rel AS journal
  114. ON journal.journal_id = invoice.journal_id
  115. LEFT JOIN res_currency_rate AS rate
  116. ON rate.currency_id = invoice.currency_id
  117. LEFT JOIN res_company AS company
  118. ON company.id = invoice.company_id
  119. LEFT JOIN res_users AS users
  120. ON users.id = invoice.user_id
  121. LEFT JOIN res_partner AS partner
  122. ON partner.id = users.partner_id
  123. LEFT JOIN res_partner AS customer
  124. ON customer.id = invoice.partner_id
  125. WHERE invoice.state NOT IN ('draft', 'cancel')
  126. AND invoice.type IN ('out_invoice')
  127. GROUP BY
  128. invoice.id,
  129. rate.currency_id,
  130. invoice.date_invoice,
  131. invoice.type,
  132. invoice.origin,
  133. invoice.amount_total,
  134. invoice.partner_id,
  135. invoice.user_id,
  136. invoice.amount_total,
  137. partner.name,
  138. customer.name,
  139. invoice.amount_tax,
  140. invoice.state,
  141. journal.store_id,
  142. invoice.journal_id,
  143. invoice.state,
  144. invoice.company_id,
  145. customer.ruc,
  146. invoice.supplier_invoice_number,
  147. customer.phone,
  148. customer.mobile,
  149. customer.city,
  150. customer.email
  151. '''
  152. query2 = '''
  153. SELECT
  154. invoice.id,
  155. rate.currency_id,
  156. invoice.date_invoice,
  157. invoice.type,
  158. invoice.origin,
  159. invoice.partner_id,
  160. invoice.user_id,
  161. invoice.amount_total * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1]),
  162. invoice.number,
  163. partner.name,
  164. customer.name,
  165. invoice.amount_tax * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1]),
  166. invoice.state,
  167. journal.store_id,
  168. invoice.journal_id,
  169. invoice.state,
  170. invoice.company_id,
  171. customer.ruc,
  172. invoice.supplier_invoice_number,
  173. invoice.contado,
  174. invoice.credito,
  175. customer.phone,
  176. customer.mobile,
  177. customer.city,
  178. customer.email
  179. FROM account_invoice AS invoice
  180. LEFT JOIN res_store_journal_rel AS journal
  181. ON journal.journal_id = invoice.journal_id
  182. LEFT JOIN res_currency_rate AS rate
  183. ON rate.currency_id = invoice.currency_id
  184. LEFT JOIN res_company AS company
  185. ON company.id = invoice.company_id
  186. LEFT JOIN res_users AS users
  187. ON users.id = invoice.user_id
  188. LEFT JOIN res_partner AS partner
  189. ON partner.id = users.partner_id
  190. LEFT JOIN res_partner AS customer
  191. ON customer.id = invoice.partner_id
  192. WHERE invoice.state NOT IN ('draft', 'cancel')
  193. AND invoice.type IN ('out_invoice')
  194. GROUP BY
  195. invoice.id,
  196. rate.currency_id,
  197. invoice.date_invoice,
  198. invoice.type,
  199. invoice.origin,
  200. invoice.amount_total,
  201. invoice.partner_id,
  202. invoice.user_id,
  203. invoice.amount_total,
  204. partner.name,
  205. customer.name,
  206. invoice.amount_tax,
  207. invoice.state,
  208. journal.store_id,
  209. invoice.journal_id,
  210. invoice.state,
  211. invoice.company_id,
  212. customer.ruc,
  213. invoice.supplier_invoice_number,
  214. customer.phone,
  215. customer.mobile,
  216. customer.city,
  217. customer.email
  218. '''
  219. r.cr.execute(validate_columns)
  220. for j in r.cr.fetchall():
  221. column = j[0]
  222. if column == True:
  223. r.cr.execute(query2,(tuple([company_currency_rate,company_currency_rate])))
  224. return [{
  225. 'invoice_id': j[0],
  226. 'currency_id': j[1],
  227. 'date': j[2],
  228. 'type': j[3],
  229. 'origin': j[4],
  230. 'customer_id':j[5],
  231. 'user_id':j[6],
  232. 'amount':j[7],
  233. 'number':j[8],
  234. 'user_name':j[9],
  235. 'customer_name':j[10],
  236. 'amount_tax':j[11],
  237. 'state':j[12],
  238. 'store_id':j[13],
  239. 'journal_id':j[14],
  240. 'state':j[15],
  241. 'company_id':j[16],
  242. 'customer_ruc':j[17],
  243. 'supplier_invoice_number':j[18],
  244. 'contado':j[19],
  245. 'credito':j[20],
  246. 'customer_phone':j[21],
  247. 'customer_mobile':j[22],
  248. 'customer_city':j[23],
  249. 'customer_email':j[24],
  250. } for j in r.cr.fetchall()]
  251. else:
  252. r.cr.execute(query1,(tuple([company_currency_rate,company_currency_rate])))
  253. return [{
  254. 'invoice_id': j[0],
  255. 'currency_id': j[1],
  256. 'date': j[2],
  257. 'type': j[3],
  258. 'origin': j[4],
  259. 'customer_id':j[5],
  260. 'user_id':j[6],
  261. 'amount':j[7],
  262. 'number':j[8],
  263. 'user_name':j[9],
  264. 'customer_name':j[10],
  265. 'amount_tax':j[11],
  266. 'state':j[12],
  267. 'store_id':j[13],
  268. 'journal_id':j[14],
  269. 'state':j[15],
  270. 'company_id':j[16],
  271. 'customer_ruc':j[17],
  272. 'supplier_invoice_number':j[18],
  273. 'customer_phone':j[19],
  274. 'customer_mobile':j[20],
  275. 'customer_city':j[21],
  276. 'customer_email':j[22],
  277. } for j in r.cr.fetchall()]
  278. def get_account_invoice_sale_and_refund_type():
  279. company_currency_rate = r.env.user.company_id.currency_id.rate
  280. query = '''
  281. SELECT
  282. invoice.id,
  283. rate.currency_id,
  284. invoice.date_invoice,
  285. invoice.type,
  286. invoice.origin,
  287. invoice.partner_id,
  288. invoice.user_id,
  289. invoice.amount_total * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1]) as invoice_rate,
  290. invoice.number,
  291. partner.name,
  292. customer.name,
  293. invoice.amount_tax,
  294. invoice.state,
  295. journal.store_id,
  296. invoice.journal_id,
  297. invoice.state,
  298. invoice.company_id
  299. FROM account_invoice AS invoice
  300. LEFT JOIN res_store_journal_rel AS journal
  301. ON journal.journal_id = invoice.journal_id
  302. LEFT JOIN res_currency_rate AS rate
  303. ON rate.currency_id = invoice.currency_id
  304. LEFT JOIN res_company AS company
  305. ON company.id = invoice.company_id
  306. LEFT JOIN res_users AS users
  307. ON users.id = invoice.user_id
  308. LEFT JOIN res_partner AS partner
  309. ON partner.id = users.partner_id
  310. LEFT JOIN res_partner AS customer
  311. ON customer.id = invoice.partner_id
  312. WHERE invoice.state NOT IN ('draft', 'cancel')
  313. AND invoice.type IN ('out_invoice','out_refund')
  314. GROUP BY
  315. invoice.id,
  316. rate.currency_id,
  317. invoice.date_invoice,
  318. invoice.type,
  319. invoice.origin,
  320. invoice.amount_total,
  321. invoice.partner_id,
  322. invoice.user_id,
  323. invoice.amount_total,
  324. partner.name,
  325. customer.name,
  326. invoice.amount_tax,
  327. invoice.state,
  328. journal.store_id,
  329. invoice.journal_id,
  330. invoice.state,
  331. invoice.company_id
  332. '''
  333. r.cr.execute(query,(tuple([company_currency_rate])))
  334. return [
  335. {
  336. 'invoice_id': j[0],
  337. 'currency_id': j[1],
  338. 'date': j[2],
  339. 'type': j[3],
  340. 'origin': j[4],
  341. 'customer_id':j[5],
  342. 'user_id':j[6],
  343. 'amount':j[7],
  344. 'number':j[8],
  345. 'user_name':j[9],
  346. 'customer_name':j[10],
  347. 'amount_tax':j[11],
  348. 'state':j[12],
  349. 'store_id':j[13],
  350. 'journal_id':j[14],
  351. 'state':j[15],
  352. 'company_id':j[16]
  353. } for j in r.cr.fetchall()
  354. ]
  355. def get_account_invoice_expense_type():
  356. company_currency_rate = r.env.user.company_id.currency_id.rate
  357. origin = '%PO%'
  358. query = '''
  359. SELECT
  360. invoice.id,
  361. rate.currency_id,
  362. invoice.date_invoice,
  363. invoice.type,
  364. invoice.origin,
  365. invoice.partner_id,
  366. invoice.user_id,
  367. invoice.amount_total * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1]) as invoice_rate,
  368. invoice.number,
  369. partner.name,
  370. customer.ruc,
  371. customer.name,
  372. invoice.amount_tax,
  373. invoice.state,
  374. journal.store_id,
  375. invoice.journal_id,
  376. invoice.state,
  377. invoice.company_id,
  378. invoice.supplier_invoice_number
  379. FROM account_invoice AS invoice
  380. LEFT JOIN res_store_journal_rel AS journal
  381. ON journal.journal_id = invoice.journal_id
  382. LEFT JOIN res_currency_rate AS rate
  383. ON rate.currency_id = invoice.currency_id
  384. LEFT JOIN res_company AS company
  385. ON company.id = invoice.company_id
  386. LEFT JOIN res_users AS users
  387. ON users.id = invoice.user_id
  388. LEFT JOIN res_partner AS partner
  389. ON partner.id = users.partner_id
  390. LEFT JOIN res_partner AS customer
  391. ON customer.id = invoice.partner_id
  392. WHERE invoice.state NOT IN ('draft', 'cancel')
  393. AND invoice.type IN ('in_invoice')
  394. AND (invoice.origin NOT LIKE %s OR invoice.origin IS NULL)
  395. GROUP BY
  396. invoice.id,
  397. rate.currency_id,
  398. invoice.date_invoice,
  399. invoice.type,
  400. invoice.origin,
  401. invoice.amount_total,
  402. invoice.partner_id,
  403. invoice.user_id,
  404. invoice.amount_total,
  405. partner.name,
  406. customer.ruc,
  407. customer.name,
  408. invoice.amount_tax,
  409. invoice.state,
  410. journal.store_id,
  411. invoice.journal_id,
  412. invoice.state,
  413. invoice.company_id,
  414. invoice.supplier_invoice_number
  415. '''
  416. r.cr.execute(query,([company_currency_rate,origin]))
  417. return [
  418. {
  419. 'invoice_id':j[0],
  420. 'currency_id':j[1],
  421. 'date':j[2],
  422. 'type':j[3],
  423. 'origin':j[4],
  424. 'customer_id':j[5],
  425. 'user_id':j[6],
  426. 'amount':j[7],
  427. 'number':j[8],
  428. 'user_name':j[9],
  429. 'supplier_ruc':j[10],
  430. 'supplier_name':j[11],
  431. 'amount_tax':j[12],
  432. 'state':j[13],
  433. 'store_id':j[14],
  434. 'journal_id':j[15],
  435. 'state':j[16],
  436. 'company_id':j[17],
  437. 'supplier_invoice_number':j[18],
  438. } for j in r.cr.fetchall()
  439. ]
  440. def get_account_invoice_purchase_type():
  441. company_currency_rate = r.env.user.company_id.currency_id.rate
  442. origin = '%PO%'
  443. query = '''
  444. SELECT
  445. invoice.id,
  446. rate.currency_id,
  447. invoice.date_invoice,
  448. invoice.type,
  449. invoice.origin,
  450. invoice.partner_id,
  451. invoice.user_id,
  452. invoice.amount_total * (%s / (array_agg(rate.rate ORDER BY rate.id DESC))[1]) as invoice_rate,
  453. invoice.number,
  454. partner.name,
  455. customer.ruc,
  456. customer.name,
  457. invoice.amount_tax,
  458. invoice.state,
  459. journal.store_id,
  460. invoice.journal_id,
  461. invoice.state,
  462. invoice.company_id,
  463. invoice.supplier_invoice_number
  464. FROM account_invoice AS invoice
  465. LEFT JOIN res_store_journal_rel AS journal
  466. ON journal.journal_id = invoice.journal_id
  467. LEFT JOIN res_currency_rate AS rate
  468. ON rate.currency_id = invoice.currency_id
  469. LEFT JOIN res_company AS company
  470. ON company.id = invoice.company_id
  471. LEFT JOIN res_users AS users
  472. ON users.id = invoice.user_id
  473. LEFT JOIN res_partner AS partner
  474. ON partner.id = users.partner_id
  475. LEFT JOIN res_partner AS customer
  476. ON customer.id = invoice.partner_id
  477. WHERE invoice.state NOT IN ('draft', 'cancel')
  478. AND invoice.type IN ('in_invoice')
  479. AND (invoice.origin LIKE %s OR invoice.origin <> NULL)
  480. GROUP BY
  481. invoice.id,
  482. rate.currency_id,
  483. invoice.date_invoice,
  484. invoice.type,
  485. invoice.origin,
  486. invoice.amount_total,
  487. invoice.partner_id,
  488. invoice.user_id,
  489. invoice.amount_total,
  490. partner.name,
  491. customer.ruc,
  492. customer.name,
  493. invoice.amount_tax,
  494. invoice.state,
  495. journal.store_id,
  496. invoice.journal_id,
  497. invoice.state,
  498. invoice.company_id,
  499. invoice.supplier_invoice_number
  500. '''
  501. r.cr.execute(query,([company_currency_rate,origin]))
  502. return [
  503. {
  504. 'invoice_id':j[0],
  505. 'currency_id':j[1],
  506. 'date':j[2],
  507. 'type':j[3],
  508. 'origin':j[4],
  509. 'customer_id':j[5],
  510. 'user_id':j[6],
  511. 'amount':j[7],
  512. 'number':j[8],
  513. 'user_name':j[9],
  514. 'supplier_ruc':j[10],
  515. 'supplier_name':j[11],
  516. 'amount_tax':j[12],
  517. 'state':j[13],
  518. 'store_id':j[14],
  519. 'journal_id':j[15],
  520. 'state':j[16],
  521. 'company_id':j[17],
  522. 'supplier_invoice_number':j[18],
  523. } for j in r.cr.fetchall()
  524. ]