Skip to content

Commit

Permalink
[WIP] final_changes in checks to date report
Browse files Browse the repository at this point in the history
  • Loading branch information
ica-adhoc committed Apr 17, 2023
1 parent 0eac5c9 commit 27a2adc
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 44 deletions.
2 changes: 1 addition & 1 deletion l10n_ar_account_reports/reports/report_checks_to_date.xml
Expand Up @@ -44,7 +44,7 @@
<span t-out="tcheck.partner_id.name" />
</td>
<td>
<span t-out="tcheck.checkbook_id.name" />
<span t-out="tcheck.l10n_latam_checkbook_id.journal_id.name" />
</td>
<td>
<span t-out="tcheck.amount"/>
Expand Down
87 changes: 44 additions & 43 deletions l10n_ar_account_reports/wizards/checks_to_date_report.py
Expand Up @@ -48,46 +48,53 @@ def action_confirm(self):

@api.model
def _get_checks_handed(self, journal_id, to_date):
# TODO se deve devolver el listado de cheques propios no debitados a la fecha
# ordenados por check_payment_date o date si no está definido
'''
hacemos una query que:
- toma todos los pagos correspondientes a un cheque
- dentro de esos pagos filtramos por los que no tengan matched_debit_ids
- dentro de account.full.reconcile buscar todas las que tengas asocido un pago que corresponda a un cheque, una vez filtrado,
- obtener la otra linea de ese full reconcile ya que esta corresponde a la conciliacion hecha en el date determinado
- entonces dentro de estos full_reconcile revisamos las lineas que tengan un extracto asociado y ahi sacamos la fecha
- tendremos una tabla t3 que tenga el cheque y en que fecha fue debitado
- entonces lo que filtramos finalmente sera, los cheques aun no fueron debitados y sean de fecha anterior a la dada o los que tiene debito luego de la fecha dada
* toma todos los pagos correspondientes a un cheque
* dentro de esos pagos filtramos por los que no tengan matched_debit_ids
* dentro de account.full.reconcile buscar todas las que tengas asocido un pago que corresponda a un cheque, una vez filtrado,
* obtener la otra linea de ese full reconcile ya que esta corresponde a la conciliacion hecha en el date determinado
* entonces lo que filtramos finalmente sera, los cheques aun no fueron debitados y sean de fecha anterior a la dada o los que tiene debito luego de la fecha dada
-> en account.full.reconcile:
reconciled_line_ids.filtered(lambda x: x.move_id.payment_id.payment_method_id.code == 'check_printing').payment_id.ids -> nos da los id de los pagos correspondientes a un cheque que fueron conciliados
-> esto nos da en la fecha en la cual fueron debitados:
self.env['account.full.reconcile'].search([]).reconciled_line_ids.filtered(lambda x: x.move_id.payment_id.payment_method_id.code == 'check_printing')
.full_reconcile_id.reconciled_line_ids.filtered(lambda x: x.statement_line_id).mapped(lambda x: x.date)
'''
to_date = str(to_date)
query = """
select check_id from (
select distinct on (check_id) check_id, operation_code, paired_code from
(
SELECT ap.id as payment_id, ap.id as check_id, ap_move.date as operation_date, apm.code as operation_code
FROM account_payment ap
LEFT JOIN account_payment_method AS apm ON apm.id = ap.payment_method_id
LEFT JOIN account_move AS ap_move ON ap.move_id = ap_move.id
LEFT JOIN account_journal AS journal ON ap_move.journal_id = journal.id
WHERE
apm.code = 'check_printing'
UNION ALL
SELECT ap_check_op.id as payment_id, ap_check_op.l10n_latam_check_id as check_id, ap_check_op_move.date as operation_date, apm.code as operation_code, pair_apm.code as paired_code
FROM account_payment ap_check_op
LEFT JOIN account_move AS ap_check_op_move ON ap_check_op.move_id = ap_check_op_move.id
LEFT JOIN account_payment_method AS apm ON apm.id = ap_check_op.payment_method_id
LEFT JOIN account_payment AS pair_ap ON pair_ap.id = ap_check_op.paired_internal_transfer_payment_id
LEFT JOIN account_payment_method as pair_apm ON pair_apm.id = pair_ap.payment_method_id
) t
WHERE operation_date < '""" + to_date + """' order by check_id, operation_date desc, payment_id desc
) t2
WHERE operation_code != 'out_third_party_checks' AND (paired_code != 'out_third_party_checks' OR paired_code IS NULL)
;
"""
return self.env['account.payment']
SELECT DISTINCT ON (t.check_id) t.check_id AS cheque FROM
(
SELECT ap.id as check_id, ap_move.date as operation_date, apm.code as operation_code
FROM account_payment ap
LEFT JOIN account_payment_method AS apm ON apm.id = ap.payment_method_id
LEFT JOIN account_move AS ap_move ON ap.move_id = ap_move.id
LEFT JOIN account_journal AS journal ON ap_move.journal_id = journal.id
WHERE
apm.code = 'check_printing' AND ap_move.date <= '""" + to_date + """' order by ap.id, ap_move.date desc, ap.id desc
) t
LEFT JOIN
(
SELECT ap.id as check_id, afr_full.name as conciliation_name, aml_2.date as operation_date, aml.id as aml_1, aml_2.id as aml_2
FROM account_payment ap
JOIN account_payment_method AS apm ON apm.id = ap.payment_method_id
JOIN account_move_line as aml ON ap.move_id = aml.move_id
JOIN account_full_reconcile AS afr_full ON afr_full.id = aml.full_reconcile_id
JOIN account_move_line AS aml_2 ON aml_2.full_reconcile_id = afr_full.id
WHERE apm.code = 'check_printing' AND aml.id <> aml_2.id
) t2
ON t.check_id = t2.check_id
WHERE t2.operation_date >= '""" + to_date + """' OR t2.operation_date IS NULL
;
"""
self.env.cr.execute(query)
res = self.env.cr.fetchall()
check_ids = [x[0] for x in res]
checks = self.env['account.payment'].search([('id', 'in', check_ids)])
if journal_id:
checks = self.env['account.payment'].search([('id', 'in', check_ids),('journal_id','=', journal_id)])
return checks

@api.model
def _get_checks_on_hand(self, journal_id, to_date):
Expand Down Expand Up @@ -122,23 +129,17 @@ def _get_checks_on_hand(self, journal_id, to_date):
LEFT JOIN account_payment AS pair_ap ON pair_ap.id = ap_check_op.paired_internal_transfer_payment_id
LEFT JOIN account_payment_method as pair_apm ON pair_apm.id = pair_ap.payment_method_id
) t
WHERE operation_date < '""" + to_date + """' order by check_id, operation_date desc, payment_id desc
WHERE operation_date <= '""" + to_date + """' order by check_id, operation_date desc, payment_id desc
) t2
WHERE operation_code != 'out_third_party_checks' AND (paired_code != 'out_third_party_checks' OR paired_code IS NULL)
;
"""
#paired_internal_transfer_payment_id.payment_method_code
#""" + to_date + """
#operation_code != 'out_third_party_checks' AND (operation_code != 'new_third_party_checks' AND paired_code != 'out_third_party_checks' OR paired_code IS NULL)
self.env.cr.execute(query)
res = self.env.cr.fetchall()
check_ids = [x[0] for x in res]
print(check_ids)
checks = self.env['account.payment']
checks = self.env['account.payment'].search([('id', 'in', check_ids)])
if journal_id:
checks = self.env['account.payment'].search([('id', 'in', check_ids),('journal_id','=',journal_id)])


return checks

# @api.model
Expand Down

0 comments on commit 27a2adc

Please sign in to comment.