# Copyright 2019 Le Filament (<http://www.le-filament.com>)
# License GPL-3 or later (http://www.gnu.org/licenses/gpl.html).

from odoo import models, fields, http
from odoo.addons.web.controllers.main import serialize_exception
from odoo.http import request
from odoo.addons.lefilament_export_journal.wizard.datas_export import AccountDatasExport
from odoo.addons.lefilament_export_journal.wizard.datas_export import HEADER_DEFAULT
from odoo.addons.lefilament_export_journal.wizard.datas_export import HEADER_DEFAULT_CEGID


class POSDatasExportWizard(models.TransientModel):
    _inherit = "invoice.line.export"

    journal = fields.Selection(selection_add=[('caisses', 'Caisses')])


class POSDatasExport(AccountDatasExport):

    def datas_export_caisses(self, format, date_start, date_end,
                             nom_outil_compta):
        if nom_outil_compta == 'ibiza':
            header = HEADER_DEFAULT
        elif nom_outil_compta == 'cegid':
            header = HEADER_DEFAULT_CEGID
        else:
            header = HEADER_DEFAULT
        request.cr.execute("""
            SELECT l.date,
             'PDV' AS journal,
             a.code AS compte,
             '' AS auxiliaire,
             l.debit,
             l.credit,
             (CASE WHEN l.user_type_id = 1
              THEN a.name
              ELSE CONCAT('Vente ',l.ref,' - ',l.name) END) AS libelle,
             m.name AS piece,
             '' AS echeance,
             l.ref AS ref_piece
            FROM account_move_line AS l
            LEFT JOIN account_account AS a ON l.account_id = a.id
            LEFT JOIN account_journal AS j ON l.journal_id = j.id
            LEFT JOIN account_move AS m ON m.id = l.move_id
            WHERE j.code = 'POSS' AND l.date >= %s AND l.date <= %s
            ORDER BY l.date, l.move_id, a.code DESC;
            """, (date_start, date_end))
        lignes_export = request.cr.dictfetchall()
        company_name = request.env['res.company'].search([('id', '=', 1)]).name
        filename_ = (company_name.title().replace(' ', '')
                     + 'Caisses_' + date_start.replace('-', '')
                     + '_' + date_end.replace('-', ''))

        if format == 'csv':
            return self.export_csv(
                lignes_export, header, filename_, nom_outil_compta)

        return self.export_xls(
            lignes_export, header, filename_, nom_outil_compta)

    @http.route('/web/export_journal/', type='http', auth="user")
    @serialize_exception
    def datas_export(self, format, journal, nom_outil_compta,
                     date_start, date_end, **kw):
        if journal == 'caisses':
            return self.datas_export_caisses(format, date_start, date_end,
                                             nom_outil_compta)

        return super(POSDatasExport, self).datas_export(format, journal,
                                                        nom_outil_compta,
                                                        date_start, date_end)