Passed
Push — main ( 35bc42...b847bf )
by Sat CFDI
01:51
created

satdigitalinvoice.layout   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 322
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 8
eloc 233
dl 0
loc 322
rs 10
c 0
b 0
f 0

5 Methods

Rating   Name   Duplication   Size   Complexity  
A ActionButtonManager.set_items() 0 4 1
A ActionButtonManager.__init__() 0 4 1
A ActionButtonManager.clear() 0 4 1
A ActionButtonManager.style_button() 0 5 2
A ActionButtonManager.text() 0 5 2

1 Function

Rating   Name   Duplication   Size   Complexity  
B make_layout() 0 235 1
1
from datetime import date, datetime
2
3
import PySimpleGUI as sg
4
# noinspection PyUnresolvedReferences
5
from satcfdi.transform.catalog import CATALOGS
6
7
from .log_tools import *
8
9
FORMA_PAGO = CATALOGS['{http://www.sat.gob.mx/sitio_internet/cfd/catalogos}c_FormaPago']
10
TEXT_PADDING = ((5, 0), 3)
11
12
# 24 x 24
13
FOLDER_ICON = "iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAqElEQVR4nO3UsQnCYBRF4U/EAcRJtHUJcQddwQlsxcpVLF0hOoY2FlaC+SUQQWI0PmwscuF0j3PhFZc2" \
14
              "/5QR9siRnjhhid6vBVlFXGWHwS8Ft4aCHLPydozFGybo1BV8kl8wLe/muDbcryIFBwzRxbpB/OAcfV8f2y/lD17y7qcbHIPy2oKoILUFqX1RdCpSgMIVHrsUoHDVznVWM9cpQF46imlp8ye5AyE7C1To4" \
15
              "/HLAAAAAElFTkSuQmCC"
16
17
EXCEL_ICON = "iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAA7klEQVR4nN2VQQqCUBCGv2pfFyhv0FmC7hGFq1bhrgi6gi1cBK6CdhFtvYdCi6CgrZsXwgTyUNOnLmrgBx31" \
18
             "/+DNOAP/HkNgCqyBK3AHLsDA1HAELIEjcANUjuYm5hbwKDBVKTnyjZ5/ATugkwWwS5qrAsBHkyyA0yBg1SQgAraiSHueCwgBL3V" \
19
             "/kFwWwAd6Ir8swJXcSZTEvsIRfQXEwFg6y5LruElAogDoioKma1AF4JvUoPUjctsucqi1qVfQpsY1KPuj+SY1qDsqnLaH3SJvF9Qd1wp4ilethTOT9zea7CLzsivzDPSrmPx2vAFRfA9plcmcVwAAAABJRU5ErkJggg=="
20
21
HTML_ICON = "iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAA/ElEQVR4nN2VOwoCMRCGPz2HB7ARHyfwBN5EsLOxWKzs7Ox0e69gYbOtoK2dZ7BVRwZGWJbsJvuw0IGfDUkmX" \
22
            "/gzm8A/xgi4AC9AHNLo1gGccxaWFCAC1lUBz0CAVIVICYAYpPVNgJSF+ABtYOHoXzcF6AMdYAmsMuo1ATgZpJTvZQAScEa5ETcAiIsA+vcmDm9XgUpsjUJ7tASnGV1tTL8z26VeKTdgAOwz5esFqA6mKDX2WUR3ebe" \
23
            "+MXCsAkhMLsAGmNQBZC3C7MHRpxY9rO0FvMyWeUUdfIe8a6BMt9S8rqVAmlv7wZECaa43RjYx78kUh3Su5gxDAL8Vb7wE7yjidnvCAAAAAElFTkSuQmCC"
24
25
PDF_ICON = "iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAAA+0lEQVR4nN3VPUrEQBQA4E89gCBio7WI" \
26
           "+INbeAbxAoI3ESzEysoFd21tbe28QixE7a2t7dxGRwKvWCTrTpJNoQ9ek5k3X8hM5vEfo4cXfCFVZBkbbYDnCQunMeAM" \
27
           "/abAZyaQmiKpBpACmesSSHWRacA8Tiue92cF7GIN57j4kduzAB4DqfXdc4ACQ3xk7FEjYBk7GHQFrOMQl10BJ3GC7roC3mL8vivgNsYXsYmlyKIt8IojLOAYV1jFQWz6sA1QxOnZwv" \
28
           "7YFf6OG1xj1AYYRH9YwVPGT5jqXtejeMuHzMXL2tYNJ/2SZe3U6MXESS0zVWQ5t6zZywH+VnwDCQv1frFQIlYAAAAASUVORK5CYII="
29
30
ABOUT_ICON = "iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAABP0lEQVR4nOWVTU7DMBCFvxuwKmrX0G4o5QLtQboDFXEbwrLkGNDucwB" \
31
             "+VvQObS5ApCxAIz1LCNmOG68QTxopst882y/jMfwHnAIroAQ2ilJjgxzhkYRa4AvYA6" \
32
             "+KvcZacYx7FBZADXwC98DUw7GxAmjEXRwjbkkfwHkCfyyu5cy7yCPtxhJOUnckruUcgGGMWMqWs8D8UhE6iZ3iMVYtrTwPoVKEUEjDW123qowL" \
33
             "+uNSGjche6z8YlhGLHI4hGzaAi8dyVWHReiePPsmNprMXeAdeOprUZWwQB2yaKUfNM1Y4Eoa17EyLTIWeIiVqbOp0aXx4U7hw0S565RWsevRKnYpreJ3sxsniE8kntTsHObaTaN" \
34
             "/MvNwZvK8ETdZ3GGocnMPjom8KeofD846xZYYBuotJmQ31MK+bSzryfwb+AbymF7gpXVM1QAAAABJRU5ErkJggg=="
35
36
REFRESH_ICON = "iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAABGUlEQVR4nO3VzSqFURTG8Z8JYmRiJN9yDQYiKbdhYqDO9OQWyMSQDGRISoYMlHIJJEWZ" \
37
               "+v4oysTRrqU4nePdZej91+ptt3frWWu31/NS8kdaMINNXOANLzjFGia/ne3CdHyzGMUxarjBNpawgt0QSnsHGA6xWp1oU8bxhGvMorXBmQ5UQugO1VyBITziBD0ZxQziCh+5Aoe4z0y+ELEeyQsF0r2" \
38
               "/Y14etQZR2EE32jIFSv4Z7fFAfuVr3Osjh0o88ZFcgS0sRhTRF9OffEmOQBr7S/RnJO/FWUz" \
39
               "/QK5ANQzsOVrvbHA2DeMcbvGAsYxiflhuMr39WCfH3AurXsZOFJD2joruXcFPYwKr4a6po1ecYwNTuYlLNOMTqXpPNQBv/ywAAAAASUVORK5CYII="
40
41
PREVIEW_ICON = "iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAABKElEQVR4nO2VMU8CQRCFP6WAQksqOxJ/A6WJUFFprJSEilARWgsa" \
42
               "/4IVLYUNFZ0WVECwNxpCIDQYfwEVGj0zycNcCOTulqMxvGQze2/eztub3O3Cf0QJ6IQYD8CRi8Ed4AUUn0rTczFZGoTRfLmYRDG4Aj6BAXC8C4M80NC8H/ZNohh4K6Mel0FGu" \
43
               "/cPT2tjMViHvUEg9i0KxBmQjeszPVSxCnCrmBW/lUECqAKzDX/yTPmEi0EaeFauq0JDzU+BG809HX7pKAYnwAiYA9fi7qVr+jZgKEo30rqNBh2dlAe65Yx7BJLStX2teQFa4i3/JN7WBV6Z5+JrwA/wKu4S" \
44
               "+FYhixdADniTzvSRUQDeVXSsNiwUJ+ItbzpnpICy2vAhA4v2bLzl//ALOtSCJzC7jH4AAAAASUVORK5CYII="
45
46
SEARCH_ICON = "iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAACXBIWXMAAAsTAAALEwEAmpwYAAABM0lEQVR4nOXTuytAYRzG8Y8RJTPJ5jJIitwGoxiZGSTZDAaDTQaJhYWBf0A" \
47
              "WRDHjD7BIMrkUg2wol079lEGc1yXJU2c4b8/5Pu/vfZ/Df1MjJrGKLSyjHyVfBZdjE0+4wwH2cB5rVxj8LLwmQNcYeWO3TdiOoJlUeDGOcIbqd3wFmI2QgZSAcTyiPYc3C9nBZcq" \
48
              "dnGAjYUPNMUVfHnNlmIcSArIpLrCUx9wSAZ3StB8V/lD1EdCTGJBVeCVvg+4wlQAvxT0m8n6wERUtyukfjakb8ga04QELOby1uMGaxFbsxq4W49jeUke05xRlKfD5gO/GJBlkGr3" \
49
              "ownA0JvsZD1H1Gfh8vLdiHbex/vIcYwyFX4G/VnbhdRFYIVEZbO7VmRekAn4Nnqn7nWP5NnX9JNyf1DM+Yku7BVpvYgAAAABJRU5ErkJggg=="
50
51
52
BUTTON_COLOR = (sg.theme_background_color(), sg.theme_background_color())
53
54
55
def make_layout(has_fiel):
56
    # LAYOUT
57
    button_column = [
58
        sg.Text("Periodo:", pad=TEXT_PADDING),
59
        sg.Input(date.today().strftime('%Y-%m'), size=(11, 1), key="periodo"),
60
        sg.Button(image_data=FOLDER_ICON, key="ver_carpeta", border_width=0, button_color=BUTTON_COLOR),
61
        sg.Button(image_data=EXCEL_ICON, key="ver_excel", border_width=0, button_color=BUTTON_COLOR),
62
        sg.Button(image_data=HTML_ICON, key="ver_html", border_width=0, button_color=BUTTON_COLOR),
63
64
        sg.Push(),
65
        sg.Text("Factura:", pad=TEXT_PADDING),
66
        sg.Text("", key="serie", pad=TEXT_PADDING, text_color="black"),
67
        sg.Input("", key="folio", size=(8, 1), enable_events=True),
68
        sg.Button("".center(22), disabled=True, key="crear_facturas", border_width=0, button_color=sg.theme_background_color()),
69
    ]
70
71
    # ----- Full layout -----
72
    return [
73
        button_column,
74
        [
75
            sg.TabGroup(
76
                [[
77
                    sg.Tab(
78
                        'Consola'.center(13),
79
                        [
80
                            [
81
                                sg.Push(),
82
                                sg.Button(image_data=ABOUT_ICON, key="about", border_width=0, button_color=BUTTON_COLOR),
83
                            ],
84
                            [sg.Multiline(
85
                                expand_x=True,
86
                                expand_y=True,
87
                                key="console",
88
                                write_only=True,
89
                                autoscroll=True,
90
                                reroute_stdout=True
91
                            )]
92
                        ],
93
                        key='console_tab',
94
                    ),
95
                    sg.Tab(
96
                        'Facturas'.center(13),
97
                        [
98
                            [
99
                                sg.Button("Refrescar", key="refresh_facturas", border_width=0, ),
100
                                sg.Text("", pad=TEXT_PADDING, key="preparar_facturas_text"),
101
                            ],
102
                            [
103
                                sg.Table(
104
                                    values=[],
105
                                    headings=[
106
                                        '#',
107
                                        'EReg',
108
                                        'Receptor Razon Social',
109
                                        'Recep. Rfc',
110
                                        "Tipo",
111
                                        "Subtotal",
112
                                        "Total"
113
                                    ],
114
                                    key="facturas_table",
115
                                    expand_x=True,
116
                                    expand_y=True,
117
                                    select_mode=sg.TABLE_SELECT_MODE_EXTENDED,
118
                                    enable_events=True,
119
                                    text_color="black",
120
                                    background_color="white",
121
                                )
122
                            ]],
123
                        key='facturas_tab',
124
                    ),
125
                    sg.Tab(
126
                        'Clientes'.center(13),
127
                        [
128
                            [
129
                                sg.Button("Refrescar", key="refresh_clientes", border_width=0, ),
130
                            ],
131
                            [
132
                                sg.Table(
133
                                    values=[],
134
                                    headings=[
135
                                        "#",
136
                                        "Razon Social",
137
                                        "Rfc",
138
                                        "Reg",
139
                                        "CP",
140
                                        "Facturas",
141
                                    ],
142
                                    key="clientes_table",
143
                                    expand_x=True,
144
                                    expand_y=True,
145
                                    select_mode=sg.TABLE_SELECT_MODE_EXTENDED,
146
                                    enable_events=True,
147
                                    text_color="black",
148
                                    background_color="white",
149
                                    def_col_width=10,
150
                                )
151
                            ]],
152
                        key='clients_tab',
153
                    ),
154
                    sg.Tab(
155
                        'Emitidas'.center(13),
156
                        [
157
                            [
158
                                sg.Button("Pendientes", key="facturas_pendientes", border_width=0),
159
                                sg.Button("Todas", key="facturas_emitidas", border_width=0),
160
                                sg.Button(image_data=SEARCH_ICON, key="emitidas_search_enter", border_width=0, button_color=BUTTON_COLOR),
161
                                sg.Input("", size=(20, 1), key="emitidas_search", border_width=0),
162
                                sg.Text("", pad=TEXT_PADDING, key="emitidas_text"),
163
                            ],
164
                            [
165
                                sg.Column([[
166
                                    sg.Button("".ljust(10), key="status_sat", border_width=0, button_color=sg.theme_background_color()),
167
                                    sg.Button("".ljust(10), key="email_notificada", border_width=0, button_color=sg.theme_background_color()),
168
                                    sg.Button("".ljust(10), key="pendiente_pago", border_width=0, button_color=sg.theme_background_color()),
169
                                ]]),
170
                                sg.VSeparator(),
171
                                sg.Column([[
172
                                    sg.CalendarButton("FechaPago:", format='%Y-%m-%d', title="FechaPago", no_titlebar=False, target="fecha_pago", pad=TEXT_PADDING,
173
                                                      border_width=0,
174
                                                      key="fecha_pago_select"),
175
                                    sg.Input(datetime.now().strftime('%Y-%m-%d'), size=(12, 1), key="fecha_pago", border_width=0),
176
                                    sg.Combo([Code(k, v) for k, v in FORMA_PAGO.items()], default_value=Code("03", FORMA_PAGO["03"]), key="forma_pago", size=(28, 1)),
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable Code does not seem to be defined.
Loading history...
177
                                    sg.Text("ImpPagado:", pad=TEXT_PADDING, key="imp_pagado_text", border_width=0),
178
                                    sg.Input("", size=(12, 1), key="importe_pago", border_width=0),
179
                                    sg.Button("Comprobante Pago", key="prepare_pago", border_width=0),
180
                                    sg.Button(image_data=PREVIEW_ICON, key="ver_html_pago", border_width=0, button_color=BUTTON_COLOR),
181
                                ]], visible=False, key="ppd_action_items"),
182
                            ],
183
                            [
184
                                sg.Table(
185
                                    values=[],
186
                                    headings=[
187
                                        '#',
188
                                        'Receptor Razon Social',
189
                                        'Recep. Rfc',
190
                                        'Factura',
191
                                        "Fecha",
192
                                        "Total",
193
                                        "Pagada",
194
                                        "Tipo",
195
                                    ],
196
                                    key="emitidas_table",
197
                                    expand_x=True,
198
                                    expand_y=True,
199
                                    select_mode=sg.TABLE_SELECT_MODE_BROWSE,
200
                                    enable_events=True,
201
                                    text_color="black",
202
                                    background_color="white",
203
                                )
204
                            ]],
205
                        key='emitidas_tab',
206
207
                    ),
208
                    sg.Tab(
209
                        'Correos'.center(13),
210
                        [
211
                            [
212
                                sg.Button("Refrescar", key="refresh_correos", border_width=0, ),
213
                            ],
214
                            [
215
                                sg.Table(
216
                                    values=[],
217
                                    headings=[
218
                                        '#',
219
                                        'Receptor Razon Social',
220
                                        'Recep. Rfc',
221
                                        'Facturas',
222
                                        'Pendientes Emitidas Meses Anteriores'
223
                                    ],
224
                                    key="correos_table",
225
                                    expand_x=True,
226
                                    expand_y=True,
227
                                    select_mode=sg.TABLE_SELECT_MODE_EXTENDED,
228
                                    enable_events=True,
229
                                    text_color="black",
230
                                    background_color="white",
231
                                    def_col_width=10,
232
                                )
233
                            ]],
234
                        key='correos_tab',
235
                    ),
236
                    sg.Tab(
237
                        'Ajustes'.center(13),
238
                        [
239
                            [
240
                                sg.Button("Refrescar", key="refresh_ajustes", border_width=0, ),
241
                                sg.Text("", pad=TEXT_PADDING, key="preparar_ajustes_text"),
242
                            ],
243
                            [
244
                                sg.Table(
245
                                    values=[],
246
                                    headings=[
247
                                        "#",
248
                                        "Receptor Razon Social",
249
                                        "Recep. Rfc",
250
                                        "Actual",
251
                                        "Nuevo",
252
                                        "Ajuste %",
253
                                        "Periodo",
254
                                        "Ajuste Periodo",
255
                                        "Ajuste Efectivo"
256
                                    ],
257
                                    key="ajustes_table",
258
                                    expand_x=True,
259
                                    expand_y=True,
260
                                    right_click_selects=True,
261
                                    select_mode=sg.TABLE_SELECT_MODE_EXTENDED,
262
                                    enable_events=True,
263
                                    text_color="black",
264
                                    background_color="white",
265
                                    def_col_width=10,
266
                                )
267
                            ]],
268
                        key='ajustes_tab'
269
                    ),
270
                    sg.Tab(
271
                        'Recuperar'.center(13),
272
                        [
273
                            [
274
                                sg.Button("SAT Status", key="sat_status_todas", border_width=0),
275
                                sg.Text("Recuperar:", pad=TEXT_PADDING),
276
                                sg.Button("Emitidas ", key="recuperar_emitidas", border_width=0),
277
                                sg.Button("Recibidas", key="recuperar_recibidas", border_width=0),
278
                                sg.Text("Dias:", pad=TEXT_PADDING),
279
                                sg.Input("40", size=(4, 1), key="recuperar_dias"),
280
                            ]
281
                        ],
282
                        key='recuperar_tab',
283
                        visible=has_fiel
284
                    ),
285
                ]],
286
                expand_x=True,
287
                expand_y=True,
288
                enable_events=True,
289
                key="main_tab_group",
290
            )
291
        ]
292
    ]
293
294
295
class ActionButtonManager:
296
    def __init__(self, button):
297
        self.name = ""
298
        self.items = []
299
        self.button = button
300
301
    def set_items(self, name, items):
302
        self.name = name
303
        self.items = items
304
        self.style_button()
305
306
    def clear(self):
307
        self.name = ""
308
        self.items = []
309
        self.style_button()
310
311
    def text(self):
312
        if self.items:
313
            return f"Procesar {len(self.items)} {self.name.capitalize()}"
314
        else:
315
            return ""
316
317
    def style_button(self):
318
        self.button.update(
319
            self.text().center(22),
320
            disabled=not self.items,
321
            button_color=sg.theme_button_color() if self.items else sg.theme_background_color()
322
        )
323