Test Failed
Push — main ( 0a80b2...05d6aa )
by Sat CFDI
03:21
created

EmailButtonManager.set_emails()   A

Complexity

Conditions 2

Size

Total Lines 8
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 6
dl 0
loc 8
rs 10
c 0
b 0
f 0
cc 2
nop 2
1
from datetime import date
2
3
import PySimpleGUI as sg
4
from dateutil.relativedelta import relativedelta
5
# noinspection PyUnresolvedReferences
6
from satcfdi.transform.catalog import CATALOGS
7
8
from .log_tools import *
9
10
logging.basicConfig(level=logging.DEBUG)
11
logger = LogAdapter(logging.getLogger())
12
13
FORMA_PAGO = CATALOGS['{http://www.sat.gob.mx/sitio_internet/cfd/catalogos}c_FormaPago']
14
TEXT_PADDING = ((5, 0), 3)
15
RTEXT_PADDING = ((0, 0), 3)
16
17
18
def make_layout(has_fiel):
19
    # LAYOUT
20
    button_column = [
21
        sg.Button("Preparar Facturas", key="prepare_facturas", border_width=0),
22
        sg.Text("Año-Mes:", pad=TEXT_PADDING),
23
        sg.Input(date.today().strftime('%Y-%m'), size=(8, 1), key="periodo", change_submits=True),
24
        sg.Text("De La:", pad=TEXT_PADDING),
25
        sg.Input("1", key="inicio", size=(4, 1), change_submits=True),
26
        sg.Text("Hasta:", pad=TEXT_PADDING),
27
        sg.Input("", key="final", size=(4, 1), change_submits=True),
28
        sg.Text("             ", pad=TEXT_PADDING),
29
        sg.Button("Exportar Excel", key="exportar_facturas", border_width=0),
30
        sg.Button("Ver Excel", key="ver_excel", border_width=0),
31
    ]
32
33
    c_second = [
34
        sg.Column(
35
            [
36
                [
37
                    sg.Button("Buscar:", key="buscar_factura", border_width=0, pad=TEXT_PADDING),
38
                    sg.Input("", size=(40, 1), key="factura_pagar", change_submits=True),
39
                    sg.Button("Descarga", key="descarga", border_width=0, disabled=True),
40
                ],
41
                [
42
                    sg.Button("Status SAT", key="status_sat", border_width=0, disabled=True),
43
                    sg.Button("PUE Pagada", key="pago_pue", border_width=0, disabled=True),
44
                    sg.Button("PPD Ignorar", key="ignorar_ppd", border_width=0, disabled=True),
45
                    sg.Button("Email Notificada", key="email_notificada", border_width=0, disabled=True),
46
                    sg.Button("Ver PDF", key="ver_factura", border_width=0, disabled=True),
47
                ]
48
            ],
49
            pad=0
50
        ),
51
        sg.VSeparator(),
52
        sg.Column(
53
            [
54
                [
55
                    sg.CalendarButton("FechaPago:", format='%Y-%m-%d', title="FechaPago", no_titlebar=False, target="fecha_pago", pad=TEXT_PADDING, border_width=0,
56
                                      key="fecha_pago_select", disabled=True),
57
                    sg.Input("", size=(12, 1), key="fecha_pago", change_submits=True, disabled=True),
58
                    sg.Text("FormaPago:", pad=TEXT_PADDING),
59
                    sg.Combo([Code(k, v) for k, v in FORMA_PAGO.items()], default_value=Code("03", FORMA_PAGO["03"]), key="forma_pago", change_submits=True, size=(34, 1), disabled=True),
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable Code does not seem to be defined.
Loading history...
60
                ],
61
                [
62
                    sg.Button("Preparar Comprobante Pago", key="prepare_pago", border_width=0, disabled=True),
63
                ]
64
            ],
65
            pad=0
66
        )
67
    ]
68
69
    button_column_third = [
70
        sg.Button("Preparar Correos", key="prepare_correos", border_width=0),
71
        sg.Button("Facturas Pendientes", key="facturas_pendientes", border_width=0),
72
        sg.Checkbox("Ver Detallado", default=False, key="detallado"),
73
        sg.VSeparator(),
74
        sg.Button("Ajuste Anual", key="preparar_ajuste_anual", border_width=0),
75
        sg.Text("Año-Mes:", pad=TEXT_PADDING),
76
        sg.Input((date.today() + relativedelta(months=1)).strftime('%Y-%m'), size=(8, 1), key="anio_mes_ajuste"),
77
        sg.Text("Ajuste:", pad=TEXT_PADDING),
78
        sg.Input("", size=(6, 1), key="ajuste_porcentaje"),
79
        sg.Text("%", pad=RTEXT_PADDING),
80
        sg.VSeparator(),
81
        sg.Text("Recuperar:", pad=TEXT_PADDING),
82
        sg.Button("Emitidas", key="recuperar_emitidas", border_width=0, disabled=not has_fiel),
83
        sg.Button("Recibidas", key="recuperar_recibidas", border_width=0, disabled=not has_fiel),
84
        sg.Text("Dias:", pad=TEXT_PADDING),
85
        sg.Input("40", size=(4, 1), key="recuperar_dias", disabled=not has_fiel),
86
    ]
87
88
    button_column_low = [
89
        sg.Button("Validar Clientes", key="validate_clientes", border_width=0),
90
        sg.Button("Crear Facturas", disabled=True, key="crear_facturas", border_width=0),
91
        sg.Button("Enviar Correos", disabled=True, key="enviar_correos", border_width=0),
92
    ]
93
94
    # ----- Full layout -----
95
    return [
96
        button_column,
97
        [sg.HSeparator()],
98
        c_second,
99
        [sg.HSeparator()],
100
        button_column_third,
101
        [sg.Output(expand_x=True, expand_y=True, key="console")],
102
        button_column_low
103
    ]
104
105
106
class InvoiceButtonManager:
107
    def __init__(self, button, detallado):
108
        self._cfdis = []
109
        self.button = button
110
        self.detallado = detallado
111
112
    def set_invoices(self, invoices):
113
        self._cfdis = invoices
114
        self.style_button()
115
116
    def clear(self):
117
        cfdis = self._cfdis
118
        self._cfdis = []
119
        self.style_button()
120
        return cfdis
121
122
    def style_button(self):
123
        self.button.update(
124
            f"Crear {len(self._cfdis)} Facturas" if self._cfdis else "Crear Facturas",
125
            disabled=len(self._cfdis) == 0
126
        )
127
128
129
class EmailButtonManager:
130
    def __init__(self, button):
131
        self._emails = {}
132
        self.button = button
133
134
    def set_emails(self, emails):
135
        self._emails = emails
136
137
        for i, (receptor, notify_invoices, facturas_pendientes) in enumerate(emails, start=1):
138
            log_item(f"CORREO NUMERO: {i}")
139
            log_email(receptor, notify_invoices, facturas_pendientes)
140
141
        self.style_button()
142
143
    def clear(self):
144
        emails = self._emails
145
        self._emails = {}
146
        self.style_button()
147
        return emails
148
149
    def style_button(self):
150
        self.button.update(
151
            disabled=len(self._emails) == 0
152
        )
153
154