From 03a38f908f739c17b38374abc6cdbe956de9912a Mon Sep 17 00:00:00 2001 From: Jose Alberto Guerra Ugalde Date: Mon, 15 Sep 2025 17:38:59 -0600 Subject: [PATCH] - VERSION 5.09.01 - Commit inicial --- B4A/B4XMainPage.bas | 1321 ++++++++++ B4A/BatteryUtilities.bas | 126 + B4A/C_Cliente.bas | 2881 +++++++++++++++++++++ B4A/C_Clientes.bas | 583 +++++ B4A/C_Cobranza.bas | 27 + B4A/C_Cuestionario.bas | 179 ++ B4A/C_Historico.bas | 123 + B4A/C_MapaRutas.bas | 263 ++ B4A/C_Mapas.bas | 24 + B4A/C_NoVenta.bas | 184 ++ B4A/C_Nota.bas | 473 ++++ B4A/C_NuevoCliente.bas | 432 ++++ B4A/C_Pedidos.bas | 584 +++++ B4A/C_Principal.bas | 3303 ++++++++++++++++++++++++ B4A/C_Productos.bas | 1985 +++++++++++++++ B4A/C_Promos.bas | 1209 +++++++++ B4A/C_RespaldoDiario.bas | 168 ++ B4A/C_Subs.bas | 608 +++++ B4A/C_TicketsDia.bas | 165 ++ B4A/C_UpdateAvailable.bas | 73 + B4A/C_tabulador.bas | 134 + B4A/DBRequestManager.bas | 274 ++ B4A/EscPosPrinter.bas | 1158 +++++++++ B4A/FileHandler.bas | 163 ++ B4A/Files/abordo.png | Bin 0 -> 2146 bytes B4A/Files/alert2.png | Bin 0 -> 632 bytes B4A/Files/alerta_amarilla.png | Bin 0 -> 62562 bytes B4A/Files/amigos.jpg | Bin 0 -> 352308 bytes B4A/Files/anterior.jpg | Bin 0 -> 19358 bytes B4A/Files/bus-ar.png | Bin 0 -> 31189 bytes B4A/Files/c_cuentasxcobrar.bal | Bin 0 -> 3288 bytes B4A/Files/carrito.png | Bin 0 -> 22596 bytes B4A/Files/celltitle.bal | Bin 0 -> 1638 bytes B4A/Files/cliente.bal | Bin 0 -> 40332 bytes B4A/Files/clientes.bal | Bin 0 -> 7890 bytes B4A/Files/cobranza.bal | Bin 0 -> 2433 bytes B4A/Files/datoscliente.bal | Bin 0 -> 3719 bytes B4A/Files/desvanecido.png | Bin 0 -> 3752 bytes B4A/Files/engrane.jpg | Bin 0 -> 2292 bytes B4A/Files/engrane_gris.png | Bin 0 -> 12656 bytes B4A/Files/folioabono.bal | Bin 0 -> 2431 bytes B4A/Files/fondo_kmt.jpg | Bin 0 -> 33689 bytes B4A/Files/gps20.png | Bin 0 -> 8326 bytes B4A/Files/hacer pedido.jpg | Bin 0 -> 609560 bytes B4A/Files/hacerpedido30.jpg | Bin 0 -> 4232 bytes B4A/Files/hacerpedido30.png | Bin 0 -> 24704 bytes B4A/Files/intmex_logo_192x192_old.jpg | Bin 0 -> 8284 bytes B4A/Files/itembuttonblue.png | Bin 0 -> 2647 bytes B4A/Files/kmt.db | Bin 0 -> 46080 bytes B4A/Files/login.bal | Bin 0 -> 22649 bytes B4A/Files/logo_izca.jpg | Bin 0 -> 27966 bytes B4A/Files/logo_keymon.png | Bin 0 -> 13113 bytes B4A/Files/logo_mariana.jpeg | Bin 0 -> 9983 bytes B4A/Files/logosamiizca.jpg | Bin 0 -> 68605 bytes B4A/Files/logosamiizca2.jpg | Bin 0 -> 203431 bytes B4A/Files/mainpage.bal | Bin 0 -> 1584 bytes B4A/Files/malo.jpg | Bin 0 -> 8764 bytes B4A/Files/mapa_cliente.bal | Bin 0 -> 4868 bytes B4A/Files/mapa_rutas.bal | Bin 0 -> 5796 bytes B4A/Files/mariana_ico.png | Bin 0 -> 15424 bytes B4A/Files/mariana_logo_192x192.jpg | Bin 0 -> 6004 bytes B4A/Files/marker-amarillo.png | Bin 0 -> 894 bytes B4A/Files/marker-azul-0.png | Bin 0 -> 2587 bytes B4A/Files/marker-azul-1.png | Bin 0 -> 2195 bytes B4A/Files/marker-azul-10.png | Bin 0 -> 2786 bytes B4A/Files/marker-azul-100.png | Bin 0 -> 3297 bytes B4A/Files/marker-azul-101.png | Bin 0 -> 2804 bytes B4A/Files/marker-azul-102.png | Bin 0 -> 3306 bytes B4A/Files/marker-azul-103.png | Bin 0 -> 3408 bytes B4A/Files/marker-azul-104.png | Bin 0 -> 3126 bytes B4A/Files/marker-azul-105.png | Bin 0 -> 3359 bytes B4A/Files/marker-azul-106.png | Bin 0 -> 3431 bytes B4A/Files/marker-azul-107.png | Bin 0 -> 3182 bytes B4A/Files/marker-azul-108.png | Bin 0 -> 3395 bytes B4A/Files/marker-azul-109.png | Bin 0 -> 3451 bytes B4A/Files/marker-azul-11.png | Bin 0 -> 2419 bytes B4A/Files/marker-azul-110.png | Bin 0 -> 2994 bytes B4A/Files/marker-azul-111.png | Bin 0 -> 2434 bytes B4A/Files/marker-azul-112.png | Bin 0 -> 2804 bytes B4A/Files/marker-azul-113.png | Bin 0 -> 2926 bytes B4A/Files/marker-azul-114.png | Bin 0 -> 2639 bytes B4A/Files/marker-azul-115.png | Bin 0 -> 3068 bytes B4A/Files/marker-azul-116.png | Bin 0 -> 2946 bytes B4A/Files/marker-azul-117.png | Bin 0 -> 2827 bytes B4A/Files/marker-azul-118.png | Bin 0 -> 3152 bytes B4A/Files/marker-azul-119.png | Bin 0 -> 3156 bytes B4A/Files/marker-azul-12.png | Bin 0 -> 2795 bytes B4A/Files/marker-azul-120.png | Bin 0 -> 3299 bytes B4A/Files/marker-azul-121.png | Bin 0 -> 3008 bytes B4A/Files/marker-azul-122.png | Bin 0 -> 3328 bytes B4A/Files/marker-azul-123.png | Bin 0 -> 3414 bytes B4A/Files/marker-azul-124.png | Bin 0 -> 3099 bytes B4A/Files/marker-azul-125.png | Bin 0 -> 3401 bytes B4A/Files/marker-azul-126.png | Bin 0 -> 3476 bytes B4A/Files/marker-azul-127.png | Bin 0 -> 3201 bytes B4A/Files/marker-azul-128.png | Bin 0 -> 3431 bytes B4A/Files/marker-azul-129.png | Bin 0 -> 3418 bytes B4A/Files/marker-azul-13.png | Bin 0 -> 2919 bytes B4A/Files/marker-azul-130.png | Bin 0 -> 3370 bytes B4A/Files/marker-azul-131.png | Bin 0 -> 2903 bytes B4A/Files/marker-azul-132.png | Bin 0 -> 3377 bytes B4A/Files/marker-azul-133.png | Bin 0 -> 3451 bytes B4A/Files/marker-azul-134.png | Bin 0 -> 3228 bytes B4A/Files/marker-azul-135.png | Bin 0 -> 3432 bytes B4A/Files/marker-azul-136.png | Bin 0 -> 3432 bytes B4A/Files/marker-azul-137.png | Bin 0 -> 3282 bytes B4A/Files/marker-azul-138.png | Bin 0 -> 3502 bytes B4A/Files/marker-azul-139.png | Bin 0 -> 3524 bytes B4A/Files/marker-azul-14.png | Bin 0 -> 2611 bytes B4A/Files/marker-azul-140.png | Bin 0 -> 3172 bytes B4A/Files/marker-azul-141.png | Bin 0 -> 2626 bytes B4A/Files/marker-azul-142.png | Bin 0 -> 3142 bytes B4A/Files/marker-azul-143.png | Bin 0 -> 3268 bytes B4A/Files/marker-azul-144.png | Bin 0 -> 2645 bytes B4A/Files/marker-azul-145.png | Bin 0 -> 3177 bytes B4A/Files/marker-azul-146.png | Bin 0 -> 3292 bytes B4A/Files/marker-azul-147.png | Bin 0 -> 2942 bytes B4A/Files/marker-azul-148.png | Bin 0 -> 3285 bytes B4A/Files/marker-azul-149.png | Bin 0 -> 3272 bytes B4A/Files/marker-azul-15.png | Bin 0 -> 2859 bytes B4A/Files/marker-azul-150.png | Bin 0 -> 3339 bytes B4A/Files/marker-azul-16.png | Bin 0 -> 2956 bytes B4A/Files/marker-azul-17.png | Bin 0 -> 2618 bytes B4A/Files/marker-azul-18.png | Bin 0 -> 2943 bytes B4A/Files/marker-azul-19.png | Bin 0 -> 2965 bytes B4A/Files/marker-azul-2.png | Bin 0 -> 2550 bytes B4A/Files/marker-azul-20.png | Bin 0 -> 3079 bytes B4A/Files/marker-azul-21.png | Bin 0 -> 2770 bytes B4A/Files/marker-azul-22.png | Bin 0 -> 3062 bytes B4A/Files/marker-azul-23.png | Bin 0 -> 3192 bytes B4A/Files/marker-azul-24.png | Bin 0 -> 2920 bytes B4A/Files/marker-azul-25.png | Bin 0 -> 3193 bytes B4A/Files/marker-azul-26.png | Bin 0 -> 3245 bytes B4A/Files/marker-azul-27.png | Bin 0 -> 2965 bytes B4A/Files/marker-azul-28.png | Bin 0 -> 3213 bytes B4A/Files/marker-azul-29.png | Bin 0 -> 3220 bytes B4A/Files/marker-azul-3.png | Bin 0 -> 2697 bytes B4A/Files/marker-azul-30.png | Bin 0 -> 3222 bytes B4A/Files/marker-azul-31.png | Bin 0 -> 2925 bytes B4A/Files/marker-azul-32.png | Bin 0 -> 3145 bytes B4A/Files/marker-azul-33.png | Bin 0 -> 3288 bytes B4A/Files/marker-azul-34.png | Bin 0 -> 3061 bytes B4A/Files/marker-azul-35.png | Bin 0 -> 3267 bytes B4A/Files/marker-azul-36.png | Bin 0 -> 3334 bytes B4A/Files/marker-azul-37.png | Bin 0 -> 3094 bytes B4A/Files/marker-azul-38.png | Bin 0 -> 3308 bytes B4A/Files/marker-azul-39.png | Bin 0 -> 3390 bytes B4A/Files/marker-azul-4.png | Bin 0 -> 2366 bytes B4A/Files/marker-azul-40.png | Bin 0 -> 2955 bytes B4A/Files/marker-azul-41.png | Bin 0 -> 2580 bytes B4A/Files/marker-azul-42.png | Bin 0 -> 2901 bytes B4A/Files/marker-azul-43.png | Bin 0 -> 3054 bytes B4A/Files/marker-azul-44.png | Bin 0 -> 2708 bytes B4A/Files/marker-azul-45.png | Bin 0 -> 2986 bytes B4A/Files/marker-azul-46.png | Bin 0 -> 3100 bytes B4A/Files/marker-azul-47.png | Bin 0 -> 2768 bytes B4A/Files/marker-azul-48.png | Bin 0 -> 3113 bytes B4A/Files/marker-azul-49.png | Bin 0 -> 3114 bytes B4A/Files/marker-azul-5.png | Bin 0 -> 2628 bytes B4A/Files/marker-azul-50.png | Bin 0 -> 3186 bytes B4A/Files/marker-azul-51.png | Bin 0 -> 2835 bytes B4A/Files/marker-azul-52.png | Bin 0 -> 3138 bytes B4A/Files/marker-azul-53.png | Bin 0 -> 3274 bytes B4A/Files/marker-azul-54.png | Bin 0 -> 2988 bytes B4A/Files/marker-azul-55.png | Bin 0 -> 3169 bytes B4A/Files/marker-azul-56.png | Bin 0 -> 3265 bytes B4A/Files/marker-azul-57.png | Bin 0 -> 3007 bytes B4A/Files/marker-azul-58.png | Bin 0 -> 3266 bytes B4A/Files/marker-azul-59.png | Bin 0 -> 3297 bytes B4A/Files/marker-azul-6.png | Bin 0 -> 2729 bytes B4A/Files/marker-azul-60.png | Bin 0 -> 3198 bytes B4A/Files/marker-azul-61.png | Bin 0 -> 2928 bytes B4A/Files/marker-azul-62.png | Bin 0 -> 3216 bytes B4A/Files/marker-azul-63.png | Bin 0 -> 3321 bytes B4A/Files/marker-azul-64.png | Bin 0 -> 3096 bytes B4A/Files/marker-azul-65.png | Bin 0 -> 3303 bytes B4A/Files/marker-azul-66.png | Bin 0 -> 3396 bytes B4A/Files/marker-azul-67.png | Bin 0 -> 3127 bytes B4A/Files/marker-azul-68.png | Bin 0 -> 3365 bytes B4A/Files/marker-azul-69.png | Bin 0 -> 3366 bytes B4A/Files/marker-azul-7.png | Bin 0 -> 2358 bytes B4A/Files/marker-azul-70.png | Bin 0 -> 2943 bytes B4A/Files/marker-azul-71.png | Bin 0 -> 2565 bytes B4A/Files/marker-azul-72.png | Bin 0 -> 2913 bytes B4A/Files/marker-azul-73.png | Bin 0 -> 3047 bytes B4A/Files/marker-azul-74.png | Bin 0 -> 2733 bytes B4A/Files/marker-azul-75.png | Bin 0 -> 2997 bytes B4A/Files/marker-azul-76.png | Bin 0 -> 3087 bytes B4A/Files/marker-azul-77.png | Bin 0 -> 2759 bytes B4A/Files/marker-azul-78.png | Bin 0 -> 3079 bytes B4A/Files/marker-azul-79.png | Bin 0 -> 3089 bytes B4A/Files/marker-azul-8.png | Bin 0 -> 2685 bytes B4A/Files/marker-azul-80.png | Bin 0 -> 3191 bytes B4A/Files/marker-azul-81.png | Bin 0 -> 2899 bytes B4A/Files/marker-azul-82.png | Bin 0 -> 3192 bytes B4A/Files/marker-azul-83.png | Bin 0 -> 3323 bytes B4A/Files/marker-azul-84.png | Bin 0 -> 3096 bytes B4A/Files/marker-azul-85.png | Bin 0 -> 3313 bytes B4A/Files/marker-azul-86.png | Bin 0 -> 3357 bytes B4A/Files/marker-azul-87.png | Bin 0 -> 3105 bytes B4A/Files/marker-azul-88.png | Bin 0 -> 3308 bytes B4A/Files/marker-azul-89.png | Bin 0 -> 3349 bytes B4A/Files/marker-azul-9.png | Bin 0 -> 2753 bytes B4A/Files/marker-azul-90.png | Bin 0 -> 3231 bytes B4A/Files/marker-azul-91.png | Bin 0 -> 2949 bytes B4A/Files/marker-azul-92.png | Bin 0 -> 3242 bytes B4A/Files/marker-azul-93.png | Bin 0 -> 3394 bytes B4A/Files/marker-azul-94.png | Bin 0 -> 3097 bytes B4A/Files/marker-azul-95.png | Bin 0 -> 3363 bytes B4A/Files/marker-azul-96.png | Bin 0 -> 3349 bytes B4A/Files/marker-azul-97.png | Bin 0 -> 3123 bytes B4A/Files/marker-azul-98.png | Bin 0 -> 3321 bytes B4A/Files/marker-azul-99.png | Bin 0 -> 3354 bytes B4A/Files/marker-rojo-0.png | Bin 0 -> 2488 bytes B4A/Files/marker-rojo-1.png | Bin 0 -> 2118 bytes B4A/Files/marker-rojo-10.png | Bin 0 -> 2734 bytes B4A/Files/marker-rojo-100.png | Bin 0 -> 3248 bytes B4A/Files/marker-rojo-101.png | Bin 0 -> 2955 bytes B4A/Files/marker-rojo-102.png | Bin 0 -> 3252 bytes B4A/Files/marker-rojo-103.png | Bin 0 -> 3369 bytes B4A/Files/marker-rojo-104.png | Bin 0 -> 3108 bytes B4A/Files/marker-rojo-105.png | Bin 0 -> 3333 bytes B4A/Files/marker-rojo-106.png | Bin 0 -> 3393 bytes B4A/Files/marker-rojo-107.png | Bin 0 -> 3109 bytes B4A/Files/marker-rojo-108.png | Bin 0 -> 3365 bytes B4A/Files/marker-rojo-109.png | Bin 0 -> 3421 bytes B4A/Files/marker-rojo-11.png | Bin 0 -> 2170 bytes B4A/Files/marker-rojo-110.png | Bin 0 -> 2779 bytes B4A/Files/marker-rojo-111.png | Bin 0 -> 2172 bytes B4A/Files/marker-rojo-112.png | Bin 0 -> 2764 bytes B4A/Files/marker-rojo-113.png | Bin 0 -> 2881 bytes B4A/Files/marker-rojo-114.png | Bin 0 -> 2587 bytes B4A/Files/marker-rojo-115.png | Bin 0 -> 2817 bytes B4A/Files/marker-rojo-116.png | Bin 0 -> 2914 bytes B4A/Files/marker-rojo-117.png | Bin 0 -> 2569 bytes B4A/Files/marker-rojo-118.png | Bin 0 -> 2918 bytes B4A/Files/marker-rojo-119.png | Bin 0 -> 2936 bytes B4A/Files/marker-rojo-12.png | Bin 0 -> 2743 bytes B4A/Files/marker-rojo-120.png | Bin 0 -> 3280 bytes B4A/Files/marker-rojo-121.png | Bin 0 -> 2939 bytes B4A/Files/marker-rojo-122.png | Bin 0 -> 3275 bytes B4A/Files/marker-rojo-123.png | Bin 0 -> 3377 bytes B4A/Files/marker-rojo-124.png | Bin 0 -> 3088 bytes B4A/Files/marker-rojo-125.png | Bin 0 -> 3324 bytes B4A/Files/marker-rojo-126.png | Bin 0 -> 3388 bytes B4A/Files/marker-rojo-127.png | Bin 0 -> 3102 bytes B4A/Files/marker-rojo-128.png | Bin 0 -> 3391 bytes B4A/Files/marker-rojo-129.png | Bin 0 -> 3426 bytes B4A/Files/marker-rojo-13.png | Bin 0 -> 2884 bytes B4A/Files/marker-rojo-130.png | Bin 0 -> 3407 bytes B4A/Files/marker-rojo-131.png | Bin 0 -> 3082 bytes B4A/Files/marker-rojo-132.png | Bin 0 -> 3403 bytes B4A/Files/marker-rojo-133.png | Bin 0 -> 3508 bytes B4A/Files/marker-rojo-134.png | Bin 0 -> 3235 bytes B4A/Files/marker-rojo-135.png | Bin 0 -> 3444 bytes B4A/Files/marker-rojo-136.png | Bin 0 -> 3516 bytes B4A/Files/marker-rojo-137.png | Bin 0 -> 3235 bytes B4A/Files/marker-rojo-138.png | Bin 0 -> 3499 bytes B4A/Files/marker-rojo-139.png | Bin 0 -> 3549 bytes B4A/Files/marker-rojo-14.png | Bin 0 -> 2533 bytes B4A/Files/marker-rojo-140.png | Bin 0 -> 3085 bytes B4A/Files/marker-rojo-141.png | Bin 0 -> 2739 bytes B4A/Files/marker-rojo-142.png | Bin 0 -> 3093 bytes B4A/Files/marker-rojo-143.png | Bin 0 -> 3177 bytes B4A/Files/marker-rojo-144.png | Bin 0 -> 2887 bytes B4A/Files/marker-rojo-145.png | Bin 0 -> 3136 bytes B4A/Files/marker-rojo-146.png | Bin 0 -> 3223 bytes B4A/Files/marker-rojo-147.png | Bin 0 -> 2910 bytes B4A/Files/marker-rojo-148.png | Bin 0 -> 3213 bytes B4A/Files/marker-rojo-149.png | Bin 0 -> 3234 bytes B4A/Files/marker-rojo-15.png | Bin 0 -> 2832 bytes B4A/Files/marker-rojo-150.png | Bin 0 -> 3370 bytes B4A/Files/marker-rojo-16.png | Bin 0 -> 2898 bytes B4A/Files/marker-rojo-17.png | Bin 0 -> 2587 bytes B4A/Files/marker-rojo-18.png | Bin 0 -> 2877 bytes B4A/Files/marker-rojo-19.png | Bin 0 -> 2914 bytes B4A/Files/marker-rojo-2.png | Bin 0 -> 2520 bytes B4A/Files/marker-rojo-20.png | Bin 0 -> 3057 bytes B4A/Files/marker-rojo-21.png | Bin 0 -> 2738 bytes B4A/Files/marker-rojo-22.png | Bin 0 -> 2559 bytes B4A/Files/marker-rojo-23.png | Bin 0 -> 3157 bytes B4A/Files/marker-rojo-24.png | Bin 0 -> 2879 bytes B4A/Files/marker-rojo-25.png | Bin 0 -> 3126 bytes B4A/Files/marker-rojo-26.png | Bin 0 -> 3199 bytes B4A/Files/marker-rojo-27.png | Bin 0 -> 2954 bytes B4A/Files/marker-rojo-28.png | Bin 0 -> 3163 bytes B4A/Files/marker-rojo-29.png | Bin 0 -> 3219 bytes B4A/Files/marker-rojo-3.png | Bin 0 -> 2638 bytes B4A/Files/marker-rojo-30.png | Bin 0 -> 3151 bytes B4A/Files/marker-rojo-31.png | Bin 0 -> 2887 bytes B4A/Files/marker-rojo-32.png | Bin 0 -> 3161 bytes B4A/Files/marker-rojo-33.png | Bin 0 -> 2689 bytes B4A/Files/marker-rojo-34.png | Bin 0 -> 3014 bytes B4A/Files/marker-rojo-35.png | Bin 0 -> 3206 bytes B4A/Files/marker-rojo-36.png | Bin 0 -> 3364 bytes B4A/Files/marker-rojo-37.png | Bin 0 -> 3062 bytes B4A/Files/marker-rojo-38.png | Bin 0 -> 3335 bytes B4A/Files/marker-rojo-39.png | Bin 0 -> 3366 bytes B4A/Files/marker-rojo-4.png | Bin 0 -> 2307 bytes B4A/Files/marker-rojo-40.png | Bin 0 -> 2894 bytes B4A/Files/marker-rojo-41.png | Bin 0 -> 2529 bytes B4A/Files/marker-rojo-42.png | Bin 0 -> 2889 bytes B4A/Files/marker-rojo-43.png | Bin 0 -> 3026 bytes B4A/Files/marker-rojo-44.png | Bin 0 -> 2381 bytes B4A/Files/marker-rojo-45.png | Bin 0 -> 2965 bytes B4A/Files/marker-rojo-46.png | Bin 0 -> 3048 bytes B4A/Files/marker-rojo-47.png | Bin 0 -> 2743 bytes B4A/Files/marker-rojo-48.png | Bin 0 -> 3046 bytes B4A/Files/marker-rojo-49.png | Bin 0 -> 3056 bytes B4A/Files/marker-rojo-5.png | Bin 0 -> 2597 bytes B4A/Files/marker-rojo-50.png | Bin 0 -> 3145 bytes B4A/Files/marker-rojo-51.png | Bin 0 -> 2834 bytes B4A/Files/marker-rojo-52.png | Bin 0 -> 3133 bytes B4A/Files/marker-rojo-53.png | Bin 0 -> 3221 bytes B4A/Files/marker-rojo-54.png | Bin 0 -> 2959 bytes B4A/Files/marker-rojo-55.png | Bin 0 -> 2648 bytes B4A/Files/marker-rojo-56.png | Bin 0 -> 3295 bytes B4A/Files/marker-rojo-57.png | Bin 0 -> 2987 bytes B4A/Files/marker-rojo-58.png | Bin 0 -> 3281 bytes B4A/Files/marker-rojo-59.png | Bin 0 -> 3295 bytes B4A/Files/marker-rojo-6.png | Bin 0 -> 2663 bytes B4A/Files/marker-rojo-60.png | Bin 0 -> 3185 bytes B4A/Files/marker-rojo-61.png | Bin 0 -> 2897 bytes B4A/Files/marker-rojo-62.png | Bin 0 -> 3205 bytes B4A/Files/marker-rojo-63.png | Bin 0 -> 3347 bytes B4A/Files/marker-rojo-64.png | Bin 0 -> 3045 bytes B4A/Files/marker-rojo-65.png | Bin 0 -> 3296 bytes B4A/Files/marker-rojo-66.png | Bin 0 -> 2731 bytes B4A/Files/marker-rojo-67.png | Bin 0 -> 3084 bytes B4A/Files/marker-rojo-68.png | Bin 0 -> 3306 bytes B4A/Files/marker-rojo-69.png | Bin 0 -> 3360 bytes B4A/Files/marker-rojo-7.png | Bin 0 -> 2340 bytes B4A/Files/marker-rojo-70.png | Bin 0 -> 2937 bytes B4A/Files/marker-rojo-71.png | Bin 0 -> 2584 bytes B4A/Files/marker-rojo-72.png | Bin 0 -> 2947 bytes B4A/Files/marker-rojo-73.png | Bin 0 -> 3058 bytes B4A/Files/marker-rojo-74.png | Bin 0 -> 2733 bytes B4A/Files/marker-rojo-75.png | Bin 0 -> 2977 bytes B4A/Files/marker-rojo-76.png | Bin 0 -> 3074 bytes B4A/Files/marker-rojo-77.png | Bin 0 -> 2389 bytes B4A/Files/marker-rojo-78.png | Bin 0 -> 3074 bytes B4A/Files/marker-rojo-79.png | Bin 0 -> 3096 bytes B4A/Files/marker-rojo-8.png | Bin 0 -> 2657 bytes B4A/Files/marker-rojo-80.png | Bin 0 -> 3166 bytes B4A/Files/marker-rojo-81.png | Bin 0 -> 2881 bytes B4A/Files/marker-rojo-82.png | Bin 0 -> 3167 bytes B4A/Files/marker-rojo-83.png | Bin 0 -> 3333 bytes B4A/Files/marker-rojo-84.png | Bin 0 -> 3031 bytes B4A/Files/marker-rojo-85.png | Bin 0 -> 3276 bytes B4A/Files/marker-rojo-86.png | Bin 0 -> 3310 bytes B4A/Files/marker-rojo-87.png | Bin 0 -> 3078 bytes B4A/Files/marker-rojo-88.png | Bin 0 -> 2684 bytes B4A/Files/marker-rojo-89.png | Bin 0 -> 3320 bytes B4A/Files/marker-rojo-9.png | Bin 0 -> 2698 bytes B4A/Files/marker-rojo-90.png | Bin 0 -> 3201 bytes B4A/Files/marker-rojo-91.png | Bin 0 -> 2911 bytes B4A/Files/marker-rojo-92.png | Bin 0 -> 3219 bytes B4A/Files/marker-rojo-93.png | Bin 0 -> 3370 bytes B4A/Files/marker-rojo-94.png | Bin 0 -> 3049 bytes B4A/Files/marker-rojo-95.png | Bin 0 -> 3300 bytes B4A/Files/marker-rojo-96.png | Bin 0 -> 3360 bytes B4A/Files/marker-rojo-97.png | Bin 0 -> 3116 bytes B4A/Files/marker-rojo-98.png | Bin 0 -> 3322 bytes B4A/Files/marker-rojo-99.png | Bin 0 -> 2743 bytes B4A/Files/marker-verde-0.png | Bin 0 -> 2934 bytes B4A/Files/marker-verde-1.png | Bin 0 -> 2535 bytes B4A/Files/marker-verde-10.png | Bin 0 -> 3179 bytes B4A/Files/marker-verde-100.png | Bin 0 -> 3778 bytes B4A/Files/marker-verde-101.png | Bin 0 -> 3229 bytes B4A/Files/marker-verde-102.png | Bin 0 -> 3770 bytes B4A/Files/marker-verde-103.png | Bin 0 -> 3872 bytes B4A/Files/marker-verde-104.png | Bin 0 -> 3608 bytes B4A/Files/marker-verde-105.png | Bin 0 -> 3806 bytes B4A/Files/marker-verde-106.png | Bin 0 -> 3886 bytes B4A/Files/marker-verde-107.png | Bin 0 -> 3614 bytes B4A/Files/marker-verde-108.png | Bin 0 -> 3900 bytes B4A/Files/marker-verde-109.png | Bin 0 -> 3876 bytes B4A/Files/marker-verde-11.png | Bin 0 -> 2572 bytes B4A/Files/marker-verde-110.png | Bin 0 -> 3427 bytes B4A/Files/marker-verde-111.png | Bin 0 -> 2827 bytes B4A/Files/marker-verde-112.png | Bin 0 -> 3166 bytes B4A/Files/marker-verde-113.png | Bin 0 -> 3301 bytes B4A/Files/marker-verde-114.png | Bin 0 -> 3026 bytes B4A/Files/marker-verde-115.png | Bin 0 -> 3438 bytes B4A/Files/marker-verde-116.png | Bin 0 -> 3341 bytes B4A/Files/marker-verde-117.png | Bin 0 -> 3196 bytes B4A/Files/marker-verde-118.png | Bin 0 -> 3544 bytes B4A/Files/marker-verde-119.png | Bin 0 -> 3558 bytes B4A/Files/marker-verde-12.png | Bin 0 -> 3155 bytes B4A/Files/marker-verde-120.png | Bin 0 -> 3745 bytes B4A/Files/marker-verde-121.png | Bin 0 -> 3366 bytes B4A/Files/marker-verde-122.png | Bin 0 -> 3725 bytes B4A/Files/marker-verde-123.png | Bin 0 -> 3808 bytes B4A/Files/marker-verde-124.png | Bin 0 -> 3524 bytes B4A/Files/marker-verde-125.png | Bin 0 -> 3770 bytes B4A/Files/marker-verde-126.png | Bin 0 -> 3850 bytes B4A/Files/marker-verde-127.png | Bin 0 -> 3540 bytes B4A/Files/marker-verde-128.png | Bin 0 -> 3849 bytes B4A/Files/marker-verde-129.png | Bin 0 -> 3817 bytes B4A/Files/marker-verde-13.png | Bin 0 -> 3272 bytes B4A/Files/marker-verde-130.png | Bin 0 -> 3860 bytes B4A/Files/marker-verde-131.png | Bin 0 -> 3299 bytes B4A/Files/marker-verde-132.png | Bin 0 -> 3797 bytes B4A/Files/marker-verde-133.png | Bin 0 -> 3921 bytes B4A/Files/marker-verde-134.png | Bin 0 -> 3633 bytes B4A/Files/marker-verde-135.png | Bin 0 -> 3892 bytes B4A/Files/marker-verde-136.png | Bin 0 -> 3962 bytes B4A/Files/marker-verde-137.png | Bin 0 -> 3634 bytes B4A/Files/marker-verde-138.png | Bin 0 -> 4005 bytes B4A/Files/marker-verde-139.png | Bin 0 -> 3964 bytes B4A/Files/marker-verde-14.png | Bin 0 -> 2953 bytes B4A/Files/marker-verde-140.png | Bin 0 -> 3589 bytes B4A/Files/marker-verde-141.png | Bin 0 -> 3005 bytes B4A/Files/marker-verde-142.png | Bin 0 -> 3545 bytes B4A/Files/marker-verde-143.png | Bin 0 -> 3668 bytes B4A/Files/marker-verde-144.png | Bin 0 -> 3045 bytes B4A/Files/marker-verde-145.png | Bin 0 -> 3566 bytes B4A/Files/marker-verde-146.png | Bin 0 -> 3714 bytes B4A/Files/marker-verde-147.png | Bin 0 -> 3354 bytes B4A/Files/marker-verde-148.png | Bin 0 -> 3732 bytes B4A/Files/marker-verde-149.png | Bin 0 -> 3689 bytes B4A/Files/marker-verde-15.png | Bin 0 -> 3223 bytes B4A/Files/marker-verde-150.png | Bin 0 -> 3768 bytes B4A/Files/marker-verde-16.png | Bin 0 -> 3310 bytes B4A/Files/marker-verde-17.png | Bin 0 -> 2991 bytes B4A/Files/marker-verde-18.png | Bin 0 -> 3310 bytes B4A/Files/marker-verde-19.png | Bin 0 -> 3319 bytes B4A/Files/marker-verde-2.png | Bin 0 -> 2922 bytes B4A/Files/marker-verde-20.png | Bin 0 -> 3527 bytes B4A/Files/marker-verde-21.png | Bin 0 -> 3166 bytes B4A/Files/marker-verde-22.png | Bin 0 -> 2997 bytes B4A/Files/marker-verde-23.png | Bin 0 -> 3636 bytes B4A/Files/marker-verde-24.png | Bin 0 -> 3336 bytes B4A/Files/marker-verde-25.png | Bin 0 -> 3551 bytes B4A/Files/marker-verde-26.png | Bin 0 -> 3643 bytes B4A/Files/marker-verde-27.png | Bin 0 -> 3313 bytes B4A/Files/marker-verde-28.png | Bin 0 -> 3670 bytes B4A/Files/marker-verde-29.png | Bin 0 -> 3679 bytes B4A/Files/marker-verde-3.png | Bin 0 -> 3058 bytes B4A/Files/marker-verde-30.png | Bin 0 -> 3656 bytes B4A/Files/marker-verde-31.png | Bin 0 -> 3283 bytes B4A/Files/marker-verde-32.png | Bin 0 -> 3638 bytes B4A/Files/marker-verde-33.png | Bin 0 -> 3126 bytes B4A/Files/marker-verde-34.png | Bin 0 -> 3434 bytes B4A/Files/marker-verde-35.png | Bin 0 -> 3660 bytes B4A/Files/marker-verde-36.png | Bin 0 -> 3811 bytes B4A/Files/marker-verde-37.png | Bin 0 -> 3456 bytes B4A/Files/marker-verde-38.png | Bin 0 -> 3811 bytes B4A/Files/marker-verde-39.png | Bin 0 -> 3846 bytes B4A/Files/marker-verde-4.png | Bin 0 -> 2738 bytes B4A/Files/marker-verde-40.png | Bin 0 -> 3360 bytes B4A/Files/marker-verde-41.png | Bin 0 -> 2956 bytes B4A/Files/marker-verde-42.png | Bin 0 -> 3344 bytes B4A/Files/marker-verde-43.png | Bin 0 -> 3449 bytes B4A/Files/marker-verde-44.png | Bin 0 -> 2833 bytes B4A/Files/marker-verde-45.png | Bin 0 -> 3395 bytes B4A/Files/marker-verde-46.png | Bin 0 -> 3490 bytes B4A/Files/marker-verde-47.png | Bin 0 -> 3179 bytes B4A/Files/marker-verde-48.png | Bin 0 -> 3489 bytes B4A/Files/marker-verde-49.png | Bin 0 -> 3487 bytes B4A/Files/marker-verde-5.png | Bin 0 -> 2992 bytes B4A/Files/marker-verde-50.png | Bin 0 -> 3585 bytes B4A/Files/marker-verde-51.png | Bin 0 -> 3215 bytes B4A/Files/marker-verde-52.png | Bin 0 -> 3559 bytes B4A/Files/marker-verde-53.png | Bin 0 -> 3731 bytes B4A/Files/marker-verde-54.png | Bin 0 -> 3367 bytes B4A/Files/marker-verde-55.png | Bin 0 -> 3654 bytes B4A/Files/marker-verde-56.png | Bin 0 -> 3742 bytes B4A/Files/marker-verde-57.png | Bin 0 -> 3393 bytes B4A/Files/marker-verde-58.png | Bin 0 -> 3794 bytes B4A/Files/marker-verde-59.png | Bin 0 -> 3760 bytes B4A/Files/marker-verde-6.png | Bin 0 -> 3080 bytes B4A/Files/marker-verde-60.png | Bin 0 -> 3694 bytes B4A/Files/marker-verde-61.png | Bin 0 -> 3310 bytes B4A/Files/marker-verde-62.png | Bin 0 -> 3673 bytes B4A/Files/marker-verde-63.png | Bin 0 -> 3798 bytes B4A/Files/marker-verde-64.png | Bin 0 -> 3503 bytes B4A/Files/marker-verde-65.png | Bin 0 -> 3774 bytes B4A/Files/marker-verde-66.png | Bin 0 -> 3867 bytes B4A/Files/marker-verde-67.png | Bin 0 -> 3508 bytes B4A/Files/marker-verde-68.png | Bin 0 -> 3851 bytes B4A/Files/marker-verde-69.png | Bin 0 -> 3849 bytes B4A/Files/marker-verde-7.png | Bin 0 -> 2751 bytes B4A/Files/marker-verde-70.png | Bin 0 -> 3373 bytes B4A/Files/marker-verde-71.png | Bin 0 -> 2972 bytes B4A/Files/marker-verde-72.png | Bin 0 -> 3349 bytes B4A/Files/marker-verde-73.png | Bin 0 -> 3467 bytes B4A/Files/marker-verde-74.png | Bin 0 -> 3150 bytes B4A/Files/marker-verde-75.png | Bin 0 -> 3418 bytes B4A/Files/marker-verde-76.png | Bin 0 -> 3497 bytes B4A/Files/marker-verde-77.png | Bin 0 -> 3169 bytes B4A/Files/marker-verde-78.png | Bin 0 -> 3497 bytes B4A/Files/marker-verde-79.png | Bin 0 -> 3511 bytes B4A/Files/marker-verde-8.png | Bin 0 -> 3100 bytes B4A/Files/marker-verde-80.png | Bin 0 -> 3697 bytes B4A/Files/marker-verde-81.png | Bin 0 -> 3327 bytes B4A/Files/marker-verde-82.png | Bin 0 -> 3728 bytes B4A/Files/marker-verde-83.png | Bin 0 -> 3814 bytes B4A/Files/marker-verde-84.png | Bin 0 -> 3496 bytes B4A/Files/marker-verde-85.png | Bin 0 -> 3791 bytes B4A/Files/marker-verde-86.png | Bin 0 -> 3855 bytes B4A/Files/marker-verde-87.png | Bin 0 -> 3517 bytes B4A/Files/marker-verde-88.png | Bin 0 -> 3875 bytes B4A/Files/marker-verde-89.png | Bin 0 -> 3870 bytes B4A/Files/marker-verde-9.png | Bin 0 -> 3090 bytes B4A/Files/marker-verde-90.png | Bin 0 -> 3700 bytes B4A/Files/marker-verde-91.png | Bin 0 -> 3322 bytes B4A/Files/marker-verde-92.png | Bin 0 -> 3687 bytes B4A/Files/marker-verde-93.png | Bin 0 -> 3834 bytes B4A/Files/marker-verde-94.png | Bin 0 -> 3489 bytes B4A/Files/marker-verde-95.png | Bin 0 -> 3764 bytes B4A/Files/marker-verde-96.png | Bin 0 -> 3841 bytes B4A/Files/marker-verde-97.png | Bin 0 -> 3493 bytes B4A/Files/marker-verde-98.png | Bin 0 -> 3878 bytes B4A/Files/marker-verde-99.png | Bin 0 -> 3852 bytes B4A/Files/nota.bal | Bin 0 -> 7334 bytes B4A/Files/noventa.bal | Bin 0 -> 6877 bytes B4A/Files/nuevo-cliente20.png | Bin 0 -> 32124 bytes B4A/Files/nuevocliente.bal | Bin 0 -> 12367 bytes B4A/Files/nuevocliente.jpg | Bin 0 -> 26898 bytes B4A/Files/nvo cliente.jpg | Bin 0 -> 592665 bytes B4A/Files/palomita_verde.png | Bin 0 -> 159519 bytes B4A/Files/panel_pick_ciego.bal | Bin 0 -> 2599 bytes B4A/Files/pedido.bal | Bin 0 -> 11748 bytes B4A/Files/principal.bal | Bin 0 -> 58624 bytes B4A/Files/proditem.bal | Bin 0 -> 8254 bytes B4A/Files/proditem1.bal | Bin 0 -> 5586 bytes B4A/Files/proditem2.bal | Bin 0 -> 7390 bytes B4A/Files/proditempromo.bal | Bin 0 -> 5586 bytes B4A/Files/productos.bal | Bin 0 -> 16255 bytes B4A/Files/promociones.bal | Bin 0 -> 10725 bytes B4A/Files/resdia.bal | Bin 0 -> 44790 bytes B4A/Files/resdia.jpg | Bin 0 -> 609996 bytes B4A/Files/resdia20.png | Bin 0 -> 69280 bytes B4A/Files/resumendia.jpg | Bin 0 -> 5067 bytes B4A/Files/scrollpromos.bal | Bin 0 -> 1366 bytes B4A/Files/senial.jpg | Bin 0 -> 40104 bytes B4A/Files/sync.png | Bin 0 -> 763 bytes B4A/Files/tabulador.bal | Bin 0 -> 18660 bytes B4A/Files/tache_rojo.png | Bin 0 -> 254546 bytes B4A/Files/ticket dia.jpg | Bin 0 -> 588975 bytes B4A/Files/ticketdia20.jpg | Bin 0 -> 3012 bytes B4A/Files/ticketdia20.png | Bin 0 -> 31411 bytes B4A/Files/ticketsdia.bal | Bin 0 -> 2909 bytes B4A/Files/tiendita.jpg | Bin 0 -> 9042 bytes B4A/Files/verde.png | Bin 0 -> 7665 bytes B4A/FirebaseMessaging.bas | 226 ++ B4A/ISKA.b4a.meta | 99 + B4A/IZCA.b4a | 268 ++ B4A/IZCA.b4a.meta | 99 + B4A/MAPA_CLIENTE.bas | 130 + B4A/MAPA_RUTAS.bas | 499 ++++ B4A/MARQUEZ.b4a.meta | 99 + B4A/ManageExternalStorage.bas | 79 + B4A/NotificationService.bas | 218 ++ B4A/Pendientes.bas | 16 + B4A/Starter.bas | 141 ++ B4A/Subs.bas | 3337 +++++++++++++++++++++++++ B4A/Tracker.bas | 298 +++ B4A/appUpdater.bas | 286 +++ B4A/google-services.json | 126 + B4A/test.bas | 66 + B4A/updateAvailable.bas | 24 + 563 files changed, 22451 insertions(+) create mode 100644 B4A/B4XMainPage.bas create mode 100644 B4A/BatteryUtilities.bas create mode 100644 B4A/C_Cliente.bas create mode 100644 B4A/C_Clientes.bas create mode 100644 B4A/C_Cobranza.bas create mode 100644 B4A/C_Cuestionario.bas create mode 100644 B4A/C_Historico.bas create mode 100644 B4A/C_MapaRutas.bas create mode 100644 B4A/C_Mapas.bas create mode 100644 B4A/C_NoVenta.bas create mode 100644 B4A/C_Nota.bas create mode 100644 B4A/C_NuevoCliente.bas create mode 100644 B4A/C_Pedidos.bas create mode 100644 B4A/C_Principal.bas create mode 100644 B4A/C_Productos.bas create mode 100644 B4A/C_Promos.bas create mode 100644 B4A/C_RespaldoDiario.bas create mode 100644 B4A/C_Subs.bas create mode 100644 B4A/C_TicketsDia.bas create mode 100644 B4A/C_UpdateAvailable.bas create mode 100644 B4A/C_tabulador.bas create mode 100644 B4A/DBRequestManager.bas create mode 100644 B4A/EscPosPrinter.bas create mode 100644 B4A/FileHandler.bas create mode 100644 B4A/Files/abordo.png create mode 100644 B4A/Files/alert2.png create mode 100644 B4A/Files/alerta_amarilla.png create mode 100644 B4A/Files/amigos.jpg create mode 100644 B4A/Files/anterior.jpg create mode 100644 B4A/Files/bus-ar.png create mode 100644 B4A/Files/c_cuentasxcobrar.bal create mode 100644 B4A/Files/carrito.png create mode 100644 B4A/Files/celltitle.bal create mode 100644 B4A/Files/cliente.bal create mode 100644 B4A/Files/clientes.bal create mode 100644 B4A/Files/cobranza.bal create mode 100644 B4A/Files/datoscliente.bal create mode 100644 B4A/Files/desvanecido.png create mode 100644 B4A/Files/engrane.jpg create mode 100644 B4A/Files/engrane_gris.png create mode 100644 B4A/Files/folioabono.bal create mode 100644 B4A/Files/fondo_kmt.jpg create mode 100644 B4A/Files/gps20.png create mode 100644 B4A/Files/hacer pedido.jpg create mode 100644 B4A/Files/hacerpedido30.jpg create mode 100644 B4A/Files/hacerpedido30.png create mode 100644 B4A/Files/intmex_logo_192x192_old.jpg create mode 100644 B4A/Files/itembuttonblue.png create mode 100644 B4A/Files/kmt.db create mode 100644 B4A/Files/login.bal create mode 100644 B4A/Files/logo_izca.jpg create mode 100644 B4A/Files/logo_keymon.png create mode 100644 B4A/Files/logo_mariana.jpeg create mode 100644 B4A/Files/logosamiizca.jpg create mode 100644 B4A/Files/logosamiizca2.jpg create mode 100644 B4A/Files/mainpage.bal create mode 100644 B4A/Files/malo.jpg create mode 100644 B4A/Files/mapa_cliente.bal create mode 100644 B4A/Files/mapa_rutas.bal create mode 100644 B4A/Files/mariana_ico.png create mode 100644 B4A/Files/mariana_logo_192x192.jpg create mode 100644 B4A/Files/marker-amarillo.png create mode 100644 B4A/Files/marker-azul-0.png create mode 100644 B4A/Files/marker-azul-1.png create mode 100644 B4A/Files/marker-azul-10.png create mode 100644 B4A/Files/marker-azul-100.png create mode 100644 B4A/Files/marker-azul-101.png create mode 100644 B4A/Files/marker-azul-102.png create mode 100644 B4A/Files/marker-azul-103.png create mode 100644 B4A/Files/marker-azul-104.png create mode 100644 B4A/Files/marker-azul-105.png create mode 100644 B4A/Files/marker-azul-106.png create mode 100644 B4A/Files/marker-azul-107.png create mode 100644 B4A/Files/marker-azul-108.png create mode 100644 B4A/Files/marker-azul-109.png create mode 100644 B4A/Files/marker-azul-11.png create mode 100644 B4A/Files/marker-azul-110.png create mode 100644 B4A/Files/marker-azul-111.png create mode 100644 B4A/Files/marker-azul-112.png create mode 100644 B4A/Files/marker-azul-113.png create mode 100644 B4A/Files/marker-azul-114.png create mode 100644 B4A/Files/marker-azul-115.png create mode 100644 B4A/Files/marker-azul-116.png create mode 100644 B4A/Files/marker-azul-117.png create mode 100644 B4A/Files/marker-azul-118.png create mode 100644 B4A/Files/marker-azul-119.png create mode 100644 B4A/Files/marker-azul-12.png create mode 100644 B4A/Files/marker-azul-120.png create mode 100644 B4A/Files/marker-azul-121.png create mode 100644 B4A/Files/marker-azul-122.png create mode 100644 B4A/Files/marker-azul-123.png create mode 100644 B4A/Files/marker-azul-124.png create mode 100644 B4A/Files/marker-azul-125.png create mode 100644 B4A/Files/marker-azul-126.png create mode 100644 B4A/Files/marker-azul-127.png create mode 100644 B4A/Files/marker-azul-128.png create mode 100644 B4A/Files/marker-azul-129.png create mode 100644 B4A/Files/marker-azul-13.png create mode 100644 B4A/Files/marker-azul-130.png create mode 100644 B4A/Files/marker-azul-131.png create mode 100644 B4A/Files/marker-azul-132.png create mode 100644 B4A/Files/marker-azul-133.png create mode 100644 B4A/Files/marker-azul-134.png create mode 100644 B4A/Files/marker-azul-135.png create mode 100644 B4A/Files/marker-azul-136.png create mode 100644 B4A/Files/marker-azul-137.png create mode 100644 B4A/Files/marker-azul-138.png create mode 100644 B4A/Files/marker-azul-139.png create mode 100644 B4A/Files/marker-azul-14.png create mode 100644 B4A/Files/marker-azul-140.png create mode 100644 B4A/Files/marker-azul-141.png create mode 100644 B4A/Files/marker-azul-142.png create mode 100644 B4A/Files/marker-azul-143.png create mode 100644 B4A/Files/marker-azul-144.png create mode 100644 B4A/Files/marker-azul-145.png create mode 100644 B4A/Files/marker-azul-146.png create mode 100644 B4A/Files/marker-azul-147.png create mode 100644 B4A/Files/marker-azul-148.png create mode 100644 B4A/Files/marker-azul-149.png create mode 100644 B4A/Files/marker-azul-15.png create mode 100644 B4A/Files/marker-azul-150.png create mode 100644 B4A/Files/marker-azul-16.png create mode 100644 B4A/Files/marker-azul-17.png create mode 100644 B4A/Files/marker-azul-18.png create mode 100644 B4A/Files/marker-azul-19.png create mode 100644 B4A/Files/marker-azul-2.png create mode 100644 B4A/Files/marker-azul-20.png create mode 100644 B4A/Files/marker-azul-21.png create mode 100644 B4A/Files/marker-azul-22.png create mode 100644 B4A/Files/marker-azul-23.png create mode 100644 B4A/Files/marker-azul-24.png create mode 100644 B4A/Files/marker-azul-25.png create mode 100644 B4A/Files/marker-azul-26.png create mode 100644 B4A/Files/marker-azul-27.png create mode 100644 B4A/Files/marker-azul-28.png create mode 100644 B4A/Files/marker-azul-29.png create mode 100644 B4A/Files/marker-azul-3.png create mode 100644 B4A/Files/marker-azul-30.png create mode 100644 B4A/Files/marker-azul-31.png create mode 100644 B4A/Files/marker-azul-32.png create mode 100644 B4A/Files/marker-azul-33.png create mode 100644 B4A/Files/marker-azul-34.png create mode 100644 B4A/Files/marker-azul-35.png create mode 100644 B4A/Files/marker-azul-36.png create mode 100644 B4A/Files/marker-azul-37.png create mode 100644 B4A/Files/marker-azul-38.png create mode 100644 B4A/Files/marker-azul-39.png create mode 100644 B4A/Files/marker-azul-4.png create mode 100644 B4A/Files/marker-azul-40.png create mode 100644 B4A/Files/marker-azul-41.png create mode 100644 B4A/Files/marker-azul-42.png create mode 100644 B4A/Files/marker-azul-43.png create mode 100644 B4A/Files/marker-azul-44.png create mode 100644 B4A/Files/marker-azul-45.png create mode 100644 B4A/Files/marker-azul-46.png create mode 100644 B4A/Files/marker-azul-47.png create mode 100644 B4A/Files/marker-azul-48.png create mode 100644 B4A/Files/marker-azul-49.png create mode 100644 B4A/Files/marker-azul-5.png create mode 100644 B4A/Files/marker-azul-50.png create mode 100644 B4A/Files/marker-azul-51.png create mode 100644 B4A/Files/marker-azul-52.png create mode 100644 B4A/Files/marker-azul-53.png create mode 100644 B4A/Files/marker-azul-54.png create mode 100644 B4A/Files/marker-azul-55.png create mode 100644 B4A/Files/marker-azul-56.png create mode 100644 B4A/Files/marker-azul-57.png create mode 100644 B4A/Files/marker-azul-58.png create mode 100644 B4A/Files/marker-azul-59.png create mode 100644 B4A/Files/marker-azul-6.png create mode 100644 B4A/Files/marker-azul-60.png create mode 100644 B4A/Files/marker-azul-61.png create mode 100644 B4A/Files/marker-azul-62.png create mode 100644 B4A/Files/marker-azul-63.png create mode 100644 B4A/Files/marker-azul-64.png create mode 100644 B4A/Files/marker-azul-65.png create mode 100644 B4A/Files/marker-azul-66.png create mode 100644 B4A/Files/marker-azul-67.png create mode 100644 B4A/Files/marker-azul-68.png create mode 100644 B4A/Files/marker-azul-69.png create mode 100644 B4A/Files/marker-azul-7.png create mode 100644 B4A/Files/marker-azul-70.png create mode 100644 B4A/Files/marker-azul-71.png create mode 100644 B4A/Files/marker-azul-72.png create mode 100644 B4A/Files/marker-azul-73.png create mode 100644 B4A/Files/marker-azul-74.png create mode 100644 B4A/Files/marker-azul-75.png create mode 100644 B4A/Files/marker-azul-76.png create mode 100644 B4A/Files/marker-azul-77.png create mode 100644 B4A/Files/marker-azul-78.png create mode 100644 B4A/Files/marker-azul-79.png create mode 100644 B4A/Files/marker-azul-8.png create mode 100644 B4A/Files/marker-azul-80.png create mode 100644 B4A/Files/marker-azul-81.png create mode 100644 B4A/Files/marker-azul-82.png create mode 100644 B4A/Files/marker-azul-83.png create mode 100644 B4A/Files/marker-azul-84.png create mode 100644 B4A/Files/marker-azul-85.png create mode 100644 B4A/Files/marker-azul-86.png create mode 100644 B4A/Files/marker-azul-87.png create mode 100644 B4A/Files/marker-azul-88.png create mode 100644 B4A/Files/marker-azul-89.png create mode 100644 B4A/Files/marker-azul-9.png create mode 100644 B4A/Files/marker-azul-90.png create mode 100644 B4A/Files/marker-azul-91.png create mode 100644 B4A/Files/marker-azul-92.png create mode 100644 B4A/Files/marker-azul-93.png create mode 100644 B4A/Files/marker-azul-94.png create mode 100644 B4A/Files/marker-azul-95.png create mode 100644 B4A/Files/marker-azul-96.png create mode 100644 B4A/Files/marker-azul-97.png create mode 100644 B4A/Files/marker-azul-98.png create mode 100644 B4A/Files/marker-azul-99.png create mode 100644 B4A/Files/marker-rojo-0.png create mode 100644 B4A/Files/marker-rojo-1.png create mode 100644 B4A/Files/marker-rojo-10.png create mode 100644 B4A/Files/marker-rojo-100.png create mode 100644 B4A/Files/marker-rojo-101.png create mode 100644 B4A/Files/marker-rojo-102.png create mode 100644 B4A/Files/marker-rojo-103.png create mode 100644 B4A/Files/marker-rojo-104.png create mode 100644 B4A/Files/marker-rojo-105.png create mode 100644 B4A/Files/marker-rojo-106.png create mode 100644 B4A/Files/marker-rojo-107.png create mode 100644 B4A/Files/marker-rojo-108.png create mode 100644 B4A/Files/marker-rojo-109.png create mode 100644 B4A/Files/marker-rojo-11.png create mode 100644 B4A/Files/marker-rojo-110.png create mode 100644 B4A/Files/marker-rojo-111.png create mode 100644 B4A/Files/marker-rojo-112.png create mode 100644 B4A/Files/marker-rojo-113.png create mode 100644 B4A/Files/marker-rojo-114.png create mode 100644 B4A/Files/marker-rojo-115.png create mode 100644 B4A/Files/marker-rojo-116.png create mode 100644 B4A/Files/marker-rojo-117.png create mode 100644 B4A/Files/marker-rojo-118.png create mode 100644 B4A/Files/marker-rojo-119.png create mode 100644 B4A/Files/marker-rojo-12.png create mode 100644 B4A/Files/marker-rojo-120.png create mode 100644 B4A/Files/marker-rojo-121.png create mode 100644 B4A/Files/marker-rojo-122.png create mode 100644 B4A/Files/marker-rojo-123.png create mode 100644 B4A/Files/marker-rojo-124.png create mode 100644 B4A/Files/marker-rojo-125.png create mode 100644 B4A/Files/marker-rojo-126.png create mode 100644 B4A/Files/marker-rojo-127.png create mode 100644 B4A/Files/marker-rojo-128.png create mode 100644 B4A/Files/marker-rojo-129.png create mode 100644 B4A/Files/marker-rojo-13.png create mode 100644 B4A/Files/marker-rojo-130.png create mode 100644 B4A/Files/marker-rojo-131.png create mode 100644 B4A/Files/marker-rojo-132.png create mode 100644 B4A/Files/marker-rojo-133.png create mode 100644 B4A/Files/marker-rojo-134.png create mode 100644 B4A/Files/marker-rojo-135.png create mode 100644 B4A/Files/marker-rojo-136.png create mode 100644 B4A/Files/marker-rojo-137.png create mode 100644 B4A/Files/marker-rojo-138.png create mode 100644 B4A/Files/marker-rojo-139.png create mode 100644 B4A/Files/marker-rojo-14.png create mode 100644 B4A/Files/marker-rojo-140.png create mode 100644 B4A/Files/marker-rojo-141.png create mode 100644 B4A/Files/marker-rojo-142.png create mode 100644 B4A/Files/marker-rojo-143.png create mode 100644 B4A/Files/marker-rojo-144.png create mode 100644 B4A/Files/marker-rojo-145.png create mode 100644 B4A/Files/marker-rojo-146.png create mode 100644 B4A/Files/marker-rojo-147.png create mode 100644 B4A/Files/marker-rojo-148.png create mode 100644 B4A/Files/marker-rojo-149.png create mode 100644 B4A/Files/marker-rojo-15.png create mode 100644 B4A/Files/marker-rojo-150.png create mode 100644 B4A/Files/marker-rojo-16.png create mode 100644 B4A/Files/marker-rojo-17.png create mode 100644 B4A/Files/marker-rojo-18.png create mode 100644 B4A/Files/marker-rojo-19.png create mode 100644 B4A/Files/marker-rojo-2.png create mode 100644 B4A/Files/marker-rojo-20.png create mode 100644 B4A/Files/marker-rojo-21.png create mode 100644 B4A/Files/marker-rojo-22.png create mode 100644 B4A/Files/marker-rojo-23.png create mode 100644 B4A/Files/marker-rojo-24.png create mode 100644 B4A/Files/marker-rojo-25.png create mode 100644 B4A/Files/marker-rojo-26.png create mode 100644 B4A/Files/marker-rojo-27.png create mode 100644 B4A/Files/marker-rojo-28.png create mode 100644 B4A/Files/marker-rojo-29.png create mode 100644 B4A/Files/marker-rojo-3.png create mode 100644 B4A/Files/marker-rojo-30.png create mode 100644 B4A/Files/marker-rojo-31.png create mode 100644 B4A/Files/marker-rojo-32.png create mode 100644 B4A/Files/marker-rojo-33.png create mode 100644 B4A/Files/marker-rojo-34.png create mode 100644 B4A/Files/marker-rojo-35.png create mode 100644 B4A/Files/marker-rojo-36.png create mode 100644 B4A/Files/marker-rojo-37.png create mode 100644 B4A/Files/marker-rojo-38.png create mode 100644 B4A/Files/marker-rojo-39.png create mode 100644 B4A/Files/marker-rojo-4.png create mode 100644 B4A/Files/marker-rojo-40.png create mode 100644 B4A/Files/marker-rojo-41.png create mode 100644 B4A/Files/marker-rojo-42.png create mode 100644 B4A/Files/marker-rojo-43.png create mode 100644 B4A/Files/marker-rojo-44.png create mode 100644 B4A/Files/marker-rojo-45.png create mode 100644 B4A/Files/marker-rojo-46.png create mode 100644 B4A/Files/marker-rojo-47.png create mode 100644 B4A/Files/marker-rojo-48.png create mode 100644 B4A/Files/marker-rojo-49.png create mode 100644 B4A/Files/marker-rojo-5.png create mode 100644 B4A/Files/marker-rojo-50.png create mode 100644 B4A/Files/marker-rojo-51.png create mode 100644 B4A/Files/marker-rojo-52.png create mode 100644 B4A/Files/marker-rojo-53.png create mode 100644 B4A/Files/marker-rojo-54.png create mode 100644 B4A/Files/marker-rojo-55.png create mode 100644 B4A/Files/marker-rojo-56.png create mode 100644 B4A/Files/marker-rojo-57.png create mode 100644 B4A/Files/marker-rojo-58.png create mode 100644 B4A/Files/marker-rojo-59.png create mode 100644 B4A/Files/marker-rojo-6.png create mode 100644 B4A/Files/marker-rojo-60.png create mode 100644 B4A/Files/marker-rojo-61.png create mode 100644 B4A/Files/marker-rojo-62.png create mode 100644 B4A/Files/marker-rojo-63.png create mode 100644 B4A/Files/marker-rojo-64.png create mode 100644 B4A/Files/marker-rojo-65.png create mode 100644 B4A/Files/marker-rojo-66.png create mode 100644 B4A/Files/marker-rojo-67.png create mode 100644 B4A/Files/marker-rojo-68.png create mode 100644 B4A/Files/marker-rojo-69.png create mode 100644 B4A/Files/marker-rojo-7.png create mode 100644 B4A/Files/marker-rojo-70.png create mode 100644 B4A/Files/marker-rojo-71.png create mode 100644 B4A/Files/marker-rojo-72.png create mode 100644 B4A/Files/marker-rojo-73.png create mode 100644 B4A/Files/marker-rojo-74.png create mode 100644 B4A/Files/marker-rojo-75.png create mode 100644 B4A/Files/marker-rojo-76.png create mode 100644 B4A/Files/marker-rojo-77.png create mode 100644 B4A/Files/marker-rojo-78.png create mode 100644 B4A/Files/marker-rojo-79.png create mode 100644 B4A/Files/marker-rojo-8.png create mode 100644 B4A/Files/marker-rojo-80.png create mode 100644 B4A/Files/marker-rojo-81.png create mode 100644 B4A/Files/marker-rojo-82.png create mode 100644 B4A/Files/marker-rojo-83.png create mode 100644 B4A/Files/marker-rojo-84.png create mode 100644 B4A/Files/marker-rojo-85.png create mode 100644 B4A/Files/marker-rojo-86.png create mode 100644 B4A/Files/marker-rojo-87.png create mode 100644 B4A/Files/marker-rojo-88.png create mode 100644 B4A/Files/marker-rojo-89.png create mode 100644 B4A/Files/marker-rojo-9.png create mode 100644 B4A/Files/marker-rojo-90.png create mode 100644 B4A/Files/marker-rojo-91.png create mode 100644 B4A/Files/marker-rojo-92.png create mode 100644 B4A/Files/marker-rojo-93.png create mode 100644 B4A/Files/marker-rojo-94.png create mode 100644 B4A/Files/marker-rojo-95.png create mode 100644 B4A/Files/marker-rojo-96.png create mode 100644 B4A/Files/marker-rojo-97.png create mode 100644 B4A/Files/marker-rojo-98.png create mode 100644 B4A/Files/marker-rojo-99.png create mode 100644 B4A/Files/marker-verde-0.png create mode 100644 B4A/Files/marker-verde-1.png create mode 100644 B4A/Files/marker-verde-10.png create mode 100644 B4A/Files/marker-verde-100.png create mode 100644 B4A/Files/marker-verde-101.png create mode 100644 B4A/Files/marker-verde-102.png create mode 100644 B4A/Files/marker-verde-103.png create mode 100644 B4A/Files/marker-verde-104.png create mode 100644 B4A/Files/marker-verde-105.png create mode 100644 B4A/Files/marker-verde-106.png create mode 100644 B4A/Files/marker-verde-107.png create mode 100644 B4A/Files/marker-verde-108.png create mode 100644 B4A/Files/marker-verde-109.png create mode 100644 B4A/Files/marker-verde-11.png create mode 100644 B4A/Files/marker-verde-110.png create mode 100644 B4A/Files/marker-verde-111.png create mode 100644 B4A/Files/marker-verde-112.png create mode 100644 B4A/Files/marker-verde-113.png create mode 100644 B4A/Files/marker-verde-114.png create mode 100644 B4A/Files/marker-verde-115.png create mode 100644 B4A/Files/marker-verde-116.png create mode 100644 B4A/Files/marker-verde-117.png create mode 100644 B4A/Files/marker-verde-118.png create mode 100644 B4A/Files/marker-verde-119.png create mode 100644 B4A/Files/marker-verde-12.png create mode 100644 B4A/Files/marker-verde-120.png create mode 100644 B4A/Files/marker-verde-121.png create mode 100644 B4A/Files/marker-verde-122.png create mode 100644 B4A/Files/marker-verde-123.png create mode 100644 B4A/Files/marker-verde-124.png create mode 100644 B4A/Files/marker-verde-125.png create mode 100644 B4A/Files/marker-verde-126.png create mode 100644 B4A/Files/marker-verde-127.png create mode 100644 B4A/Files/marker-verde-128.png create mode 100644 B4A/Files/marker-verde-129.png create mode 100644 B4A/Files/marker-verde-13.png create mode 100644 B4A/Files/marker-verde-130.png create mode 100644 B4A/Files/marker-verde-131.png create mode 100644 B4A/Files/marker-verde-132.png create mode 100644 B4A/Files/marker-verde-133.png create mode 100644 B4A/Files/marker-verde-134.png create mode 100644 B4A/Files/marker-verde-135.png create mode 100644 B4A/Files/marker-verde-136.png create mode 100644 B4A/Files/marker-verde-137.png create mode 100644 B4A/Files/marker-verde-138.png create mode 100644 B4A/Files/marker-verde-139.png create mode 100644 B4A/Files/marker-verde-14.png create mode 100644 B4A/Files/marker-verde-140.png create mode 100644 B4A/Files/marker-verde-141.png create mode 100644 B4A/Files/marker-verde-142.png create mode 100644 B4A/Files/marker-verde-143.png create mode 100644 B4A/Files/marker-verde-144.png create mode 100644 B4A/Files/marker-verde-145.png create mode 100644 B4A/Files/marker-verde-146.png create mode 100644 B4A/Files/marker-verde-147.png create mode 100644 B4A/Files/marker-verde-148.png create mode 100644 B4A/Files/marker-verde-149.png create mode 100644 B4A/Files/marker-verde-15.png create mode 100644 B4A/Files/marker-verde-150.png create mode 100644 B4A/Files/marker-verde-16.png create mode 100644 B4A/Files/marker-verde-17.png create mode 100644 B4A/Files/marker-verde-18.png create mode 100644 B4A/Files/marker-verde-19.png create mode 100644 B4A/Files/marker-verde-2.png create mode 100644 B4A/Files/marker-verde-20.png create mode 100644 B4A/Files/marker-verde-21.png create mode 100644 B4A/Files/marker-verde-22.png create mode 100644 B4A/Files/marker-verde-23.png create mode 100644 B4A/Files/marker-verde-24.png create mode 100644 B4A/Files/marker-verde-25.png create mode 100644 B4A/Files/marker-verde-26.png create mode 100644 B4A/Files/marker-verde-27.png create mode 100644 B4A/Files/marker-verde-28.png create mode 100644 B4A/Files/marker-verde-29.png create mode 100644 B4A/Files/marker-verde-3.png create mode 100644 B4A/Files/marker-verde-30.png create mode 100644 B4A/Files/marker-verde-31.png create mode 100644 B4A/Files/marker-verde-32.png create mode 100644 B4A/Files/marker-verde-33.png create mode 100644 B4A/Files/marker-verde-34.png create mode 100644 B4A/Files/marker-verde-35.png create mode 100644 B4A/Files/marker-verde-36.png create mode 100644 B4A/Files/marker-verde-37.png create mode 100644 B4A/Files/marker-verde-38.png create mode 100644 B4A/Files/marker-verde-39.png create mode 100644 B4A/Files/marker-verde-4.png create mode 100644 B4A/Files/marker-verde-40.png create mode 100644 B4A/Files/marker-verde-41.png create mode 100644 B4A/Files/marker-verde-42.png create mode 100644 B4A/Files/marker-verde-43.png create mode 100644 B4A/Files/marker-verde-44.png create mode 100644 B4A/Files/marker-verde-45.png create mode 100644 B4A/Files/marker-verde-46.png create mode 100644 B4A/Files/marker-verde-47.png create mode 100644 B4A/Files/marker-verde-48.png create mode 100644 B4A/Files/marker-verde-49.png create mode 100644 B4A/Files/marker-verde-5.png create mode 100644 B4A/Files/marker-verde-50.png create mode 100644 B4A/Files/marker-verde-51.png create mode 100644 B4A/Files/marker-verde-52.png create mode 100644 B4A/Files/marker-verde-53.png create mode 100644 B4A/Files/marker-verde-54.png create mode 100644 B4A/Files/marker-verde-55.png create mode 100644 B4A/Files/marker-verde-56.png create mode 100644 B4A/Files/marker-verde-57.png create mode 100644 B4A/Files/marker-verde-58.png create mode 100644 B4A/Files/marker-verde-59.png create mode 100644 B4A/Files/marker-verde-6.png create mode 100644 B4A/Files/marker-verde-60.png create mode 100644 B4A/Files/marker-verde-61.png create mode 100644 B4A/Files/marker-verde-62.png create mode 100644 B4A/Files/marker-verde-63.png create mode 100644 B4A/Files/marker-verde-64.png create mode 100644 B4A/Files/marker-verde-65.png create mode 100644 B4A/Files/marker-verde-66.png create mode 100644 B4A/Files/marker-verde-67.png create mode 100644 B4A/Files/marker-verde-68.png create mode 100644 B4A/Files/marker-verde-69.png create mode 100644 B4A/Files/marker-verde-7.png create mode 100644 B4A/Files/marker-verde-70.png create mode 100644 B4A/Files/marker-verde-71.png create mode 100644 B4A/Files/marker-verde-72.png create mode 100644 B4A/Files/marker-verde-73.png create mode 100644 B4A/Files/marker-verde-74.png create mode 100644 B4A/Files/marker-verde-75.png create mode 100644 B4A/Files/marker-verde-76.png create mode 100644 B4A/Files/marker-verde-77.png create mode 100644 B4A/Files/marker-verde-78.png create mode 100644 B4A/Files/marker-verde-79.png create mode 100644 B4A/Files/marker-verde-8.png create mode 100644 B4A/Files/marker-verde-80.png create mode 100644 B4A/Files/marker-verde-81.png create mode 100644 B4A/Files/marker-verde-82.png create mode 100644 B4A/Files/marker-verde-83.png create mode 100644 B4A/Files/marker-verde-84.png create mode 100644 B4A/Files/marker-verde-85.png create mode 100644 B4A/Files/marker-verde-86.png create mode 100644 B4A/Files/marker-verde-87.png create mode 100644 B4A/Files/marker-verde-88.png create mode 100644 B4A/Files/marker-verde-89.png create mode 100644 B4A/Files/marker-verde-9.png create mode 100644 B4A/Files/marker-verde-90.png create mode 100644 B4A/Files/marker-verde-91.png create mode 100644 B4A/Files/marker-verde-92.png create mode 100644 B4A/Files/marker-verde-93.png create mode 100644 B4A/Files/marker-verde-94.png create mode 100644 B4A/Files/marker-verde-95.png create mode 100644 B4A/Files/marker-verde-96.png create mode 100644 B4A/Files/marker-verde-97.png create mode 100644 B4A/Files/marker-verde-98.png create mode 100644 B4A/Files/marker-verde-99.png create mode 100644 B4A/Files/nota.bal create mode 100644 B4A/Files/noventa.bal create mode 100644 B4A/Files/nuevo-cliente20.png create mode 100644 B4A/Files/nuevocliente.bal create mode 100644 B4A/Files/nuevocliente.jpg create mode 100644 B4A/Files/nvo cliente.jpg create mode 100644 B4A/Files/palomita_verde.png create mode 100644 B4A/Files/panel_pick_ciego.bal create mode 100644 B4A/Files/pedido.bal create mode 100644 B4A/Files/principal.bal create mode 100644 B4A/Files/proditem.bal create mode 100644 B4A/Files/proditem1.bal create mode 100644 B4A/Files/proditem2.bal create mode 100644 B4A/Files/proditempromo.bal create mode 100644 B4A/Files/productos.bal create mode 100644 B4A/Files/promociones.bal create mode 100644 B4A/Files/resdia.bal create mode 100644 B4A/Files/resdia.jpg create mode 100644 B4A/Files/resdia20.png create mode 100644 B4A/Files/resumendia.jpg create mode 100644 B4A/Files/scrollpromos.bal create mode 100644 B4A/Files/senial.jpg create mode 100644 B4A/Files/sync.png create mode 100644 B4A/Files/tabulador.bal create mode 100644 B4A/Files/tache_rojo.png create mode 100644 B4A/Files/ticket dia.jpg create mode 100644 B4A/Files/ticketdia20.jpg create mode 100644 B4A/Files/ticketdia20.png create mode 100644 B4A/Files/ticketsdia.bal create mode 100644 B4A/Files/tiendita.jpg create mode 100644 B4A/Files/verde.png create mode 100644 B4A/FirebaseMessaging.bas create mode 100644 B4A/ISKA.b4a.meta create mode 100644 B4A/IZCA.b4a create mode 100644 B4A/IZCA.b4a.meta create mode 100644 B4A/MAPA_CLIENTE.bas create mode 100644 B4A/MAPA_RUTAS.bas create mode 100644 B4A/MARQUEZ.b4a.meta create mode 100644 B4A/ManageExternalStorage.bas create mode 100644 B4A/NotificationService.bas create mode 100644 B4A/Pendientes.bas create mode 100644 B4A/Starter.bas create mode 100644 B4A/Subs.bas create mode 100644 B4A/Tracker.bas create mode 100644 B4A/appUpdater.bas create mode 100644 B4A/google-services.json create mode 100644 B4A/test.bas create mode 100644 B4A/updateAvailable.bas diff --git a/B4A/B4XMainPage.bas b/B4A/B4XMainPage.bas new file mode 100644 index 0000000..7132334 --- /dev/null +++ b/B4A/B4XMainPage.bas @@ -0,0 +1,1321 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=9.85 +@EndOfDesignText@ +#Region Shared Files +'#CustomBuildAction: folders ready, %WINDIR%\System32\Robocopy.exe,"..\..\Shared Files" "..\Files" + 'Ctrl + click to sync files: ide://run?file=%WINDIR%\System32\Robocopy.exe&args=..\..\Shared+Files&args=..\Files&FilesSync=True + 'Ctrl + click to export as zip: ide://run?File=%B4X%\Zipper.jar&Args=Project.zip + '########################################################################################################### + '###################### PULL ############################################################# + 'Ctrl + click ide://run?file=%WINDIR%\System32\cmd.exe&Args=/c&Args=git&Args=pull + '########################################################################################################### + '###################### PUSH ############################################################# + 'Ctrl + click ide://run?file=%WINDIR%\System32\WindowsPowerShell\v1.0\powershell.exe&Args=github&Args=..\..\ + '########################################################################################################### + '###################### PUSH TORTOISE GIT ######################################################### + 'Ctrl + click ide://run?file=%WINDIR%\System32\WindowsPowerShell\v1.0\powershell.exe&Args=TortoiseGitProc&Args=/command:commit&Args=/path:"./../../"&Args=/closeonend:2 + '########################################################################################################### +#End Region + +'Ctrl + click ide://run?file=%WINDIR%\System32\cmd.exe&Args=/c&Args=github&Args=..\..\ + +Sub Class_Globals + Dim c2 As Cursor + Dim sDate,sTime As String + Private Root As B4XView + Private xui As XUI + Dim s As C_Subs + Public login As B4XMainPage + Public principal As C_Principal + Public clientes As C_Clientes + Public cliente As C_Cliente + Public productos As C_Productos + Public updateAvailable As C_UpdateAvailable + Public mapas As C_Mapas + Public nuevoCliente As C_NuevoCliente + Public ticketsDia As C_TicketsDia + Public noVenta As C_NoVenta + Public nota As C_Nota + Public pedidos As C_Pedidos + Public promos As C_Promos + Public historico As C_Historico + Public Provider As FileProvider + + 'nuevocliente -> NuevoCliente + 'buscar -> ticketsDia + 'colonia -> clientes + 'nopago -> noVenta + 'tarjeta -> Nota + 'fila -> Cliente + 'colonia2 -> Productos + + 'xxxxxxxxxxxxxxxxxxxxxxxxx + + Dim reqManager As DBRequestManager + Dim v As String = Application.VersionName + Dim ruta As String + Dim tgl As Toggle + Dim lat_gps, lon_gps As String + Dim usuario As String + Dim batt As Int + Dim skmt As SQL + Dim montoActual, clientesTotal, clientesVenta, clientesVisitados,almacen, rutaPreventa As String + Dim DBReqServer, fechaRuta As String + Dim Logger As Boolean + Dim mac_impresora As String + Dim Phn As PhoneId + + Dim user As EditText + Dim pass As EditText + Public tabulador As C_tabulador + Dim c As Cursor + Dim existe As String + Dim paso1 As String + Private IMEN As Label + Dim IMEI As String = "" + Dim alterno As String + Private b_menu As Button + Dim PopupMenu As RSPopupMenu + Dim cmd As DBCommand + Private PDF As Button + Private bpv1 As BatteryProgressView + Dim batterystatus(11) As Int + Private bu As BatteryUtilities + Private b_apk As Button + Private i_engrane As ImageView + Private p_Main As Panel + Private p_appUpdate As Panel + Private b_regesar As Button + Private l_version As Label + Private ImageView1 As ImageView + Private Label2 As Label + Private Entrar As Button + Dim tipo_venta As String + Dim bTerminarClicked As Boolean = False + Private lv_server As ListView + Private l_server As Label + Private b_enviarbd As Button + Private b_importarBD As Button + Dim ime As IME + Dim MES1 As ManageExternalStorage + Dim device As Phone + Private et_server As EditText + Private b_guardar As Button + Private Panel11 As Panel + Private CLV_PICK_CIEGO As CustomListView + Private P_PICK_CIEGO As Panel + Dim ET_PICK_CIEGO As EditText + Private L_PICK_CIEGO As Label + Private P_CIEGO As Panel + Dim Panel4 As Panel + Dim q_buscar As String + Private et_buspc As EditText + Dim d As Cursor + Dim a As Cursor + Dim f As Cursor + Dim idenviar As String + Private et_codigo As EditText + Private b_cancelarcodigo As Button + Private b_aceptar As Button + Private p_validacion As Panel + Private b_recarga As Button + Dim recarga As String = "0" + Private p_add_monto As Panel + Private B_Can_Monto As Button + Private B_Aceptar_Monto As Button + Private ET_Add_Monto As EditText +End Sub + +Public Sub Initialize +' B4XPages.GetManager.LogEvents = True +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + B4XPages.GetManager.LogEvents = True + Root = Root1 + Root.LoadLayout("login") + s.Initialize(Me, "Subs") + B4XPages.SetTitle(Me, "IZCA") + login.Initialize + B4XPages.AddPage("Login", login) + principal.Initialize + B4XPages.AddPage("Principal", principal) + clientes.Initialize + B4XPages.AddPage("Clientes", clientes) + cliente.Initialize + B4XPages.AddPage("Cliente", cliente) + productos.Initialize + B4XPages.AddPage("Productos", productos) + updateAvailable.Initialize + B4XPages.AddPage("updateAvailable", updateAvailable) + mapas.Initialize + B4XPages.AddPage("Mapas", mapas) + nuevoCliente.Initialize + B4XPages.AddPage("NuevoCliente", nuevoCliente) + ticketsDia.Initialize + B4XPages.AddPage("TicketsDia", ticketsDia) + noVenta.Initialize + B4XPages.AddPage("NoVenta", noVenta) + nota.Initialize + B4XPages.AddPage("Nota", nota) + pedidos.Initialize + B4XPages.AddPage("Pedidos", pedidos) + promos.Initialize + B4XPages.AddPage("Promos", promos) + historico.Initialize + B4XPages.AddPage("Historico", historico) + tabulador.Initialize + B4XPages.AddPage("tabulador", tabulador) +' respaldoDiario.Initialize +' B4XPages.AddPageAndCreate("respaldoDiario", respaldoDiario) + ruta = Starter.ruta + Provider.Initialize +' Subs.borraArribaDe100Errores ' Para Websockets +' Subs.borraArribaDe600RenglonesBitacora ' Para Websockets + If File.Exists(ruta, "kmt.db") = False Then + File.Copy(File.DirAssets, "kmt.db", ruta, "kmt.db") + LogColor("copiamos kmt.db de "&File.DirAssets & " a " & ruta,Colors.Green) + End If + +' Log(ruta) + skmt.Initialize(ruta,"kmt.db", True) + Subs.guardaAppInfo(skmt) + + Starter.skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS TABULADOR_MONEDAS(VEINTE TEXT, DIEZ TEXT, CINCO TEXT, DOS TEXT, PESO TEXT, CENTAVO TEXT, TOTAL TEXT)") + Starter.skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS COORDENADAS(LAT TEXT, LONG TEXT, CLIENTE TEXT, CANTIDAD INT)") + Starter.skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS TABULADOR_BILLETES(MIL TEXT, QUINIENTOS TEXT, DOCIENTOS TEXT, CIEN TEXT, CINCUENTA TEXT, VEINTE TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS CLIENTES_NUEVOS(CN_ID TEXT, CN_FECHA TEXT, CN_USER TEXT, CN_LAT TEXT, CN_LON TEXT, CN_NOMBRE TEXT, CN_DIRECCION TEXT, CN_FOTO TEXT, CN_ALMACEN TEXT, CN_RUTA TEXT,CN_GIRO TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS RUTAA (RUTAA TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS POLIGONO (LAT TEXT, LONG TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS GEOCERCA (ACTIVA TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS COORDS_ALMACEN (LAT TEXT, LONG TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_CUOTAS (HC_META6 TEXT, HC_META5 TEXT, HC_META4 TEXT, HC_META3 TEXT, HC_META2 TEXT, HC_META1 TEXT, HC_RUTA TEXT, HC_CUOTA1 TEXT, HC_CUOTA2 TEXT, HC_CUOTA3 TEXT, HC_CUOTA4 TEXT, HC_CUOTA5 TEXT, HC_CUOTA6 TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_GPS (HGDATE TEXT, HGLAT TEXT, HGLON TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS CAT_GIRO(GIRO TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS PICKCIEGO_HECHO(HECHO TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS CAT_GUNAPROD2 (CAT_GP_INICIATIVA TEXT, CAT_GP_TIPOPROD TEXT, CAT_GP_DEV TEXT, CAT_GP_ALMACEN NUMERIC, CAT_GP_ID TEXT, CAT_GP_NOMBRE TEXT, CAT_GP_IMP1 TEXT, CAT_GP_IMP2 TEXT, CAT_GP_PRECIO TEXT, CAT_GP_CLASIF TEXT, CAT_GP_STS TEXT, CAT_GP_TIPO TEXT, CAT_GP_SUBTIPO TEXT, CAT_GP_IMG BLOB)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS CAT_GUNAPROD3 (CAT_GP_INICIATIVA TEXT, CAT_GP_TIPOPROD TEXT, CAT_GP_DEV TEXT, CAT_GP_ALMACEN NUMERIC, CAT_GP_ID TEXT, CAT_GP_NOMBRE TEXT, CAT_GP_IMP1 TEXT, CAT_GP_IMP2 TEXT, CAT_GP_PRECIO TEXT, CAT_GP_CLASIF TEXT, CAT_GP_STS TEXT, CAT_GP_TIPO TEXT, CAT_GP_SUBTIPO TEXT, CAT_GP_IMG BLOB)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS CAT_GUNAPROD4 (CAT_GP_INICIATIVA TEXT, CAT_GP_TIPOPROD TEXT, CAT_GP_DEV TEXT, CAT_GP_ALMACEN NUMERIC, CAT_GP_ID TEXT, CAT_GP_NOMBRE TEXT, CAT_GP_IMP1 TEXT, CAT_GP_IMP2 TEXT, CAT_GP_PRECIO TEXT, CAT_GP_CLASIF TEXT, CAT_GP_STS TEXT, CAT_GP_TIPO TEXT, CAT_GP_SUBTIPO TEXT, CAT_GP_IMG BLOB, CAT_DP_CONVERSION1 TEXT, CAT_DP_PRECIO4 TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_STAY_STORE (HSS_CODIGO TEXT, HSS_IN TEXT, HSS_OUT TEXT, HSS_TOT TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_STAY_OUT (HSO_INI TEXT, HSO_FIN TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS INVENT_X_ENVIAR (ALMACEN TEXT, PROID TEXT, CANTIDAD TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_RESUM_APK (HIST_RA_OBJMES TEXT, HIST_RA_VENTA TEXT, HIST_RA_TENDENCIA TEXT, HIST_RA_ALCANCE TEXT, HISR_RA_DRAOBJ TEXT, HIST_RA_DRAVTA TEXT, HIST_RA_DSOBJ TEXT, HIST_RA_DSVTA TEXT, HIST_RA_VPOOBJ TEXT, HIST_RA_VPOVTA TEXT, HIST_RA_COBCCC TEXT, HIST_RA_CTES TEXT, HIST_RA_ECO TEXT, HIST_RA_VISITPLAN TEXT, HIST_RA_VISIREAL TEXT, HIST_RA_COBVISIT TEXT, HIST_RA_FRECCOMPOBJ TEXT, HIST_RA_FRECCOMREAL TEXT, HIST_RA_VENTAMES1 TEXT, HIST_RA_VENTAMES2 TEXT, HIST_RA_VENTAMES3 TEXT, HIST_RA_VENTAMES4 TEXT, HIST_RA_RECHAZO TEXT, HIST_RA_RECHAZOPORCEN TEXT, HIST_RA_SEMANA1 TEXT, HIST_RA_SEMANA1_DIAS TEXT, HIST_RA_SEMANA1_DRA TEXT, HIST_RA_SEMANA2 TEXT, HIST_RA_SEMANA2_DIAS TEXT, HIST_RA_SEMANA2_DRA TEXT, HIST_RA_SEMANA3 TEXT, HIST_RA_SEMANA3_DIAS TEXT, HIST_RA_SEMANA4 TEXT, HIST_RA_SEMANA3_DRA TEXT, HIST_RA_SEMANA4_DIAS TEXT, HIST_RA_SEMANA4_DRA TEXT, HIST_RA_SEMANA5 TEXT, HIST_RA_SEMANA5_DIAS TEXT, HIST_RA_SEMANA5_DRA TEXT, HIST_RA_SEMANA1_LPT TEXT, HIST_RA_SEMANA2_LPT TEXT, HIST_RA_SEMANA3_LPT TEXT, HIST_RA_SEMANA4_LPT TEXT, HIST_RA_SEMANA5_LPT TEXT, HIST_RA_RUTA TEXT, HIST_RA_IDALMACEN TEXT)") +' skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_COMISIONES_MOVIL (HCM_IDALMACEN TEXT, HCM_RUTA TEXT, HCM_TOTAL_V TEXT, HCM_TOTAL_VIVE TEXT, HCM_TOTAL_GUNA TEXT, HCM_TOTAL_BEB TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_GEOCERCA (HGCLIENTE TEXT, HGDATE TEXT, HGLAT TEXT, HGLON TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_FACE (HFCLIENTE TEXT, HFALIAS TEXT, HFRUTA TEXT, HFALMACEN TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS RUTA_GPS(FECHA INTEGER, LAT TEXT, LON TEXT)") + skmt.ExecNonQuery("CREATE VIEW IF NOT EXISTS CATALOGO AS Select CAT_GP_CLASIF, CAT_GP_ID FROM CAT_GUNAPROD UNION Select CAT_GP_CLASIF, CAT_GP_ID FROM CAT_GUNAPROD GROUP BY CAT_GP_CLASIF, CAT_GP_ID") + skmt.ExecNonQuery("CREATE VIEW IF NOT EXISTS total_marcas AS Select cat_gp_clasif, sum(pe_costo_tot) As total from CATALOGO, pedido where pe_proid = cat_gp_id And pe_cliente <> 0 group by cat_gp_clasif") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_MARCAS_CUOTAS ( HMC_MARCA TEXT, HMC_TOTAL TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_CODIGO_BARRAS(CODIGOKMTS TEXT, CODIGOB TEXT, LAT TEXT, LON TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS ABONOS (a_usuario TEXT, a_ruta TEXT, a_cliente TEXT, a_abono TEXT, a_fecha TEXT, a_enviado TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS COORDENADAS_GPS (tienda_id TEXT, ruta TEXT, almacen TEXT, latitud TEXT, longitud TEXT, fecha TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_CUESTIONARIO (HC_CLIENTE TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS PAGARES (PA_ALMACEN TEXT, PA_RUTA TEXT, PA_FECHA TEXT, PA_CAPTURA TEXT, PA_MONTO TEXT, PA_USUARIO TEXT, PA_CLIENTE TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS NOVENTA (NV_CLIENTE TEXT, NV_FECHA TEXT, NV_USER TEXT, NV_MOTIVO TEXT, NV_COMM TEXT, NV_LAT TEXT, NV_LON TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS PICK_CIEGO (PC_ID_PROD TEXT, PC_NOM_PROD TEXT, PC_CANT TEXT, PC_ALMACEN TEXT, PC_RUTA TEXT, PC_FECHA TEXT)") + skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS ENV_MONTO_LIQ (EML_MONTO TEXT, EML_ALMACEN TEXT, EML_RUTA TEXT, EML_USUARIO TEXT, EML_FECHA_PED TEXT)") + Subs.agregaColumna("PEDIDO", "PE_ENVIO_OK", "INT") + Subs.agregaColumna("PEDIDO", "PE_CANTC", "TEXT") + Subs.agregaColumna("PEDIDO", "PE_BCAJAS", "TEXT") + Subs.agregaColumna("NOVENTA", "NV_ENVIO_OK", "INT") + Subs.agregaColumna("kmt_info", "CAT_CL_BCREDITO", "TEXT") + Subs.agregaColumna("kmt_info", "CAT_CL_BCOORDENADAS", "TEXT") + Subs.agregaColumna("kmt_info", "CAT_CL_LIMITECREDITO", "TEXT") + Subs.agregaColumna("CAT_GUNAPROD", "CAT_DP_CONVERSION1", "TEXT") + Subs.agregaColumna("CAT_GUNAPROD", "CAT_DP_PRECIO4", "TEXT") + Subs.agregaColumna("CAT_GUNAPROD3", "CAT_DP_CONVERSION1", "TEXT") + Subs.agregaColumna("CAT_GUNAPROD3", "CAT_DP_PRECIO4", "TEXT") + Subs.agregaColumna("CAT_GUNAPROD2", "CAT_DP_CONVERSION1", "TEXT") + Subs.agregaColumna("CAT_GUNAPROD2", "CAT_DP_PRECIO4", "TEXT") + Subs.agregaColumna("CLIENTES_NUEVOS", "CN_SOLICITA", "TEXT") + Subs.agregaColumna("ABONOSP", "DIA_VENCIMIENTO", "TEXT") + Subs.agregaColumna("CLIENTES_NUEVOS", "CN_COLONIA", "TEXT") + Subs.agregaColumna("CLIENTES_NUEVOS", "CN_TELEFONO", "TEXT") + Subs.agregaColumna("CLIENTES_NUEVOS", "CN_CP", "TEXT") + c=skmt.ExecQuery("select COUNT(*) AS CUANTOS from HIST_STAY_OUT ") +' +' skmt.ExecNonQuery2("INSERT INTO POLIGONO(LAT,LONG) VALUES(?,?) ", Array As Object(19.534596, -99.148633)) +' skmt.ExecNonQuery2("INSERT INTO POLIGONO(LAT,LONG) VALUES(?,?) ", Array As Object(19.532618, -99.147368)) +' skmt.ExecNonQuery2("INSERT INTO POLIGONO(LAT,LONG) VALUES(?,?) ", Array As Object(19.530434, -99.143527)) + skmt.ExecNonQuery2("INSERT INTO POLIGONO(LAT,LONG) VALUES(?,?) ", Array As Object(19.481683012377815, -99.14063876529508)) + skmt.ExecNonQuery2("INSERT INTO POLIGONO(LAT,LONG) VALUES(?,?) ", Array As Object(19.480080935096886, -99.15459780214643)) +' skmt.ExecNonQuery2("INSERT INTO POLIGONO(LAT,LONG) VALUES(?,?) ", Array As Object(19.52212245552407, -99.14288326892365)) +' skmt.ExecNonQuery2("INSERT INTO POLIGONO(LAT,LONG) VALUES(?,?) ", Array As Object(19.52414485532313, -99.1441707292143)) +' skmt.ExecNonQuery2("INSERT INTO POLIGONO(LAT,LONG) VALUES(?,?) ", Array As Object(19.525681862241495, -99.14623066567934)) +' skmt.ExecNonQuery2("INSERT INTO POLIGONO(LAT,LONG) VALUES(?,?) ", Array As Object(19.52794689841748, -99.14923473969085)) +' skmt.ExecNonQuery2("INSERT INTO POLIGONO(LAT,LONG) VALUES(?,?) ", Array As Object(19.52950409236695, -99.15127321848439)) + C.Position = 0 + If c.GetString("CUANTOS") = 0 Then + skmt.ExecNonQuery("INSERT INTO HIST_STAY_OUT(HSO_INI, HSO_FIN) VALUES (0,0)") + End If + C.Close +' server = "http://keymon.com.mx:1782" + 'server = "http://201.99.139.28:1783" +' reqManager.Initialize(Me, DBReqServer) + l_version.Text = "Version: " & Application.VersionName + l_version.Visible = True + l_version.BringToFront + 'este codigo es para lo del menu +' PopupMenu.Initialize("PopupMenu", b_menu) +' PopupMenu.AddMenuItem(0, 0, "View") +' PopupMenu.AddMenuItem(1, 1, "Edit") +' PopupMenu.AddMenuItem(2, 2, "Details") +' PopupMenu.AddMenuItem(3, 3, "Remove") + ' menu fin + montoActual = 0 + clientesTotal = 0 + clientesVenta = 0 + clientesVisitados = 0 + almacen = 0 + rutaPreventa = 0 + p_appUpdate.Visible = False + + LogColor("Revisa permisos Phone_State", Colors.Green) + Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_ACCESS_FINE_LOCATION) + Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) + If Result Then + Log("Con permisos de ubicacion") + Else + Log("SIN permisos de ubicacion") + End If + Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_ACCESS_COARSE_LOCATION) + Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) + If Result Then + Log("Con permisos de ubicacion") + Else + Log("SIN permisos de ubicacion") + End If + Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_READ_PHONE_STATE) + Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) + If Result Then +' IMEN.Text = Phn.GetDeviceId +' IMEI = Phn.GetDeviceId +' LogColor($"////////////////// IMEI: ${IMEI} ////////////////// "$, Colors.Blue) +' IMEI="" 'Pruebas + End If +' Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_ACCESS_FINE_LOCATION) +' Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) +' If Result Then +' StartService(Tracker) +'' Log("Start Tracker") +' Else +' ToastMessageShow("No permission", True) +' End If + MES1.Initialize(Me, "MES1") + ' get the device SDK version + Dim SdkVersion As Int = device.SdkVersion + ' Choose which permission to request in order to access external storgage + If SdkVersion < 30 Then +' Log("SDK = " & SdkVersion & " : Requesting WRITE_EXTERNAL_STORAGE permission") + Dim rp As RuntimePermissions + rp.CheckAndRequest(rp.PERMISSION_WRITE_EXTERNAL_STORAGE) ' Implicit read capability if granted + Wait For Activity_PermissionResult (Permission As String, Result As Boolean) +' Log($"PERMISSION_WRITE_EXTERNAL_STORAGE = ${Result}"$) + Else +' Log("SDK = " & SdkVersion & " : Requesting MANAGE_EXTERNAL_STORAGE permission") +' Log("On Entry MANAGE_EXTERNAL_STORAGE = " & MES1.HasPermission) + If Not(MES1.HasPermission) Then + MsgboxAsync("This app requires access to all files, please enable the option", "Manage All Files") + Wait For Msgbox_Result(Res As Int) +' Log("Getting permission") + MES1.GetPermission + Wait For MES_StorageAvailable + End If + End If + P_CIEGO.Height = Root.Height + P_CIEGO.Width = Root.Width + p_validacion.Height = Root.Height + p_validacion.Width = Root.Width + p_add_monto.Height = Root.Height + p_add_monto.Width = Root.Width +End Sub + +Sub B4XPage_Appear + Log(recarga) + If Starter.muestraProgreso = 1 Then + muestraProgreso("Descargando actualización") + Starter.muestraProgreso = 0 + End If + Dim ph As Phone 'Get Id Device + Dim DeviceID As String = ph.GetSettings("android_id").ToUpperCase + LogColor($"////////////////// DeviceID: ${DeviceID} ////////////////// "$, Colors.Blue) + DBReqServer = Starter.DBReqServer + reqManager.Initialize(Me, Starter.DBReqServer) + Log("|"&Starter.DBReqServer&"|") + tgl.Initialize() + If Not(Starter.gps.GPSEnabled) Then + ToastMessageShow("Es necesario tener el GPS encendido", True) + Sleep(500) + StartActivity(Starter.gps.LocationSettingsIntent) + End If + c=skmt.ExecQuery2("select count(*) as CUANTOS from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("FECHA")) + c.Position = 0 + If c.GetString("CUANTOS") = 0 Then + LogColor($"No hay fecha: ${c.GetString("CUANTOS")}"$, Colors.Red) + cmd.Initialize + cmd.Name = "select_fecha" + reqManager.ExecuteQuery(cmd , 0, "fecha") + Msgbox("AJUSTAR FECHA","AVISO") 'Ignore + B4XPage_Appear + Else +' LogColor($"Si hay fecha: ${c.GetString("CUANTOS")}"$, Colors.Green) + c=skmt.ExecQuery2("select CAT_VA_VALOR from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("FECHA")) + c.Position =0 + Dim sDate, sTime As String + DateTime.DateFormat = "yyyyMMdd" + sDate=DateTime.Date(DateTime.Now) +' If sDate > "20220701" Then +' Msgbox("INSTALAR NUEVO APK" ,"AVISO") 'Ignore +' B4XPage_Appear +' End If + If c.GetString("CAT_VA_VALOR") > sDate Then + Msgbox("AJUSTAR LA FECHA YA QUE ES MENOR AL SISTEMA" ,"AVISO") 'Ignore + B4XPage_Appear + End If + End If + bu.Initialize + batterystatus = bu.BatteryInformation + 'Obtenemos el usuario registrado +' CallSubDelayed(FirebaseMessaging, "SubscribeToTopics") + dameUsuario +' If Not(s.CheckNotificationAccess) Then +' Msgbox2Async($"Se necesita acceso a las notificaciones, haga clic en "Aceptar" y en la siguiente pantalla permita el acceso a la aplicación "${Application.LabelName}"."$, "Permisos necesarios", "Aceptar", "Cancelar", "", Null, True) +' Wait For Msgbox_Result (resultado As Int) +' If resultado = DialogResponse.POSITIVE Then +' Dim In As Intent +' In.Initialize("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS", "") +' StartActivity(In) +' End If +'' Private cd1 As ColorDrawable +'' cd1.Initialize(Colors.red, 10dip) +'' b_notifAccess.Background = cd1 +'' b_notifAccess.TextColor = Colors.White +'' b_notifAccess.Text = "Activar Permisos" +' Else +'' Private cd1 As ColorDrawable +'' cd1.Initialize(Colors.RGB(109, 221, 101), 10dip) +'' b_notifAccess.Background = cd1 +'' b_notifAccess.TextColor = Colors.White +'' b_notifAccess.Text = "Permisos Activos" +' End If +End Sub +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Sub Entrar_Click + Log("|" & Starter.DBReqServer) + Dim r As Reflector + Dim Api As Int + Dim PP As Phone + Api = r.GetStaticField("android.os.Build$VERSION", "SDK_INT") + If Api < 9 Then + 'Old device + If File.Exists(File.DirInternal, "__id") Then + IMEI = File.ReadString(File.DirInternal, "__id") + Log(1&"-"&IMEI) + Else + Dim id As Int + id = Rnd(0x10000000, 0x7FFFFFFF) + File.WriteString(File.DirInternal, "__id", id) + IMEI = id + Log(2&"-"&IMEI) + End If + Else + 'New device + IMEI = r.GetStaticField("android.os.Build", "SERIAL") +' Log(3&"-"&IMEI) + End If + If IMEI.ToLowerCase = "unknown" Then + IMEI = PP.GetSettings("android_id") + End If +' Log("IMEI = " & IMEI) + + If user.Text = "ALTERNO" Then + c=skmt.ExecQuery2("select CAT_CO_CONFIGURACION, CAT_CO_RESULTADO from CAT_CODIGOS where CAT_CO_PONDERACION =1 AND CAT_CO_ACCION = ?", Array As String("SERVER")) + c.Position =0 + DBReqServer = c.GetString("CAT_CO_CONFIGURACION") + alterno = c.GetString("CAT_CO_RESULTADO") + c.Close + If alterno = 1 Then + skmt.ExecNonQuery2("UPDATE CAT_CODIGOS SET CAT_CO_PONDERACION = 1 WHERE CAT_CO_ACCION = ? AND CAT_CO_RESULTADO = 2", Array As String ("SERVER")) + skmt.ExecNonQuery2("UPDATE CAT_CODIGOS SET CAT_CO_PONDERACION = 0 WHERE CAT_CO_ACCION = ? AND CAT_CO_RESULTADO = 1", Array As String ("SERVER")) + Else if alterno = 2 Then + skmt.ExecNonQuery2("UPDATE CAT_CODIGOS SET CAT_CO_PONDERACION = 1 WHERE CAT_CO_ACCION = ? AND CAT_CO_RESULTADO = 1", Array As String ("SERVER")) + skmt.ExecNonQuery2("UPDATE CAT_CODIGOS SET CAT_CO_PONDERACION = 0 WHERE CAT_CO_ACCION = ? AND CAT_CO_RESULTADO = 2", Array As String ("SERVER")) + End If + c=skmt.ExecQuery2("select CAT_CO_CONFIGURACION, CAT_CO_RESULTADO from CAT_CODIGOS where CAT_CO_PONDERACION =1 AND CAT_CO_ACCION = ?", Array As String("SERVER")) + c.Position =0 + DBReqServer = c.GetString("CAT_CO_CONFIGURACION") + user.Text = DBReqServer + c.Close +' reqManager.Initialize(Me, DBReqServer) + else if user.Text = "KMTS1" Then + skmt.ExecNonQuery("delete from usuarioa") + skmt.ExecNonQuery2("INSERT INTO USUARIOA VALUES (?,?)", Array As Object(user.Text, pass.Text)) + skmt.ExecNonQuery("delete from cat_almacen") + skmt.ExecNonQuery2("INSERT INTO CAT_ALMACEN(ID_ALMACEN) VALUES (?)", Array As Object (pass.Text)) + skmt.ExecNonQuery("delete from VERSION") + skmt.ExecNonQuery2("INSERT INTO VERSION(NOVERSION) VALUES (?)", Array As Object ("2.1")) + B4XPages.ShowPage("Clientes") + else if user.Text = "BERNA1" Then + skmt.ExecNonQuery("delete from usuarioa") + skmt.ExecNonQuery2("INSERT INTO USUARIOA VALUES (?,?)", Array As Object(user.Text, "1")) + skmt.ExecNonQuery("delete from cat_almacen") + skmt.ExecNonQuery2("INSERT INTO CAT_ALMACEN(ID_ALMACEN) VALUES (?)", Array As Object ("1")) + skmt.ExecNonQuery("delete from VERSION") + skmt.ExecNonQuery2("INSERT INTO VERSION(NOVERSION) VALUES (?)", Array As Object ("2.1")) + B4XPages.ShowPage("Clientes") + else if user.Text = "IMEI" Then + user.Text = IMEI + End If + + c=skmt.ExecQuery2("select count(*) as EXISTE1 from usuarioa where usuario = ?", Array As String(user.Text)) + c.Position=0 + existe = c.GetString("EXISTE1") + If existe = 0 Then + If IMEI = "" Then + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "select_usuario_IZCA " 'Antes select_usuario_guna_GV2_1 + cmd.Parameters = Array As Object(user.Text.Trim, pass.Text.Trim) + reqManager.ExecuteQuery(cmd , 0, "usuario_10") 'Antes usuario + Else + If IMEI = "" Then + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "select_usuario_IZCA" + cmd.Parameters = Array As Object(user.Text.Trim, pass.Text.Trim) + reqManager.ExecuteQuery(cmd , 0, "usuario_10") + Else + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "select_usuario_IZCA" 'Antes select_usuario_guna_GV2 + cmd.Parameters = Array As Object(user.Text.Trim, pass.Text.trim) + Log("Mandamos: "&user.Text&"|"& pass.Text) + reqManager.ExecuteQuery(cmd , 0, "usuario_10") 'Antes usuario + End If + End If + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "select_version_IZCA" + reqManager.ExecuteQuery(cmd , 0, "version") + Else + usuario = user.Text + B4XPages.ShowPage("Principal") + End If +End Sub + +Sub JobDone(Job As HttpJob) + Log("JOBDONE MAINPAGE") + If B4XPages.MainPage.reqManager.reqsList.IsInitialized Then 'Si tenemos lista de requests, la procesamos. + If B4XPages.MainPage.reqManager.reqsList.IndexOf(Job.tag) <> -1 Then + B4XPages.MainPage.reqManager.reqsList.RemoveAt(B4XPages.MainPage.reqManager.reqsList.IndexOf(Job.tag)) + LogColor($">>>>>> Quitamos ${Job.tag}"$, Colors.Blue) + End If + LogColor(">>>>>> " & B4XPages.MainPage.reqManager.reqsList.Size & " - " & B4XPages.MainPage.reqManager.reqsList, Colors.Blue) + End If + If Job.Success = False Then + LogColor("Error: " & Job.tag & " : " & Job.ErrorMessage, Colors.red) + Else + LogColor("JobDone: '" & reqManager.HandleJob(Job).tag & "' - Registros: " & reqManager.HandleJob(Job).Rows.Size, Colors.Green) 'Mod por CHV - 211027 + If Job.JobName = "DBRequest" Then + Dim result As DBResult = reqManager.HandleJob(Job) + If result.Tag = "version" Then 'query tag + For Each records() As Object In result.Rows + skmt.ExecNonQuery("delete from VERSION") + Dim CAT_VE_VERSION As String = records(result.Columns.Get("CAT_VE_VERSION")) + skmt.ExecNonQuery2("INSERT INTO VERSION(NOVERSION) VALUES (?)", Array As Object (CAT_VE_VERSION)) + Next + End If + + If result.Tag = "select_fechat" Then 'query tag + For Each records() As Object In result.Rows + For Each k As String In result.Columns.Keys + Log("select_fechat: " & k & ": " & records(result.Columns.Get(k))) + Next + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim result As DBResult = reqManager.HandleJob(Job) + If result.Tag = "agencia" Then 'query tag + For Each records() As Object In result.Rows + Dim ID_ALMACEN As String = records(result.Columns.Get("ID_ALMACEN")) + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim result As DBResult = reqManager.HandleJob(Job) + If result.Tag = "SelectMontoLiq" Then + For Each records() As Object In result.Rows + Dim CUENTA As String = records(result.Columns.Get("CUENTA")) + + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + f=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_RUTA from kmt_info") + f.Position = 0 + a=B4XPages.MainPage.skmt.ExecQuery("select ID_ALMACEN from CAT_ALMACEN") + a.Position = 0 + + Private c2 As Cursor + c2=skmt.ExecQuery("select USUARIO from usuarioa") + c2.Position=0 + If c2.RowCount > 0 Then c2.GetString("USUARIO") + + Log(CUENTA & "----------------------!!") + If CUENTA = "0" Then + + c = Starter.skmt.ExecQuery2("SELECT * FROM ENV_MONTO_LIQ WHERE EML_USUARIO = ? AND EML_ALMACEN = ? AND EML_RUTA = ?", Array As String (c2.GetString("USUARIO"), a.GetString("ID_ALMACEN"), f.GetString("CAT_CL_RUTA"))) + If c.RowCount > 0 Then +' For i=0 To c.RowCount -1 + c.Position=0 + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_Monto_Liq_IZCA" + cmd.Parameters = Array As Object(c.GetString("EML_MONTO"), c.GetString("EML_ALMACEN"), c.GetString("EML_RUTA"), c.GetString("EML_USUARIO"), "VENTA", c.GetString("EML_FECHA_PED")) + reqManager.ExecuteCommand(cmd , "ins_Mon_Liq") + MsgboxAsync("Monto Enviado", "Atención") +' Next + End If + c.Close + Else if CUENTA > "0" Then + + c = Starter.skmt.ExecQuery2("SELECT * FROM ENV_MONTO_LIQ WHERE EML_USUARIO = ? AND EML_ALMACEN = ? AND EML_RUTA = ?", Array As String (c2.GetString("USUARIO"), a.GetString("ID_ALMACEN"), f.GetString("CAT_CL_RUTA"))) + If c.RowCount > 0 Then +' For i=0 To c.RowCount -1 + c.Position = 0 + cmd.Initialize + cmd.Name = "update_MontoCuenta_IZCA" + cmd.Parameters = Array As Object(c.GetString("EML_MONTO"), c.GetString("EML_ALMACEN"), c.GetString("EML_RUTA"), c.GetString("EML_USUARIO")) + + Log(c.GetString("EML_MONTO")& " " & c.GetString("EML_ALMACEN")& " " & c.GetString("EML_RUTA")& " " & c.GetString("EML_USUARIO")) + reqManager.ExecuteCommand(cmd, "update_MC") + MsgboxAsync("Se sobre escribio el Monto", "Atención") +' Next + End If + c2.Close + c.Close + End If + f.Close + a.Close + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim result As DBResult = reqManager.HandleJob(Job) + If result.Tag.As(String).IndexOf("PICK_C_") > -1 Then 'query tag +' Subs.logJobDoneResultados(result) + Private id As String= result.Tag + id = id.SubString(id.IndexOf("_")+3) + For Each records() As Object In result.Rows + Dim CUENTA As String = records(result.Columns.Get("CUENTA")) + Log(CUENTA) + Log(id) + If CUENTA = 0 Then + c = Starter.skmt.ExecQuery2("SELECT * FROM PICK_CIEGO WHERE PC_ID_PROD = ?", Array As String (id)) + If c.RowCount > 0 Then +' For i=0 To c.RowCount -1 + c.Position=0 + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_PICKCIEGO_IZCA" + cmd.Parameters = Array As Object(c.GetString("PC_ID_PROD"), c.GetString("PC_NOM_PROD"), c.GetString("PC_CANT"), c.GetString("PC_ALMACEN"), c.GetString("PC_RUTA"), c.GetString("PC_FECHA"),"VENTA") + reqManager.ExecuteCommand(cmd , "ins_PC") +' Next + End If + c.Close + Else if CUENTA > 0 Then + c = Starter.skmt.ExecQuery2("SELECT * FROM PICK_CIEGO WHERE PC_ID_PROD= ?", Array As String (id)) + If c.RowCount > 0 Then +' For i=0 To c.RowCount -1 + c.Position = 0 + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "update_PICKCIEGO_IZCA" + Log("FECHA" & c.GetString("PC_FECHA")) + cmd.Parameters = Array As Object(c.GetString("PC_CANT"), c.GetString("PC_ID_PROD"), c.GetString("PC_ALMACEN"), c.GetString("PC_RUTA"), c.GetString("PC_FECHA"),"VENTA") + reqManager.ExecuteCommand(cmd, "update_PC") +' Next + End If + c.Close + End If + + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim result As DBResult = reqManager.HandleJob(Job) + If result.Tag = "fecha" Then 'query tag + For Each records() As Object In result.Rows + Dim FECHA_HOY As String = records(result.Columns.Get("FECHA")) + skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("FECHA")) + skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("FECHA",FECHA_HOY)) + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim result As DBResult = reqManager.HandleJob(Job) + If result.Tag = "usuario" Then 'query tag + For Each records() As Object In result.Rows + Dim name As String = records(result.Columns.Get("USUARIO")) + Dim ID_ALMACEN As String = records(result.Columns.Get("CAT_LO_AGENCIA")) + Dim IMEI_BASE As String = records(result.Columns.Get("CAT_LO_IDTELEFONO")) + Log(records(result.Columns.Get("CAT_LO_IDTELEFONO")) ) + Next + paso1 = 1 + ToastMessageShow(name, False) + Log("////////////////////////// "&name) + End If + End If + + If Job.JobName = "DBRequest" Then + Dim result As DBResult = reqManager.HandleJob(Job) + If result.Tag = "usuario_10" Then 'query tag + For Each records() As Object In result.Rows + Dim name As String = records(result.Columns.Get("USUARIO")) + Dim ID_ALMACEN As String = records(result.Columns.Get("CAT_LO_AGENCIA")) + Dim IMEI_BASE As String = records(result.Columns.Get("CAT_LO_IDTELEFONO")) + Next + Log("|"&name&"|") + paso1 = 1 + IMEI_BASE = "" + IMEI = "" + End If + End If + + If Job.JobName = "DBRequest" Then + Dim result As DBResult = reqManager.HandleJob(Job) + If result.Tag = "contrasena" Then 'query tag + For Each records() As Object In result.Rows + Dim CAT_PA_PASS As String = records(result.Columns.Get("CAT_PA_PASS")) + If CAT_PA_PASS = et_codigo.Text Then + Log(CAT_PA_PASS) + p_validacion.Visible = False + et_codigo.Text = "" + If recarga = "0" Then + Subs.panelVisible(P_CIEGO,0,0) + Else If recarga = "1" Then + Starter.skmt.ExecNonQuery("delete from CUENTAA") + Starter.skmt.ExecNonQuery2("INSERT INTO CUENTAA VALUES (?)", Array As Object("1")) + B4XPages.MainPage.tipo_venta = "RECARGA" + B4XPages.ShowPage("Productos") + + End If + Else + MsgboxAsync("Contraseña incorrecta","Atención") + End If + Next + End If + End If + + If result.Tag = "ruta" Then 'query tag + Log("JOBDONE PRINCIPAL MAINPAGE") + For Each records() As Object In result.Rows + Dim VALIDO As String = records(result.Columns.Get("VALIDO")) + If VALIDO = "OK" Then + Log(VALIDO) + End If + Next + End If + + Job.Release + End If + Log($"Paso1 = ${paso1} - Name: ${name} - IMEI: ${IMEI} - IMEI_BASE: ${IMEI_BASE}"$) + If paso1 = 1 Then + If IMEI = "" Then + If user.Text = "KMTS1" Then name = "OKActivo" + If name = "OKActivo" Then + skmt.ExecNonQuery("delete from usuarioa") + skmt.ExecNonQuery2("INSERT INTO USUARIOA VALUES (?,?)", Array As Object(user.Text.Trim, pass.Text.Trim)) + skmt.ExecNonQuery("delete from cat_almacen") + skmt.ExecNonQuery2("INSERT INTO CAT_ALMACEN(ID_ALMACEN) VALUES (?)", Array As Object (ID_ALMACEN)) + usuario = user.Text + B4XPages.ShowPage("Principal") + Else If name = "OKExpirado" Then + Msgbox("Usuario Expirado llamar al administrador","") 'Ignore + Else If name = "OKCancelado" Then + Msgbox("Usuario Cancelado llamar al administrador","") 'Ignore + Else + Msgbox("Usuario o password No validos","") 'Ignore + End If + paso1 = 0 + Else + If name = "OKActivo" & IMEI And IMEI = IMEI_BASE Then + If name = "OKActivo" & IMEI Then + skmt.ExecNonQuery("delete from usuarioa") + skmt.ExecNonQuery2("INSERT INTO USUARIOA VALUES (?,?)", Array As Object(user.Text.Trim, pass.Text.Trim)) + skmt.ExecNonQuery("delete from cat_almacen") + skmt.ExecNonQuery2("INSERT INTO CAT_ALMACEN(ID_ALMACEN) VALUES (?)", Array As Object (ID_ALMACEN)) + usuario = user.Text + B4XPages.ShowPage("Clientes") + Else If name = "OKExpirado"& IMEI Then + Msgbox("Usuario Expirado llamar al administrador","") 'ignore + Else If name = "OKCancelado"& IMEI Then + Msgbox("Usuario Cancelado llamar al administrador","") 'ignore + Else + Msgbox("Usuario o password No validos","") 'ignore + End If + paso1 = 0 + Else IF name = "OKActivo" Then + Msgbox("Telefono no VALIDO!","") 'ignore + Else + Msgbox("Usuario o password No validos","") 'ignore + End If + End If + End If +End Sub + +Private Sub B4XPage_CloseRequest As ResumableSub + Log("closreq") + Sleep(0) + + If p_add_monto.IsInitialized And p_add_monto.Visible Then + p_add_monto.Visible = False + Return False + Else If p_validacion.IsInitialized And p_validacion.Visible Then + p_validacion.Visible = False + Return False + Else If P_CIEGO.IsInitialized And P_CIEGO.Visible Then + MsgboxAsync("Debes de terminar el proceso para regresar a la pantalla principal","Atención") + Return False + Else If p_appUpdate.IsInitialized And p_appUpdate.Visible Then + p_appUpdate.Visible = False + Return False + End If + If Not(p_appUpdate.Visible) Then + Log("ExitApplication") + ExitApplication + End If + Return True +End Sub + +Sub GPS_LocationChanged (Location1 As Location) + If user.text = "GPS" Then + user.Text=Location1.Latitude + pass.text=Location1.Longitude + End If +End Sub + +Sub PopupMenu_Dismiss + ToastMessageShow("PopupMenu dismissed", False) +End Sub + +Sub PopupMenu_MenuItemClick (ItemId As Int) As Boolean + ToastMessageShow("Item " & ItemId & " clicked.", False) + Return False +End Sub + +Sub b_menu_Click + PopupMenu.Show +End Sub + +Sub PDF_Click + +End Sub + +'Private Sub GetAdvertisingId As ResumableSub +' Dim jo As JavaObject = Me +' jo.RunMethod("GetAdvertisingId", Null) +' Wait For AdvertisingId_Ready (Success As Boolean, Id As String) +' Return Id +'End Sub + +Sub dameUsuario + c=skmt.ExecQuery2("select count(*) as EXISTE1 from usuarioa where usuario = ?", Array As String(user.Text)) + c.Position=0 + existe = c.GetString("EXISTE1") + c.Close + If existe > 0 Then + c=skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + Else + usuario = "SINUSUARIO" + End If +End Sub + +'#if Java +'import java.util.concurrent.Callable; +'import com.google.android.gms.ads.identifier.AdvertisingIdClient; +'import com.google.android.gms.ads.identifier.AdvertisingIdClient.Info; +' +'public static void GetAdvertisingId() { +' BA.runAsync(processBA, mostCurrent, "advertisingid_ready", new Object[] {false, ""} +' , new Callable() { +' @Override +' public Object[] call() throws Exception { +' String id = AdvertisingIdClient.getAdvertisingIdInfo(mostCurrent).getId(); +' return new Object[] {true, id}; +' } +' }); } +'#End If + +Sub copiaDB + Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_WRITE_EXTERNAL_STORAGE) + Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) + Dim theDir As String = "" + If Result Then +' Private x As String +' If File.ExternalWritable Then +' x = File.DirInternal +' Else +' x = File.DirInternal +' End If + Dim theDir As String + Try + File.MakeDir(File.DirInternal,"kmts") + theDir = "/kmts" + Catch + theDir = "" + End Try + Try + File.Copy(File.DirInternal,"kmt.db",File.DirInternal&theDir, "IZCA_kmt.db") + ToastMessageShow("Listo, copiado a " & File.DirInternal&theDir & "/IZCA_kmt.db", False) + Catch + ToastMessageShow("No se pudo hacer la copia: "&LastException, True) + End Try + Else + ToastMessageShow("Sin permisos", False) + End If +End Sub + +Sub b_apk_Click + StartService(appUpdater) +End Sub + +'appUpdater - Mostramos el anuncio de que se esta descargando el nuevo apk +Sub muestraProgreso(mensaje As String) + ProgressDialogShow(mensaje) +End Sub + +'appUpdater - Ocultamos el anuncio de que se esta descargando el nuevo apk +Sub ocultaProgreso + ProgressDialogHide +End Sub + +Sub i_engrane_Click + lv_server.Clear + ime.HideKeyboard + lv_server.AddSingleLine("http://keymon.net:1781") +' lv_server.AddSingleLine("http://keymon.lat:1781") + If user.Text = "KMTS1" Then lv_server.AddSingleLine("http://10.0.0.205:1781") +' lv_server.AddSingleLine("http://40.123.36.38:1782") + Log($"|${Starter.DBReqServer}|"$) +' l_server.Text = Starter.DBReqServer + et_server.Text = Starter.DBReqServer + Subs.panelVisible(p_appUpdate,0,0) + If user.Text.trim = "KMTS1" Then b_importarBD.Visible = True Else b_importarBD.Visible = False +End Sub + +Sub b_regesar_Click + Subs.panelVisible(p_Main,0,0) +End Sub + +Sub i_engrane_LongClick + copiaDB +End Sub + +Sub Entrar_LongClick +' dim a as int = "a" +End Sub + +Private Sub lv_server_ItemClick (Position As Int, Value As Object) + Starter.DBReqServer = Value +' l_server.Text = Value + et_server.Text = Value + Starter.reinicializaReqManager(Value) +' Starter.reqManager.Initialize(Me, Value) + ToastMessageShow("Servidor modificado", False) +End Sub + +Private Sub b_enviarbd_Click + +End Sub + +Private Sub b_importarBD_Click + Private FH As FileHandler + FH.Initialize + Wait For (FH.Load) Complete (Result As LoadResult) 'Abre un fileManager para seleccionar la base de datos a importar. + File.Copy(Result.Dir, Result.FileName, File.DirInternal, "kmt.db") 'Copia la base de datos seleccionada al directorio interno. + B4XPages.MainPage.skmt.Initialize(Starter.ruta,"kmt.db", True) 'Reiniciliza la base de datos con la recien importada. + ToastMessageShow("¡BD importada!", False) +End Sub + +Private Sub b_guardar_Click + Starter.reinicializaReqManager(et_server.Text.Trim) + p_appUpdate.Visible = False +End Sub + +Private Sub b_arqueocieego_Click + c = skmt.ExecQuery("SELECT * FROM CAT_GUNAPROD3") + If c.RowCount > 0 Then + Subs.panelVisible(p_validacion,0,0) + recarga = "0" + Else + MsgboxAsync("No hay ruta cargada, favor de cargar día","Atención") + End If +End Sub + +Private Sub et_buspc_TextChanged (Old As String, New As String) + If New = "" Then + CLV_PICK_CIEGO.Clear + Else If New.Length >= 3 Then + CLV_PICK_CIEGO.Clear + + q_buscar = "%" & et_buspc.Text & "%" + Log(q_buscar) + c=B4XPages.MainPage.skmt.ExecQuery2($"select CAT_GP_NOMBRE, CAT_GP_ID , ifnull(PC_CANT,0) AS PC_CANT FROM CAT_GUNAPROD3 INNER JOIN PICK_CIEGO ON PC_ID_PROD = CAT_GP_ID AND PC_NOM_PROD = CAT_GP_NOMBRE WHERE (CAT_GP_NOMBRE LIKE ? OR CAT_GP_ID LIKE ? ) and CAT_GP_CLASIF <> 'PROMOS'"$, Array As String(q_buscar,q_buscar)) + If c.RowCount > 0 Then + + + For i = 0 To c.RowCount - 1 + c.Position = i + CLV_PICK_CIEGO.Add(CreateListItem(c.GetString("CAT_GP_ID"), c.GetString("CAT_GP_NOMBRE"), c.GetString("PC_CANT")),i) +' Log(c.GetString("CAT_GP_ID") & ", " & c.GetString("CAT_GP_NOMBRE") & " ," & c.GetString("PC_CANT")) + Next + c.Close + + d=B4XPages.MainPage.skmt.ExecQuery2($"select CAT_GP_NOMBRE, CAT_GP_ID FROM CAT_GUNAPROD3 WHERE (CAT_GP_NOMBRE LIKE ? OR CAT_GP_ID LIKE ? ) and CAT_GP_CLASIF <> 'PROMOS'AND CAT_GP_ID NOT IN (SELECT PC_ID_PROD FROM PICK_CIEGO)"$, Array As String(q_buscar,q_buscar)) + + For i = 0 To d.RowCount - 1 + d.Position = i + CLV_PICK_CIEGO.Add(CreateListItem2(d.GetString("CAT_GP_ID"), d.GetString("CAT_GP_NOMBRE")),i) +' Log(d.GetString("CAT_GP_ID") & ", " & d.GetString("CAT_GP_NOMBRE")) + Next + d.Close + + Else If c.RowCount = 0 Then + d=B4XPages.MainPage.skmt.ExecQuery2($"select CAT_GP_NOMBRE, CAT_GP_ID FROM CAT_GUNAPROD3 WHERE (CAT_GP_NOMBRE LIKE ? OR CAT_GP_ID LIKE ? ) and CAT_GP_CLASIF <> 'PROMOS'"$, Array As String(q_buscar,q_buscar)) + + For i = 0 To d.RowCount - 1 + d.Position = i + CLV_PICK_CIEGO.Add(CreateListItem2(d.GetString("CAT_GP_ID"), d.GetString("CAT_GP_NOMBRE")),i) +' Log(d.GetString("CAT_GP_ID") & ", " & d.GetString("CAT_GP_NOMBRE")) + Next + d.Close + End If + End If +End Sub + +Sub CreateListItem(Id_prod As String, Prod As String,cant As String) As Panel + Dim pa As B4XView = xui.CreatePanel("") + pa.SetLayoutAnimated(0, 0, 0, 1, 10) + pa.LoadLayout("PANEL_PICK_CIEGO") + pa.Height = 55dip + pa.Width = 298dip + 'pa.Width = clv_orden.GetBase.Width + L_PICK_CIEGO.Text = Id_prod & CRLF & Prod + L_PICK_CIEGO.TextSize = 12 + L_PICK_CIEGO.Gravity = Bit.Or(Gravity.CENTER_VERTICAL, Gravity.CENTER_HORIZONTAL) + ET_PICK_CIEGO.Text = cant + 'cxc.Id_prod = mostrar3 + 'Log(pa.Width) + Return pa +End Sub + +Sub CreateListItem2(Id_prod As String, Prod As String) As Panel + Dim pa As B4XView = xui.CreatePanel("") + pa.SetLayoutAnimated(0, 0, 0, 1, 10) + pa.LoadLayout("PANEL_PICK_CIEGO") + pa.Height = 55dip + pa.Width = 298dip + 'pa.Width = clv_orden.GetBase.Width + L_PICK_CIEGO.Text = Id_prod & CRLF & Prod + L_PICK_CIEGO.TextSize = 12 + L_PICK_CIEGO.Gravity = Bit.Or(Gravity.CENTER_VERTICAL, Gravity.CENTER_HORIZONTAL) + 'cxc.Id_prod = mostrar3 + 'Log(pa.Width) + Return pa +End Sub + +Sub ET_PICK_CIEGO_TextChanged (Old As String, New As String) + Dim et As EditText = Sender + If New.Length > 4 Then + et.Text = Old + End If +End Sub + +Private Sub B_PC_ENV_Click + + Dim sDate, sTime As String + DateTime.DateFormat = "dd/MM/yyyy" + DateTime.TimeFormat = "HH:mm:ss" + sDate = DateTime.Date(DateTime.Now) + sTime = DateTime.Time(DateTime.Now) + + + For i = 0 To CLV_PICK_CIEGO.Size - 1 + ' Retrieve the panel and child views for the current item + Dim itemPanel As B4XView = CLV_PICK_CIEGO.GetPanel(i) + Dim innerPanel As B4XView = itemPanel.GetView(0) + Dim editText As B4XView = innerPanel.GetView(1) + Dim inputText As String = editText.As(EditText).Text + + ' Check if the input text matches the regex pattern for zeros or if it's empty + If Regex.IsMatch("^[0]+$", inputText) Or inputText = "" Then + inputText = "0" + End If + + ' Retrieve and process the ID label + Dim idLabel As B4XView = innerPanel.GetView(0) + Dim idText As String = idLabel.As(Label).Text + Dim idParts() As String = Regex.Split(CRLF, idText) +' Log(idParts(1)) + f=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_RUTA from kmt_info") + f.Position=0 + + a=B4XPages.MainPage.skmt.ExecQuery("select ID_ALMACEN from CAT_ALMACEN") + If a.RowCount>0 Then + a.Position=0 + End If +' Log(a.GetString("ID_ALMACEN")) +' Log(f.GetString("CAT_CL_RUTA")) + + If inputText <> "" Then + c = Starter.skmt.ExecQuery2("SELECT * FROM PICK_CIEGO where PC_ID_PROD = ?", Array As String (idParts(0))) + If c.RowCount = 0 Then + ' Insert data into the database + skmt.ExecNonQuery2("INSERT INTO PICK_CIEGO(PC_ID_PROD, PC_NOM_PROD, PC_CANT, PC_ALMACEN, PC_RUTA, PC_FECHA) VALUES(?,?,?,?,?,?)", Array As String(idParts(0), idParts(1), inputText, a.GetString("ID_ALMACEN"), f.GetString("CAT_CL_RUTA"), sDate&" "&sTime)) + Else + B4XPages.MainPage.skmt.ExecNonQuery2("Update PICK_CIEGO set PC_CANT = ? WHERE PC_ID_PROD = ?" , Array As String(inputText ,idParts(0))) + End If + End If + f.Close + a.Close +' Log("Processed item " & i) + Next + et_buspc.Text = "" + CLV_PICK_CIEGO.Clear + +End Sub + +Private Sub b_terpc_Click + Msgbox2Async("Una vez enviada la información no podras hacer modificaciones","Atención","SI","", "",LoadBitmap(File.DirAssets,"alert2.png"), False) + Wait For Msgbox_Result (resultado As Int) + If resultado = DialogResponse.POSITIVE Then + Msgbox2Async("Estas seguro de enviar la información?","Atención","SI","", "NO",LoadBitmap(File.DirAssets,"alert2.png"), False) + Wait For Msgbox_Result (resultado As Int) + If resultado = DialogResponse.POSITIVE Then + + Dim sDate, sTime As String + DateTime.DateFormat = "dd/MM/yyyy" + DateTime.TimeFormat = "HH:mm:ss" + sDate = DateTime.Date(DateTime.Now) + sTime = DateTime.Time(DateTime.Now) + + For i = 0 To CLV_PICK_CIEGO.Size - 1 + ' Retrieve the panel and child views for the current item + Dim itemPanel As B4XView = CLV_PICK_CIEGO.GetPanel(i) + Dim innerPanel As B4XView = itemPanel.GetView(0) + Dim editText As B4XView = innerPanel.GetView(1) + Dim inputText As String = editText.As(EditText).Text + + ' Check if the input text matches the regex pattern for zeros or if it's empty + If Regex.IsMatch("^[0]+$", inputText) Or inputText = "" Then + inputText = "0" + End If + + ' Retrieve and process the ID label + Dim idLabel As B4XView = innerPanel.GetView(0) + Dim idText As String = idLabel.As(Label).Text + Dim idParts() As String = Regex.Split(CRLF, idText) +' Log(idParts(1)) + f=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_RUTA from kmt_info") + f.Position=0 + + a=B4XPages.MainPage.skmt.ExecQuery("select ID_ALMACEN from CAT_ALMACEN") + If a.RowCount>0 Then + a.Position=0 + End If + Log(a.GetString("ID_ALMACEN")) + Log(f.GetString("CAT_CL_RUTA")) + If inputText <> "" Then + c = Starter.skmt.ExecQuery2("SELECT * FROM PICK_CIEGO where PC_ID_PROD = ?", Array As String (idParts(0))) + If c.RowCount = 0 Then + ' Insert data into the database + skmt.ExecNonQuery2("INSERT INTO PICK_CIEGO(PC_ID_PROD, PC_NOM_PROD, PC_CANT, PC_ALMACEN, PC_RUTA, PC_FECHA) VALUES(?,?,?,?,?,?)", Array As String(idParts(0), idParts(1), inputText, a.GetString("ID_ALMACEN"), f.GetString("CAT_CL_RUTA"), sDate&" "&sTime)) + Else + B4XPages.MainPage.skmt.ExecNonQuery2("Update PICK_CIEGO set PC_CANT = ? WHERE PC_ID_PROD = ?" , Array As String(inputText ,idParts(0))) + End If + End If + f.Close + a.Close + Log("Processed item " & i) + Next + Log("Finished processing all items") + P_CIEGO.Visible = False + et_buspc.Text = "" + CLV_PICK_CIEGO.Clear + c = Starter.skmt.ExecQuery("SELECT PC_ID_PROD, PC_ALMACEN, PC_RUTA, PC_FECHA FROM PICK_CIEGO") + If c.RowCount > 0 Then + For i = 0 To c.RowCount - 1 + c.Position = i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "select_HIST_PICKCIEGO_IZCA" ' + cmd.Parameters = Array As Object(c.GetString("PC_ID_PROD"), c.GetString("PC_ALMACEN"), c.GetString("PC_RUTA"), c.GetString("PC_FECHA"), "VENTA") + reqManager.ExecuteQuery(cmd , 0, $"PICK_C_${c.GetString("PC_ID_PROD")}"$) + Next + End If + c.close + Else + + End If + End If +End Sub + +Private Sub b_aceptar_Click + f=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_RUTA from kmt_info") + f.Position=0 + + a=B4XPages.MainPage.skmt.ExecQuery("select ID_ALMACEN from CAT_ALMACEN") + If a.RowCount>0 Then + a.Position=0 + End If + Log(a.GetString("ID_ALMACEN")) + Log(f.GetString("CAT_CL_RUTA")) + + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "select_CAT_PASS_ARQUEO_IZCA" + cmd.Parameters = Array As Object(f.GetString("CAT_CL_RUTA"),a.GetString("ID_ALMACEN"),"PREVENTA") + reqManager.ExecuteQuery(cmd , 0, "contrasena") + f.Close + a.Close +End Sub + +Private Sub B_Aceptar_Monto_Click +' Try + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + + f=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_RUTA from kmt_info") + f.Position=0 + + a=B4XPages.MainPage.skmt.ExecQuery("select ID_ALMACEN from CAT_ALMACEN") + If a.RowCount>0 Then + a.Position=0 + End If + + Private cI As Cursor + Private u As String = "SinUsuario" + cI=Starter.skmt.ExecQuery("select USUARIO from usuarioa") + cI.Position=0 + If cI.RowCount > 0 Then u = cI.GetString("USUARIO") + Private g As Cursor = B4XPages.MainPage.skmt.ExecQuery("select * from ENV_MONTO_LIQ") + If g.RowCount = 0 Then + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO ENV_MONTO_LIQ VALUES (?,?,?,?,?)", Array As Object(ET_Add_Monto.Text, a.GetString("ID_ALMACEN"), f.GetString("CAT_CL_RUTA"), u, sDate & " " & sTime)) + f.Close + a.Close + + c = Starter.skmt.ExecQuery("SELECT * FROM ENV_MONTO_LIQ") + If c.RowCount > 0 Then + c.Position = 0 + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "select_MontoCuenta_IZCA" +' LogColor("------------" & c.GetString("EML_USUARIO" & c.GetString("EML_ALMACEN") & c.GetString("EML_RUTA")),Colors.Red) + cmd.Parameters = Array As Object(c.GetString("EML_USUARIO"), c.GetString("EML_ALMACEN"), c.GetString("EML_RUTA")) + reqManager.ExecuteQuery(cmd , 0, "SelectMontoLiq") +' cmd.Name = "insert_Monto_Liq_IZCA" +' cmd.Parameters = Array As Object(c.GetString("EML_MONTO"), c.GetString("EML_ALMACEN"), c.GetString("EML_RUTA"), c.GetString("EML_USUARIO"), "VENTA", c.GetString("EML_FECHA_PED")) + End If + c.Close + Else + Starter.skmt.ExecNonQuery2("UPDATE ENV_MONTO_LIQ SET EML_MONTO = ? WHERE EML_ALMACEN = ? AND EML_RUTA = ? AND EML_USUARIO = ?", Array As String (ET_Add_Monto.Text ,a.GetString("ID_ALMACEN"), f.GetString("CAT_CL_RUTA"), cI.GetString("USUARIO"))) + f.Close + a.Close + + c = Starter.skmt.ExecQuery("SELECT * FROM ENV_MONTO_LIQ") + If c.RowCount > 0 Then + c.Position = 0 + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "select_MontoCuenta_IZCA" +' LogColor("------------" & c.GetString("EML_USUARIO" & c.GetString("EML_ALMACEN") & c.GetString("EML_RUTA")),Colors.Red) + cmd.Parameters = Array As Object(c.GetString("EML_USUARIO"), c.GetString("EML_ALMACEN"), c.GetString("EML_RUTA")) + reqManager.ExecuteQuery(cmd , 0, "SelectMontoLiq") +' cmd.Name = "insert_Monto_Liq_IZCA" +' cmd.Parameters = Array As Object(c.GetString("EML_MONTO"), c.GetString("EML_ALMACEN"), c.GetString("EML_RUTA"), c.GetString("EML_USUARIO"), "VENTA", c.GetString("EML_FECHA_PED")) + End If + c.Close + End If + +' MsgboxAsync("Monto Enviado, Si Vuelve a Mandar se sobre escribirá dicho Monto", "Atención") + p_add_monto.Visible = False +' Catch +' Log(LastException.Message) +' MsgboxAsync("Error al enviar el monto", "Error") +' End Try +End Sub + +Private Sub b_cancelarcodigo_Click + p_validacion.Visible = False +End Sub + +Private Sub B_Can_Monto_Click + p_add_monto.Visible = False +End Sub + +Private Sub b_envioBD_Click + 'copiaDB + 'Sleep(1000) + Dim FileName As String = "kmt.db" + 'copy the shared file to the shared folder + Log("xxxxxx:"&Provider.SharedFolder) + Sleep(1000) + File.Copy(File.DirInternal, FileName, Provider.SharedFolder, FileName) + Dim email As Email + email.To.Add("soporte@keymonsoft.com") + email.Subject = "Envio Base de datos IZCA" + email.Attachments.Add(Provider.GetFileUri(FileName)) +'email.Attachments.Add(Provider.GetFileUri(FileName)) 'second attachment + Dim in As Intent = email.GetIntent + in.Flags = 1 'FLAG_GRANT_READ_URI_PERMISSION + StartActivity(in) +End Sub + +Private Sub b_recarga_Click + c = skmt.ExecQuery("SELECT * FROM CAT_GUNAPROD") + If c.RowCount > 0 Then + Subs.panelVisible(p_validacion,0,0) + recarga = "1" + Else + MsgboxAsync("No hay ruta cargada, favor de cargar día","Atención") + End If + c.Close +End Sub + +Private Sub b_CargarMonto_Click + c = skmt.ExecQuery("SELECT * FROM kmt_info") + c.Position = 0 + If c.RowCount < 0 Or c.RowCount = 0 Then + MsgboxAsync("No hay ruta cargada, favor de cargar día","Atención") + Else + Subs.panelVisible(p_add_monto,0,0) + End If + c.Close +End Sub + +Private Sub P_CIEGO_Click + +End Sub + +Private Sub p_validacion_Click + +End Sub + +Private Sub p_add_monto_Click + +End Sub diff --git a/B4A/BatteryUtilities.bas b/B4A/BatteryUtilities.bas new file mode 100644 index 0000000..53902d5 --- /dev/null +++ b/B4A/BatteryUtilities.bas @@ -0,0 +1,126 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=9.5 +@EndOfDesignText@ +'Class module +Sub Class_Globals + Private nativeMe As JavaObject + +End Sub +'Initializes the object. +Public Sub Initialize + nativeMe = Me +End Sub +'Return information about the battery status. It returns the following 11 values in an integer Array: +'EXTRA_LEVEL = current battery level, from 0 To EXTRA_SCALE. +'EXTRA_SCALE = the maximum battery level possible. +'EXTRA_HEALTH = the current health constant. +'EXTRA_ICON_SMALL = the resource ID of a small status bar icon indicating the current battery state. +'EXTRA_PLUGGED = whether the device is plugged into a Power source; 0 means it is on battery, other constants are different types of Power sources. +'EXTRA_STATUS = the current status constant. +'EXTRA_TEMPERATURE = the current battery temperature. +'EXTRA_VOLTAGE = the current battery voltage level. +'A value indicating if the battery is being charged or fully charged (If neither it returns 0 Else it returns 1) +'A value indicating if it is charging via USB (0 = Not USB, 2 = USB) +'A value indicating if it is charging via AC (0 = Not AC, 1 = AC) +Public Sub getBatteryInformation () As Int() + + Dim batteryInfo(11) As Int + batteryInfo = nativeMe.RunMethod("getBatteryInformation",Null) + Return batteryInfo + +End Sub + +Public Sub getBatteryTechnolgy() As String + + Dim batterytech As String + batterytech = nativeMe.RunMethod("getBatteryTechnology",Null) + Return batterytech + +End Sub + + + +#If Java + +import android.os.BatteryManager; +import android.os.Bundle; +import android.app.Activity; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; + + public int[] getBatteryInformation() { + + int[] mybat = new int[11]; + + Intent batteryIntent = ba.context.getApplicationContext().registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); + + int level = batteryIntent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1); + mybat[0] = level; + int scale = batteryIntent.getIntExtra(BatteryManager.EXTRA_SCALE, -1); + mybat[1] = scale; + int health = batteryIntent.getIntExtra(BatteryManager.EXTRA_HEALTH,-1); + mybat[2] = health; + int icon_small = batteryIntent.getIntExtra(BatteryManager.EXTRA_ICON_SMALL,-1); + mybat[3] = icon_small; + int plugged = batteryIntent.getIntExtra(BatteryManager.EXTRA_PLUGGED,-1); + mybat[4] = plugged; +// boolean present = batteryIntent.getExtras().getBoolean(BatteryManager.EXTRA_PRESENT); + int status = batteryIntent.getIntExtra(BatteryManager.EXTRA_STATUS,-1); + mybat[5] = status; +// String technology = batteryIntent.getExtras().getString(BatteryManager.EXTRA_TECHNOLOGY); +// BA.Log("Technology = " + technology); + int temperature = batteryIntent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE,-1); + mybat[6] = temperature; + int voltage = batteryIntent.getIntExtra(BatteryManager.EXTRA_VOLTAGE,-1); + mybat[7] = voltage; +// int ac = batteryIntent.getIntExtra("plugged",BatteryManager.BATTERY_PLUGGED_AC); +// mybat[8] = ac; +// int usb = batteryIntent.getIntExtra("plugged",BatteryManager.BATTERY_PLUGGED_USB); +// mybat[9] = usb; + + boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING || + status == BatteryManager.BATTERY_STATUS_FULL; + mybat[8] = 0; + if (isCharging == true) { + mybat[8] = 1; + } + + // How are we charging? + mybat[9] = 0; + mybat[10] = 0; + int chargePlug = batteryIntent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1); + boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB; + if (usbCharge == true) { + mybat[9] = 2; + } + + boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC; + if (acCharge == true) { + mybat[10] = 1; + } + + return mybat; + } + + + public String getBatteryTechnology() { + + Intent batteryIntent = ba.context.getApplicationContext().registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); + + String technology = batteryIntent.getExtras().getString(BatteryManager.EXTRA_TECHNOLOGY); + + return technology; + } + + + + + + + +#End If \ No newline at end of file diff --git a/B4A/C_Cliente.bas b/B4A/C_Cliente.bas new file mode 100644 index 0000000..e922031 --- /dev/null +++ b/B4A/C_Cliente.bas @@ -0,0 +1,2881 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub MODS 'ignore + 'V3.04.10 - Se agregó código para el registro de abonos, en B4XMainPage se genera la tabla y aquí se agregó el panel p_abonos para ralizar el abono, y el codigo en el sub "mandaPendientes" para cambiar la bandera de enviado en el abono. +End Sub + +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore + Private p_cliente As Panel + Dim reqManager As DBRequestManager + Dim cmd As DBCommand + Dim ime As IME + Dim credito_diponible As String + Dim g As GPS + Dim ruta As String + Dim skmt As SQL + Dim clie_id As String + Dim sDate,sTime As String + Dim usuario As String + Dim total_cliente As String + Dim m_lat, m_lon As String + Dim m_lat_al, m_lon_al As String + Dim btAdmin As BluetoothAdmin + Dim cmp20 As Serial + Dim printer As TextWriter + Dim PairedDevices As Map + Dim L As List + Dim TAMANO As Int + Dim ESPACIO As Int + Dim BLANCO As String + Dim cuenta As String + Dim tipo_venta As String = "PREVENTA" + Dim MAC_IMPRESORA As String + Dim Printer1 As EscPosPrinter + Dim c As Cursor + Dim s As Cursor + Dim DD As Cursor + Dim c2 As Cursor + Dim ListView1 As ListView + Dim la_cuenta As Label + Dim La_nombre As Label + Dim la_Calle As Label + Dim la_numero As Label + Dim la_nint As Label + Dim la_edo As Label + Dim la_pob As Label + Dim la_col As Label + Dim la_cp As Label + Dim la_zona As Label + Dim gest As Button + Dim la_saldotot As Label + Dim la_saldooper As Label + Dim impresoraConectada As Boolean = False + Dim Tels As Button + Dim Label10 As Label + Dim Label11 As Label + Dim btAdmin As BluetoothAdmin + Dim Tar As Button + Dim errorImpresora As Int = 0 + Dim la_comm As Label + Dim la_actdte As Label + Dim la_usuario As Label + Dim la_resultado As Label + Dim l_entre1 As Label + Dim l_entre2 As Label + Dim l_atiende As Label + Dim l_atiende2 As Label + Dim DATOS As Button + Dim Guardar As Button + Dim NUEVO As Button + ' Dim lat_gps, lon_gps As String + + Dim l_total As Label + Dim c2 As Cursor + Dim S2 As Cursor + Private s As Cursor + Dim res As String + Dim Credi As Cursor + Private HIST As Button + Private MONTO_COMPRA As String + Private META As String + Private META2 As String + Private VERIFICA As String + Private L_QR As Label + Private BT_QR As Button + 'Private qr As QRCode + Dim CODIGO As String + + Private b_mapa As Button + Dim CUANTOS As String + Private B_IMP As Button + Dim Toggla As Toggle + Dim tgl As Toggle + Dim pre_act As Float + + Private Panel1 As Panel + Private I_COMPRA As EditText + Private B_GUARDA_C As Button + Private b_venta As Button + Dim ALMACEN As String + Private LA_GPS As Label + Private B_E_NEXT As Button + Private E_RES_E As EditText + Private t_tenc As Label + Private Panel2 As Panel + Private CONTADOR_E As String + Private HR_RES1 As String + Private HR_RES2 As String + Private HR_RES3 As String + Private EXISTE As String + Private TELEFONO As String + Dim t1 As Timer + Private RB1 As RadioButton + Private RB2 As RadioButton + Private RB3 As RadioButton + Private RB4 As RadioButton + Private RB5 As RadioButton + + Private stay_hh As String + Private stay_mi As String + Private stay_ss As String + + Private LA_GEO As Label + Dim result As Int + Private cercavalor As String + Private LA_RUTA As String + + Private b_like As Button + Private B_GPS As Button +' Dim sc As JhsIceZxing1 + Dim CODIGO As String + Private cb_factura As CheckBox + Private p_cbFactura As Panel + Dim venimosDeTicketsDia As Boolean = False + Private p_abono As Panel + Private et_abono As EditText + Private b_abono As Button + Private b_cancelar As Button + Private b_abono1 As Button + Dim b As Cursor + Private b_cxc As Button + Private clv_abonos As CustomListView + Private l_folio As Label + Private l_saldo As Label + Dim d As Cursor + Dim f As Cursor + Private l_montoabonostotal As Label + Dim j As Cursor + Dim h As Cursor + Dim distance As Long + Dim distance2 As Long + Dim cuest As C_Cuestionario + Private b_ventaabordo As Button + Private l_factura As Label + Private l_limite As Label + Private et_montoacredito As EditText + Private b_cancred As Button + Private b_acred As Button + Private p_credito As Panel + Dim banderaimp As Int = 0 + + Dim k1,k2,k3 As String + Private b_ubicar As Button + Private b_venta_credito As Button + Private b_act_coords As Button +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root +' Activity.RemoveAllViews + Root.LoadLayout("cliente") + cuest.Initialize(Me, "cuest", Root, Starter.skmt) + ruta = File.DirInternal + If File.Exists(ruta, "kmt.db") = False Then + File.Copy(File.DirAssets, "kmt.db", ruta, "kmt.db") + End If + skmt.Initialize(ruta,"kmt.db", True) + c = skmt.ExecQuery("select CAT_CL_CODIGO,CAT_CL_RUTA,CAT_CL_NOMBRE,CAT_CL_ATIENDE1,CAT_CL_ATIENTE2,CAT_CL_TELEFONO,CAT_CL_EMAIL,CAT_CL_CALLE,CAT_CL_NOEXT,CAT_CL_NOINT,CAT_CL_CALLE1,CAT_CL_CALLE2,CAT_CL_COLONIA,CAT_CL_MUNI,CAT_CL_EDO,CAT_CL_CP,CAT_CL_LONG,CAT_CL_LAT,CAT_CL_MTOCOMPRA from kmt_info where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + s = skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + b = skmt.ExecQuery("select COUNT(*) AS CLIENTE FROM ABONOSP WHERE CLIENTE IN (Select CUENTA from cuentaa)") + b.Position = 0 + Dim cabonos As String = b.GetString("CLIENTE") + If cabonos = 0 Then + b_cxc.Visible = False + Else + b_cxc.Visible = True + End If + + s.Position=0 + If c.RowCount>0 Then + c.Position=0 + la_cuenta.Text = c.GetString("CAT_CL_CODIGO") + cuenta = c.GetString("CAT_CL_CODIGO") + La_nombre.Text = c.GetString("CAT_CL_NOMBRE") + la_Calle.Text = c.GetString("CAT_CL_CALLE") & c.GetString("CAT_CL_NOEXT") + la_col.Text = c.GetString("CAT_CL_COLONIA") + la_edo.Text = c.GetString("CAT_CL_EDO") +' la_cp.Text = c.GetString("CAT_CL_CP") + l_entre1.Text = c.GetString("CAT_CL_CALLE1") + l_entre2.Text = c.GetString("CAT_CL_CALLE2") + l_atiende.Text = c.GetString("CAT_CL_ATIENDE1") + l_atiende2.Text = c.GetString("CAT_CL_ATIENTE2") + la_saldotot.Text = c.GetString("CAT_CL_TELEFONO") + la_saldooper.Text = c.GetString("CAT_CL_EMAIL") + l_total.Text = s.GetString("TOTAL_CLIE") + total_cliente = s.GetString("TOTAL_CLIE") + MONTO_COMPRA = c.GetString("CAT_CL_MTOCOMPRA") + End If + c.Close + s.Close + btAdmin.Initialize("BlueTeeth") + cmp20.Initialize("Printer") + Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_CAMERA) + Wait For B4XPage_PermissionResult (Permission As String, resultC As Boolean) + Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_WRITE_EXTERNAL_STORAGE) + Wait For B4XPage_PermissionResult (Permission As String, resultC As Boolean) + +' h = B4XPages.MainPage.skmt.ExecQuery("SELECT CUENTA from CUENTAA") +' h.Position = 0 +' Log(h.GetString("CUENTA")) +' j = B4XPages.MainPage.skmt.ExecQuery2("SELECT a_abono FROM ABONOS WHERE a_cliente = ?", Array As String(h.GetString("CUENTA"))) +' j.position = 0 +' Log(j.RowCount) +' If j.RowCount = 0 Then +' b_cxc.Enabled = True +' Else If j.RowCount > 0 Then +' b_cxc.Enabled = False +' End If +' h.Close +' j.Close + +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Sub B4XPage_Appear +' banderaimp = 0 + Guardar.Enabled = True + gest.Enabled = True + b_cxc.Enabled = True + Tar.Enabled = True + Tels.Enabled = True + b_ventaabordo.Enabled = True + HIST.Enabled = True + reqManager.Initialize(Me, Starter.DBReqServer) + LA_GPS.TextColor = Colors.Red + LA_GPS.Text = "SIN UBICACION GPS" + cercavalor = 0 + If Not(Starter.gps.GPSEnabled) Then + ToastMessageShow("Es necesario tener el GPS encendido", True) + StartActivity(Starter.gps.LocationSettingsIntent) + End If +' Log("appear") + cb_factura.Checked = False + p_abono.Visible = False + Subs.centraPanel(p_abono, Root.Width) + Subs.centraPanel(p_credito, Root.Width) + skmt.Initialize(ruta,"kmt.db", True) + c=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_CODIGO,CAT_CL_RUTA,CAT_CL_NOMBRE,CAT_CL_ATIENDE1,CAT_CL_ATIENTE2,CAT_CL_TELEFONO,CAT_CL_EMAIL,CAT_CL_CALLE,CAT_CL_NOEXT,CAT_CL_NOINT,CAT_CL_CALLE1,CAT_CL_CALLE2,CAT_CL_COLONIA,CAT_CL_MUNI,CAT_CL_EDO,CAT_CL_CP,CAT_CL_LONG,CAT_CL_LAT,CAT_CL_MTOCOMPRA,CAT_CL_NUM_SERIEFISICO from kmt_info where CAT_CL_CODIGO In (Select cuenta from cuentaa) UNION ALL select CAT_CL_CODIGO,CAT_CL_RUTA,CAT_CL_NOMBRE,CAT_CL_ATIENDE1,CAT_CL_ATIENTE2,CAT_CL_TELEFONO,CAT_CL_EMAIL,CAT_CL_CALLE,CAT_CL_NOEXT,CAT_CL_NOINT,CAT_CL_CALLE1,CAT_CL_CALLE2,CAT_CL_COLONIA,CAT_CL_MUNI,CAT_CL_EDO,CAT_CL_CP,CAT_CL_LONG,CAT_CL_LAT,CAT_CL_MTOCOMPRA,CAT_CL_NUM_SERIEFISICO from kmt_info2 where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + s=B4XPages.MainPage.skmt.ExecQuery("Select SUM(PE_COSTO_TOT) As TOTAL_CLIE, SUM(PE_CANT) As CANT_CLIE, PC_FACTURA FROM PEDIDO_CLIENTE INNER JOIN PEDIDO ON PEDIDO_CLIENTE.PC_CLIENTE = PEDIDO.PE_CLIENTE WHERE (PE_CLIENTE IN (Select cuenta from cuentaa))") + b = B4XPages.MainPage.skmt.ExecQuery("select COUNT(*) AS CLIENTE FROM ABONOSP WHERE CLIENTE IN (Select CUENTA from cuentaa)") + b.Position = 0 + Dim cabonos As String = b.GetString("CLIENTE") + If cabonos = 0 Then + b_cxc.Visible = False + Else + b_cxc.Visible = True + End If + + s.Position=0 + If c.RowCount > 0 Then + c.Position=0 + la_cuenta.Text = c.GetString("CAT_CL_CODIGO") + La_nombre.Text = c.GetString("CAT_CL_NOMBRE") + la_Calle.Text = c.GetString("CAT_CL_CALLE") & " " & c.GetString("CAT_CL_NOEXT") + la_col.Text = c.GetString("CAT_CL_COLONIA") + la_edo.Text = c.GetString("CAT_CL_EDO") + l_entre1.Text = c.GetString("CAT_CL_CALLE1") + l_entre2.Text = c.GetString("CAT_CL_CALLE2") + l_atiende.Text = c.GetString("CAT_CL_ATIENDE1") + l_atiende2.Text = c.GetString("CAT_CL_ATIENTE2") + TELEFONO = c.GetString("CAT_CL_TELEFONO") + l_total.Text = s.GetString("TOTAL_CLIE") + total_cliente = s.GetString("TOTAL_CLIE") + Private factura As String = 0 + If s.GetString("PC_FACTURA") <> Null And IsNumber(s.GetString("PC_FACTURA")) Then factura = s.GetString("PC_FACTURA") + If factura = "1" Then cb_factura.Checked = True + m_lat = "0" + If c.GetString("CAT_CL_LAT") <> "" Then m_lat =c.GetString("CAT_CL_LAT") + If m_lat.Length < 5 Then m_lat = "0" + m_lon = "0" + If c.GetString("CAT_CL_LONG") <> "" Then m_lon =c.GetString("CAT_CL_LONG") + If m_lon.Length < 5 Then m_lon = "0" + LA_RUTA = c.GetString("CAT_CL_RUTA") + ' ESTO ES PARA FORZAR A PEDIR LA FOTO Y EL GPS + If c.GetString("CAT_CL_NUM_SERIEFISICO") = "0" Then + L_QR.TEXT = "SIN CODIGO" + L_QR.TextColor = Colors.Red + gest.VISIBLE = False + BT_QR.Visible = True + Else + L_QR.TEXT = c.GetString("CAT_CL_NUM_SERIEFISICO") + L_QR.TextColor = Colors.Blue + BT_QR.Visible = False + End If + End If + + Dim cor_al As Cursor = Starter.skmt.ExecQuery("SELECT LAT, LONG FROM COORDS_ALMACEN") + If cor_al.RowCount > 0 Then + cor_al.Position = 0 + m_lat_al = cor_al.GetString("LAT") + m_lon_al = cor_al.GetString("LONG") + End If + + c.Close + s.Close + S2=B4XPages.MainPage.skmt.ExecQuery("select count(*) AS CUANTOS from HIST_VENTAS WHERE HVD_CLIENTE IN (Select CUENTA from cuentaa)") + S2.Position =0 + CUANTOS = S2.GetString("CUANTOS") + S2.Close + If CUANTOS > 0 Then + c2=B4XPages.MainPage.skmt.ExecQuery("select sum(HVD_COSTO_TOT) AS TOTAL from HIST_VENTAS WHERE HVD_CLIENTE IN (Select CUENTA from cuentaa)") + c2.Position =0 + MONTO_COMPRA = c2.GetString("TOTAL") + c2.Close + Else + MONTO_COMPRA = "0" + End If + + la_saldotot.Text = MONTO_COMPRA + If MONTO_COMPRA <> "0" Then + META2 = 300 - MONTO_COMPRA + Else + META2 = 300 + End If + If META2 < 1 Then + META2 = "CUBIERTO" + End If + la_saldooper.Text = META2 + c=B4XPages.MainPage.skmt.ExecQuery("select ID_ALMACEN from CAT_ALMACEN") + If c.RowCount>0 Then + C.Position=0 + ALMACEN = C.GetString("ID_ALMACEN") + End If + c.Close + + Dim geo As Cursor = Starter.skmt.ExecQuery("SELECT ACTIVA FROM GEOCERCA") + If geo.RowCount > 0 Then + geo.Position = 0 + If geo.GetInt("ACTIVA") = 0 Then + Tels.Visible = True + gest.Visible = True + Else If geo.GetInt("ACTIVA") = 1 Then + Tels.Visible = False + gest.Visible = False + End If + End If + +' If ALMACEN = "3" Then +' b_act_coords.visible = False +' Else + b_act_coords.visible = True + +' End If + If ALMACEN = "4" Then +' b_like.Visible = True + DD=B4XPages.MainPage.skmt.ExecQuery2("SELECT COUNT(*) AS CUANTOS FROM HIST_VENTAS WHERE HVD_CLIENTE IN (Select cuenta from cuentaa) AND HVD_PRONOMBRE =?", Array As String("KNORR RINDE MAS 70 GR")) + DD.Position =0 + If DD.GetString("CUANTOS") = 0 Then + c=B4XPages.MainPage.skmt.ExecQuery2("SELECT COUNT(*) AS CUANTOS FROM PEDIDO WHERE PE_CLIENTE IN (Select cuenta from cuentaa) AND PE_PRONOMBRE =?", Array As String("KNORR RINDE MAS 70 GR")) + c.Position =0 +' If c.GetString("CUANTOS") = 0 Then +' b_like.Visible = True +' Else +' b_like.Visible = False +' End If + c.Close + Else +' b_like.Visible = False + End If + DD.Close + Else +' b_like.Visible = False + End If + If ALMACEN = "16" Or ALMACEN = "13" Then + Tels.Visible = True + gest.Visible = True + End If + CallSubDelayed(Tracker, "Track") + CallSubDelayed(Tracker, "StartFLPSmall") + If Tracker.FLP.IsInitialized And Tracker.FLP.GetLastKnownLocation.IsInitialized Then 'Si tenemos "UltimaUbicaccionConocida" la usamos. + B4XPages.MainPage.lat_gps = Tracker.FLP.GetLastKnownLocation.Latitude + B4XPages.MainPage.lon_gps = Tracker.FLP.GetLastKnownLocation.Longitude +' Log($"Tenemos UUC: ${Tracker.FLP.GetLastKnownLocation.Latitude},${Tracker.FLP.GetLastKnownLocation.Longitude}"$) + GPS_LocationChanged(Tracker.FLP.GetLastKnownLocation) + End If + +' h = B4XPages.MainPage.skmt.ExecQuery("SELECT CUENTA from CUENTAA") +' h.Position = 0 +' Log(h.GetString("CUENTA")) +' j = B4XPages.MainPage.skmt.ExecQuery2("SELECT a_abono AS CUANTOS FROM ABONOS WHERE a_cliente = ?", Array As String(h.GetString("CUENTA"))) +' j.position = 0 +' Log(j.RowCount) +' If j.RowCount = 0 Then +' b_cxc.Enabled = True +' Else If j.RowCount > 0 Then +' b_cxc.Enabled = False +' End If +' h.Close +' j.Close + + If la_cuenta.Text = "0" Or la_cuenta.Text = "1" Then + p_cbFactura.Visible = False + l_factura.Visible = False + b_ventaabordo.Visible = False + Else + p_cbFactura.Visible = True + l_factura.Visible = True + b_ventaabordo.Visible = True + End If + + + c = skmt.ExecQuery2("select CAT_VA_VALOR from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("MACIMP")) + If c.RowCount > 0 Then + c.Position = 0 + Starter.MAC_IMPRESORA = c.GetString("CAT_VA_VALOR") + End If + If Starter.MAC_IMPRESORA = "" Then Starter.MAC_IMPRESORA = "0" +' Log("|" & Starter.MAC_IMPRESORA & "|") + Printer1.Initialize(Me, "Printer1") + + If Printer1.IsConnected = False Then +' Printer1.Connect +' Log("1") + Else + Printer1.DisConnect + Printer1.Connect + Log("2") + End If + + pre_act = Subs.traeTotalClientepreventaparacredito + + 'SELECT CAT_CL_BCREDITO, CAT_CL_CODIGO, Ifnull(SALDO_PENDIENTE,0) FROM KMT_INFO INNER JOIN ABONOSP ON CAT_CL_CODIGO = CLIENTE WHERE CAT_CL_CODIGO IN (SELECT CUENTA FROM CUENTAA) + + Private credi2 As Cursor = B4XPages.MainPage.skmt.ExecQuery("SELECT IFNULL(CAT_CL_BCREDITO,0) AS CAT_CL_BCREDITO, CAT_CL_CODIGO, Ifnull(SALDO_PENDIENTE,0) As SALDO_PENDIENTE, Ifnull(CAT_CL_LIMITECREDITO,0) As CAT_CL_LIMITECREDITO FROM KMT_INFO LEFT JOIN ABONOSP ON CAT_CL_CODIGO = CLIENTE WHERE CAT_CL_CODIGO IN (SELECT CUENTA FROM CUENTAA) UNION SELECT CAT_CL_BCREDITO, CAT_CL_CODIGO, Ifnull(SALDO_PENDIENTE,0) As SALDO_PENDIENTE, Ifnull(CAT_CL_LIMITECREDITO,0) As CAT_CL_LIMITECREDITO FROM KMT_INFO2 LEFT JOIN ABONOSP ON CAT_CL_CODIGO = CLIENTE WHERE CAT_CL_CODIGO IN (SELECT CUENTA FROM CUENTAA)") + Log(credi2.RowCount) + If credi2.RowCount > 0 Then + credi2.Position = 0 + credito_diponible = credi2.GetString ("CAT_CL_LIMITECREDITO") + Log(credi2.GetString ("CAT_CL_BCREDITO")) + If credi2.GetString ("CAT_CL_BCREDITO") = "1" Then + Log(credi2.GetString("SALDO_PENDIENTE")) + If credi2.GetString("SALDO_PENDIENTE") > 0 Then + + Private credi3 As Cursor = B4XPages.MainPage.skmt.ExecQuery("SELECT a_abono, CAT_CL_CODIGO FROM KMT_INFO INNER JOIN ABONOS ON CAT_CL_CODIGO = a_cliente WHERE CAT_CL_CODIGO IN (SELECT CUENTA FROM CUENTAA) UNION SELECT a_abono, CAT_CL_CODIGO FROM KMT_INFO2 INNER JOIN ABONOS ON CAT_CL_CODIGO = a_cliente WHERE CAT_CL_CODIGO IN (SELECT CUENTA FROM CUENTAA)") + If credi3.RowCount > 0 Then + credi3.Position = 0 + Dim total As String = 0 + For i = 0 To credi2.RowCount - 1 + credi2.Position = i + Log(credi2.GetString("SALDO_PENDIENTE")) + total = total + credi2.GetString("SALDO_PENDIENTE") + Log(total) + Next + If NumberFormat2(total,1,2,2,False) <> NumberFormat2(credi3.GetString ("a_abono"),1,2,2,False) Then + MsgboxAsync("La venta sera en efectivo porque el pago del pagare es menor al total de la deuda.","Atención") + b_venta_credito.Visible = False + Else If credi2.GetString ("SALDO_PENDIENTE") = credi3.GetString ("a_abono") Then + Log("AQUI ESTOY SI VISIBLE BOTON") + b_venta_credito.Visible = True + End If + Else + MsgboxAsync("La venta sera en efectivo por que hay un pagare pendiente de pago","Atención") + b_venta_credito.Visible = False + End If + credi3.Close + Else If credi2.GetString("SALDO_PENDIENTE") = 0 Then + b_venta_credito.Visible = True + End If + + Else + Log(1) + b_venta_credito.Visible = False + If credi2.GetString("SALDO_PENDIENTE") > 0 Then + Private credi3 As Cursor = B4XPages.MainPage.skmt.ExecQuery("SELECT a_abono, CAT_CL_CODIGO FROM KMT_INFO INNER JOIN ABONOS ON CAT_CL_CODIGO = a_cliente WHERE CAT_CL_CODIGO IN (SELECT CUENTA FROM CUENTAA) UNION SELECT a_abono, CAT_CL_CODIGO FROM KMT_INFO2 INNER JOIN ABONOS ON CAT_CL_CODIGO = a_cliente WHERE CAT_CL_CODIGO IN (SELECT CUENTA FROM CUENTAA)") + If credi3.RowCount > 0 Then + credi3.Position = 0 + + Dim total As String = 0 + For i = 0 To credi2.RowCount - 1 + credi2.Position = i + Log(credi2.GetString("SALDO_PENDIENTE")) + total = total + credi2.GetString("SALDO_PENDIENTE") + Log(total) + Next + If NumberFormat2(total,1,2,2,False) <> NumberFormat2(credi3.GetString ("a_abono"),1,2,2,False) Then + MsgboxAsync("La venta sera en efectivo porque el pago del pagare es menor al total de la deuda.","Atención") + Else If credi2.GetString ("SALDO_PENDIENTE") = credi3.GetString ("a_abono") Then + End If + Else + MsgboxAsync("La venta sera en efectivo por que hay un pagare pendiente de pago","Atención") + End If + credi3.Close + Else If credi2.GetString("SALDO_PENDIENTE") = 0 Then +' b_venta_credito.Visible = False + End If + End If + End If + credi2.Close + If la_cuenta.Text = "0" Then + gest.Text = "Abordo" + B4XPages.MainPage.recarga = "0" + Else If la_cuenta.Text = "1" Then + gest.Text = "Recarga" + B4XPages.MainPage.recarga = "1" + Else +' gest.Text = "Pre-Venta a Contado" + gest.Text = "Preventa" + B4XPages.MainPage.recarga = "0" + End If + LogColor(B4XPages.MainPage.recarga,Colors.Blue) +' If banderaimp = 1 Then +' Guardar_Click +' End If +End Sub + +Sub GPS_LocationChanged (Location1 As Location) +' LogColor($"Entrando a Cliente.GPS_LocationChanged"$, Colors.red) + If Tracker.FLP.GetLastKnownLocation.IsInitialized And Tracker.FLP.GetLastKnownLocation.Latitude <> 0 Then + B4XPages.MainPage.lat_gps = Tracker.FLP.GetLastKnownLocation.Latitude + B4XPages.MainPage.lon_gps = Tracker.FLP.GetLastKnownLocation.Longitude +' Log("Coords set to: " & B4XPages.MainPage.lat_gps & " and " & B4XPages.MainPage.lon_gps) + End If + + Dim l1, l2,l3 As Location + l1.Initialize2(B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps) +' Log($"Coordenadas de la tienda - lat:${m_lat}, lon:${m_lon}"$) + l2.Initialize2(m_lat, m_lon) + l3.Initialize2(m_lat_al,m_lon_al) + BT_QR.Enabled = True + LA_GPS.TextColor = Colors.Blue + LA_GPS.Text = "CON UBICACION GPS" +' B_GPS.Enabled = True + 'now we need the distance between our location and the target location + distance = l1.DistanceTo(l2) 'the result is in meter + distance2 = l1.DistanceTo(l3) 'the result is in meter +' gest.Visible = True + + Dim geo As Cursor = Starter.skmt.ExecQuery("SELECT ACTIVA FROM GEOCERCA") + If geo.RowCount > 0 Then + geo.Position = 0 + If geo.GetInt("ACTIVA") = 0 Then + Tels.Visible = True + gest.Visible = True + Else If geo.GetInt("ACTIVA") = 1 Then + If distance2 < 100 Then + LA_GEO.TextColor = Colors.Blue + Tels.Visible = True + gest.Visible = True + Else + If distance < 500000000000000000000000000000000000000000 Then + LA_GEO.TextColor = Colors.Blue + Tels.Visible = True + gest.Visible = True + Else + LA_GEO.TextColor = Colors.Red + Tels.Visible = False + gest.Visible = False + End If + End If + End If + End If + + LA_GEO.Text= $"$1.2{distance/1000} kms"$ + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_GPS") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_GPS (HGDATE, HGLAT, HGLON) VALUES(?,?,?) ", Array As Object (sDate & sTime, B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps)) + CallSubDelayed(Tracker, "CreateLocationRequest") +End Sub + +Sub ListView1_ItemLongClick (Position As Int, Value As Object) + +End Sub + +Sub gest_Click + If la_cuenta.Text = "0" Then + B4XPages.MainPage.tipo_venta = "ABORDO" + Else If la_cuenta.Text = "1" Then + B4XPages.MainPage.tipo_venta = "RECARGA" + Else + B4XPages.MainPage.tipo_venta = "PREVENTA_CONTADO" + End If + + 'Buscamos en el historial de cuestionarios si el cliente ya tiene cuestionario contestado. +' Private hc As Cursor = Starter.skmt.ExecQuery($"select count(HC_CLIENTE) as cuantos from HIST_CUESTIONARIO where HC_CLIENTE = '${Subs.traeCliente}'"$) +' hc.Position = 0 +' Log($"${cuest.encuestaIniciada} - ${hc.GetString("cuantos")} - ${cuest.clienteConCuestionario(Subs.traeCliente)}"$) +' +' If la_cuenta.Text <> "0" And Not(cuest.encuestaIniciada) And hc.GetString("cuantos") = 0 And Not(cuest.clienteConCuestionario(Subs.traeCliente)) Then +' cuest.agregaPregunta("1", "¿Se puede acceder al negocio o está enrejado?", Array As String("No, está enrejado o no se tiene acceso", "Si se pude acceder")) +' Return False +' End If +' Private x As Cursor = B4XPages.MainPage.skmt.ExecQuery($"select tienda_id from COORDENADAS_GPS where tienda_id = '${la_cuenta.text}'"$) +' Log("+++++++++++++ " & x.RowCount) +' If la_cuenta.Text<> "0" And distance > 50 And x.RowCount = 0 Then +' Private res As String = Msgbox2("¿Estas en la tienda, para guardar la nueva ubicación?", "AVISO", "Si","" ,"No", Null) 'ignore +' If res = DialogResponse.POSITIVE Then +' DateTime.DateFormat = "MM/dd/yyyy" +' sDate=DateTime.Date(DateTime.Now) +' sTime=DateTime.Time(DateTime.Now) +' B4XPages.MainPage.skmt.ExecNonQuery($"insert into COORDENADAS_GPS (tienda_id, ruta, almacen, latitud, longitud, fecha) values ('${la_cuenta.Text}', '${Subs.traeRuta}', '${Subs.traeAlmacen}', '${B4XPages.MainPage.lat_gps}', '${B4XPages.MainPage.lon_gps}', '${sDate} ${sTime}')"$) +' +' Dim cmd As DBCommand +' cmd.Initialize +' cmd.Name = "insert_coords_nuevas_INTMEX" +' cmd.Parameters = Array As Object(la_cuenta.text, Subs.traeRuta, Subs.traeAlmacen, sDate & " " & sTime, B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps, usuario) +'' Log($"${la_cuenta.text}, ${Subs.traeRuta}, ${Subs.traeAlmacen}, ${sDate} ${sTime}, ${m_lat}, ${m_lon}"$) +' reqManager.ExecuteCommand(cmd , "ins_coords_nuevas") +' End If +' End If + 'Si hay mapa de productos es que hay venta en proceso, entonces borramos la actual para meter la nueva. +' If B4XPages.MainPage.productos.prodsMap.IsInitialized And B4XPages.MainPage.productos.prodsMap.Size > 0 Then Subs.borraPedidoClienteActual + B4XPages.ShowPage("productos") +End Sub + +Private Sub b_venta_credito_Click + If la_cuenta.Text = "0" Then + B4XPages.MainPage.tipo_venta = "ABORDO" + Else If la_cuenta.Text = "1" Then + B4XPages.MainPage.tipo_venta = "RECARGA" + Else + B4XPages.MainPage.tipo_venta = "PREVENTA_CREDITO" + End If + B4XPages.ShowPage("productos") +End Sub + +Sub Tels_Click + B4XPages.ShowPage("NoVenta") +End Sub + +Private Sub B4XPage_CloseRequest As ResumableSub +' BACK key pressed +' Return True To close, False To cancel +' Log($"venimosDeTicketsDia=${venimosDeTicketsDia}"$) + If Starter.pre_viejo = pre_act Then + If (la_cuenta.Text <> "0" And la_cuenta.Text <> "1") Then + If banderaimp = 1 Then + Else + cuest.encuestaIniciada = False + cuest.ocultPanelPregunta + If IsNumber(l_total.text) And Not(Subs.pedidoGuardado) Then + LogColor("Hay Venta", Colors.Red) + Private resultado1 As Int = Msgbox2($"Va salir sin haber guardado la venta, si continua, la venta se BORRARA.${CRLF}${CRLF}¿Esta seguro que desea continuar?"$, "SE VA A BORRAR LA VENTA", "Borrar Venta", "Guardar Venta", "", LoadBitmap(File.DirAssets,"alert2.png")) + If resultado1 = DialogResponse.POSITIVE Then + Log("Borrra venta") + Subs.borraPedidoClienteActual + ToastMessageShow("Venta Borrada", False) +' venimosDeTicketsDia = False + B4XPages.ShowPage("Principal") + else if resultado1=DialogResponse.CANCEL Then + Log("Pedido guardado") + Guardar_Click + ToastMessageShow("Venta Guardada", False) + End If + End If +' venimosDeTicketsDia = False + B4XPages.ShowPage("Clientes") + End If +' Else If la_cuenta.Text = "1" Then +' If B4XPages.MainPage.recarga = "1" Then +' B4XPages.ShowPage("login") +' End If + Else + End If + Else + If B4XPages.MainPage.recarga = "1" Then + B4XPages.ShowPage("login") + End If + + End If +' Return True + Return False +End Sub + +Sub Tar_Click + B4XPages.ShowPage("Nota") +End Sub + +'Sub Tar_LongClick +' p_abono.Visible = True +'End Sub + +Sub DATOS_Click + B4XPages.ShowPage("telefonos") +End Sub + +Sub Guardar_Click + c = B4XPages.MainPage.skmt.ExecQuery2("Select COUNT(Case WHEN PE_FOLIO = 'PREVENTA_CONTADO' THEN 1 END) AS CUANTOS_CONTADO,COUNT(Case WHEN PE_FOLIO = 'PREVENTA_CREDITO' THEN 1 END) AS CUANTOS_CREDITO FROM PEDIDO WHERE PE_CLIENTE IN (Select cuenta FROM CUENTAA) And (PE_FOLIO = ? OR PE_FOLIO = ?)", Array As String("PREVENTA_CONTADO", "PREVENTA_CREDITO")) + c.Position = 0 +' If c.GetString("CUANTOS_CONTADO") > 0 Or c.GetString("CUANTOS_CREDITO") > 0 Then + Log("Esto es Contado<<<<<<<<<<<<<: " & c.GetString("CUANTOS_CONTADO")) + Log("Esto es Credito<<<<<<<<<<<<<: " & c.GetString("CUANTOS_CREDITO")) + + '----------------------- + If c.GetString("CUANTOS_CREDITO") = 0 Then + GuardaVenta + Else If c.GetString("CUANTOS_CREDITO") > 0 Then + Dim fg As Cursor = Starter.skmt.ExecQuery("Select IFNULL(sum(PE_COSTO_TOT),0) AS COSTO, PE_FOLIO FROM PEDIDO WHERE PE_CLIENTE IN (SELECT CUENTA FROM CUENTAA) AND PE_FOLIO = 'PREVENTA_CREDITO'") + fg.Position = 0 + Dim costo As String = fg.GetString("COSTO") + + If costo > 0 And costo < 1000 Then +' Msgbox2Async($"¿Desea continuar?${CRLF}Si acepta, el pedido a crédito se borrará (mínimo $1,000).${CRLF}Si cancela, podrá seguir agregando productos."$,"Venta Minima de Credito", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png"),False) +' Wait For Msgbox_Result (resultado As Int) +' If resultado = DialogResponse.POSITIVE Then +' Subs.borraPedidoCredito + GuardaVenta +' End If +' End If + Else If costo >= 1000 Then +' Dim cPagares As Cursor = B4XPages.MainPage.skmt.ExecQuery("SELECT COUNT(*) As REGISTRADO FROM PAGARES WHERE PA_CLIENTE IN (SELECT CUENTA FROM CUENTAA)") +' cPagares.Position = 0 +' If cPagares.GetString("REGISTRADO") = 0 Then +' B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PAGARES (PA_ALMACEN, PA_RUTA, PA_FECHA, PA_CAPTURA, PA_MONTO, PA_USUARIO, PA_CLIENTE) VALUES(?,?,?,?,?,?,?) ", Array As Object (ALMACEN, LA_RUTA, (sDate &" "& sTime),(sDate &" "& sTime), costo, usuario, la_cuenta.Text)) +' Log("Aqui inserto: " & "Almacen: " & ALMACEN & "Ruta " & LA_RUTA & "Fecha: " & (sDate &" "& sTime) & "Captura: " & (sDate &" "& sTime) & "Monto: " & costo & "Usuario: " & usuario & "Cliente: " & la_cuenta.Text & "<<<<<<<<<<<<<<<<<<<<<") + GuardaVenta +' p_credito.Visible = False +' Else +' B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE PAGARES set PA_FECHA = ?, PA_CAPTURA = ?, PA_MONTO = ? where PA_CLIENTE In (select cuenta from cuentaa)", Array As Object ((sDate &" "& sTime),(sDate &" "& sTime), et_montoacredito.Text)) +' Log("Aqui actualizo: " & "Almacen: " & ALMACEN & "Ruta " & LA_RUTA & "Fecha: " & (sDate &" "& sTime) & "Captura: " & (sDate &" "& sTime) & "Monto: " & costo & "Usuario: " & usuario & "Cliente: " & la_cuenta.Text & "<<<<<<<<<<<<<<<<<<<<<") + GuardaVenta +' p_credito.Visible = False +' End If +' cPagares.Close +' GuardaVenta + End If + fg.Close + End If +' End If + c.Close + '----------------------- + +' If la_cuenta.Text <> 0 Then +' Credi = B4XPages.MainPage.skmt.ExecQuery("Select IFNULL(CAT_CL_BCREDITO,0) AS CAT_CL_BCREDITO FROM kmt_info Where CAT_CL_CODIGO IN (SELECT CUENTA FROM CUENTAA) and CAT_CL_CODIGO NOT IN (SELECT CLIENTE FROM ABONOSP) UNION Select IFNULL(CAT_CL_BCREDITO,0) AS CAT_CL_BCREDITO FROM kmt_info2 Where CAT_CL_CODIGO IN (SELECT CUENTA FROM CUENTAA) and CAT_CL_CODIGO NOT IN (SELECT CLIENTE FROM ABONOSP)") +' 'INNER JOIN KMT_INFO2 ON CAT_CL_CODIGO = CL_CUENTA +' If Credi.RowCount > 0 Then +' Credi.Position = 0 +' If Credi.GetString("CAT_CL_BCREDITO") = "1" Then +' If l_total.Text <> "null" Then +' If pre_act <> Starter.pre_viejo Then +' Msgbox2Async("La venta es a credito?", "ATENCION","SI","", "NO",LoadBitmap(File.DirAssets,"alert2.png"), False) +' Wait For Msgbox_Result (resultado As Int) +' If resultado = DialogResponse.POSITIVE Then +' p_credito.Visible = True +' Dim limitcred As Cursor +' limitcred = B4XPages.MainPage.skmt.ExecQuery("SELECT CAT_CL_LIMITECREDITO FROM kmt_info WHERE CAT_CL_CODIGO IN (SELECT CUENTA FROM CUENTAA) UNION SELECT CAT_CL_LIMITECREDITO FROM kmt_info2 WHERE CAT_CL_CODIGO IN (SELECT CUENTA FROM CUENTAA)") +' limitcred.Position = 0 +' l_limite.Text = "Limite de credito: $" & limitcred.GetString("CAT_CL_LIMITECREDITO") +' If Subs.traeTotalClientepreventaparacredito >= limitcred.GetString("CAT_CL_LIMITECREDITO") Then +' et_montoacredito.Text = limitcred.GetString("CAT_CL_LIMITECREDITO") +' Else +' et_montoacredito.Text = Subs.traeTotalClientepreventaparacredito +' End If +' limitcred.Close +' Else +' GuardaVenta +' End If +' Else If pre_act = Starter.pre_viejo Then +' GuardaVenta +' End If +' Else If l_total.Text = "null" Then +' GuardaVenta +' End If +' Else If Credi.GetString("CAT_CL_BCREDITO") = "0" Then +' GuardaVenta +' End If +' Else +' Private credi2 As Cursor = B4XPages.MainPage.skmt.ExecQuery("SELECT CAT_CL_BCREDITO, a_abono, SALDO_PENDIENTE FROM KMT_INFO INNER JOIN ABONOSP ON CAT_CL_CODIGO = CLIENTE INNER JOIN ABONOS ON CAT_CL_CODIGO = a_cliente WHERE CAT_CL_CODIGO IN (SELECT CUENTA FROM CUENTAA) UNION SELECT CAT_CL_BCREDITO, a_abono, SALDO_PENDIENTE FROM KMT_INFO2 INNER JOIN ABONOSP ON CAT_CL_CODIGO = CLIENTE INNER JOIN ABONOS ON CAT_CL_CODIGO = a_cliente WHERE CAT_CL_CODIGO IN (SELECT CUENTA FROM CUENTAA)") +' If credi2.RowCount > 0 Then +' credi2.Position = 0 +' Dim total As String = 0 +' For i = 0 To credi2.RowCount - 1 +' credi2.Position = i +' Log(credi2.GetString("SALDO_PENDIENTE")) +' total = total + credi2.GetString("SALDO_PENDIENTE") +' Log(total) +' Next +' If credi2.GetString ("CAT_CL_BCREDITO") = "1" And credi2.GetString ("a_abono")=total Then +' If l_total.Text <> "null" Then +' If pre_act <> Starter.pre_viejo Then +' Msgbox2Async("La venta es a credito?", "ATENCION","SI","", "NO",LoadBitmap(File.DirAssets,"alert2.png"), False) +' Wait For Msgbox_Result (resultado As Int) +' If resultado = DialogResponse.POSITIVE Then +' p_credito.Visible = True +' Dim limitcred As Cursor +' limitcred = B4XPages.MainPage.skmt.ExecQuery("SELECT CAT_CL_LIMITECREDITO FROM kmt_info WHERE CAT_CL_CODIGO IN (SELECT CUENTA FROM CUENTAA) UNION SELECT CAT_CL_LIMITECREDITO FROM kmt_info2 WHERE CAT_CL_CODIGO IN (SELECT CUENTA FROM CUENTAA)") +' limitcred.Position = 0 +' l_limite.Text = "Limite de credito: $" & limitcred.GetString("CAT_CL_LIMITECREDITO") +' If Subs.traeTotalClientepreventaparacredito >= limitcred.GetString("CAT_CL_LIMITECREDITO") Then +' et_montoacredito.Text = limitcred.GetString("CAT_CL_LIMITECREDITO") +' Else +' et_montoacredito.Text = Subs.traeTotalClientepreventaparacredito +' End If +' limitcred.Close +' Else +' GuardaVenta +' End If +' Else If pre_act = Starter.pre_viejo Then +' GuardaVenta +' End If +' Else If l_total.Text = "null" Then +' GuardaVenta +' End If +' Else +' GuardaVenta +' End If +' Else +' GuardaVenta +' End If +' End If +'' Credi.Close +' Else If la_cuenta.Text = 0 Then +' GuardaVenta +' End If +' Else If c.GetString("CUANTOS") = 0 Then +' GuardaVenta +' End If +' c.Close +End Sub + +Private Sub b_acred_Click + c2=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") + c2.Position=0 + usuario = c2.GetString("USUARIO") + c2.Close + Dim limitcred As Cursor + DateTime.DateFormat = "MM/dd/yyyy" + DateTime.TimeFormat = "HH:mm:ss" + sDate = DateTime.Date(DateTime.Now) + sTime = DateTime.Time(DateTime.Now) + limitcred = B4XPages.MainPage.skmt.ExecQuery("SELECT CAT_CL_LIMITECREDITO FROM kmt_info WHERE CAT_CL_CODIGO IN (SELECT CUENTA FROM CUENTAA) UNION SELECT CAT_CL_LIMITECREDITO FROM kmt_info2 WHERE CAT_CL_CODIGO IN (SELECT CUENTA FROM CUENTAA)") + limitcred.Position = 0 + l_limite.Text = "Limite de credito: $" & limitcred.GetString("CAT_CL_LIMITECREDITO") + If Subs.traeTotalClientepreventaparacredito >= limitcred.GetString("CAT_CL_LIMITECREDITO") Then + + If et_montoacredito.Text > limitcred.GetString("CAT_CL_LIMITECREDITO") Then + MsgboxAsync("El monto del pagare no puede ser mayor al limite del credito","Atención") + et_montoacredito.Text = limitcred.GetString("CAT_CL_LIMITECREDITO") + Else + c = B4XPages.MainPage.skmt.ExecQuery("SELECT COUNT(*) As REGISTRADO FROM PAGARES WHERE PA_CLIENTE IN (SELECT CUENTA FROM CUENTAA)") + c.Position = 0 + If c.GetString("REGISTRADO") = 0 Then +' MsgboxAsync("SI ENTRAMOS 3","Atención") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PAGARES (PA_ALMACEN, PA_RUTA, PA_FECHA, PA_CAPTURA, PA_MONTO, PA_USUARIO, PA_CLIENTE) VALUES(?,?,?,?,?,?,?) ", Array As Object (ALMACEN, LA_RUTA, (sDate &" "& sTime),(sDate &" "& sTime), et_montoacredito.Text, usuario, la_cuenta.Text)) + Log("Inserto: " &" Almacen: "& ALMACEN &" Ruta: "& LA_RUTA &" Fecha: "& (sDate &" "& sTime) &"Captura: "&(sDate &" "& sTime) &" Monto: "& et_montoacredito.Text &" Usuario: "& usuario &" Cliente: "& la_cuenta.Text) + GuardaVenta + p_credito.Visible = False + Else +' MsgboxAsync("SI ENTRAMOS4","Atención") + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE PAGARES set PA_FECHA = ?, PA_CAPTURA = ?, PA_MONTO = ? where PA_CLIENTE In (select cuenta from cuentaa)", Array As Object ((sDate &" "& sTime),(sDate &" "& sTime), et_montoacredito.Text)) + Log("Actualizo: " &" Almacen: "& ALMACEN &" Ruta: "& LA_RUTA &" Fecha: "& (sDate &" "& sTime) &"Captura: "&(sDate &" "& sTime) &" Monto: "& et_montoacredito.Text &" Usuario: "& usuario &" Cliente: "& la_cuenta.Text) + GuardaVenta + p_credito.Visible = False + End If + End If + Else If Subs.traeTotalClientepreventaparacredito < limitcred.GetString("CAT_CL_LIMITECREDITO") Then + If et_montoacredito.Text > Subs.traeTotalClientepreventaparacredito Then + MsgboxAsync("El monto del pagare no puede ser mayor a la preventa registrada","Atención") + et_montoacredito.Text = Subs.traeTotalClientepreventaparacredito + Else + c = B4XPages.MainPage.skmt.ExecQuery("SELECT COUNT(*) As REGISTRADO FROM PAGARES WHERE PA_CLIENTE IN (SELECT CUENTA FROM CUENTAA)") + c.Position = 0 + If c.GetString("REGISTRADO") = 0 Then +' MsgboxAsync("SI ENTRAMOS","Atención") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PAGARES (PA_ALMACEN, PA_RUTA, PA_FECHA, PA_CAPTURA, PA_MONTO, PA_USUARIO, PA_CLIENTE) VALUES(?,?,?,?,?,?,?) ", Array As Object (ALMACEN, LA_RUTA, (sDate &" "& sTime),(sDate &" "& sTime), et_montoacredito.Text, usuario, la_cuenta.Text)) + Log("Aqui hay informacion variada e inserte: " & (sDate &" "& sTime) & (sDate &" "& sTime) & (et_montoacredito.Text) & "<<<<<<<<<<<<<<<<<<<<<") + GuardaVenta + p_credito.Visible = False + Else +' MsgboxAsync("SI ENTRAMOS 2","Atención") + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE PAGARES set PA_FECHA = ?, PA_CAPTURA = ?, PA_MONTO = ? where PA_CLIENTE In (select cuenta from cuentaa)", Array As Object ((sDate &" "& sTime),(sDate &" "& sTime), et_montoacredito.Text)) + Log("Aqui hay informacion variada y acualice: " & (sDate &" "& sTime) & (sDate &" "& sTime) & (et_montoacredito.Text) & "<<<<<<<<<<<<<<<<<<<<<") + GuardaVenta + p_credito.Visible = False + End If + End If + End If + limitcred.Close +End Sub + +Private Sub b_cancred_Click + p_credito.Visible = False +End Sub + +Sub GuardaVenta + If pre_act <> Starter.pre_viejo Then + B_IMP_Click + Guardar.Enabled = False + gest.Enabled = False + b_cxc.Enabled = False + Tar.Enabled = False + Tels.Enabled = False + b_ventaabordo.Enabled = False + HIST.Enabled = False + banderaimp = 1 + Else If pre_act = Starter.pre_viejo Then + If banderaimp = 1 Then + B_IMP_Click + Else + GUADAVENTA2 + End If + End If +End Sub + +Sub GUADAVENTA2 + Log(B4XPages.MainPage.recarga) + If B4XPages.MainPage.recarga = "0" Then + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, COUNT(*) AS CUANTOS FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + ' Log("xxxxxxxxxxxxxxx " & c.GetString("CUANTOS")) + If c.GetString("CUANTOS") > 0 Then + Private cbFactura As Int = 0 + If cb_factura.Checked Then cbFactura = 1 + B4XPages.MainPage.skmt.ExecNonQuery("delete from NOVENTA where NV_CLIENTE In (select cuenta from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO, PC_LON, PC_LAT, PC_ENVIO_OK, PC_FACTURA) VALUES (?,?,?,?,?,?,?,?,?)", Array As Object(clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps, 0, cbFactura)) + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info2 set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + End If + c.Close + DateTime.TimeFormat = "HHmmss" + sTime=DateTime.Time(DateTime.Now) + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE HIST_STAY_STORE set HSS_OUT = ? where HSS_OUT = 0 AND HSS_CODIGO In (select cuenta from cuentaa)", Array As Object(sTime)) + ' B4XPages.MainPage.skmt.ExecNonQuery("UPDATE HIST_STAY_STORE set HSS_TOT = HSS_OUT - HSS_IN where HSS_CODIGO In (select cuenta from cuentaa)") + Try + c=B4XPages.MainPage.skmt.ExecQuery(" Select (substr(HSS_OUT,1,2) - substr(HSS_IN,1,2)) - Case when (substr(HSS_OUT,3,2) - substr(HSS_IN,3,2)) < 0 Then 1 Else 0 end HORAS_TOTALES, " & _ + "Case when (substr(HSS_OUT,3,2) - substr(HSS_IN,3,2)) < 0 Then (substr(HSS_OUT,3,2) + 60 - substr(HSS_IN,3,2)) " & _ + " Else (substr(HSS_OUT,3,2) - substr(HSS_IN,3,2)) End - Case when (substr(HSS_OUT,5,2) - substr(HSS_IN,5,2)) < 0 Then 1 Else 0 end MINUTOS_TOTALES, " & _ + "Case when (substr(HSS_OUT,5,2) - substr(HSS_IN,5,2)) < 0 Then (substr(HSS_OUT,5,2) + 60 - substr(HSS_IN,5,2)) " & _ + " Else (substr(HSS_OUT,5,2) - substr(HSS_IN,5,2)) end SEGUNDOS_TOTALES " & _ + " from HIST_STAY_STORE where HSS_CODIGO In (Select cuenta from cuentaa) ") + c.Position = 0 + stay_hh = c.GetString("HORAS_TOTALES") * 60 * 60 + stay_mi = c.GetString("MINUTOS_TOTALES") * 60 + stay_ss = c.GetString("SEGUNDOS_TOTALES") + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE HIST_STAY_STORE set HSS_TOT = ? where HSS_CODIGO In (select cuenta from cuentaa)", Array As Object(stay_hh + stay_mi + stay_ss)) + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE HIST_STAY_OUT set HSO_FIN = ? ", Array As Object(sTime)) + c.Close + Catch + ToastMessageShow(".",True) + End Try + + skmt.ExecNonQuery2("update PEDIDO_INICIO_FINAL set PIF_HORA_FINAL = ? where PIF_CLIENTE = ? and PIF_HORA_FINAL = 0", Array As Object (DateTime.Now, la_cuenta.Text)) + ' LogColor($"actualizamos "${la_cuenta.text}, hora_final=${DateTime.now}"$,Colors.Red) + Subs.actualizaTET(la_cuenta.text) + DateTime.TimeFormat = "HH:mm:ss" + +' mandaPendientes 'LO COMENTAMOS PARA PRUEBAS, ACTIVAR AL FINAL!!! + mandapiezas + B4XPages.MainPage.productos.reiniciarlistaProds = True + B4XPages.MainPage.productos.prodsMap.Initialize + B4XPages.MainPage.promos.promosMap.Initialize + Guardar.Enabled = True + gest.Enabled = True + b_cxc.Enabled = True + Tar.Enabled = True + Tels.Enabled = True + b_ventaabordo.Enabled = True + HIST.Enabled = True + banderaimp = 0 + mandaPendientePagare + B4XPages.ShowPage("Principal") + Else If B4XPages.MainPage.recarga = "1" Then + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, COUNT(*) AS CUANTOS FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + ' Log("xxxxxxxxxxxxxxx " & c.GetString("CUANTOS")) + If c.GetString("CUANTOS") > 0 Then + Private cbFactura As Int = 0 + If cb_factura.Checked Then cbFactura = 1 + B4XPages.MainPage.skmt.ExecNonQuery("delete from NOVENTA where NV_CLIENTE In (select cuenta from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO, PC_LON, PC_LAT, PC_ENVIO_OK, PC_FACTURA) VALUES (?,?,?,?,?,?,?,?,?)", Array As Object(clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps, 0, cbFactura)) + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + End If + c.Close + DateTime.TimeFormat = "HHmmss" + sTime=DateTime.Time(DateTime.Now) + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE HIST_STAY_STORE set HSS_OUT = ? where HSS_OUT = 0 AND HSS_CODIGO In (select cuenta from cuentaa)", Array As Object(sTime)) + ' B4XPages.MainPage.skmt.ExecNonQuery("UPDATE HIST_STAY_STORE set HSS_TOT = HSS_OUT - HSS_IN where HSS_CODIGO In (select cuenta from cuentaa)") +' Try +' c=B4XPages.MainPage.skmt.ExecQuery(" Select (substr(HSS_OUT,1,2) - substr(HSS_IN,1,2)) - Case when (substr(HSS_OUT,3,2) - substr(HSS_IN,3,2)) < 0 Then 1 Else 0 end HORAS_TOTALES, " & _ +' "Case when (substr(HSS_OUT,3,2) - substr(HSS_IN,3,2)) < 0 Then (substr(HSS_OUT,3,2) + 60 - substr(HSS_IN,3,2)) " & _ +' " Else (substr(HSS_OUT,3,2) - substr(HSS_IN,3,2)) End - Case when (substr(HSS_OUT,5,2) - substr(HSS_IN,5,2)) < 0 Then 1 Else 0 end MINUTOS_TOTALES, " & _ +' "Case when (substr(HSS_OUT,5,2) - substr(HSS_IN,5,2)) < 0 Then (substr(HSS_OUT,5,2) + 60 - substr(HSS_IN,5,2)) " & _ +' " Else (substr(HSS_OUT,5,2) - substr(HSS_IN,5,2)) end SEGUNDOS_TOTALES " & _ +' " from HIST_STAY_STORE where HSS_CODIGO In (Select cuenta from cuentaa) ") +' c.Position = 0 +' stay_hh = c.GetString("HORAS_TOTALES") * 60 * 60 +' stay_mi = c.GetString("MINUTOS_TOTALES") * 60 +' stay_ss = c.GetString("SEGUNDOS_TOTALES") +' B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE HIST_STAY_STORE set HSS_TOT = ? where HSS_CODIGO In (select cuenta from cuentaa)", Array As Object(stay_hh + stay_mi + stay_ss)) +' B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE HIST_STAY_OUT set HSO_FIN = ? ", Array As Object(sTime)) +' c.Close +' Catch +' ToastMessageShow(".",True) +' End Try + + skmt.ExecNonQuery2("update PEDIDO_INICIO_FINAL set PIF_HORA_FINAL = ? where PIF_CLIENTE = ? and PIF_HORA_FINAL = 0", Array As Object (DateTime.Now, la_cuenta.Text)) + ' LogColor($"actualizamos "${la_cuenta.text}, hora_final=${DateTime.now}"$,Colors.Red) + Subs.actualizaTET(la_cuenta.text) + DateTime.TimeFormat = "HH:mm:ss" + +' mandaPendientes 'LO COMENTAMOS PARA PRUEBAS, ACTIVAR AL FINAL!!! +' mandapiezas + mandaPendientesrecarga + mandapiezasrecarga + B4XPages.MainPage.productos.reiniciarlistaProds = True + B4XPages.MainPage.productos.prodsMap.Initialize + B4XPages.MainPage.promos.promosMap.Initialize + B4XPages.ShowPage("login") + B4XPages.MainPage.recarga = "0" + End If +End Sub + +Sub NUEVO_Click + B4XPages.ShowPage("NuevoCliente") +End Sub + +Sub HIST_Click + B4XPages.ShowPage("Historico") +End Sub + +Sub BT_QR_Click +' sc.isportrait = True +' sc.timeoutDuration = 45 +' sc.theViewFinderXfactor = 0.7 +' sc.theViewFinderYfactor = 0.5 +' sc.theResultColor = Colors.Green +' sc.mustVibrate = True +' sc.BeginScan("sc") +End Sub + +Sub sc_result(atype As String,Values As String, image As Bitmap) + 'Log("Type : " & atype) + 'Log("Value : " & Values) + CODIGO = Values + DD=B4XPages.MainPage.skmt.ExecQuery2("SELECT COUNT(*) AS CUANTOS FROM kmt_info WHERE CAT_CL_NUM_SERIEFISICO = ?", Array As String(CODIGO)) + DD.Position =0 + If DD.GetString("CUANTOS") > 0 Then + MsgboxAsync("Código ya asignado", "AVISO") + Else + If CODIGO.Length = 7 Then + Msgbox2Async("El código "& CODIGO & " es correcto?" , "Title", "Yes", "Cancel", "No", Null, False) + Wait For Msgbox_Result (resultado As Int) + If resultado = DialogResponse.POSITIVE Then + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE kmt_info set CAT_CL_NUM_SERIEFISICO = ?, CAT_CL_LONG = ?, CAT_CL_LAT =? where CAT_CL_CODIGO In (select cuenta from cuentaa)", Array As Object(CODIGO, B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps)) + L_QR.TEXT =CODIGO + L_QR.TextColor = Colors.Blue + B4XPages.MainPage.skmt.ExecNonQuery2("insert into HIST_CODIGO_BARRAS(CODIGOKMTS, CODIGOB, LAT, LON) VALUES (?,?,?,?)", Array As Object(la_cuenta.Text,CODIGO, B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps)) + End If + Else + MsgboxAsync("Código No Valido", "AVISO") + End If + End If + DD.Close +End Sub + +Sub sc_timedout(timedOut As Boolean) + Log("timedOut " & timedOut) +End Sub + +Sub sc_usercancelled(userCancelled As Boolean) + Log("userCancelled " & userCancelled) +End Sub + +Sub calc_ean_checksum(number As String) As String 'this has now become redundant as I am only interested in QR Codes + Dim i As Int + Dim cO As Char + Dim soma As Int + Dim n As Int + Dim digit As Float + soma = 0 + For i=0 To number.Length - 1 + digit = number.SubString2(i,i+1) + n= digit * ((i Mod 2) * 2 + 1) + soma=soma+n + Next + Return number & ( ( 10 - ( soma Mod 10 )) Mod 10 ) +End Sub + +Sub b_mapa_Click + B4XPages.ShowPage("mapas") +End Sub + +Sub B_IMP_Click + ' Primero verificamos si hay una VENTA regular + c = skmt.ExecQuery2("SELECT * FROM PEDIDO WHERE PE_FOLIO = ? AND PE_CLIENTE IN (SELECT CUENTA FROM CUENTAA)", Array As String("VENTA")) + + If c.RowCount > 0 Then + ' Si hay venta regular, la imprimimos + imprime_venta + t1.Initialize("T1", 5000) ' 5 segundos de espera + t1.Enabled = True + Else + ' Si no hay venta regular, verificamos preventas + s = skmt.ExecQuery2("SELECT * FROM PEDIDO WHERE (PE_FOLIO = ? OR PE_FOLIO = ?) AND PE_CLIENTE IN (SELECT CUENTA FROM CUENTAA)", Array As String("PREVENTA_CONTADO", "PREVENTA_CREDITO")) + + If s.RowCount > 0 Then + ' Si hay preventas, las imprimimos inmediatamente + imprime_preventa + Else + ' Si no hay nada que imprimir, mostramos mensaje + Msgbox("No hay registros de venta o preventa para imprimir", "Aviso") + End If + End If + c.Close + If s <> Null Then s.Close +End Sub + +Sub T1_Tick + ' Este timer se ejecuta después de imprimir una venta regular + ' para verificar si hay preventas pendientes + s = skmt.ExecQuery2("SELECT * FROM PEDIDO WHERE (PE_FOLIO = ? OR PE_FOLIO = ?) AND PE_CLIENTE IN (SELECT CUENTA FROM CUENTAA)", Array As String("PREVENTA_CONTADO", "PREVENTA_CREDITO")) + + If s.RowCount > 0 Then + imprime_preventa + End If + + ' Desactivamos el timer siempre + t1.Enabled = False + If s <> Null Then s.Close +End Sub + +Sub TraeVendedor As String + + Private pv As Cursor + Private Preventa As String = "" + pv = B4XPages.MainPage.skmt.ExecQuery("SELECT CAT_VA_VALOR FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = 'nom_usuario'") + If pv.RowCount > 0 Then + pv.Position = 0 + Preventa = pv.GetString("CAT_VA_VALOR") + End If + pv.Close + Return Preventa +End Sub + +Sub TraeNumVendedor As String + Private np As Cursor + Private Tel_Preventa As String = "" + np = B4XPages.MainPage.skmt.ExecQuery("SELECT CAT_VA_VALOR FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = 'TELEFONO'") + If np.RowCount > 0 Then + np.Position = 0 + Tel_Preventa = np.GetString("CAT_VA_VALOR") + End If + np.Close + Return Tel_Preventa +End Sub + +Sub imprime_preventa + c=skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c.Close + + Public Const eLINEFEED As String = "" & Chr(0x0D) & Chr(0x0A) + + ProgressDialogShow("Imprimiendo, un momento ...") + Printer1.DisConnect + If Not(Printer1.IsConnected) Then +' If logger Then Log("conectando 1") + Printer1.Connect + Private cont As Int = 0 + Do While Not(impresoraConectada) + Sleep(1000) + cont = cont + 1 + If cont = 7 Then Printer1.Connect 'Tratamos de reconectar + If cont > 15 Then impresoraConectada = True + Loop + Sleep(500) + impresoraConectada = False + Else +' If logger Then Log("conectando 2") + Printer1.Connect + Private cont As Int = 0 + Do While Not(impresoraConectada) Or Not(Printer1.IsConnected) + Sleep(1000) + cont = cont + 1 + If cont = 2 Then Printer1.Connect + If cont > 4 Then impresoraConectada = True + Loop + Sleep(500) + impresoraConectada = False + End If + + TAMANO = 0 + ESPACIO = 22 + BLANCO = " " + + If ALMACEN = "2" Then + Dim bmp As Bitmap + Printer1.Justify = 1 + bmp.InitializeResize(File.DirAssets, "amigos.jpg", 192, 252, True) 'ignore + Dim myimage As AnImage = Printer1.ImageToBWIMage(bmp) + + myimage = Printer1.DitherImage2D(myimage, 128) + + myimage= Printer1.PackImage(myimage) + Printer1.WriteString(CRLF) ' nudge the printer to show the user something is happening + Printer1.WriteString(Printer1.REVERSE) + + Printer1.PrintImage(myimage) + Printer1.WriteString(Printer1.UNREVERSE) + + Printer1.Justify = 0 + Else If ALMACEN = "3" Then + Dim bmp As Bitmap + Printer1.Justify = 1 + bmp.InitializeResize(File.DirAssets, "logosamiizca2.jpg", 192, 252, True) 'ignore + Dim myimage As AnImage = Printer1.ImageToBWIMage(bmp) + + myimage = Printer1.DitherImage2D(myimage, 128) + + myimage= Printer1.PackImage(myimage) + Printer1.WriteString(CRLF) ' nudge the printer to show the user something is happening + Printer1.WriteString(Printer1.REVERSE) + + Printer1.PrintImage(myimage) + Printer1.WriteString(Printer1.UNREVERSE) + + Printer1.Justify = 0 + End If + + + Printer1.WriteString(" " & eLINEFEED) + Printer1.WriteString("Distribuciones Los Amigos" & eLINEFEED) + Printer1.WriteString(sDate & eLINEFEED) + Printer1.WriteString(sTime & eLINEFEED) + Printer1.WriteString("Vendedor: " & TraeVendedor & eLINEFEED) + Printer1.WriteString("Numero de Vendedor: " & TraeNumVendedor & eLINEFEED) + Printer1.WriteString("Tienda: " & La_nombre.Text & eLINEFEED) + Printer1.WriteString("ID.Cliente: " & la_cuenta.Text & eLINEFEED) + Printer1.WriteString("Calle: " & la_Calle.Text & eLINEFEED) + Printer1.WriteString("Colonia: " & la_col.Text & eLINEFEED) + Printer1.WriteString(" " & eLINEFEED) + + Dim tipos_preventa As List + tipos_preventa.Initialize + tipos_preventa.Add("PREVENTA_CREDITO") + tipos_preventa.Add("PREVENTA_CONTADO") + + For Each tipo As String In tipos_preventa + c = skmt.ExecQuery2("SELECT * FROM PEDIDO WHERE PE_FOLIO = ?", Array As String(tipo)) + + If c.RowCount > 0 Then + 'Encabezados + Dim siesacredi As Cursor = skmt.ExecQuery("SELECT * FROM PAGARES WHERE PA_CLIENTE IN (SELECT CUENTA FROM CUENTAA)") + Printer1.WriteString("----------" & "PREVENTA" & "----------" & eLINEFEED) +' Printer1.WriteString("------" & TIPO & "------" & eLINEFEED) + Printer1.WriteString("Cant. Precio Importe" & eLINEFEED) + Printer1.WriteString("------------------------------" & eLINEFEED) + + 'No son promos + s=skmt.ExecQuery2("select PE_BCAJAS,PE_PRONOMBRE, PE_CANT, length(pe_cant) as L_CANT, PE_COSTOU, length(PE_COSTOU) as L_COSTOU, PE_COSTO_TOT, length(PE_CANT * PE_COSTOU) as L_COSTO_TOT,PE_PROID, PE_CEDIS FROM PEDIDO WHERE PE_FOLIO = ? AND PE_CEDIS = ? AND PE_CLIENTE IN (Select CUENTA from cuentaa) order by PE_PROID", Array As String(tipo, Subs.traeAlmacen)) + + If S.RowCount>0 Then + For i=0 To S.RowCount -1 + S.Position=i + If s.GetString("PE_CEDIS") = s.GetString("PE_PROID") Then + Printer1.WriteString(s.GetString("PE_PRONOMBRE") & eLINEFEED) + Else + If s.GetString("PE_BCAJAS") = 0 Then + Printer1.WriteString(s.GetString("PE_PRONOMBRE") & eLINEFEED) + k1 = NumberFormat(s.GETSTRING("PE_COSTOU"),0,2) + k2 = NumberFormat(s.GETSTRING("PE_COSTO_TOT"),0,2) + + TAMANO = s.GetLong("L_CANT") + k1.Length + k2.Length + ESPACIO = 30 + BLANCO = " " + ESPACIO = ESPACIO - TAMANO + ESPACIO = ESPACIO / 2 + For E=0 To ESPACIO -1 + BLANCO = " " & BLANCO + Next + + Printer1.WriteString(s.GETSTRING("PE_CANT") & BLANCO & k1 & BLANCO & k2& eLINEFEED) + TAMANO = 0 + ESPACIO = 30 + BLANCO = " " + Else + Printer1.WriteString(s.GetString("PE_PRONOMBRE") & eLINEFEED) + k1 = NumberFormat((s.GETSTRING("PE_COSTO_TOT")/s.GETSTRING("PE_CANT")),0,2) + k2 = NumberFormat(s.GETSTRING("PE_COSTO_TOT"),0,2) + + TAMANO = s.GetLong("L_CANT") + k1.Length + k2.Length + ESPACIO = 30 + BLANCO = " " + ESPACIO = ESPACIO - TAMANO + ESPACIO = ESPACIO / 2 + For E=0 To ESPACIO -1 + BLANCO = " " & BLANCO + Next + + Printer1.WriteString(s.GETSTRING("PE_CANT") & BLANCO & k1 & BLANCO & k2& eLINEFEED) + TAMANO = 0 + ESPACIO = 30 + BLANCO = " " + End If + End If + Next + End If + s.Close + + 'Son promos + Printer1.WriteString(" " & eLINEFEED) + s=skmt.ExecQuery2("select PE_PRONOMBRE, PE_CANT, PE_COSTOU, PE_CANT * PE_COSTOU AS PE_COSTO_TOT, PE_PROID, PE_CEDIS FROM PEDIDO WHERE PE_FOLIO = ? AND PE_CEDIS <> ? AND PE_CLIENTE IN (Select CUENTA from cuentaa) order by PE_CEDIS, PE_COSTOU", Array As String(tipo, Subs.traeAlmacen)) + + If s.RowCount>0 Then + Printer1.WriteString("---PRODUCTOS EN PROMOCION---" & eLINEFEED) + Printer1.WriteString("Cant. Precio Importe" & eLINEFEED) + Printer1.WriteString("------------------------------" & eLINEFEED) + + For i=0 To S.RowCount -1 + s.Position=i + k1 = NumberFormat(s.GETSTRING("PE_COSTOU"),0,2) + k2 = NumberFormat(s.GETSTRING("PE_COSTO_TOT"),0,2) + + TAMANO = s.GetString("PE_CANT").Length + k1.Length + k2.Length + ESPACIO = 30 + BLANCO = " " + ESPACIO = ESPACIO - TAMANO + ESPACIO = ESPACIO / 2 + For E=0 To ESPACIO -1 + BLANCO = " " & BLANCO + Next + If s.GetString("PE_PROID") = s.GetString("PE_CEDIS") Then + Printer1.WriteString(s.GetString("PE_PRONOMBRE") & eLINEFEED) + Printer1.WriteString(" "& eLINEFEED) + Else + Printer1.WriteString(s.GetString("PE_PRONOMBRE") & eLINEFEED) + Printer1.WriteString(s.GETSTRING("PE_CANT") & BLANCO & k1 & BLANCO & k2 & eLINEFEED) + End If + + Next + Printer1.WriteString(" " & eLINEFEED) + End If +' s.Close +' +' 'Totales por tipo de preventa +' s=skmt.ExecQuery2("select SUM(PE_COSTO_TOT) AS TOTAL FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) AND PE_FOLIO = ?", Array As String(tipo)) +' s.Position =0 +' Printer1.WriteString("Total: $" & NumberFormat(s.GetString("TOTAL"),0,2) & eLINEFEED) +'' Printer1.WriteString("Total " & tipo.ToLowerCase & ": $" & NumberFormat(s.GetString("TOTAL"),0,2) & eLINEFEED) +' s.Close +' +' +' c= skmt.ExecQuery2("select sum(PE_CANT) as PC_NOART from PEDIDO where PE_CLIENTE in (Select CUENTA from cuentaa) AND PE_PROID NOT IN (SELECT CAT_PA_ID FROM PROMOS_COMP ) AND PE_FOLIO = ?", Array As String(tipo)) +' C.Position=0 +' Printer1.WriteString("Total art. : " & NumberFormat(c.GetString("PC_NOART"),0,0) & eLINEFEED) + '' Printer1.WriteString("Total art. " & tipo.ToLowerCase & ": " & NumberFormat(c.GetString("PC_NOART"),0,0) & eLINEFEED) +' c.Close + + s.Close + s = skmt.ExecQuery($"SELECT SUM(CAT_GP_PRECIO * PE_CANT) As SUBTOTAL FROM PEDIDO P INNER JOIN CAT_GUNAPROD C ON P.PE_PROID = C.CAT_GP_ID And P.PE_CEDIS = P.PE_PROID WHERE PE_CLIENTE IN (Select cuenta FROM CUENTAA) And PE_FOLIO = 'PREVENTA_CONTADO'"$) + Dim subtotal As Double + s.Position = 0 + subtotal = s.GetDouble("SUBTOTAL") + s.Close + + Dim subtot As Cursor = skmt.ExecQuery("SELECT SUM(P.PE_COSTO_TOT) As TOTAL_SIN_PROMO FROM PEDIDO P INNER JOIN CAT_GUNAPROD C ON P.PE_PROID = C.CAT_GP_ID WHERE P.PE_CLIENTE IN (Select cuenta FROM CUENTAA) And P.PE_FOLIO = 'PREVENTA_CONTADO' And PE_CEDIS Not IN (Select DISTINCT PE_PROID FROM PEDIDO)") + subtot.Position = 0 + subtotal = subtotal + subtot.GetDouble("TOTAL_SIN_PROMO") + subtot.Close + + subtotal = Round2(subtotal, 2) + Printer1.WriteString("Subtotal: $" & NumberFormat(subtotal, 0, 2) & eLINEFEED) + + ' Calcular el descuento + Dim descuento As Double + s = skmt.ExecQuery2("SELECT SUM(PE_COSTO_TOT) AS TOTAL FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) AND PE_FOLIO = ?", Array As String("PREVENTA_CONTADO")) + s.Position = 0 + Dim total As Double = s.GetDouble("TOTAL") + descuento = subtotal - total + descuento = Round2(descuento, 2) ' Redondear descuento con precisión de 2 decimales + s.Close + + ' Mostrar el total de la preventa + Printer1.WriteString("Total preventa: $" & NumberFormat(total, 0, 2) & eLINEFEED) + Printer1.WriteString("Usted ahorro: $" & NumberFormat(descuento, 0, 2) & eLINEFEED) + + + ' Contar los artículos en preventa + Dim c As Cursor = skmt.ExecQuery2("SELECT SUM(PE_CANT) AS PC_NOART FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) AND PE_PROID NOT IN (SELECT CAT_PA_ID FROM PROMOS_COMP) AND PE_FOLIO = ?", Array As String("PREVENTA_CONTADO")) + c.Position = 0 + Printer1.WriteString("Total art. preventa: " & NumberFormat(c.GetDouble("PC_NOART"), 0, 0) & eLINEFEED) + c.Close + + 'Información adicional para crédito + If tipo = "PREVENTA_CREDITO" Then + Dim siesacredi As Cursor = skmt.ExecQuery("SELECT * FROM PAGARES WHERE PA_CLIENTE IN (SELECT CUENTA FROM CUENTAA)") + If siesacredi.RowCount > 0 Then + siesacredi.Position = 0 + Dim monto As String = siesacredi.GetString("PA_MONTO") + If monto = Null Or monto = "" Then monto = "0" + Printer1.WriteString("Total a credito: $" & NumberFormat(monto, 0, 2) & eLINEFEED) + + s=skmt.ExecQuery2("select SUM(PE_COSTO_TOT) AS TOTAL FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) AND PE_FOLIO = ?", Array As String(tipo)) + s.Position =0 + Dim total As Double = IIf(s.GetString("TOTAL") = Null Or s.GetString("TOTAL") = "", 0, s.GetString("TOTAL")) + Dim paMonto As Double = IIf(siesacredi.GetString("PA_MONTO") = Null Or siesacredi.GetString("PA_MONTO") = "", 0, siesacredi.GetString("PA_MONTO")) + + If total > paMonto Then + Printer1.WriteString("Total a contado: $" & NumberFormat((s.GetString("TOTAL")-siesacredi.GetString("PA_MONTO")),0,2) & eLINEFEED) + End If + s.Close + End If + End If + + Printer1.WriteString(" " & eLINEFEED) + End If + Next + + Printer1.WriteString("------------------------------" & eLINEFEED) + Printer1.WriteString("----ESTE TICKET NO ES UN -----" & eLINEFEED) + Printer1.WriteString("--COMPROBANTE DE PAGO NI FISCAL-" & eLINEFEED) + Printer1.WriteString("--ES UN TICKET INFORMATIVO----" & eLINEFEED) + Printer1.WriteString("------------------------------" & eLINEFEED) + If ALMACEN = "2" Then + Printer1.WriteString("TEL.: 5591972829" & eLINEFEED) + Else If ALMACEN = "3" Then + Printer1.WriteString("TEL.: 5579797285" & eLINEFEED) + End If + Printer1.WriteString(" " & eLINEFEED) + Printer1.WriteString(" " & eLINEFEED) + Printer1.WriteString(" " & eLINEFEED) + Sleep(1000) + Printer1.DisConnect + + ProgressDialogHide + + Msgbox2Async("Deseas imprimir de nuevo el ticket?", "ATENCION","SI","", "NO",LoadBitmap(File.DirAssets,"alert2.png"), False) + Wait For Msgbox_Result (resultado As Int) + If resultado = DialogResponse.POSITIVE Then + B_IMP_Click + Else + GUADAVENTA2 + End If +End Sub + +Sub imprime_venta + c=skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c.Close +' c=Starter.skmt.ExecQuery2("SELECT CAT_VA_VALOR FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION =?", Array As String ("SUCURSAL")) +' c.Position = 0 +' sucursal = c.GetString("CAT_VA_VALOR") +' c.Close + + Public Const eLINEFEED As String = "" & Chr(0x0D) & Chr(0x0A) + + ProgressDialogShow("Imprimiendo, un momento ...") + Printer1.DisConnect + If Not(Printer1.IsConnected) Then +' If logger Then Log("conectando 1") + Printer1.Connect + Private cont As Int = 0 + Do While Not(impresoraConectada) + Sleep(1000) + cont = cont + 1 + If cont = 7 Then Printer1.Connect 'Tratamos de reconectar + If cont > 15 Then impresoraConectada = True + Loop + Sleep(500) + impresoraConectada = False + Else +' If logger Then Log("conectando 2") + Printer1.Connect + Private cont As Int = 0 + Do While Not(impresoraConectada) Or Not(Printer1.IsConnected) + Sleep(1000) + cont = cont + 1 + If cont = 2 Then Printer1.Connect + If cont > 4 Then impresoraConectada = True + Loop + Sleep(500) + impresoraConectada = False + End If + + TAMANO = 0 + ESPACIO = 22 + BLANCO = " " +' Dim bmp As Bitmap +' bmp.InitializeResize(File.DirAssets, "mariana.jpg", 192, 250, True) 'ignore +' Dim myimage As AnImage = Printer1.ImageToBWIMage(bmp) + +' myimage = Printer1.DitherImage2D(myimage, 128) +' +' myimage= Printer1.PackImage(myimage) +' Printer1.WriteString(eLINEFEED) ' nudge the printer to show the user something is happening +' Printer1.WriteString(Printer1.REVERSE) +' +' Printer1.PrintImage(myimage) +' Printer1.WriteString(Printer1.UNREVERSE) + +' Printer1.Justify = 1 + 'printer.Initialize(cmp20.OutputStream) +' Printer1.WriteString("DISTRIBUIDORA ROCHA TULA PACHUCA" & eLINEFEED) + Printer1.WriteString("IZCA Distribuciones" & eLINEFEED) +' Printer1.WriteString(sucursal & eLINEFEED) + Printer1.WriteString(sDate & eLINEFEED) + Printer1.WriteString(sTime & eLINEFEED) + Printer1.WriteString("Vendedor: " & TraeVendedor & eLINEFEED) + Printer1.WriteString("Numero de Vendedor: " & TraeNumVendedor & eLINEFEED) + Printer1.WriteString("Tienda: " & La_nombre.Text & eLINEFEED) + Printer1.WriteString("ID.Cliente: " & la_cuenta.Text & eLINEFEED) + Printer1.WriteString("Calle: " & la_Calle.Text & eLINEFEED) + Printer1.WriteString("Colonia: " & la_col.Text & eLINEFEED) +' Printer1.WriteString("C.P.: " & la_cp.Text & eLINEFEED) +' Printer1.WriteString("Entre calle1: " & l_entre1.Text & eLINEFEED) +' Printer1.WriteString("Entre Calle2: " & l_entre2.Text & eLINEFEED) + Printer1.WriteString(" " & eLINEFEED) + c = skmt.ExecQuery2("SELECT * FROM PEDIDO WHERE PE_FOLIO = ?",Array As String("VENTA")) + If c.RowCount > 0 Then + Printer1.WriteString("-----------VENTA-----------" & eLINEFEED) + +' Printer1.WriteString("--------------------------------" & eLINEFEED) + Printer1.WriteString("Cant. Precio Importe" & eLINEFEED) + + Printer1.WriteString("------------------------------" & eLINEFEED) + ' aqui es donde esta el pedo de julieta de los descuentos quitar el precio2 pero meter un if para saber si es ruta especial o es normal o que show. + s=skmt.ExecQuery2("select PE_BCAJAS, PE_PRONOMBRE, PE_CANT, length(pe_cant) as L_CANT, PE_COSTOU, length(PE_COSTOU) as L_COSTOU, PE_COSTO_TOT, length(PE_CANT * PE_COSTOU) as L_COSTO_TOT,PE_PROID, PE_CEDIS FROM PEDIDO WHERE PE_FOLIO = ? AND LENGTH(PE_CEDIS) < 4 AND PE_CLIENTE IN (Select CUENTA from cuentaa) order by PE_PROID", Array As String("VENTA")) + If S.RowCount>0 Then + For i=0 To S.RowCount -1 + S.Position=i + If s.GetString("PE_CEDIS") = s.GetString("PE_PROID") Then + Printer1.WriteString(s.GetString("PE_PRONOMBRE") & eLINEFEED) + + Else + + If s.GetString("PE_BCAJAS") = 0 Then + + + Printer1.WriteString(s.GetString("PE_PRONOMBRE") & eLINEFEED) +' TAMANO = s.GetLong("L_CANT") + TAMANO +' If s.GetLong("L_COSTOU") = 1 Then +' TAMANO = s.GetLong("L_COSTOU") + TAMANO + 4 +' Else If s.GetLong("L_COSTOU") = 2 Then +' TAMANO = s.GetLong("L_COSTOU") + TAMANO + 3 +' Else If s.GetLong("L_COSTOU") = 3 Then +' TAMANO = s.GetLong("L_COSTOU") + TAMANO + 2 +' Else If s.GetLong("L_COSTOU") = 4 Then +' TAMANO = s.GetLong("L_COSTOU") + TAMANO + 1 +' Else +' TAMANO = s.GetLong("L_COSTOU") + TAMANO +' End If + ' +' If s.GetLong("L_COSTO_TOT") = 1 Then +' TAMANO = s.GetLong("L_COSTO_TOT") + TAMANO + 4 +' Else If s.GetLong("L_COSTO_TOT") = 2 Then +' TAMANO = s.GetLong("L_COSTO_TOT") + TAMANO + 3 +' Else If s.GetLong("L_COSTO_TOT") = 3 Then +' TAMANO = s.GetLong("L_COSTO_TOT") + TAMANO + 2 +' Else If s.GetLong("L_COSTO_TOT") = 4 Then +' TAMANO = s.GetLong("L_COSTO_TOT") + TAMANO + 1 +' Else +' TAMANO = s.GetLong("L_COSTO_TOT") + TAMANO +' End If +' +' ESPACIO = ESPACIO - TAMANO +' +' For E=0 To ESPACIO -1 +' BLANCO = " " & BLANCO +' Next +' Printer1.Justify = 0 +' Printer1.WriteString( s.GETSTRING("PE_CANT")& BLANCO) +' Printer1.Justify = 1 +' Printer1.WriteString(s.GETSTRING("PE_COSTOU")& BLANCO) +' Printer1.Justify = 2 +' Printer1.WriteString(s.GETSTRING("PE_COSTO_TOT") & eLINEFEED ) + + k1 = NumberFormat(s.GETSTRING("PE_COSTOU"),0,2) + k2 = NumberFormat(s.GETSTRING("PE_COSTO_TOT"),0,2) + + TAMANO = s.GetLong("L_CANT") + k1.Length + k2.Length + ESPACIO = 30 + BLANCO = " " + ESPACIO = ESPACIO - TAMANO + ESPACIO = ESPACIO / 2 + For E=0 To ESPACIO -1 + BLANCO = " " & BLANCO + Next + + Printer1.WriteString(s.GETSTRING("PE_CANT") & BLANCO & k1 & BLANCO & k2& eLINEFEED ) + + TAMANO = 0 + ESPACIO = 30 + BLANCO = " " +' Printer1.Justify = 0 + Else + Printer1.WriteString(s.GetString("PE_PRONOMBRE") & eLINEFEED) +' TAMANO = s.GetLong("L_CANT") + TAMANO +' If s.GetLong("L_COSTOU") = 1 Then +' TAMANO = s.GetLong("L_COSTOU") + TAMANO + 4 +' Else If s.GetLong("L_COSTOU") = 2 Then +' TAMANO = s.GetLong("L_COSTOU") + TAMANO + 3 +' Else If s.GetLong("L_COSTOU") = 3 Then +' TAMANO = s.GetLong("L_COSTOU") + TAMANO + 2 +' Else If s.GetLong("L_COSTOU") = 4 Then +' TAMANO = s.GetLong("L_COSTOU") + TAMANO + 1 +' Else +' TAMANO = s.GetLong("L_COSTOU") + TAMANO +' End If + ' +' If s.GetLong("L_COSTO_TOT") = 1 Then +' TAMANO = s.GetLong("L_COSTO_TOT") + TAMANO + 4 +' Else If s.GetLong("L_COSTO_TOT") = 2 Then +' TAMANO = s.GetLong("L_COSTO_TOT") + TAMANO + 3 +' Else If s.GetLong("L_COSTO_TOT") = 3 Then +' TAMANO = s.GetLong("L_COSTO_TOT") + TAMANO + 2 +' Else If s.GetLong("L_COSTO_TOT") = 4 Then +' TAMANO = s.GetLong("L_COSTO_TOT") + TAMANO + 1 +' Else +' TAMANO = s.GetLong("L_COSTO_TOT") + TAMANO +' End If +' +' ESPACIO = ESPACIO - TAMANO +' +' For E=0 To ESPACIO -1 +' BLANCO = " " & BLANCO +' Next +' Printer1.Justify = 0 +' Printer1.Justify = 0 +' Printer1.WriteString( s.GETSTRING("PE_CANT")& BLANCO) +' Printer1.Justify = 1 +' Printer1.WriteString((s.GETSTRING("PE_COSTOU")/s.GETSTRING("PE_CANT"))& BLANCO) +' Printer1.Justify = 2 +' Printer1.WriteString(s.GETSTRING("PE_COSTO_TOT") & eLINEFEED ) +' TAMANO = 0 +' ESPACIO = 22 +' BLANCO = " " + + + + k1 = NumberFormat((s.GETSTRING("PE_COSTO_TOT")/s.GETSTRING("PE_CANT")),0,2) + k2 = NumberFormat(s.GETSTRING("PE_COSTO_TOT"),0,2) + + TAMANO = s.GetLong("L_CANT") + k1.Length + k2.Length + ESPACIO = 30 + BLANCO = " " + ESPACIO = ESPACIO - TAMANO + ESPACIO = ESPACIO / 2 + For E=0 To ESPACIO -1 + BLANCO = " " & BLANCO + Next + + Printer1.WriteString(s.GETSTRING("PE_CANT") & BLANCO & k1 & BLANCO & k2& eLINEFEED ) + + TAMANO = 0 + ESPACIO = 30 + BLANCO = " " +' Printer1.Justify = 0 + End If + End If + Next + End If +' Printer1.Justify = 0 + s.Close + Printer1.WriteString(" " & eLINEFEED) + s=skmt.ExecQuery2("select PE_PRONOMBRE, PE_CANT, length(pe_cant) as L_CANT, PE_COSTOU, length(PE_COSTOU) as L_COSTOU,PE_CANT * PE_COSTOU AS PE_COSTO_TOT, length(PE_CANT * PE_COSTOU) as L_COSTO_TOT,PE_PROID, PE_CEDIS FROM PEDIDO WHERE PE_FOLIO = ? AND LENGTH(PE_CEDIS) > 3 AND PE_CLIENTE IN (Select CUENTA from cuentaa) order by PE_CEDIS, PE_COSTOU", Array As String("VENTA")) + If S.RowCount>0 Then + Printer1.WriteString("-------PROMOS VENTA--------" & eLINEFEED) + Printer1.WriteString("Cant. Precio Importe" & eLINEFEED) + Printer1.WriteString("------------------------------" & eLINEFEED) + For i=0 To S.RowCount -1 + s.Position=i + If s.GetString("PE_CEDIS") = s.GetString("PE_PROID") Then + Printer1.WriteString("* "& s.GetString("PE_PRONOMBRE") & eLINEFEED) + Log("promo") + Else +' TAMANO = 0 + Printer1.WriteString(s.GetString("PE_PRONOMBRE") & eLINEFEED) +' TAMANO = s.GetLong("L_CANT") + TAMANO +' If s.GetLong("L_COSTOU") = 1 Then +' TAMANO = s.GetLong("L_COSTOU") + TAMANO + 3 +' Else If s.GetLong("L_COSTOU") = 2 Then +' TAMANO = s.GetLong("L_COSTOU") + TAMANO + 3 +' Else If s.GetLong("L_COSTOU") = 3 Then +' TAMANO = s.GetLong("L_COSTOU") + TAMANO + 2 +' Else If s.GetLong("L_COSTOU") = 4 Then +' TAMANO = s.GetLong("L_COSTOU") + TAMANO + 1 +' Else +' TAMANO = s.GetLong("L_COSTOU") + TAMANO +' End If + ' +' If s.GetLong("L_COSTO_TOT") = 1 Then +' TAMANO = s.GetLong("L_COSTO_TOT") + TAMANO + 3 +' Else If s.GetLong("L_COSTO_TOT") = 2 Then +' TAMANO = s.GetLong("L_COSTO_TOT") + TAMANO + 3 +' Else If s.GetLong("L_COSTO_TOT") = 3 Then +' TAMANO = s.GetLong("L_COSTO_TOT") + TAMANO + 2 +' Else If s.GetLong("L_COSTO_TOT") = 4 Then +' TAMANO = s.GetLong("L_COSTO_TOT") + TAMANO + 1 +' Else +' TAMANO = s.GetLong("L_COSTO_TOT") + TAMANO +' End If +' +' ESPACIO = ESPACIO - TAMANO +' +' For E=0 To ESPACIO -1 +' BLANCO = " " & BLANCO +' Next + '' Printer1.WriteString(BLANCO & s.GETSTRING("PE_CANT") & " X $" & s.GETSTRING("PE_COSTOU") & " $" & s.GETSTRING("PE_COSTO_TOT") & eLINEFEED ) +' Printer1.Justify = 0 +' Printer1.WriteString( s.GETSTRING("PE_CANT")& BLANCO) +' Printer1.Justify = 1 +' Printer1.WriteString(s.GETSTRING("PE_COSTOU")& BLANCO) +' Printer1.Justify = 2 +' Printer1.WriteString(s.GETSTRING("PE_COSTO_TOT") & eLINEFEED ) +' TAMANO = 0 +' ESPACIO = 22 +' BLANCO = " " + + k1 = NumberFormat(s.GETSTRING("PE_COSTOU"),0,2) + k2 = NumberFormat(s.GETSTRING("PE_COSTO_TOT"),0,2) + + TAMANO = s.GetLong("L_CANT") + k1.Length + k2.Length + ESPACIO = 30 + BLANCO = " " + ESPACIO = ESPACIO - TAMANO + ESPACIO = ESPACIO / 2 + For E=0 To ESPACIO -1 + BLANCO = " " & BLANCO + Next + + Printer1.WriteString(s.GETSTRING("PE_CANT") & BLANCO & k1 & BLANCO & k2& eLINEFEED ) + + TAMANO = 0 + ESPACIO = 30 + BLANCO = " " +' Printer1.Justify = 0 + End If + Next + Printer1.WriteString(" " & eLINEFEED) + End If + s.Close +' Printer1.Justify = 0 + s=skmt.ExecQuery2("select SUM(PE_COSTO_TOT) AS TOTAL FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) AND PE_FOLIO = ?", Array As String("VENTA")) + s.Position =0 + ' If s.GetString("TOTAL") - s.GetString("TOTAL2") <> 0 Then + ' Printer1.WriteString("Descuento: $" & (s.GetString("TOTAL2") - s.GetString("TOTAL"))) + ' End If + Printer1.WriteString("Total venta: $" & NumberFormat( s.GetString("TOTAL"),0,2) & eLINEFEED) + + s.Close + c= skmt.ExecQuery2("select sum(PE_CANT) as PC_NOART from PEDIDO where PE_CLIENTE in (Select CUENTA from cuentaa) AND PE_PROID NOT IN (SELECT CAT_PA_ID FROM PROMOS_COMP ) AND PE_FOLIO = ?", Array As String("VENTA")) + C.Position=0 + Printer1.WriteString("Total art. venta: " &NumberFormat( c.GetString("PC_NOART"),0,0) & eLINEFEED) + c.Close + +' Printer1.WriteString(" " & eLINEFEED) + End If + + +' Printer1.WriteString(" " & eLINEFEED) +' Printer1.WriteString("------------------------------" & eLINEFEED) +' +' s=skmt.ExecQuery("select SUM(PE_COSTO_TOT) AS TOTAL FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") +' s.Position =0 +' ' If s.GetString("TOTAL") - s.GetString("TOTAL2") <> 0 Then +' ' Printer1.WriteString("Descuento: $" & (s.GetString("TOTAL2") - s.GetString("TOTAL"))) +' ' End If +' Printer1.WriteString("Total: $" & s.GetString("TOTAL") & eLINEFEED) +' s.Close +' c= skmt.ExecQuery("select sum(PE_CANT) as PC_NOART from PEDIDO where PE_CLIENTE in (Select CUENTA from cuentaa) AND PE_PROID NOT IN (SELECT CAT_PA_ID FROM PROMOS_COMP )") +' C.Position=0 +' Printer1.WriteString("Total Articulos: " & c.GetString("PC_NOART") & eLINEFEED) +' c.Close + + Printer1.WriteString(" " & eLINEFEED) + Printer1.WriteString("------------------------------" & eLINEFEED) +' Printer1.WriteString("ENTREGA EN :" & eLINEFEED) +' Printer1.WriteString(la_Calle.Text & eLINEFEED) + Printer1.WriteString("----ESTE TICKET NO ES UN -----" & eLINEFEED) + Printer1.WriteString("--COMPROBANTE FISCAL, SOLO ES-" & eLINEFEED) + Printer1.WriteString("--------INFORMATIVO-----------" & eLINEFEED) + Printer1.WriteString("------------------------------" & eLINEFEED) + Printer1.WriteString(" " & eLINEFEED) + Printer1.WriteString(" " & eLINEFEED) + Printer1.WriteString(" " & eLINEFEED) + Sleep(1000) + Printer1.DisConnect + + ProgressDialogHide + + s = skmt.ExecQuery2("SELECT * FROM PEDIDO WHERE (PE_FOLIO = ? OR PE_FOLIO = ?) AND PE_CLIENTE IN (SELECT CUENTA FROM CUENTAA)",Array As String("PREVENTA_CREDITO", "PREVENTA_CONTADO")) + If s.RowCount = 0 Then + Msgbox2Async("Deseas imprimir de nuevo el ticket?", "ATENCION","SI","", "NO",LoadBitmap(File.DirAssets,"alert2.png"), False) + Wait For Msgbox_Result (resultado As Int) + If resultado = DialogResponse.POSITIVE Then + B_IMP_Click + Else + GUADAVENTA2 + End If + End If + +' printer.Flush + ' printer.Close +End Sub + +Sub Printer1_Connected (Success As Boolean) +' If Logger Then Log("Printer1_Connected") + If Success Then + ToastMessageShow("Impresora conectada", False) + Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("MACIMP")) + Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("MACIMP",Starter.mac_impresora)) +' If logger Then LogColor("Impresora conectada", Colors.Green) +' B_IMP2.Enabled = True + impresoraConectada = True + Else +' Msgbox(Printer1.ConnectedErrorMsg, "Error connecting.") 'ignore +' ToastMessageShow("Error conectando la impresora", False) + LogColor("Error conectando la impresora", Colors.Red) + errorImpresora = errorImpresora + 1 + If errorImpresora > 1 Then + Starter.MAC_IMPRESORA = "0" + errorImpresora = 0 + End If + End If +End Sub + +Sub Printer1_Error + Log("error printer") +End Sub + +Sub Printer_Connected (Success As Boolean) + If Success Then +' B_IMP.Enabled = True +' PASA_IMP = "1" + Else +' B_IMP.Enabled = False + If Msgbox2("", "Printer Error","Reprint","Cancel","",Null) = DialogResponse.POSITIVE Then 'ignore + StartPrinter + End If + End If +End Sub + +Sub StartPrinter + Dim PairedDevices As Map + Dim L1 As List + Dim resimp As Int + ToastMessageShow("Printing.....",True) + PairedDevices.Initialize + Try + PairedDevices = cmp20.GetPairedDevices + Catch + Msgbox("Getting Paired Devices","Printer Error") 'ignore + printer.Close + cmp20.Disconnect + End Try + + If PairedDevices.Size = 0 Then + Msgbox("Error Connecting to Printer - Printer Not Found","") 'ignore + Return + End If + + If PairedDevices.Size = 1 Then + Try + cmp20.Connect(PairedDevices.Get(PairedDevices.GetKeyAt(0))) + Catch + Msgbox("Connecting","Printer Error") 'ignore + printer.Close + cmp20.Disconnect + End Try + Else + L1.Initialize + For i = 0 To PairedDevices.Size - 1 + L1.Add(PairedDevices.GetKeyAt(i)) + Next + resimp = InputList(L1, "Choose device", -1) 'ignore + If resimp <> DialogResponse.CANCEL Then + cmp20.Connect(PairedDevices.Get(L1.Get(resimp))) + End If + End If +End Sub + +Sub B_GUARDA_C_Click + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + c.Close + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA) VALUES(?,?,?,?,?,?,?,?,?,?) ", Array As Object ("4",.01 , .01, 2, "KNORR RINDE MAS 70 GR", "GUNA2",la_cuenta.TEXT, sDate & sTime, usuario,LA_RUTA)) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_FACE(HFCLIENTE, HFALIAS,HFRUTA,HFALMACEN) VALUES (?,?,?,?) ", Array As Object(la_cuenta.Text, I_COMPRA.Text,LA_RUTA,ALMACEN)) + Panel1.Visible = False +' b_like.Visible = True + Tar.Visible = True + Tels.Visible = True + gest.Visible = True +' b_like.Visible = False + Guardar.Visible = True +End Sub + +Sub b_venta_Click + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) +' s=B4XPages.MainPage.skmt.ExecQuery("select COUNT(*) AS CUANTOS from HIST_ENCUESTA where HE_CLIE In (Select cuenta from cuentaa)") +' s.Position= 0 +' If s.GetString("CUANTOS") = 0 Then +' c=B4XPages.MainPage.skmt.ExecQuery2("SELECT CAT_VA_VALOR FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String("CUESTIONARIO")) +' c.Position =0 +' If c.GetString("CAT_VA_VALOR") = "2" Then +' res = Msgbox2("El cliente maneja CAZARES ?","CAZARES", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'Ignore +' If res = DialogResponse.POSITIVE Then +' B4XPages.MainPage.skmt.ExecNonQuery2("insert into HIST_ENCUESTA(HE_CLIE, HE_RES, HE_FECHA, HE_TIPO) VALUES (?,?,?,?)", Array As Object(la_cuenta.Text, "SI",sDate & sTime,"TIENE")) +' Panel1.Visible =True +' I_COMPRA.Text = "" +' BT_QR.Visible= False +' Else +' B4XPages.MainPage.skmt.ExecNonQuery2("insert into HIST_ENCUESTA(HE_CLIE, HE_RES, HE_FECHA, HE_TIPO) VALUES (?,?,?,?)", Array As Object(la_cuenta.Text, "NO",sDate & sTime,"TIENE")) +' B4XPages.MainPage.tipo_venta = "VENTA" +' B4XPages.ShowPage("Productos") +' End If +' Else +' B4XPages.MainPage.tipo_venta = "VENTA" +' B4XPages.ShowPage("Productos") +' End If +' c.Close +' Else +' B4XPages.MainPage.tipo_venta = "VENTA" +' B4XPages.ShowPage("Productos") +' End If +' s.Close +End Sub + +Sub B_E_NEXT_Click + If E_RES_E.Text <> "" Then + B4XPages.MainPage.skmt.ExecNonQuery2("insert into HIST_ENCUESTA(HE_CLIE, HE_RES, HE_FECHA, HE_TIPO) VALUES (?,?,?,?)", Array As Object(la_cuenta.Text, E_RES_E.Text,sDate & sTime,"DONDE")) + Panel2.Visible = False + B4XPages.ShowPage("Productos") + Else + Msgbox("SIN RESPUESTA","AVISO") 'Ignore + End If +End Sub + +Sub RB1_CheckedChange(Checked As Boolean) + If RB1.Checked = True Then + E_RES_E.Text = "CENTRAL DE ABASTOS" + End If +End Sub + +Sub RB2_CheckedChange(Checked As Boolean) + If RB2.Checked = True Then + E_RES_E.Text = "AUTOSERVICIO" + End If +End Sub + +Sub RB3_CheckedChange(Checked As Boolean) + If RB3.Checked = True Then + E_RES_E.Text = "CLUB DE PRECIO" + End If +End Sub + +Sub RB4_CheckedChange(Checked As Boolean) + If RB4.Checked = True Then + E_RES_E.Text = "DIRECTO PEDEGREE" + End If +End Sub + +'Sub b_like_Click +' Panel1.Visible = True +' b_like.Visible = False +' Tar.Visible = False +' Tels.Visible = False +' gest.Visible = False +' b_venta.Visible = False +' Guardar.Visible = False +'End Sub + +'Sub B_GPS_Click +' Dim result As Int +' result = Msgbox2("Esta seguro de cambiar las coordenadas de este cliente", "Aviso GPS", "SI", "", "NO", LoadBitmap(File.DirAssets, "alerta.jpg")) 'Ignore +' If result = DialogResponse.Positive Then +' B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE kmt_info SET CAT_CL_LAT = ?, CAT_CL_LONG = ? where CAT_CL_CODIGO In (Select cuenta from cuentaa)", Array As Object(B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps)) +' B4XPage_Appear +' End If +'End Sub + +Private Sub p_cliente_Click + 'Nada aqui, solo esta para que los clics no se pasen hacia atras. +End Sub + +Private Sub cb_factura_CheckedChange(Checked As Boolean) +' Log(Checked) + If Checked Then p_cbFactura.Color = Colors.Green Else p_cbFactura.Color = Colors.red +End Sub + +Sub mandaPendientes +' PEDIDO_CLIENTE (Pendientes) + Log(">>>>>>> MANDA PENDIENTES") + Dim PCNoArts As String + Dim PCMonto As String + If usuario <> "KMTS1" Then +' c = skmt.ExecQuery("SELECT * FROM PEDIDO_CLIENTE where PC_ENVIO_OK = 0") +' Log($"Pedido_Cliente PENDIENTE: ${c.RowCount}"$) +' If c.RowCount > 0 Then +' For i = 0 To c.RowCount - 1 +' c.Position = i +' Log($"${c.GetString("PC_CLIENTE")}|${c.GetString("PC_FECHA")}|${c.GetString("PC_ENVIO_OK")}|"$) +' Dim cmd As DBCommand +' cmd.Initialize +' cmd.Name = "insert_pedidos_IZCA" +' cmd.Parameters = Array As Object(c.GetString("PC_CLIENTE"), c.GetString("PC_FECHA"), c.GetString("PC_USER"), c.GetString("PC_NOART"), c.GetString("PC_MONTO"), c.GetString("PC_LON"), c.GetString("PC_LAT"), Subs.traeAlmacen, B4XPages.MainPage.principal.l_ruta.text, c.GetString("PC_COSTO_SIN"), c.GetString("PC_FACTURA")) +' PCNoArts = c.GetString("PC_NOART") +' PCMonto = c.GetString("PC_MONTO") +'' sql.insert_pedidos_INTMEX=INSERT INTO INTMEX.PEDIDO_CLIENTE(PC_FECHA_SINC,PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT,PC_IDALMACEN, PC_RUTA, PC_COSTO_SIN, PC_FACTURA) VALUES (SYSDATE,(?),(?),(?),(?),(?),(?),(?),(?),(?),(?),(?)) +' reqManager.ExecuteCommand(cmd , $"ins_pedidosPendientes_head_${c.GetString("PC_CLIENTE")}"$) +' Next +' End If + + 'PEDIDO (Pendientes) + c = skmt.ExecQuery($"SELECT PE_ENVIO_OK, PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_COSTO_SIN, PE_RUTA, PE_DESC, PE_FOLIO, PE_CANTC, PE_BCAJAS FROM PEDIDO where PE_ENVIO_OK <> 1"$) + Log($"Pedido PENDIENTE: ${c.RowCount}"$) + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_pedido2_IZCAP3" + cmd.Parameters = Array As Object(C.GetString("PE_CEDIS"),ALMACEN,C.GetString("PE_COSTO_TOT"),C.GetString("PE_COSTOU"),C.GetString("PE_CANT"),C.GetString("PE_PRONOMBRE"),C.GetString("PE_PROID"),C.GetString("PE_CLIENTE"),C.GetString("PE_FECHA"),C.GetString("PE_USUARIO"),C.GetString("PE_RUTA"), C.GetString("PE_COSTO_SIN"),C.GetString("PE_DESC"),c.GetString("PE_FOLIO"),C.GetString("PE_CANTC"),c.GetString("PE_BCAJAS")) + reqManager.ExecuteCommand(cmd , $"ins_pedidosPendientes_prods_${c.GetString("PE_CLIENTE")}_${c.GetString("PE_PROID")}"$) + Log($">>>> INS_PEDIDO= ${C.GetString("PE_CEDIS")},${ALMACEN},${C.GetString("PE_COSTO_TOT")},${C.GetString("PE_COSTOU")},${C.GetString("PE_CANT")}, ${C.GetString("PE_PRONOMBRE")}, ${C.GetString("PE_PROID")}, ${C.GetString("PE_CLIENTE")}, ${C.GetString("PE_FECHA")}, ${C.GetString("PE_USUARIO")}, ${C.GetString("PE_RUTA")}, ${C.GetString("PE_COSTO_SIN")}, ${C.GetString("PE_DESC")}, ${c.GetString("PE_FOLIO")}, ${PCNoArts}, ${PCMonto}"$) +' sql.insert_pedido_INTMEX=INSERT INTO INTMEX.PEDIDO (PE_CODPROMO,PE_FECHA_SINC,PE_IDALMACEN,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA,PE_COSTO_SIN, PE_DESCUENTO, PE_TIPO) VALUES ((?),SYSDATE,(?),(?),(?),(?),(?),(?),(?),(?),(?),(?),(?),nvl((?),0),(?)) +' sql.insert_pedido2_INTMEX=INSERT INTO INTMEX.PEDIDO (PE_CODPROMO,PE_FECHA_SINC,PE_IDALMACEN,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA,PE_COSTO_SIN, PE_DESCUENTO, PE_TIPO, PE_CANT_TOTAL, PE_VENTA_TOTAL) VALUES ((?),SYSDATE,(?),(?),(?),(?),(?),(?),(?),(?),(?),(?),(?),nvl((?),0),(?),(?),(?)) + Next + End If + + 'ABONOS + Dim ab As Cursor = B4XPages.MainPage.skmt.ExecQuery($"SELECT * from ABONOS where a_enviado is null"$) + Log(ab.RowCount) + If ab.RowCount > 0 Then + For i=0 To ab.RowCount -1 + ab.Position = i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_abono_IZCA" + cmd.Parameters = Array As Object( ab.GetString("a_usuario"), ab.GetString("a_ruta"), ab.GetString("a_cliente"), ab.GetString("a_abono"), ab.GetString("a_fecha"),ALMACEN ) + reqManager.ExecuteCommand(cmd , $"ins_abonosPendientes_${ab.GetString("a_cliente")}"$) + Log($"ins_abonosPendientes_${ab.GetString("a_cliente")}"$) + Next + End If + ab.Close + + 'CLIENTES NUEVOS + Dim bb As Cursor = B4XPages.MainPage.skmt.ExecQuery($"SELECT * from CLIENTE_NUEVO where CN_enviado is null"$) + Dim cb As Cursor = B4XPages.MainPage.skmt.ExecQuery("SELECT ID_ALMACEN from CAT_ALMACEN") + cb.Position = 0 + If bb.RowCount > 0 Then + For i=0 To bb.RowCount -1 + bb.Position = i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_cliente_IZCA" + cmd.Parameters = Array As Object( bb.GetString("CN_ID_CLIENTE"), bb.GetString("CN_NOMBRE"),B4XPages.MainPage.principal.l_ruta.Text,cb.GetString("ID_ALMACEN")) + reqManager.ExecuteCommand(cmd , $"insert_cliente_${bb.GetString("CN_ID_CLIENTE")}"$) + Log($"insert_cliente_${bb.GetString("CN_ID_CLIENTE")}"$) + Next + Log("si lo hice") + End If + bb.Close + cb.Close + +' BANDERA FACTURA (Pendientes) +' c=B4XPages.MainPage.skmt.ExecQuery("SELECT PC_FACTURA, PC_CLIENTE FROM pedido_cliente where PC_CLIENTE IN (Select CUENTA from cuentaa)") +' Log($"BANDERA FACTURA PENDIENTE: ${c.RowCount}"$) +' If c.RowCount>0 Then +' For i=0 To c.RowCount -1 +' c.Position=i +' Dim cmd As DBCommand +' cmd.Initialize +' cmd.Name = "update_factura_INTMEX" +' cmd.Parameters = Array As Object(C.GetString("PC_FACTURA"), C.GetString("PC_CLIENTE"), ALMACEN) +' reqManager.ExecuteCommand(cmd , "upd_facturasPendientes") +' Next +' ' sql.update_factura_INTMEX=UPDATE INTMEX.HIST_VENTAS SET HV_FACTURA = (?) WHERE HV_CLIENTE = (?) And HV_ALMACEN = (?) +' End If +' c.Close + +'' CUESTIONARIO (Pendientes) +' c = B4XPages.MainPage.skmt.ExecQuery("SELECT * FROM CUESTIONARIO where ifnull(Q_ENVIO_OK, 0) = 0 order by Q_IDCLIENTE, Q_IDPREGUNTA; Q_IDRESPUESTA") +' Private rutaActual As String = Subs.traeRuta +' Log("CUEST PENDIENTES: " & c.RowCount) +' If c.RowCount > 0 Then +' For x = 0 To c.RowCount - 1 +' c.Position = x +' Log($"insert_cuestionario_${c.GetString("Q_IDCLIENTE")}_${c.GetString("Q_IDPREGUNTA")}_${c.GetString("Q_IDRESPUESTA")}"$) +' Dim cmd As DBCommand +' cmd.Initialize +' cmd.Name = "insert_CUESTIONARIO_INTMEX" +' cmd.Parameters = Array As Object(c.GetString("Q_IDCLIENTE"), rutaActual, ALMACEN, c.GetString("Q_FECHA"), c.GetString("Q_IDPREGUNTA"), c.GetString("Q_PREGUNTA"), c.GetString("Q_IDRESPUESTA"), C.GetString("Q_RESPUESTA")) +' reqManager.ExecuteCommand(cmd , $"insert_cuestionario_${c.GetString("Q_IDCLIENTE")}_${c.GetString("Q_IDPREGUNTA")}_${c.GetString("Q_IDRESPUESTA")}"$) +' Next +' End If +' c.Close + End If +End Sub + +Sub mandaPendientePagare + c = B4XPages.MainPage.skmt.ExecQuery("SELECT * FROM ABONOS where ifnull(a_enviado, 0) <> 1") + Log($"ABONO PENDIENTE: ${c.RowCount}"$) + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_abono_IZCA" + cmd.Parameters = Array As Object( c.GetString("a_usuario"), c.GetString("a_ruta"), c.GetString("a_cliente"), c.GetString("a_abono"), c.GetString("a_fecha"),ALMACEN ) + reqManager.ExecuteCommand(cmd , $"ins_abonosPendientes_${c.GetString("a_cliente")}"$) + Log($"ins_abonosPendientes_${c.GetString("a_cliente")}"$) + Next + End If +End Sub + +Sub mandaPendientesrecarga +' PEDIDO_CLIENTE (Pendientes) + Log(">>>>>>> MANDA PENDIENTES") + Dim PCNoArts As String + Dim PCMonto As String + If usuario <> "KMTS1" Then + f=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_RUTA from kmt_info") + f.Position=0 + d = skmt.ExecQuery("SELECT * FROM PEDIDO_CLIENTE where PC_ENVIO_OK = 0 AND PC_CLIENTE = 1") + c = skmt.ExecQuery("SELECT * FROM PEDIDO_CLIENTE where PC_ENVIO_OK = 0 AND PC_CLIENTE = 1") + Log($"Pedido_Cliente PENDIENTE: ${c.RowCount}"$) + If c.RowCount > 0 Then + For i = 0 To c.RowCount - 1 + c.Position = i + Log($"${c.GetString("PC_CLIENTE")}|${c.GetString("PC_FECHA")}|${c.GetString("PC_ENVIO_OK")}|"$) + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_pedidos_IZCA" + cmd.Parameters = Array As Object("0", c.GetString("PC_FECHA"), c.GetString("PC_USER"), c.GetString("PC_NOART"), c.GetString("PC_MONTO"), c.GetString("PC_LON"), c.GetString("PC_LAT"), Subs.traeAlmacen, f.GetString("CAT_CL_RUTA"), c.GetString("PC_COSTO_SIN"), c.GetString("PC_FACTURA")) + PCNoArts = c.GetString("PC_NOART") + PCMonto = c.GetString("PC_MONTO") +'' sql.insert_pedidos_INTMEX=INSERT INTO INTMEX.PEDIDO_CLIENTE(PC_FECHA_SINC,PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT,PC_IDALMACEN, PC_RUTA, PC_COSTO_SIN, PC_FACTURA) VALUES (SYSDATE,(?),(?),(?),(?),(?),(?),(?),(?),(?),(?),(?)) + reqManager.ExecuteCommand(cmd , $"ins_pedidosPendientes_head_${c.GetString("PC_CLIENTE")}"$) + Next + End If + f.Close + 'PEDIDO (Pendientes) + c = skmt.ExecQuery($"SELECT PE_ENVIO_OK, PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_COSTO_SIN, PE_RUTA, PE_DESC, PE_FOLIO, PE_CANTC, PE_BCAJAS FROM PEDIDO where PE_ENVIO_OK <> 1 AND PE_FOLIO = 'RECARGA'"$) + Log($"Pedido PENDIENTE: ${c.RowCount}"$) + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_pedido3_IZCA" + cmd.Parameters = Array As Object(C.GetString("PE_CEDIS"),ALMACEN,C.GetString("PE_COSTO_TOT"),C.GetString("PE_COSTOU"),C.GetString("PE_CANT"),C.GetString("PE_PRONOMBRE"),C.GetString("PE_PROID"),"0",C.GetString("PE_FECHA"),C.GetString("PE_USUARIO"),C.GetString("PE_RUTA"), C.GetString("PE_COSTO_SIN"),C.GetString("PE_DESC"),"ABORDO",C.GetString("PE_CANTC"),c.GetString("PE_BCAJAS"),"RECARGA") + reqManager.ExecuteCommand(cmd , $"ins_pedidosPendientes_prods_${c.GetString("PE_CLIENTE")}_${c.GetString("PE_PROID")}"$) + Log($">>>> INS_PEDIDO= ${C.GetString("PE_CEDIS")},${ALMACEN},${C.GetString("PE_COSTO_TOT")},${C.GetString("PE_COSTOU")},${C.GetString("PE_CANT")}, ${C.GetString("PE_PRONOMBRE")}, ${C.GetString("PE_PROID")}, ${C.GetString("PE_CLIENTE")}, ${C.GetString("PE_FECHA")}, ${C.GetString("PE_USUARIO")}, ${C.GetString("PE_RUTA")}, ${C.GetString("PE_COSTO_SIN")}, ${C.GetString("PE_DESC")}, ${c.GetString("PE_FOLIO")}, ${PCNoArts}, ${PCMonto}"$) +' sql.insert_pedido_INTMEX=INSERT INTO INTMEX.PEDIDO (PE_CODPROMO,PE_FECHA_SINC,PE_IDALMACEN,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA,PE_COSTO_SIN, PE_DESCUENTO, PE_TIPO) VALUES ((?),SYSDATE,(?),(?),(?),(?),(?),(?),(?),(?),(?),(?),(?),nvl((?),0),(?)) +' sql.insert_pedido2_INTMEX=INSERT INTO INTMEX.PEDIDO (PE_CODPROMO,PE_FECHA_SINC,PE_IDALMACEN,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA,PE_COSTO_SIN, PE_DESCUENTO, PE_TIPO, PE_CANT_TOTAL, PE_VENTA_TOTAL) VALUES ((?),SYSDATE,(?),(?),(?),(?),(?),(?),(?),(?),(?),(?),(?),nvl((?),0),(?),(?),(?)) + Next + End If + End If +End Sub + +Sub mandapiezasrecarga + If l_total.Text <> Null Or l_total.Text <> "null" Then + Dim PCNoArts As String + Dim PCMonto As String + c = skmt.ExecQuery2("SELECT * FROM PEDIDO_CLIENTE WHERE PC_CLIENTE = ?", Array As String("1")) + If c.RowCount > 0 Then + c.Position = 0 + Log(la_cuenta.Text&", "& ALMACEN&", "& LA_RUTA) + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "select_piezas_IZCA" + cmd.Parameters = Array As Object(la_cuenta.Text, ALMACEN, LA_RUTA) + reqManager.ExecuteQuery(cmd , 0, "piezasrecarga") + End If + End If +End Sub + +Sub mandapiezas + If l_total.Text <> Null Or l_total.Text <> "null" Then + Dim PCNoArts As String + Dim PCMonto As String + c = skmt.ExecQuery2("SELECT * FROM PEDIDO_CLIENTE WHERE PC_CLIENTE = ?", Array As String(la_cuenta.Text)) + If c.RowCount > 0 Then + c.Position = 0 + Log(la_cuenta.Text&", "& ALMACEN&", "& LA_RUTA) + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "select_piezas_IZCA" + cmd.Parameters = Array As Object(la_cuenta.Text, ALMACEN, LA_RUTA) + reqManager.ExecuteQuery(cmd , 0, "piezas") + + End If + End If +End Sub + +Sub JobDone(Job As HttpJob) +' Log(Job.Success) + If Job.Success = False Then +' ToastMessageShow("Error: " & Job.ErrorMessage, True) + Else + LogColor("JobDone: '" & reqManager.HandleJob(Job).tag & "' - Registros: " & reqManager.HandleJob(Job).Rows.Size, Colors.Green) 'Mod por CHV - 211027 + If Job.JobName = "DBRequest" Then + Dim resultado As DBResult = reqManager.HandleJob(Job) + If resultado.Tag.As(String).IndexOf("ins_pedidosPendientes_head_") > -1 Then + Subs.logJobDoneResultados(resultado) + Private cliente As String= resultado.Tag + cliente = cliente.SubString(cliente.IndexOf("_")+24) +' Log($"Cliente1:${cliente}"$) + For Each records() As Object In resultado.Rows + If records(resultado.Columns.Get("AffectedRows")).As(Int) = 1 Then +' Log(">>>>>>>> GUARDADO") + Private pars() As String = Regex.Split("_", resultado.tag) + B4XPages.MainPage.skmt.ExecNonQuery($"update PEDIDO_CLIENTE set PC_ENVIO_OK = 1 where PC_CLIENTE = '${pars(3)}'"$) +' Log($"update PEDIDO_CLIENTE set PC_ENVIO_OK = 1 where PC_CLIENTE = '${pars(3)}'"$) + End If +' For Each k As String In resultado.Columns.Keys +' Log(resultado.Tag & ": " & k & ": " & records(resultado.Columns.Get(k))) +' Next + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim resultado As DBResult = reqManager.HandleJob(Job) + If resultado.Tag = "piezas" Then 'query tag +' B4XPages.MainPage.picking.cl_picking.Clear + Dim piezasexiste As Int + + For Each records() As Object In resultado.Rows + + piezasexiste = records(resultado.Columns.Get("COUNT(*)")) + Log(piezasexiste) + DateTime.DateFormat = "MM/dd/yyyy" + DateTime.TimeFormat = "HH:mm:ss" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + If piezasexiste = 0 Then + + Dim PCNoArts As String + Dim PCMonto As String + c = skmt.ExecQuery2("SELECT * FROM PEDIDO_CLIENTE WHERE PC_CLIENTE = ?", Array As String(la_cuenta.Text)) + + If c.RowCount > 0 Then + c.Position = 0 + PCNoArts = c.GetString("PC_NOART") + PCMonto = c.GetString("PC_MONTO") + End If + + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_HVC_IZCA" + cmd.Parameters = Array As Object((sDate & " " & sTime), la_cuenta.Text, PCNoArts, PCMonto, ALMACEN, LA_RUTA) + reqManager.ExecuteCommand(cmd , "insert_hvc") +' reqManager.ExecuteCommand(cmd , $"ins_abonosPendientes_${ab.GetString("a_cliente")}"$) + + Else If piezasexiste = 1 Then + Dim PCNoArts As String + Dim PCMonto As String + c = skmt.ExecQuery2("SELECT * FROM PEDIDO_CLIENTE WHERE PC_CLIENTE = ?", Array As String(la_cuenta.Text)) + + If c.RowCount > 0 Then + c.Position = 0 + PCNoArts = c.GetString("PC_NOART") + PCMonto = c.GetString("PC_MONTO") + End If + cmd.Initialize + cmd.Name = "update_HVC_IZCA" + cmd.Parameters = Array As Object((sDate & " " & sTime), la_cuenta.Text, PCNoArts, PCMonto, ALMACEN, LA_RUTA, la_cuenta.Text, ALMACEN, LA_RUTA) + reqManager.ExecuteCommand(cmd, "update_hvc") + + End If + Next + + + End If + End If + + If Job.JobName = "DBRequest" Then + Dim resultado As DBResult = reqManager.HandleJob(Job) + If resultado.Tag = "piezasrecarga" Then 'query tag +' B4XPages.MainPage.picking.cl_picking.Clear + Dim piezasexiste As Int + For Each records() As Object In resultado.Rows + piezasexiste = records(resultado.Columns.Get("COUNT(*)")) + Log(piezasexiste) + DateTime.DateFormat = "MM/dd/yyyy" + DateTime.TimeFormat = "HH:mm:ss" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + If piezasexiste = 0 Then + Dim PCNoArts As String + Dim PCMonto As String + c = skmt.ExecQuery2("SELECT * FROM PEDIDO_CLIENTE WHERE PC_CLIENTE = ?", Array As String("1")) + If c.RowCount > 0 Then + c.Position = 0 + PCNoArts = c.GetString("PC_NOART") + PCMonto = c.GetString("PC_MONTO") + End If + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_HVC_IZCA" + cmd.Parameters = Array As Object((sDate & " " & sTime), "0", PCNoArts, PCMonto, ALMACEN, LA_RUTA) + reqManager.ExecuteCommand(cmd , "insert_hvc") +' reqManager.ExecuteCommand(cmd , $"ins_abonosPendientes_${ab.GetString("a_cliente")}"$) + Else If piezasexiste = 1 Then + Dim PCNoArts As String + Dim PCMonto As String + c = skmt.ExecQuery2("SELECT * FROM PEDIDO_CLIENTE WHERE PC_CLIENTE = ?", Array As String("1")) + If c.RowCount > 0 Then + c.Position = 0 + PCNoArts = c.GetString("PC_NOART") + PCMonto = c.GetString("PC_MONTO") + End If + cmd.Initialize + cmd.Name = "update_HVC_IZCA" + cmd.Parameters = Array As Object((sDate & " " & sTime), "0", PCNoArts, PCMonto, ALMACEN, LA_RUTA, la_cuenta.Text, ALMACEN, LA_RUTA) + reqManager.ExecuteCommand(cmd, "update_hvc") + End If + Next + End If + End If + +' If Job.JobName = "DBRequest" Then +' Dim resultado As DBResult = reqManager.HandleJob(Job) +' If resultado.Tag.As(String).IndexOf("ins_pedidosPendientes_prods_") > -1 Then +' Subs.logJobDoneResultados(resultado) +' Private cliente As String= resultado.Tag +' cliente = cliente.SubString(cliente.IndexOf("_")+25) +' Log($"Cliente2:${cliente}"$) +' For Each records() As Object In resultado.Rows +'' If records(resultado.Columns.Get("AffectedRows")).As(Int) = 1 Then Log(">>>>>>>> GUARDADO") +' Private pars() As String = Regex.Split("_", resultado.tag) +' B4XPages.MainPage.skmt.ExecNonQuery($"update PEDIDO set PE_ENVIO_OK = 1 where PE_CLIENTE = '${pars(3)}' and PE_PROID = '${pars(4)}' and PE_ENVIO_OK = 0"$) +'' Log($"update PEDIDO set PE_ENVIO_OK = 1 where PE_CLIENTE = '${pars(3)}' and PE_PROID = '${pars(4)}' and PE_ENVIO_OK = 0"$) +'' For Each k As String In resultado.Columns.Keys +'' Log(resultado.Tag & ": " & k & ": " & records(resultado.Columns.Get(k))) +'' Next +' Next +' End If +' End If + + 'ABONOS PENDIENTES + If Job.JobName = "DBRequest" Then + Dim resultado As DBResult = reqManager.HandleJob(Job) + If resultado.Tag.As(String).IndexOf("ins_abonosPendientes_") > -1 Then + Private cliente As String= resultado.Tag + cliente = cliente.SubString(cliente.IndexOf("_")+18) + Log($"Cliente2:${cliente}"$) + For Each records() As Object In resultado.Rows + For Each k As String In resultado.Columns.Keys + Log(resultado.Tag & ": " & k & ": " & records(resultado.Columns.Get(k))) + Next + Next + B4XPages.MainPage.skmt.ExecNonQuery($"UPDATE ABONOS set a_enviado = 1 where a_cliente = '${cliente}'"$) + End If + End If + + 'CLIENTES NUEVOS + If Job.JobName = "DBRequest" Then + Dim resultado As DBResult = reqManager.HandleJob(Job) + If resultado.Tag.As(String).IndexOf("insert_cliente_") > -1 Then + Private cliente As String= resultado.Tag + cliente = cliente.SubString(cliente.IndexOf("_")+9) + Log($"Cliente2:${cliente}"$) + For Each records() As Object In resultado.Rows + For Each k As String In resultado.Columns.Keys + Log(resultado.Tag & ": " & k & ": " & records(resultado.Columns.Get(k))) + Next + Next + B4XPages.MainPage.skmt.ExecNonQuery($"UPDATE CLIENTE_NUEVO set CN_enviado = 1 where CN_ID_CLIENTE = '${cliente}'"$) + End If + End If + + 'CUESTIONARIO + If Job.JobName = "DBRequest" Then + Dim resultado As DBResult = reqManager.HandleJob(Job) + If resultado.Tag.As(String).IndexOf("insert_cuestionario_") > -1 Then + Private pars() As String = Regex.Split("_", resultado.Tag.As(String)) + Log($"${resultado.tag}|${pars(0)}"$) + Log($"${pars(1)}"$) + Log($"${pars(2)}"$) + Log($"${pars(3)}"$) + Log($"${pars(4)}"$) + Private cliente As String = pars(2) + Private idPreg As String = pars(3) + Private idResp As String = pars(4) + Log($"Cliente2:${cliente}, preg:${idPreg}, res:${idResp}"$) + For Each records() As Object In resultado.Rows + For Each k As String In resultado.Columns.Keys + Log(resultado.Tag & ": " & k & ": " & records(resultado.Columns.Get(k))) + Next + Next + B4XPages.MainPage.skmt.ExecNonQuery($"UPDATE CUESTIONARIO set Q_ENVIO_OK = 1 where Q_IDCLIENTE = '${cliente}' and Q_IDPREGUNTA='${idPreg}' and Q_IDRESPUESTA='${idResp}'"$) + End If + End If + + Job.Release + End If + +End Sub + +Private Sub p_abono_Click + +End Sub + +Private Sub b_abono_Click +' p_abono.Visible = False + If et_abono.text > l_montoabonostotal.text Then + MsgboxAsync("El monto a abonar no puede ser mayor que el monto total","Atención" ) + Else + If et_abono.Text <> "" Then + + Dim k As Cursor = B4XPages.MainPage.skmt.ExecQuery("SELECT CUENTA from CUENTAA") + k.Position = 0 + Log(k.GetString("CUENTA")) + Dim y As Cursor = B4XPages.MainPage.skmt.ExecQuery2("SELECT a_abono FROM ABONOS WHERE a_cliente = ?", Array As String(k.GetString("CUENTA"))) + y.position = 0 + + If y.RowCount = 0 Then + Msgbox2Async($"¿Seguro que quieres realizar un abono de $${et_abono.text} para este cliente?"$, "Guardar Abono", "Guardar", "Cancelar", "", Null, True) + Wait For Msgbox_Result (resultado As Int) + If resultado = DialogResponse.POSITIVE Then + imprime_pagare + End If + Else If et_abono.Text > y.GetString("a_abono") Then + Msgbox2Async($"¿Seguro que quieres realizar un abono de $${et_abono.text} para este cliente?"$, "Guardar Abono", "Guardar", "Cancelar", "", Null, True) + Wait For Msgbox_Result (resultado As Int) + If resultado = DialogResponse.POSITIVE Then + imprime_pagare + End If + Else If et_abono.Text = y.GetString("a_abono") Then + p_abono.Visible = False + et_abono.Text = "" + Else If et_abono.Text < y.GetString("a_abono") Then + p_abono.Visible = False + MsgboxAsync("El pago no puede ser menor al monto capturado.","Atención") + et_abono.Text = "" + End If + + + + End If + End If + + ime.HideKeyboard +End Sub + +Private Sub b_cancelar_Click + et_abono.Text = "" + p_abono.Visible = False + ime.HideKeyboard +End Sub + +Private Sub b_abono1_Click + p_abono.Visible = True +End Sub + +Private Sub b_cxc_Click + + h = B4XPages.MainPage.skmt.ExecQuery("SELECT CUENTA from CUENTAA") + h.Position = 0 + Log(h.GetString("CUENTA")) + j = B4XPages.MainPage.skmt.ExecQuery2("SELECT a_abono FROM ABONOS WHERE a_cliente = ?", Array As String(h.GetString("CUENTA"))) + j.position = 0 + Log(j.RowCount) + If j.RowCount = 0 Then + + p_abono.Visible = True + Dim total As String = 0 + f = B4XPages.MainPage.skmt.ExecQuery("SELECT CUENTA FROM CUENTAA") + f.Position = 0 + + d = B4XPages.MainPage.skmt.ExecQuery2("SELECT NOTA, SALDO_PENDIENTE FROM ABONOSP WHERE CLIENTE = ? ", Array As String (f.GetString("CUENTA"))) + clv_abonos.Clear + For i = 0 To d.RowCount - 1 + d.Position = i + clv_abonos.Add(CreateListItem(d.GetString("NOTA"),"$ " & d.GetString("SALDO_PENDIENTE")),i) + Log(d.GetString("NOTA")) + Log(d.GetString("SALDO_PENDIENTE")) + total = total + d.GetString("SALDO_PENDIENTE") + Log(total) + Next + l_montoabonostotal.Text = total + d.Close + f.Close + + Else If j.RowCount > 0 Then + p_abono.Visible = True + et_abono.text = j.GetString("a_abono") + Dim total As String = 0 + f = B4XPages.MainPage.skmt.ExecQuery("SELECT CUENTA FROM CUENTAA") + f.Position = 0 + + d = B4XPages.MainPage.skmt.ExecQuery2("SELECT NOTA, SALDO_PENDIENTE FROM ABONOSP WHERE CLIENTE = ? ", Array As String (f.GetString("CUENTA"))) + clv_abonos.Clear + For i = 0 To d.RowCount - 1 + d.Position = i + clv_abonos.Add(CreateListItem(d.GetString("NOTA"),"$ " & d.GetString("SALDO_PENDIENTE")),i) + Log(d.GetString("NOTA")) + Log(d.GetString("SALDO_PENDIENTE")) + total = total + d.GetString("SALDO_PENDIENTE") + Log(total) + Next + l_montoabonostotal.Text = total + d.Close + f.Close +' MsgboxAsync("Este cliente ya tiene un pago capturado","Atención") + End If + h.Close + j.Close + + +End Sub + +Sub CreateListItem(mostrar As String, mostrar1 As String) As Panel + Dim p As B4XView = xui.CreatePanel("") + p.SetLayoutAnimated(0, 0, 0, 1, 10) + p.LoadLayout("folioabono") + p.Height= 32dip + p.Width = 80dip +' p.Width = clv_orden.GetBase.Width + l_folio.Text = mostrar + l_saldo.Text = mostrar1 +' cxc.Text = mostrar3 +' Log(p.Width) + Return p +End Sub + +Sub cuest_preguntaContestada(m As Map) +' Recibimos el id de la pregunta, el id de la respuesta, el texto de la respuesta y el objeto del panelSombra para poder ocultarlo. + Log(m) +' If q.IsInitialized Then Log($"${q.encuestaIniciada}|${q.preguntaActual}"$) +' m.Get("panel").As(Panel).Visible = False 'Ocultamos el panel de la pregunta. + m.Get("panel").As(Panel).RemoveView 'Quitamos le panel de la pregunta + DateTime.DateFormat = "dd/MM/yyyy" + DateTime.TimeFormat = "HH:mm:ss" + Starter.skmt.ExecNonQuery($"delete from CUESTIONARIO where Q_IDCLIENTE = '${Subs.traeCliente}' and Q_IDPREGUNTA = '${m.Get("idPregunta")}'"$) + Starter.skmt.ExecNonQuery($"insert into CUESTIONARIO (Q_RUTA, Q_ALMACEN, Q_IDCLIENTE, Q_IDPREGUNTA, Q_PREGUNTA, Q_IDRESPUESTA, Q_RESPUESTA, Q_FECHA) values ('${Subs.traeRuta(Subs.traeCliente)}', '${Subs.traeAlmacen}', '${Subs.traeCliente}', '${m.Get("idPregunta")}', '${m.Get("pregunta")}', '${m.Get("idRespuesta")}', '${m.Get("respuesta")}', '${DateTime.Date(DateTime.now)} ${DateTime.time(DateTime.now)}')"$) + Select Case m.Get("idPregunta") + Case "1" + If m.Get("respuesta") = "No, está enrejado o no se tiene acceso" Then + Log("Tiendajon / Ventana / Kiosko") + ToastMessageShow("Tiendajon / Ventana / Kiosko", False) + cuest.agregaPregunta("6", "¿Cuenta con caja de salida para cobro con sistema de computo?", Array As String("Si, tiene sistema de computo para cobro", "No")) + Else if m.Get("respuesta") = "Si se pude acceder" Then + cuest.agregaPregunta("2", "¿Tiene al menos 2 pasillos con acceso directo a la mercancía?", Array As String("Si tiene al menos 2 pasillos con acceso directo a la mercancía", "No tiene pasillos o solo uno central")) + End If + Case "2" + If m.Get("respuesta") = "Si tiene al menos 2 pasillos con acceso directo a la mercancía" Then + Log("Mini-Super") + ToastMessageShow("Mini-Super", False) + cuest.agregaPregunta("6", "¿Cuenta con caja de salida para cobro con sistema de computo?", Array As String("Si, tiene sistema de computo para cobro", "No")) + else If m.Get("respuesta") = "No tiene pasillos o solo uno central" Then + cuest.agregaPregunta("3", "¿Cuenta con enfriador horizontal para venta de perecederos como queso, jamon, crema, etc.?", Array As String("Si", "No tiene enfriador horizontal.")) + End If + Case "3" + Log("|"&m.Get("respuesta")&"|") + If m.Get("respuesta") = "Si" Then + Log("Miscelanea") + ToastMessageShow("Miscelanea", False) + cuest.agregaPregunta("6", "¿Cuenta con caja de salida para cobro con sistema de computo?", Array As String("Si, tiene sistema de computo para cobro", "No")) + else If m.Get("respuesta") = "No tiene enfriador horizontal." Then + cuest.agregaPregunta("4", "¿El local esta enfocado a venta especializada?", Array As String("No", "Si")) + End If + Case "4" + If m.Get("respuesta") = "No" Then + Log("Abarrotera") + ToastMessageShow("Abarrotera", False) + cuest.agregaPregunta("6", "¿Cuenta con caja de salida para cobro con sistema de computo?", Array As String("Si, tiene sistema de computo para cobro", "No")) + else If m.Get("respuesta") = "Si" Then + cuest.agregaPregunta("5", "¿Cual venta especializada?", Array As String("Carnicería / Pollería", "Cremería", "Depósito / Vinateria", "Dulcería", "Farmacia", "Fonda / Restaurante / Cafetería", "Verdulería")) + End If + Case "5" + Log(m.Get("respuesta")) + ToastMessageShow(m.Get("respuesta"), False) +' If m.Get("respuesta") = "No" Then +' Log("Abarrotera") +' q.agregaPregunta("5", "¿Cuenta con caja de salida para cobro con sistema de computo?", Array As String("Si, tiene sistema de computo para cobro", "No")) +' else If m.Get("respuesta") = "Si" Then + cuest.agregaPregunta("6", "¿Cuenta con caja de salida para cobro con sistema de computo?", Array As String("Si, tiene sistema de computo para cobro", "No")) +' End If + Case "6" + Log(m.Get("respuesta")) + ToastMessageShow(m.Get("respuesta"), False) + Log(">>>>>>>>>> " & cuest.encuestaIniciada) + cuest.encuestaIniciada = False + Log(">>>>>>>>>> " & cuest.encuestaIniciada) +' refrescarCliente = True +' Log($"#### REFRESCAR CLIENTE -> ${refrescarCliente}"$) + B4XPage_Appear +' Case 6 + End Select +End Sub + + +Private Sub b_ventaabordo_Click +' c=B4XPages.MainPage.skmt.ExecQuery("Select * From CAT_GUNAPROD2") + c=B4XPages.MainPage.skmt.ExecQuery2("Select * From CAT_GUNAPROD2 where cat_gp_tipo <> ? " , Array As String ("PROMOS")) + If c.RowCount > 0 Then + + + + B4XPages.MainPage.tipo_venta = "VENTA" +' If B4XPages.MainPage.productos.clv_prods_ll.Size = 0 Then +' B4XPages.MainPage.productos.LlenaProdsLL(Null) +' Else +' +' B4XPages.MainPage.productos.clv_prods_ll.Clear +' End If + 'Buscamos en el historial de cuestionarios si el cliente ya tiene cuestionario contestado. +' Private hc As Cursor = Starter.skmt.ExecQuery($"select count(HC_CLIENTE) as cuantos from HIST_CUESTIONARIO where HC_CLIENTE = '${Subs.traeCliente}'"$) +' hc.Position = 0 +' Log($"${cuest.encuestaIniciada} - ${hc.GetString("cuantos")} - ${cuest.clienteConCuestionario(Subs.traeCliente)}"$) +' If Not(cuest.encuestaIniciada) And hc.GetString("cuantos") = 0 And Not(cuest.clienteConCuestionario(Subs.traeCliente)) Then +' cuest.agregaPregunta("1", "¿Se puede acceder al negocio o está enrejado?", Array As String("No, está enrejado o no se tiene acceso", "Si se pude acceder")) +' Return False +' End If +' Private x As Cursor = B4XPages.MainPage.skmt.ExecQuery($"select tienda_id from COORDENADAS_GPS where tienda_id = '${la_cuenta.text}'"$) +'' Log("+++++++++++++ " & x.RowCount) +' If distance > 50 And x.RowCount = 0 Then +' Private res As String = Msgbox2("¿Estas en la tienda, para guardar la nueva ubicación?", "AVISO", "Si","" ,"No", Null) 'ignore +' If res = DialogResponse.POSITIVE Then +' DateTime.DateFormat = "MM/dd/yyyy" +' sDate=DateTime.Date(DateTime.Now) +' sTime=DateTime.Time(DateTime.Now) +' B4XPages.MainPage.skmt.ExecNonQuery($"insert into COORDENADAS_GPS (tienda_id, ruta, almacen, latitud, longitud, fecha) values ('${la_cuenta.Text}', '${Subs.traeRuta}', '${Subs.traeAlmacen}', '${B4XPages.MainPage.lat_gps}', '${B4XPages.MainPage.lon_gps}', '${sDate} ${sTime}')"$) +' +' Dim cmd As DBCommand +' cmd.Initialize +' cmd.Name = "insert_coords_nuevas_INTMEX" +' cmd.Parameters = Array As Object(la_cuenta.text, Subs.traeRuta, Subs.traeAlmacen, sDate & " " & sTime, B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps, usuario) +'' Log($"${la_cuenta.text}, ${Subs.traeRuta}, ${Subs.traeAlmacen}, ${sDate} ${sTime}, ${m_lat}, ${m_lon}"$) +' reqManager.ExecuteCommand(cmd , "ins_coords_nuevas") +' End If +' End If + 'Si hay mapa de productos es que hay venta en proceso, entonces borramos la actual para meter la nueva. +' If B4XPages.MainPage.productos.prodsMap.IsInitialized And B4XPages.MainPage.productos.prodsMap.Size > 0 Then Subs.borraPedidoClienteActual + B4XPages.ShowPage("productos") + + + Else If c.RowCount = 0 Then + + MsgboxAsync("No puedes hacer venta porque no tienes inventario abordo","Atención") + + End If + +End Sub + +Sub imprime_pagare + + + c=skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + DateTime.DateFormat = "MM/dd/yyyy" + DateTime.TimeFormat = "HH:mm:ss" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c.Close + + Public Const eLINEFEED As String = "" & Chr(0x0D) & Chr(0x0A) + + ProgressDialogShow("Imprimiendo, un momento ...") + Printer1.DisConnect + If Not(Printer1.IsConnected) Then +' If logger Then Log("conectando 1") + Printer1.Connect + Private cont As Int = 0 + Do While Not(impresoraConectada) + Sleep(1000) + cont = cont + 1 + If cont = 7 Then Printer1.Connect 'Tratamos de reconectar + If cont > 15 Then impresoraConectada = True + Loop + Sleep(500) + impresoraConectada = False + Else +' If logger Then Log("conectando 2") + Printer1.Connect + Private cont As Int = 0 + Do While Not(impresoraConectada) Or Not(Printer1.IsConnected) + Sleep(1000) + cont = cont + 1 + If cont = 2 Then Printer1.Connect + If cont > 4 Then impresoraConectada = True + Loop + Sleep(500) + impresoraConectada = False + End If + + TAMANO = 0 + ESPACIO = 22 + BLANCO = " " + + Printer1.WriteString("IZCA Distribuciones" & eLINEFEED) +' Printer1.WriteString(sucursal & eLINEFEED) + Printer1.WriteString(sDate & eLINEFEED) + Printer1.WriteString(sTime & eLINEFEED) + Printer1.WriteString("Vendedor:" & usuario & eLINEFEED) + Printer1.WriteString("Tienda: " & La_nombre.Text & eLINEFEED) + Printer1.WriteString("ID.Cliente: " & la_cuenta.Text & eLINEFEED) + Printer1.WriteString("Calle: " & la_Calle.Text & eLINEFEED) + Printer1.WriteString("Colonia: " & la_col.Text & eLINEFEED) + Printer1.WriteString(" " & eLINEFEED) + Dim notaabono As String + Dim saldopendiente As String + c = Starter.skmt.ExecQuery("SELECT NOTA, DIA_VENCIMIENTO, SALDO_PENDIENTE FROM ABONOSP WHERE CLIENTE IN (SELECT CUENTA FROM CUENTAA)") + If c.RowCount > 0 Then + c.Position = 0 + + Dim fechatabulador() As String = Regex.Split(" ", c.GetString("DIA_VENCIMIENTO")) + Dim fechatabulador2() As String = Regex.Split("-", fechatabulador(0)) + Dim fechatabulador3 As String = fechatabulador2(2)&"/"&fechatabulador2(1)&"/"&fechatabulador2(0) + + notaabono = c.GetString("NOTA") + saldopendiente = c.GetString("SALDO_PENDIENTE") + End If + c.Close + +' c = Starter.skmt.ExecQuery("SELECT NOTA FROM ABONOSP WHERE CLIENTE IN (SELECT CUENTA FROM CUENTAA)") +' If c.RowCount > 0 Then +' c.Position = 0 +' notaabono = c.GetString("NOTA") +' End If + Log(notaabono) + Log(et_abono.Text) + Printer1.WriteString("Comprobante de pago del pagare" & eLINEFEED) + + Printer1.WriteString("Folio: " & notaabono & eLINEFEED) + + Printer1.WriteString("Monto deuda: " & (NumberFormat(saldopendiente,0,2)) & eLINEFEED) + + Printer1.WriteString("Monto abono: " & (NumberFormat(et_abono.Text,0,2)) & eLINEFEED) + + Printer1.WriteString("Restante: " &(NumberFormat(saldopendiente-et_abono.Text,0,2)) & eLINEFEED) + + Printer1.WriteString("Fecha Abono: " & sDate & eLINEFEED) + + Printer1.WriteString("Fecha vencimiento: " & fechatabulador3 & eLINEFEED) + + Printer1.WriteString(" " & eLINEFEED) + Printer1.WriteString(" " & eLINEFEED) + Printer1.WriteString(" " & eLINEFEED) + Printer1.WriteString(" " & eLINEFEED) + Printer1.WriteString(" " & eLINEFEED) + Printer1.WriteString(" " & eLINEFEED) + Printer1.WriteString(" " & eLINEFEED) + + Printer1.WriteString("------------------------------" & eLINEFEED) + Printer1.WriteString("-------------FIRMA------------" & eLINEFEED) + + Printer1.WriteString(" " & eLINEFEED) + Printer1.WriteString(" " & eLINEFEED) + Printer1.WriteString(" " & eLINEFEED) + Sleep(1000) + Printer1.DisConnect + + ProgressDialogHide + + + Msgbox2Async("Deseas imprimir de nuevo el ticket?", "ATENCION","SI","", "NO",LoadBitmap(File.DirAssets,"alert2.png"), False) + Wait For Msgbox_Result (resultado As Int) + If resultado = DialogResponse.POSITIVE Then + imprime_pagare + Else + h = B4XPages.MainPage.skmt.ExecQuery("SELECT CUENTA from CUENTAA") + h.Position = 0 + Log(h.GetString("CUENTA")) + + j = B4XPages.MainPage.skmt.ExecQuery2("SELECT a_abono FROM ABONOS WHERE a_cliente = ?", Array As String(h.GetString("CUENTA"))) + j.position = 0 + If j.RowCount = 0 Then + p_abono.Visible = False + + skmt.ExecNonQuery($"INSERT INTO ABONOS(a_usuario, a_ruta, a_cliente, a_abono, a_fecha) VALUES ('${Subs.traeUsuarioDeBD}', '${Subs.traeRuta(Subs.traeCliente)}', '${Subs.traeCliente}' ,'${et_abono.text}', '${Subs.fechaKMT(DateTime.now)}')"$) + ToastMessageShow("Abono guardado", False) + et_abono.Text = "" + B4XPage_Appear + Else + p_abono.Visible = False + +' skmt.ExecNonQuery($"INSERT INTO ABONOS(a_usuario, a_ruta, a_cliente, a_abono, a_fecha) VALUES ('${Subs.traeUsuarioDeBD}', '${Subs.traeRuta(Subs.traeCliente)}', '${Subs.traeCliente}' ,'${et_abono.text}', '${Subs.fechaKMT(DateTime.now)}')"$) + skmt.ExecNonQuery($"UPDATE ABONOS set a_abono = '${et_abono.text}' where a_usuario = '${Subs.traeUsuarioDeBD}' and a_ruta = '${Subs.traeRuta(Subs.traeCliente)}' and a_cliente In (select cuenta from cuentaa)"$) + ToastMessageShow("Abono guardado", False) + et_abono.Text = "" + B4XPage_Appear + End If + + End If + +' printer.Flush + ' printer.Close +End Sub + +Private Sub b_cxc_LongClick +' imprime_pagare +End Sub + +Private Sub b_ubicar_Click + StartActivity(MAPA_CLIENTE) +End Sub + + + +Private Sub b_act_coords_Click + h = B4XPages.MainPage.skmt.ExecQuery("SELECT IFNULL(CAT_CL_BCOORDENADAS,0) AS CAT_CL_BCOORDENADAS from kmt_info where CAT_CL_CODIGO IN (SELECT CUENTA FROM CUENTAA)") + h.Position = 0 + Log(h.GetInt("CAT_CL_BCOORDENADAS")) + If h.GetInt("CAT_CL_BCOORDENADAS") <= 2 Then + Log(B4XPages.MainPage.lon_gps & " , " & B4XPages.MainPage.lat_gps) + + Private coord As Cursor = B4XPages.MainPage.skmt.ExecQuery("SELECT * from COORDENADAS where CLIENTE IN (SELECT CUENTA FROM CUENTAA)") + + If coord.RowCount = 0 Then + skmt.ExecNonQuery2("INSERT INTO COORDENADAS(LAT,LONG,CLIENTE,CANTIDAD) VALUES (?,?,?,?)", Array As String (B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps,Subs.traeCliente,(h.GetInt("CAT_CL_BCOORDENADAS")+1))) + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE kmt_info set CAT_CL_LONG = ?, CAT_CL_LAT =?, CAT_CL_BCOORDENADAS = ? where CAT_CL_CODIGO In (select cuenta from cuentaa)", Array As Object(B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps,(h.GetInt("CAT_CL_BCOORDENADAS")+1))) + MsgboxAsync("Coordenadas actualizadas.","Atención") + Else + skmt.ExecNonQuery2("UPDATE COORDENADAS SET LAT = ?, LONG = ?,CANTIDAD = ? where CLIENTE IN (SELECT CUENTA FROM CUENTAA)", Array As String (B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps,(h.GetInt("CAT_CL_BCOORDENADAS")+1))) + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE kmt_info set CAT_CL_LONG = ?, CAT_CL_LAT =?, CAT_CL_BCOORDENADAS = ? where CAT_CL_CODIGO In (select cuenta from cuentaa)", Array As Object(B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps,(h.GetInt("CAT_CL_BCOORDENADAS")+1))) + MsgboxAsync("Coordenadas actualizadas.","Atención") + End If + + + Else + MsgboxAsync("Las coordenadas de este cliente ya fueron actualizadas.","Atención") + End If +End Sub \ No newline at end of file diff --git a/B4A/C_Clientes.bas b/B4A/C_Clientes.bas new file mode 100644 index 0000000..7f0054c --- /dev/null +++ b/B4A/C_Clientes.bas @@ -0,0 +1,583 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore +' Dim skmt As SQL + Dim c As Cursor + Dim c2 As Cursor + Dim d As Cursor + Dim s As Cursor + Dim ListView1 As ListView + Dim entro As String + Dim gest As Button + Dim lfila As Label + Dim busca As EditText + Dim colonia As String + Private b_qr As Button + Private qr As QRCode + ' Dim sc As Zxing_scanner + Dim CODIGO As String + Dim STIME As String + Dim ruta As String + Dim q_buscar As String + Private p_clientes As Panel + Private CustomListView1 As CustomListView + Private numerocliente As Label + Private nombrecliente As Label + Private direccion As Label + Private cxc As Label + Private p_datosclie As Panel + Private b_buscar As Button + Private CHECK As Int + Private l_baseodia As Label + Dim lista_punta As List + Private CREDITO As Label + +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + Root.LoadLayout("clientes") + 'Dim ruta As String + entro ="2" + ' valido donde escribo el archivo de la base de datos de kmt +' If File.ExternalWritable Then +' ruta = File.DirDefaultExternal +' Else + ruta = File.DirInternal +' End If + + ' se crea o no el archivo de la base de ddatos de kmt + 'NOTAS SI SE MODIFICA LA ESTRUCTURA SE QUITA EL IF Y SE VA DIRECTO A LA SENTENCIA FILE.COPY PARA QUE + 'TOME LA NUEVA ESTRUCTURA ES MUY IMPORTANTE TENER EL IF DE LO CONTRARIO SOLO LO ESCRIBE UNA VEZ Y LO BORRA + 'SI SE REGRESA A ESTE ACTIVIDAD. + If File.Exists(ruta, "kmt.db") = False Then + File.Copy(File.DirAssets, "kmt.db", ruta, "kmt.db") + End If + qr.initialize +End Sub + +Sub B4XPage_Appear + l_baseodia.Text = "Clientes del día de visita" + CHECK = 0 + busca.Text = "" + entro ="2" + colonia = 0 + c=B4XPages.MainPage.skmt.ExecQuery($"select CAT_CL_NOMBRE, CAT_CL_CALLE, CAT_CL_CODIGO from kmt_info where gestion = 0 AND CAT_CL_CODIGO <> ${"0"} AND CAT_CL_CODIGO <> ${"1"} ORDER BY CAST(CAT_CL_NUM_SERIEFISICO AS INTEGER) ASC"$) + ListView1.Clear + lfila.Text = "NOMBRE" + + CallSubDelayed(Tracker, "Track") + CallSubDelayed(Tracker, "StartFLPSmall") + If Tracker.FLP.IsInitialized And Tracker.FLP.GetLastKnownLocation.IsInitialized Then 'Si tenemos "UltimaUbicaccionConocida" la usamos. + B4XPages.MainPage.lat_gps = Tracker.FLP.GetLastKnownLocation.Latitude + B4XPages.MainPage.lon_gps = Tracker.FLP.GetLastKnownLocation.Longitude +' Log($"Tenemos UUC: ${Tracker.FLP.GetLastKnownLocation.Latitude},${Tracker.FLP.GetLastKnownLocation.Longitude}"$) + GPS_LocationChanged(Tracker.FLP.GetLastKnownLocation) + End If + + CustomListView1.Clear + For i = 0 To c.RowCount - 1 + c.Position = i + CustomListView1.Add(CreateListItem(c.GetString("CAT_CL_NOMBRE"),c.GetString("CAT_CL_CALLE"),c.GetString("CAT_CL_CODIGO")),i) + d = B4XPages.MainPage.skmt.ExecQuery($"select CLIENTE FROM ABONOSP WHERE CLIENTE = '${c.GetString("CAT_CL_CODIGO")}'"$) + If d.RowCount = 0 Then + cxc.Visible = False + Else + cxc.Visible = True + End If + + d = B4XPages.MainPage.skmt.ExecQuery($"select IFNULL(CAT_CL_BCREDITO,0) AS CAT_CL_BCREDITO FROM kmt_info WHERE CAT_CL_CODIGO = '${c.GetString("CAT_CL_CODIGO")}'"$) +' LogColor(d.RowCount,Colors.Blue) + If d.RowCount > 0 Then + d.Position = 0 + If d.GetString("CAT_CL_BCREDITO") = "1" Then + CREDITO.Visible = True + Else + CREDITO.Visible = False + End If + d.Close + Else + CREDITO.Visible = False + End If + Next + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim label1 As Label + label1 = ListView1.TwoLinesLayout.Label + label1.TextSize = 13 + label1.TextColor = Colors.Black + Dim label2 As Label + label2 = ListView1.TwoLinesLayout.SecondLabel + label2.TextSize = 13 + label2.TextColor = Colors.Black + ListView1.AddTwoLines(c.GetString("CAT_CL_CODIGO"), c.GetString("CAT_CL_NOMBRE")) + Next + End If + c.Close + entro = "4" + +' lista_punta.Initialize +' Dim pol As Cursor = Starter.skmt.ExecQuery("SELECT LAT, LONG FROM POLIGONO") +' If pol.RowCount > 0 Then +' +' For poli = 0 To pol.RowCount -1 +' pol.Position = poli +' Dim coords As LatLng +' coords.Initialize(pol.GetString("LAT"), pol.GetString("LONG")) +' lista_punta.Add(coords) +' Next +' End If + +End Sub + + + +Sub GPS_LocationChanged (Location1 As Location) +' LogColor($"Entrando a Cliente.GPS_LocationChanged"$, Colors.red) + If Tracker.FLP.GetLastKnownLocation.IsInitialized And Tracker.FLP.GetLastKnownLocation.Latitude <> 0 Then + B4XPages.MainPage.lat_gps = Tracker.FLP.GetLastKnownLocation.Latitude + B4XPages.MainPage.lon_gps = Tracker.FLP.GetLastKnownLocation.Longitude +' Log("Coords set to: " & B4XPages.MainPage.lat_gps & " and " & B4XPages.MainPage.lon_gps) + End If + + + CallSubDelayed(Tracker, "CreateLocationRequest") +End Sub + +Sub CreateListItem(mostrar As String, mostrar1 As String, mostrar2 As String) As Panel + Dim p As B4XView = xui.CreatePanel("") + p.SetLayoutAnimated(0, 0, 0, 1, 220) + p.LoadLayout("datoscliente") + p.Height= 60dip +' p.Width = clv_orden.GetBase.Width + nombrecliente.Text = mostrar + direccion.Text = mostrar1 + numerocliente.Text = mostrar2 + p_datosclie.Tag = mostrar2 +' cxc.Text = mostrar3 +' Log(p.Width) + Return p +End Sub + +Sub PointInPolygon(point As LatLng, polygon As List) As Boolean + Dim x As Double = point.Longitude + Dim y As Double = point.Latitude + + Dim inside As Boolean = False + For i = 0 To polygon.Size - 1 + Dim j As Int = (i + 1) Mod polygon.Size + Dim p1_1 As LatLng = polygon.Get(i) + Dim p2_1 As LatLng = polygon.Get(j) + + Dim xi As Double = p1_1.Longitude + Dim yi As Double = p1_1.Latitude + Dim xj As Double = p2_1.Longitude + Dim yj As Double = p2_1.Latitude + + Dim intersect As Boolean = ((yi > y) <> (yj > y)) And (x < (xj - xi) * (y - yi) / (yj - yi) + xi) + If intersect Then + inside = Not(inside) + End If + Next + + Return inside + + +End Sub + + +Sub ListView1_ItemClick (Position As Int, value As Object) + If colonia = 0 Then + colonia = value + End If + If entro = "2" Then + c2=B4XPages.MainPage.skmt.ExecQuery2("select CAT_CL_CALLE, CAT_CL_COLONIA, count(*) as cuantos from kmt_info where gestion = 0 and CAT_CL_COLONIA = ? GROUP BY CAT_CL_CALLE, CAT_CL_COLONIA order by CAT_CL_CALLE ", Array As String(value)) + ListView1.Clear + lfila.text = "Calle" + If c2.RowCount>0 Then + For i=0 To c2.RowCount -1 + c2.Position=i + ListView1.AddTwoLines(c2.GetString("CAT_CL_CALLE"),c2.GetString("cuantos") ) + Next + End If + entro = "3" + Else If entro = "3" Then + c2=B4XPages.MainPage.skmt.ExecQuery2("select CAT_CL_NOMBRE, CAT_CL_CALLE, CAT_CL_CODIGO from kmt_info where gestion = 0 and CAT_CL_CALLE = ? AND CAT_CL_COLONIA = ? order by CAT_CL_NOMBRE ", Array As String(value, colonia)) + ListView1.Clear + lfila.text = "Nombre" + If c2.RowCount>0 Then + For i=0 To c2.RowCount -1 + c2.Position=i + ListView1.AddTwoLines(c2.GetString("CAT_CL_CODIGO"), c2.GetString("CAT_CL_NOMBRE")) + Next + End If + entro = "4" + Else If entro = "4" Then + Dim mPoint As LatLng + mPoint.Initialize(B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps) + +' If lista_punta.Size > 0 Then +' Dim dentro As Boolean = PointInPolygon(mPoint, lista_punta) +' Else +' ToastMessageShow("El punto está FUERA del polígono", True) +' End If + + + B4XPages.MainPage.skmt.ExecNonQuery("delete from CUENTAA") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CUENTAA VALUES (?)", Array As Object(value)) + DateTime.TimeFormat = "HHmmss" + STIME=DateTime.Time(DateTime.Now) + Starter.pre_viejo = Subs.traeTotalClientepreventaparacredito + s=B4XPages.MainPage.skmt.ExecQuery2("SELECT COUNT(*) AS CUANTOS FROM HIST_STAY_STORE WHERE HSS_IN = ? AND HSS_CODIGO In (select cuenta from cuentaa)", Array As String("0")) + s.Position = 0 + If s.GetString("CUANTOS") = 1 Then + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE HIST_STAY_STORE set HSS_IN = ? where HSS_IN = 0 AND HSS_CODIGO In (select cuenta from cuentaa)", Array As Object(STIME)) + Else + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_STAY_STORE(HSS_CODIGO, HSS_IN , HSS_OUT , HSS_TOT) VALUES (?,0,0,0)", Array As Object (value)) + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE HIST_STAY_STORE set HSS_IN = ? where HSS_IN = 0 AND HSS_CODIGO In (select cuenta from cuentaa)", Array As Object(STIME)) + End If + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE HIST_STAY_OUT set HSO_INI = ? where HSO_INI = 0 ", Array As Object(STIME)) + DateTime.TimeFormat = "HH:mm:ss" + + Subs.guardaClienteHoraInicio(value) + + B4XPages.ShowPage("Cliente") + End If +End Sub + +Private Sub B4XPage_CloseRequest As ResumableSub + ' BACK key pressed + 'Return True to close, False to cancel +' If key=KeyCodes.KEYCODE_BACK Then +' StartActivity(seleccion) +' Return False +' End If + Return True +End Sub + +Sub BUSCA_TextChanged (Old As String, New As String) + If CHECK = 0 Then + q_buscar = "%" & busca.Text & "%" + c2=B4XPages.MainPage.skmt.ExecQuery2($"select CAT_CL_NOMBRE, CAT_CL_CALLE, CAT_CL_CODIGO from kmt_info where (CAT_CL_NOMBRE like ? OR CAT_CL_CODIGO LIKE ? OR CAT_CL_CALLE LIKE ?)and gestion = 0 AND CAT_CL_CODIGO <> ${"0"} AND CAT_CL_CODIGO <> ${"1"} order by CAT_CL_CODIGO "$, Array As String(q_buscar,q_buscar,q_buscar)) + ListView1.Clear + lfila.text = "Nombre y Calle" + + CustomListView1.Clear + For i = 0 To c2.RowCount - 1 + c2.Position = i + CustomListView1.Add(CreateListItem(c2.GetString("CAT_CL_NOMBRE"),c2.GetString("CAT_CL_CALLE"),c2.GetString("CAT_CL_CODIGO")),i) + d = B4XPages.MainPage.skmt.ExecQuery($"select CLIENTE FROM ABONOSP WHERE CLIENTE = '${c2.GetString("CAT_CL_CODIGO")}'"$) + If d.RowCount = 0 Then + cxc.Visible = False + Else + cxc.Visible = True + End If + + d = B4XPages.MainPage.skmt.ExecQuery($"select IFNULL(CAT_CL_BCREDITO,0) AS CAT_CL_BCREDITO FROM kmt_info WHERE CAT_CL_CODIGO = '${c2.GetString("CAT_CL_CODIGO")}'"$) +' LogColor(d.RowCount,Colors.Blue) + If d.RowCount > 0 Then + d.Position = 0 +' LogColor(d.GetString("CAT_CL_BCREDITO"),Colors.Blue) + If d.GetString("CAT_CL_BCREDITO") = "1" Then + CREDITO.Visible = True + Else + CREDITO.Visible = False + End If + d.Close + Else + CREDITO.Visible = False + End If + Next + + If c2.RowCount>0 Then + For i=0 To c2.RowCount -1 + c2.Position=i + Dim label1 As Label + label1 = ListView1.TwoLinesLayout.Label + label1.TextSize = 9 + label1.TextColor = Colors.White + Dim label2 As Label + label2 = ListView1.TwoLinesLayout.SecondLabel + label2.TextSize = 17 + label2.TextColor = Colors.White + ListView1.AddTwoLines(c2.GetString("CAT_CL_CODIGO"), c2.GetString("CAT_CL_NOMBRE") &" CALLE: "& c2.GetString("CAT_CL_CALLE")) + Next + End If + entro = "4" + c2.Close + Else If CHECK = 1 Then + q_buscar = "%" & busca.Text & "%" + c2=B4XPages.MainPage.skmt.ExecQuery2("select CAT_CL_NOMBRE, CAT_CL_CALLE, CAT_CL_CODIGO from kmt_info2 where (CAT_CL_NOMBRE like ? OR CAT_CL_CODIGO LIKE ? OR CAT_CL_CALLE LIKE ?)and gestion = 0 order by CAT_CL_CODIGO ", Array As String(q_buscar,q_buscar,q_buscar)) + ListView1.Clear + lfila.text = "Nombre y Calle" + + CustomListView1.Clear + For i = 0 To c2.RowCount - 1 + c2.Position = i + CustomListView1.Add(CreateListItem(c2.GetString("CAT_CL_NOMBRE"),c2.GetString("CAT_CL_CALLE"),c2.GetString("CAT_CL_CODIGO")),i) + d = B4XPages.MainPage.skmt.ExecQuery($"select CLIENTE FROM ABONOSP WHERE CLIENTE = '${c2.GetString("CAT_CL_CODIGO")}'"$) + If d.RowCount = 0 Then + cxc.Visible = False + Else + cxc.Visible = True + End If + d = B4XPages.MainPage.skmt.ExecQuery($"select IFNULL(CAT_CL_BCREDITO,0) AS CAT_CL_BCREDITO FROM kmt_info2 WHERE CAT_CL_CODIGO = '${c2.GetString("CAT_CL_CODIGO")}'"$) +' LogColor(d.RowCount,Colors.Blue) + If d.RowCount > 0 Then + d.Position = 0 + LogColor(d.GetString("CAT_CL_BCREDITO"),Colors.Blue) + If d.GetString("CAT_CL_BCREDITO") = "1" Then + CREDITO.Visible = True + Else + CREDITO.Visible = False + End If + d.Close + Else + CREDITO.Visible = False + End If + Next + + If c2.RowCount>0 Then + For i=0 To c2.RowCount -1 + c2.Position=i + Dim label1 As Label + label1 = ListView1.TwoLinesLayout.Label + label1.TextSize = 9 + label1.TextColor = Colors.White + Dim label2 As Label + label2 = ListView1.TwoLinesLayout.SecondLabel + label2.TextSize = 17 + label2.TextColor = Colors.White + ListView1.AddTwoLines(c2.GetString("CAT_CL_CODIGO"), c2.GetString("CAT_CL_NOMBRE") &" CALLE: "& c2.GetString("CAT_CL_CALLE")) + Next + End If + entro = "4" + c2.Close + End If +End Sub + +Sub b_qr_Click + Dim scan_width As Int + Dim scan_height As Int + scan_width = 400 + scan_height = 400 +End Sub + +Sub sc_result(atype As String,Values As String) + CODIGO = Values + c2=B4XPages.MainPage.skmt.ExecQuery2("select COUNT(*) AS ENCONTRADO from kmt_info where CAT_CL_NUM_SERIEFISICO = ? order by CAT_CL_NOMBRE ", Array As String(CODIGO)) + c2.Position =0 + If c2.GetString("ENCONTRADO") > 0 Then + s=B4XPages.MainPage.skmt.ExecQuery2("select CAT_CL_CODIGO from kmt_info where CAT_CL_NUM_SERIEFISICO = ? order by CAT_CL_NOMBRE ", Array As String(CODIGO)) + s.Position =0 + B4XPages.MainPage.skmt.ExecNonQuery("delete from CUENTAA") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CUENTAA VALUES (?)", Array As Object(s.GetString("CAT_CL_CODIGO"))) + s.Close +' b_qr.Visible = False + B4XPages.ShowPage("clientes") + Else + Msgbox("CODIGO " & CODIGO & " NO ENCONTRADO","AVISO") 'ignore + End If +End Sub + +Sub sc_noScan + Log("nothing returned from the scan !!!!!") +End Sub + +Sub calc_ean_checksum(number As String) As String 'this has now become redundant as I am only interested in QR Codes + Dim i As Int + Dim cO As Char + Dim soma As Int + Dim n As Int + Dim digit As Float + soma = 0 + For i=0 To number.Length - 1 + digit = number.SubString2(i,i+1) + n= digit * ((i Mod 2) * 2 + 1) + soma=soma+n + Next + Return number & ( ( 10 - ( soma Mod 10 )) Mod 10 ) +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Private Sub p_clientes_Click + 'Nada aqui, solo esta para que los clics no se pasen hacia atras. +End Sub + +Private Sub p_datosclie_Click + If colonia = 0 Then + colonia = Sender.As(Panel).tag + End If + If entro = "2" Then + c2=B4XPages.MainPage.skmt.ExecQuery2("select CAT_CL_CALLE, CAT_CL_COLONIA, count(*) as cuantos from kmt_info where gestion = 0 and CAT_CL_COLONIA = ? GROUP BY CAT_CL_CALLE, CAT_CL_COLONIA order by CAT_CL_CALLE ", Array As String(Sender.As(Panel).tag)) + ListView1.Clear + lfila.text = "Calle" + If c2.RowCount>0 Then + For i=0 To c2.RowCount -1 + c2.Position=i + ListView1.AddTwoLines(c2.GetString("CAT_CL_CALLE"),c2.GetString("cuantos") ) + Next + End If + entro = "3" + Else If entro = "3" Then + c2=B4XPages.MainPage.skmt.ExecQuery2("select CAT_CL_NOMBRE, CAT_CL_CALLE, CAT_CL_CODIGO from kmt_info where gestion = 0 and CAT_CL_CALLE = ? AND CAT_CL_COLONIA = ? order by CAT_CL_NOMBRE ", Array As String(Sender.As(Panel).tag, colonia)) + ListView1.Clear + lfila.text = "Nombre" + If c2.RowCount>0 Then + For i=0 To c2.RowCount -1 + c2.Position=i + ListView1.AddTwoLines(c2.GetString("CAT_CL_CODIGO"), c2.GetString("CAT_CL_NOMBRE")) + Next + End If + entro = "4" + Else If entro = "4" Then + B4XPages.MainPage.skmt.ExecNonQuery("delete from CUENTAA") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CUENTAA VALUES (?)", Array As Object(Sender.As(Panel).tag)) + DateTime.TimeFormat = "HHmmss" + STIME=DateTime.Time(DateTime.Now) + + s=B4XPages.MainPage.skmt.ExecQuery2("SELECT COUNT(*) AS CUANTOS FROM HIST_STAY_STORE WHERE HSS_IN = ? AND HSS_CODIGO In (select cuenta from cuentaa)", Array As String("0")) + s.Position = 0 + If s.GetString("CUANTOS") = 1 Then + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE HIST_STAY_STORE set HSS_IN = ? where HSS_IN = 0 AND HSS_CODIGO In (select cuenta from cuentaa)", Array As Object(STIME)) + Else + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_STAY_STORE(HSS_CODIGO, HSS_IN , HSS_OUT , HSS_TOT) VALUES (?,0,0,0)", Array As Object (Sender.As(Panel).tag)) + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE HIST_STAY_STORE set HSS_IN = ? where HSS_IN = 0 AND HSS_CODIGO In (select cuenta from cuentaa)", Array As Object(STIME)) + End If + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE HIST_STAY_OUT set HSO_INI = ? where HSO_INI = 0 ", Array As Object(STIME)) + DateTime.TimeFormat = "HH:mm:ss" + + Subs.guardaClienteHoraInicio(Sender.As(Panel).tag) + + B4XPages.ShowPage("Cliente") + End If + +' Log(Sender.As(Panel).tag) +End Sub + +Private Sub b_buscar_Click + Log(CHECK) + If CHECK = 0 Then + l_baseodia.Text = "Clientes de base de datos" + CHECK = 1 + busca.Text = "" + entro ="2" + colonia = 0 + c=B4XPages.MainPage.skmt.ExecQuery($"select CAT_CL_NOMBRE, CAT_CL_CALLE, CAT_CL_CODIGO from kmt_info2 where gestion = 0 AND CAT_CL_CODIGO <> ${"0"} AND CAT_CL_CODIGO <> ${"1"} ORDER BY CAT_CL_CODIGO"$) + ListView1.Clear + lfila.Text = "NOMBRE" + ListView1.Clear + CustomListView1.Clear + For i = 0 To c.RowCount - 1 + c.Position = i + CustomListView1.Add(CreateListItem(c.GetString("CAT_CL_NOMBRE"),c.GetString("CAT_CL_CALLE"),c.GetString("CAT_CL_CODIGO")),i) + d = B4XPages.MainPage.skmt.ExecQuery($"select CLIENTE FROM ABONOSP WHERE CLIENTE = '${c.GetString("CAT_CL_CODIGO")}'"$) + If d.RowCount = 0 Then + cxc.Visible = False + Else + cxc.Visible = True + End If + + d = B4XPages.MainPage.skmt.ExecQuery($"select IFNULL(CAT_CL_BCREDITO,0) AS CAT_CL_BCREDITO FROM kmt_info2 WHERE CAT_CL_CODIGO = '${c.GetString("CAT_CL_CODIGO")}'"$) +' LogColor(d.RowCount,Colors.Blue) + If d.RowCount > 0 Then + d.Position = 0 + LogColor(d.GetString("CAT_CL_BCREDITO"),Colors.Blue) + If d.GetString("CAT_CL_BCREDITO") = "1" Then + CREDITO.Visible = True + + Else + CREDITO.Visible = False + End If + d.Close + Else + CREDITO.Visible = False + End If + Next + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim label1 As Label + label1 = ListView1.TwoLinesLayout.Label + label1.TextSize = 13 + label1.TextColor = Colors.Black + Dim label2 As Label + label2 = ListView1.TwoLinesLayout.SecondLabel + label2.TextSize = 13 + label2.TextColor = Colors.Black + ListView1.AddTwoLines(c.GetString("CAT_CL_CODIGO"), c.GetString("CAT_CL_NOMBRE")) + Next + End If + c.Close + entro = "4" + + Else If CHECK = 1 Then + l_baseodia.Text = "Clientes del día de visita" + CHECK = 0 + busca.Text = "" + entro ="2" + colonia = 0 + c=B4XPages.MainPage.skmt.ExecQuery($"select CAT_CL_NOMBRE, CAT_CL_CALLE, CAT_CL_CODIGO from kmt_info where gestion = 0 AND CAT_CL_CODIGO <> ${"0"} AND CAT_CL_CODIGO <> ${"1"} ORDER BY CAT_CL_CODIGO"$) + ListView1.Clear + lfila.Text = "NOMBRE" + ListView1.Clear + CustomListView1.Clear + For i = 0 To c.RowCount - 1 + c.Position = i + CustomListView1.Add(CreateListItem(c.GetString("CAT_CL_NOMBRE"),c.GetString("CAT_CL_CALLE"),c.GetString("CAT_CL_CODIGO")),i) + d = B4XPages.MainPage.skmt.ExecQuery($"select CLIENTE FROM ABONOSP WHERE CLIENTE = '${c.GetString("CAT_CL_CODIGO")}'"$) + If d.RowCount = 0 Then + cxc.Visible = False + Else + cxc.Visible = True + End If + + d = B4XPages.MainPage.skmt.ExecQuery($"select IFNULL(CAT_CL_BCREDITO,0) AS CAT_CL_BCREDITO FROM kmt_info WHERE CAT_CL_CODIGO = '${c.GetString("CAT_CL_CODIGO")}'"$) +' LogColor(d.RowCount,Colors.Blue) + If d.RowCount > 0 Then + d.Position = 0 + LogColor(d.GetString("CAT_CL_BCREDITO"),Colors.Blue) + If d.GetString("CAT_CL_BCREDITO") = "1" Then + CREDITO.Visible = True + Else + CREDITO.Visible = False + End If + d.Close + Else + CREDITO.Visible = False + End If + Next + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim label1 As Label + label1 = ListView1.TwoLinesLayout.Label + label1.TextSize = 13 + label1.TextColor = Colors.Black + Dim label2 As Label + label2 = ListView1.TwoLinesLayout.SecondLabel + label2.TextSize = 13 + label2.TextColor = Colors.Black + ListView1.AddTwoLines(c.GetString("CAT_CL_CODIGO"), c.GetString("CAT_CL_NOMBRE")) + Next + End If + c.Close + entro = "4" + + End If +End Sub diff --git a/B4A/C_Cobranza.bas b/B4A/C_Cobranza.bas new file mode 100644 index 0000000..c266040 --- /dev/null +++ b/B4A/C_Cobranza.bas @@ -0,0 +1,27 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=13.1 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore + Private pnlCobranza As Panel + Private clvCobranza As CustomListView +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + +End Sub + + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. \ No newline at end of file diff --git a/B4A/C_Cuestionario.bas b/B4A/C_Cuestionario.bas new file mode 100644 index 0000000..10422ee --- /dev/null +++ b/B4A/C_Cuestionario.bas @@ -0,0 +1,179 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=12.2 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore + Private bAceptarPregunta As Button + Dim encuestaIniciada As Boolean = False + Private Root2 As B4XView + Private EventName As String 'ignore + Private CallBack As Object 'ignore + Private vPreguntaActual As String + Private db As SQL +' Private clienteAnt As String = "" + Dim panelSombra As Panel 'Panel de sombra. +End Sub + +'You can add more parameters here. +Public Sub Initialize (vCallback As Object, vEventName As String, vRoot As B4XView, skmt As SQL) As Object + Root2 = vRoot + EventName = vEventName + CallBack = vCallback + db = skmt + vPreguntaActual = 0 + db.ExecNonQuery("CREATE TABLE IF NOT EXISTS CUESTIONARIO (Q_RUTA TEXT, Q_ALMACEN TEXT, Q_IDCLIENTE TEXT, Q_IDPREGUNTA TEXT, Q_PREGUNTA TEXT, Q_IDRESPUESTA TEXT, Q_RESPUESTA TEXT, Q_FECHA TEXT, Q_ENVIO_OK INTEGER DEFAULT 0)") + agregaColumna("CUESTIONARIO", "Q_ENVIO_OK", "TEXT") + agregaColumna("CUESTIONARIO", "Q_RUTA", "TEXT") + agregaColumna("CUESTIONARIO", "Q_ALMACEN", "TEXT") + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root +End Sub + +'Regresa verdadero o falso dependiendo de si ya se inició la encuesta. +'Sub encuestaIniciada As Boolean +' Return vEncuestaIniciada +'End Sub + +'Regresa el Id de la pregunta actual (read-only). +Sub preguntaActual As String 'ignore + Return vPreguntaActual +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +'Muestra una pregunta con sus posibles respuestas. +' La lista de respuestas puede ser directamente un array p. ej. Array As String("value1", "value2") +' Crear un Sub_Click con el nombre del evento para que reciba un mapa con la respuesta p. ej.: Sub questionario_Click +' Regresa un mapa con: +' idPregunta - El Id especificado de la pregunta. +' pregunta - El texto de la pregunta. +' idRespuesta - Un numero consecutivo empezando en 1 por cada pregunta. +' respuesta - El texto de la respuesta. +' panel - El panel del popup para poder ocultarlo al contestar la pregunta. ( p. ej.: m.Get("panel").As(Panel).Visible = false ) +'########################################### +' Sub questionario_Click +' if m.get("idPregunta") = "1" ..Then .. Else con nuevas preguntas +' End Sub +'########################################### +Sub agregaPregunta(id As String, pregunta As String, respuestas As List) + encuestaIniciada = True + vPreguntaActual = id + bAceptarPregunta.Initialize("bAceptarPregunta") + + Private su As StringUtils + panelSombra.Initialize("pSombra") + Private cd As ColorDrawable + cd.Initialize(Colors.ARGB(125, 98, 98, 98), 0) + panelSombra.Background = cd + Private panelX As Panel 'Panel de la pregunta. + panelX.Initialize("pQuest") + Private lbl As Label 'Etiqueta de la pregunta. + lbl.Initialize("") + lbl.Text = pregunta + lbl.TextSize = 16 + lbl.TextColor = Colors.Black + cd.Initialize2(Colors.white, 20, 1, Colors.Gray) 'Borde y esquinas redondeadas del panel de la pregunta. + panelX.Background = cd + panelSombra.AddView(panelX, 10dip, 0dip, 80%x, 200dip) + Root2.AddView(panelSombra, 0, 0, 100%x, 100%y) 'add the panel to the layout + panelX.AddView(lbl, 20dip, 20dip, (panelX.Width * 0.9), 40dip) 'Agregamos la etiqueta al panel. + lbl.Height = su.MeasureMultilineTextHeight(lbl, lbl.Text) + Private r(respuestas.Size) As RadioButton + For p = 0 To respuestas.Size - 1 + r(p).Initialize("r") + r(p).Text = respuestas.Get(p) + r(p).Tag = CreateMap("id":id, "pregunta":pregunta, "panel":panelSombra, "idRespuesta":p + 1) + panelX.AddView(r(p), 10dip, (70 * (p + 1)), (panelX.Width * 0.9), 10) 'Agegamos el radio al panel. + r(p).Height = su.MeasureMultilineTextHeight(r(p), r(p).Text) + 25 'Calculamos el alto del radio de acuerdo al largo del texto. + Private newTop As Int = lbl.top + lbl.Height + 10 'Si es el primer radio, lo ponemos en top = alto de la "pregunta" + 10. + If p <> 0 Then newTop = r(p - 1).Top + r(p - 1).Height + 5 'Calculamos el Top del radio de acuerdo al top y alto del radio anterior. + r(p).Top = newTop + Next + r(0).Checked = True + bAceptarPregunta.Text = "Continuar" + panelX.AddView(bAceptarPregunta, 10, newTop + r(respuestas.Size - 1).Height + 20, 150dip, 50dip) 'Ponemos el boton de continuar despues del ultimo radio. + bAceptarPregunta.Left = (panelX.Width / 2) - (bAceptarPregunta.Width / 2) + panelX.Height = bAceptarPregunta.Top + bAceptarPregunta.Height + 15dip 'Calculamos el alto del panel de acuerdo al Top del boton. + panelX.left = (Root2.Width / 2) - (panelX.Width / 2) + panelX.top = (Root2.Height / 3) - (panelX.Height / 2) + panelSombra.Width = Root2.Width + panelSombra.Height = Root2.Height + panelSombra.Elevation = 100 + panelSombra.BringToFront +' panelSombra.Elevation = 0 +End Sub + +private Sub preguntaContestada(Success As Map) 'ignore + If SubExists(CallBack, EventName & "_preguntaContestada") Then + CallSubDelayed2(CallBack, EventName & "_preguntaContestada", Success) + End If +End Sub + +private Sub pSombra_Click +End Sub + +private Sub r_CheckedChange(Checked As Boolean) + bAceptarPregunta.tag = CreateMap("idPregunta":Sender.As(RadioButton).tag.As(Map).Get("id").As(String), "pregunta":Sender.As(RadioButton).tag.As(Map).Get("pregunta"), "idRespuesta":Sender.As(RadioButton).tag.As(Map).Get("idRespuesta").As(String), "respuesta":Sender.As(RadioButton).text, "panel":Sender.As(RadioButton).tag.As(Map).Get("panel")) +End Sub + +Private Sub bAceptarPregunta_Click + encuestaIniciada = True + Private m As Map = Sender.As(Button).tag.As(Map) 'Recibimos el id de la pregunta, el id de la respuesta, el texto de la respuesta y el objeto del panelSombra para poder ocultarlo. + preguntaContestada(m) +'' m.Get("panel").As(Panel).Visible = False 'Ocultamos el panel de la pregunta. +' m.Get("panel").As(Panel).RemoveView +' If m.Get("idPregunta") = "1" And m.Get("respuesta") = "No, está enrejado o no se tiene acceso" Then +' Log("Tiendajon / Ventana / Kiosko") +' else If m.Get("idPregunta") = "1" And m.Get("respuesta") = "Si se pude acceder" Then +' agregaPregunta("2", "¿Tiene al menos 2 pasillos con acceso directo a la mercancía?", Array As String("Si tiene al menos 2 pasillos con acceso directo a la mercancía", "No tiene pasillos o solo uno central")) +' End If +' If m.Get("idPregunta") = "2" And m.Get("respuesta") = "Si tiene al menos 2 pasillos con acceso directo a la mercancía" Then +' Log("Mini-Super") +' else If m.Get("idPregunta") = "2" And m.Get("respuesta") = "No tiene pasillos o solo uno central" Then +' agregaPregunta("3", "¿Cuenta con enfriador horizontal para venta de perecederos como queso, jamon, crema, etc.?", Array As String("Si", "No tiene enfriador horizontal. ¿El local esta enfocado a venta especializada?")) +' End If +End Sub + +'Regresa verdadero si el cliente dado tiene cuestionario contestado. +Sub clienteConCuestionario(idCliente As String) As Boolean 'ignore + Private r As Boolean = False + Private c As Cursor = db.ExecQuery($"select count(*) as q from CUESTIONARIO where Q_IDCLIENTE = '${idCliente}'"$) + c.Position = 0 + If c.GetInt("q") > 0 Then r = True + Return r +End Sub + +'Oculta el anel de la pregunta. +Sub ocultPanelPregunta + If panelSombra.IsInitialized Then panelSombra.RemoveView +End Sub + +'Agrega una columna a la tabla especificada. +'Hay que indicar el "tipo" de la columna (TEXT, INTEGER, ETC) +'Ej. agregaColumna("TABLA", "COLUMNA", "TIPO") +Sub agregaColumna(tabla As String, columna As String, tipo As String) 'ignore + Try 'Intentamos usar "pragma_table_info" para revisar si existe la columna en la tabla + Private c As Cursor = db.ExecQuery($"SELECT COUNT(*) AS fCol FROM pragma_table_info('${tabla}') WHERE name='${columna}'"$) + c.Position = 0 + If c.GetString("fCol") = 0 Then 'Si no esta la columna la agregamos + db.ExecNonQuery($"ALTER TABLE ${tabla} ADD COLUMN ${columna} ${tipo}"$) + Log($"Columna "${columna} ${tipo}", agregada a "${tabla}"."$) + End If + Catch 'Si no funciona "pragma_table_info" lo hacemos con try/catch + Try + db.ExecNonQuery($"ALTER TABLE ${tabla} ADD COLUMN ${columna} ${tipo}"$) + Log($"Columna "${columna} ${tipo}", agregada a "${tabla}".."$) + Catch + Log(LastException) + End Try + End Try +End Sub \ No newline at end of file diff --git a/B4A/C_Historico.bas b/B4A/C_Historico.bas new file mode 100644 index 0000000..ccad2cd --- /dev/null +++ b/B4A/C_Historico.bas @@ -0,0 +1,123 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore + + Dim g As GPS + Dim clie_id As String + Dim sDate,sTime As String + Dim usuario As String + + Dim c As Cursor + Dim ruta As String + Dim Regresar As Button + + + Dim ListView1 As ListView + Dim L_CANT As Label + Dim L_TOTAL As Label + Dim borra As Button + Dim Existe As String + Dim result As String + ' Dim lat_gps, lon_gps As String + + Private Titulo As Label + Private b_desc As Button + Private ListView2 As ListView + Dim tgl As Toggle +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + ruta = File.DirInternal + Root.LoadLayout("nota") + borra.Visible = False + Titulo.Text = "Acumulado" + b_desc.Visible = False + If File.Exists(ruta, "kmt.db") = False Then + File.Copy(File.DirAssets, "kmt.db", ruta, "kmt.db") + End If +' skmt.Initialize(ruta,"kmt.db", True) +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Sub B4XPage_Appear + If Not(Starter.gps.GPSEnabled) Then + ToastMessageShow("Es necesario tener el GPS encendido", True) + StartActivity(Starter.gps.LocationSettingsIntent) + End If + L_CANT.Text ="" + L_TOTAL.Text="" + c=B4XPages.MainPage.skmt.ExecQuery("select count(*) as EXISTE from HIST_VENTAS WHERE HVD_CLIENTE IN (Select CUENTA from cuentaa)") + C.Position=0 + Existe = C.GetString("EXISTE") + C.Close + c=B4XPages.MainPage.skmt.ExecQuery("select HVD_CLIENTE,HVD_PRONOMBRE,HVD_CANT,HVD_COSTO_TOT from HIST_VENTAS WHERE HVD_CLIENTE IN (Select CUENTA from cuentaa) order by HVD_PRONOMBRE asc") + ListView1.Clear + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim label1 As Label + label1 = ListView1.TwoLinesLayout.Label + label1.TextSize = 15 + label1.TextColor = Colors.Black + Dim label2 As Label + label2 = ListView1.TwoLinesLayout.SecondLabel + label2.TextSize = 10 + label2.TextColor = Colors.Blue + ListView1.AddTwoLines(c.GetString("HVD_PRONOMBRE"),"Cantidad #"& c.GetString("HVD_CANT")& " SubTotal $"& c.GetString("HVD_COSTO_TOT")) + Next + End If + If Existe <> 0 Then + c=B4XPages.MainPage.skmt.ExecQuery("select SUM(HVD_CANT) AS PC_NOART, SUM(HVD_COSTO_TOT) AS PC_MONTO from HIST_VENTAS where HVD_CLIENTE in (Select CUENTA from cuentaa)") + C.Position=0 + L_CANT.Text = c.GetString("PC_NOART") + L_TOTAL.Text = c.GetString("PC_MONTO") + End If +End Sub + +Sub GPS_LocationChanged (Location1 As Location) + 'lat_gps=Location1.ConvertToSeconds(Location1.Latitude) + 'lon_gps=Location1.ConvertToSeconds(Location1.Longitude) +End Sub + +Sub Regresar_Click + B4XPages.ShowPage("Cliente") +End Sub + +Private Sub B4XPage_CloseRequest As ResumableSub +' BACK key pressed +' Return True To close, False To cancel + B4XPages.ShowPage("Principal") + Return False +End Sub + +Sub ListView2_ItemClick (Position As Int, Value As Object) + ListView2.Visible = False + ListView1.Visible = True +End Sub + +Sub ListView1_ItemClick (Position As Int, Value As Object) + ListView2.Visible = True + ListView1.Visible = False + Dim label1 As Label + For i=0 To 20 + label1 = ListView2.SingleLineLayout.Label + label1.TextSize = 15 + label1.TextColor = Colors.Black + ListView2.AddSingleLine(i) + Next +End Sub \ No newline at end of file diff --git a/B4A/C_MapaRutas.bas b/B4A/C_MapaRutas.bas new file mode 100644 index 0000000..d055d2d --- /dev/null +++ b/B4A/C_MapaRutas.bas @@ -0,0 +1,263 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore + + Dim GPS As GPS + Dim rp As RuntimePermissions + Dim ruta As String + Dim skmt As SQL + Dim c As Cursor + Dim c2 As Cursor + Dim c22 As Cursor + Dim c3 As Cursor + + Private gmap As GoogleMap + Private MapFragment1 As MapFragment + Dim Latitud As Double = 0 + Dim Longitud As Double = 0 + Dim Lat2 As Double = 0 + Dim Lon2 As Double = 0 + Dim p1, p2 As Location + Dim Distance As Float + Dim boton1 As Button + Dim HUE_BLUE As Float + Dim HUE_RED As Float + Dim HUE_GREEN As Float + Private B_AZUL As Button + Private B_ROJO As Button + Private B_VERDE As Button + Private B_TODOS As Button + Dim Tienda As String + Dim LatitudRu As Double + Dim LongitudRU As Double + Dim LIST_AZUL As List + Dim LIST_ROJO As List + Dim LIST_VERDE As List + Dim MARK_AZUL As Marker + Dim MARK_ROJO As Marker + Dim MARK_VERDE As Marker + Dim MARK_CEDIS As Marker + Dim rojo As String + Dim azul As String + Dim verde As String + Dim todos As String + Dim NumSerie As Int + Dim OnInfoWindowClickListener1 As OnInfoWindowClickListener + Dim GoogleMapEXTRA As GoogleMapsExtras + Dim CODIGO As String + Private SEMANA As String + Private p_mapaRutas As Panel +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + Root.LoadLayout("mapaRutas") + ruta = File.DirInternal + If File.Exists(ruta, "kmt.db") = False Then + File.Copy(File.DirAssets, "kmt.db", ruta, "kmt.db") + End If + skmt.Initialize(ruta,"kmt.db", True) + GPS.Initialize("GPS") + If MapFragment1.IsGooglePlayServicesAvailable = False Then + ToastMessageShow("Please install Google Play Services.", True) + End If + MARK_AZUL.IsInitialized + MARK_ROJO.IsInitialized + MARK_VERDE.IsInitialized + LIST_AZUL.Initialize + LIST_ROJO.Initialize + LIST_VERDE.Initialize + verde = 0 + azul = 0 + rojo = 0 + todos = 1 + c=B4XPages.MainPage.skmt.ExecQuery2("select count(*) AS CUANTOS from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("SEMANA")) + c.Position =0 + SEMANA = c.GetString("CUANTOS") + c.Close + If SEMANA > 0 Then + c=B4XPages.MainPage.skmt.ExecQuery2("select CAT_VA_VALOR from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("SEMANA")) + c.Position =0 + SEMANA = c.GetString("CAT_VA_VALOR") + c.Close + End If +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Sub MapFragment1_Ready + Log("ENTRANDO") + gmap = MapFragment1.GetMap + gmap.IsInitialized + rp.CheckAndRequest(rp.PERMISSION_ACCESS_FINE_LOCATION) + Wait For Activity_PermissionResult (Permission As String, Result As Boolean) + gmap.MyLocationEnabled = Result + Dim JavaMapsObject As JavaObject + JavaMapsObject = gmap.GetUiSettings + JavaMapsObject.RunMethod("setMapToolbarEnabled", Array As Object(True)) + '''''''----------------------------MARKER AZUL - POR VISITAR + If azul = 1 Or todos = 1 Then + c.IsInitialized + c=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_CODIGO,CAT_CL_NOMBRE,CAT_CL_LAT,CAT_CL_LONG from kmt_info where gestion = 0 and CAT_CL_LAT is not null and CAT_CL_LONG is not null and CAT_CL_LAT <> 0 and CAT_CL_LONG <> 0 and CAT_CL_LAT <> ' ' and CAT_CL_LONG <> ' ' ") + skmt.Initialize(ruta,"kmt.db", True) + If c.RowCount > 0 Then + For i = 0 To c.RowCount - 1 + c.Position = i +' Log(i&"|"&c.GetString("CAT_CL_LAT")&"|") + LatitudRu = 0 + If c.GetString("CAT_CL_LAT") <> "" Then LatitudRu = c.GetString("CAT_CL_LAT") + LongitudRU = 0 + If c.GetString("CAT_CL_LONG") <> "" Then LongitudRU = c.GetString("CAT_CL_LONG") + CODIGO=c.GetString("CAT_CL_CODIGO") + Tienda= c.GetString("CAT_CL_NOMBRE") + MARK_AZUL = gmap.AddMarker2(LatitudRu,LongitudRU,CODIGO, gmap.HUE_BLUE) + MARK_AZUL.Snippet = Tienda + Next + End If + c .Close + If MARK_AZUL.IsInitialized Then LIST_AZUL.Add(MARK_AZUL) + End If + '''''''----------------------------MARKER VERDE - VENTA + If verde =1 Or todos = 1 Then + c2.IsInitialized + c2=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_CODIGO, CAT_CL_NOMBRE,CAT_CL_LONG,CAT_CL_LAT from kmt_info where gestion = 2 and CAT_CL_LAT is not null and CAT_CL_LONG is not null and CAT_CL_LAT <> 0 and CAT_CL_LONG <> 0") + For i = 0 To c2.RowCount -1 + c2.Position = i + LongitudRU = c2.GetString("CAT_CL_LONG") + LatitudRu = c2.GetString("CAT_CL_LAT") + CODIGO=c2.GetString("CAT_CL_CODIGO") + Tienda= c2.GetString("CAT_CL_NOMBRE") + MARK_VERDE = gmap.AddMarker2(LatitudRu,LongitudRU,CODIGO,gmap.HUE_GREEN) + MARK_VERDE.Snippet = Tienda + Next + Else + If verde =1 Or todos = 1 Then + c2.IsInitialized + c2=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_CODIGO, CAT_CL_NOMBRE,CAT_CL_LONG,CAT_CL_LAT from kmt_info where gestion = 2 and CAT_CL_LAT is not null and CAT_CL_LONG is not null and CAT_CL_LAT <> 0 and CAT_CL_LONG <> 0") + For i = 0 To c2.RowCount -1 + c2.Position = i + LongitudRU = c2.GetString("CAT_CL_LONG") + LatitudRu = c2.GetString("CAT_CL_LAT") + CODIGO=c2.GetString("CAT_CL_CODIGO") + Tienda= c2.GetString("CAT_CL_NOMBRE") + MARK_VERDE = gmap.AddMarker2(LatitudRu,LongitudRU,CODIGO,gmap.HUE_GREEN) + MARK_VERDE.Snippet = Tienda + Next + c2 .Close + If MARK_VERDE.IsInitialized Then LIST_VERDE.Add(MARK_VERDE) + End If + End If +' '''''''----------------------------MARKER ROJO - NO VENTA + If rojo =1 Or todos = 1 Then + c3.IsInitialized + c3=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_CODIGO, CAT_CL_NOMBRE,CAT_CL_LONG,CAT_CL_LAT from kmt_info where gestion = 3 and CAT_CL_LAT is not null and CAT_CL_LONG is not null and CAT_CL_LAT <> 0 and CAT_CL_LONG <> 0") + For i = 0 To c3.RowCount -1 + c3.Position = i + LongitudRU = c3.GetDouble("CAT_CL_LONG") + LatitudRu = c3.GetDouble("CAT_CL_LAT") + Tienda= c3.GetString("CAT_CL_NOMBRE") + MARK_ROJO = gmap.AddMarker2(LatitudRu,LongitudRU,Tienda, gmap.HUE_RED) + Next + Else + If rojo =1 Or todos = 1 Then + c3.IsInitialized + c3=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_CODIGO, CAT_CL_NOMBRE,CAT_CL_LONG,CAT_CL_LAT from kmt_info where gestion = 3 and CAT_CL_LAT is not null and CAT_CL_LONG is not null and CAT_CL_LAT <> 0 and CAT_CL_LONG <> 0") + For i = 0 To c3.RowCount -1 + c3.Position = i + LongitudRU = c3.GetDouble("CAT_CL_LONG") + LatitudRu = c3.GetDouble("CAT_CL_LAT") + Tienda= c3.GetString("CAT_CL_NOMBRE") + MARK_ROJO = gmap.AddMarker2(LatitudRu,LongitudRU,Tienda, gmap.HUE_RED) + Next + If MARK_ROJO.IsInitialized Then LIST_ROJO.Add(MARK_ROJO) + c3.Close + End If + End If + ''------------------------------ + Dim aa As CameraPosition + aa.Initialize(LatitudRu,LongitudRU,15)''' RECOMENDABLE CAMBIAR A 10 PARA QUE SE VEAN MAS MARCADORES + gmap.AnimateCamera(aa) + + '''''---------------------- ESTO ES PARA LOS CLICK EN LAS VENTANAS D INFORMACION----------- + Dim OnInfoWindowClickListener1 As OnInfoWindowClickListener + OnInfoWindowClickListener1.Initialize("OnInfoWindowClickListener1") + GoogleMapEXTRA.SetOnInfoWindowClickListener(gmap, OnInfoWindowClickListener1) + +End Sub + +Sub OnInfoWindowClickListener1_click(Marker1 As Marker) + Log("mapclicked") + Log("borramos cuentaa") + B4XPages.MainPage.skmt.ExecNonQuery("delete from CUENTAA") + Log("insertamos cuentaa") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CUENTAA VALUES (?) ", Array As Object(Marker1.Title)) + Log("vamos a cliente") + B4XPages.ShowPage("Cliente") + B4XPages.ClosePage("MapaRutas") + B4XPages.GetManager.ClosePage(Me) +End Sub + +Sub GPS_LocationChanged (Parametro As Location) + MARK_CEDIS.IsInitialized +End Sub + +Sub B4XPage_Appear + If GPS.GPSEnabled = False Then + ToastMessageShow("Debe Activar el GPS del Equipo.", True) + StartActivity(GPS.LocationSettingsIntent) + Else + GPS.Start(0, 0) + End If +End Sub + +Sub B_TODOS_Click + todos =1 + verde = 0 + azul = 0 + rojo = 0 + MapFragment1_Ready +End Sub + +Sub B_VERDE_Click + verde = 1 + azul = 0 + rojo = 0 + todos = 0 + gmap.Clear + MapFragment1_Ready +End Sub + +Sub B_ROJO_Click + rojo = 1 + verde = 0 + azul = 0 + todos = 0 + gmap.Clear + MapFragment1_Ready +End Sub + +Sub B_AZUL_Click + azul = 1 + verde = 0 + rojo = 0 + todos = 0 + gmap.Clear + MapFragment1_Ready +End Sub + +Private Sub p_mapaRutas_Click + +End Sub \ No newline at end of file diff --git a/B4A/C_Mapas.bas b/B4A/C_Mapas.bas new file mode 100644 index 0000000..36fa8d1 --- /dev/null +++ b/B4A/C_Mapas.bas @@ -0,0 +1,24 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. \ No newline at end of file diff --git a/B4A/C_NoVenta.bas b/B4A/C_NoVenta.bas new file mode 100644 index 0000000..7da0bb3 --- /dev/null +++ b/B4A/C_NoVenta.bas @@ -0,0 +1,184 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore + + Dim g As GPS + Dim ruta As String + Dim skmt As SQL + Dim c As Cursor + + Dim CANCELA As Button + Dim GUARDA As Button + Dim r_1 As RadioButton + Dim r_2 As RadioButton + Dim r_3 As RadioButton + Dim e_comm As EditText + Dim motivo As String + Dim cuenta As String + Dim usuario As String + Dim sDate,sTime As String +' Dim lat_gps, lon_gps As String + Dim tgl As Toggle + Dim r_4 As RadioButton + Dim reqManager As DBRequestManager + Private stay_hh As String + Private stay_mi As String + Private stay_ss As String +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + Root.LoadLayout("noventa") + ruta = File.DirInternal +' End If + If File.Exists(ruta, "kmt.db") = False Then + File.Copy(File.DirAssets, "kmt.db", ruta, "kmt.db") + End If + reqManager.Initialize(Me, Starter.DBReqServer) +' skmt.Initialize(ruta,"kmt.db", True) +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Sub B4XPage_Appear + e_comm.Text="" + tgl.Initialize + If Not(Starter.gps.GPSEnabled) Then + ToastMessageShow("Es necesario tener el GPS encendido", True) + StartActivity(Starter.gps.LocationSettingsIntent) + End If + r_1.Checked = False + r_2.Checked = False + r_3.Checked = False + r_4.Checked = False + e_comm.Text = "" +End Sub + +Sub GPS_LocationChanged (Location1 As Location) + 'lat_gps=Location1.ConvertToSeconds(Location1.Latitude) + 'lon_gps=Location1.ConvertToSeconds(Location1.Longitude) +End Sub + +Sub CANCELA_Click + B4XPages.ShowPage("Cliente") +End Sub +Sub GUARDA_Click + If r_1.Checked Then + motivo = "CERRADO" + Else If r_2.Checked Then + motivo = "NO COMPRA" + Else If r_3.Checked Then + motivo = "CON PRODUCTO" + Else + motivo = "NO ESTA EL ENCARGADO" + End If + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("select CUENTA from cuentaa") + c.Position = 0 + cuenta = c.GetString("CUENTA") + c=B4XPages.MainPage.skmt.ExecQuery("select usuario from usuarioa") + c.Position = 0 + usuario = c.GetString("USUARIO") + c=B4XPages.MainPage.skmt.ExecQuery("select PE_PROID,PE_CANT FROM PEDIDO where pe_cliente in (Select CUENTA from cuentaa) ") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + B4XPages.MainPage.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen + ? where cat_gp_id = ?", Array As Object(c.GetString("PE_CANT"),c.GetString("PE_PROID"))) + Subs.borraPedidoClienteActual + Next + End If + + +' B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where pc_cliente in (Select CUENTA from cuentaa)") +' B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido where pe_cliente in (Select CUENTA from cuentaa)") + Dim cRevisa As Cursor = B4XPages.MainPage.skmt.ExecQuery($"SELECT distinct NV_CLIENTE FROM NOVENTA WHERE NV_CLIENTE = '${cuenta}'"$) + If cRevisa.RowCount > 0 Then + cRevisa.Position = 0 + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 3 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + Else + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO NOVENTA (NV_CLIENTE,NV_FECHA,NV_USER,NV_MOTIVO,NV_COMM,NV_LAT,NV_LON) VALUES(?,?,?,?,?,?,?) ", Array As Object (cuenta,sDate & sTime, usuario, motivo,e_comm.text, B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps)) + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 3 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + End If + DateTime.TimeFormat = "HHmmss" + sTime=DateTime.Time(DateTime.Now) + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE HIST_STAY_STORE set HSS_OUT = ? where HSS_CODIGO In (select cuenta from cuentaa)", Array As Object(sTime)) + ' B4XPages.MainPage.skmt.ExecNonQuery("UPDATE HIST_STAY_STORE set HSS_TOT = HSS_OUT - HSS_IN where HSS_CODIGO In (select cuenta from cuentaa)") + + c=B4XPages.MainPage.skmt.ExecQuery(" Select (substr(HSS_OUT,1,2) - substr(HSS_IN,1,2)) - Case when (substr(HSS_OUT,3,2) - substr(HSS_IN,3,2)) < 0 Then 1 Else 0 end HORAS_TOTALES, " & _ + "Case when (substr(HSS_OUT,3,2) - substr(HSS_IN,3,2)) < 0 Then (substr(HSS_OUT,3,2) + 60 - substr(HSS_IN,3,2)) " & _ + " Else (substr(HSS_OUT,3,2) - substr(HSS_IN,3,2)) End - Case when (substr(HSS_OUT,5,2) - substr(HSS_IN,5,2)) < 0 Then 1 Else 0 end MINUTOS_TOTALES, " & _ + "Case when (substr(HSS_OUT,5,2) - substr(HSS_IN,5,2)) < 0 Then (substr(HSS_OUT,5,2) + 60 - substr(HSS_IN,5,2)) " & _ + " Else (substr(HSS_OUT,5,2) - substr(HSS_IN,5,2)) end SEGUNDOS_TOTALES " & _ + " from HIST_STAY_STORE where HSS_CODIGO In (Select cuenta from cuentaa) ") + c.Position = 0 + stay_hh = c.GetString("HORAS_TOTALES") * 60 * 60 + stay_mi = c.GetString("MINUTOS_TOTALES") * 60 + stay_ss = c.GetString("SEGUNDOS_TOTALES") + + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE HIST_STAY_STORE set HSS_TOT = ? where HSS_CODIGO In (select cuenta from cuentaa)", Array As Object(stay_hh + stay_mi + stay_ss)) + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE HIST_STAY_OUT set HSO_FIN = ? ", Array As Object(sTime)) + DateTime.TimeFormat = "HH:mm:ss" + + B4XPages.MainPage.skmt.ExecNonQuery2("update PEDIDO_INICIO_FINAL set PIF_HORA_FINAL = ? where PIF_CLIENTE = ? and PIF_HORA_FINAL = 0", Array As Object (DateTime.Now, cuenta)) + LogColor($"actualizamos "${cuenta}, hora_final=${DateTime.now}"$,Colors.Red) + +' mandaPendientesnoventa + B4XPages.ShowPage("Principal") +End Sub + +Sub mandaPendientesnoventa + 'PEDIDO_CLIENTE (Pendientes) +' c = B4XPages.MainPage.skmt.ExecQuery("SELECT PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT, PC_COSTO_SIN, PC_RUTA, PC_ALMACEN, PC_FACTURA FROM PEDIDO_CLIENTE where pc_envio_ok <> 1") + c = B4XPages.MainPage.skmt.ExecQuery("SELECT * FROM NOVENTA where ifnull(NV_ENVIO_OK, 0) <> 1") + Log($"NO VENTA PENDIENTE: ${c.RowCount}"$) + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_noventa_IZCA" + cmd.Parameters = Array As Object(C.GetString("NV_CLIENTE"), C.GetString("NV_FECHA"), C.GetString("NV_USER"), C.GetString("NV_MOTIVO"), C.GetString("NV_COMM"), C.GetString("NV_LAT"), C.GetString("NV_LON"), Subs.traeAlmacen, Subs.traeRuta(C.GetString("NV_CLIENTE"))) + reqManager.ExecuteCommand(cmd , $"insert_noventa_${c.GetString("NV_CLIENTE")}"$) +' insert_noventa_INTMEX=INSERT INTO INTMEX.NOVENTA (NV_FECHA_SINC,NV_CLIENTE,NV_FECHA,NV_USER,NV_MOTIVO,NV_COMM,NV_LAT,NV_LON,NV_IDALMACEN,NV_RUTA) VALUES (SYSDATE,(?),(?),(?),(?),(?),(?),(?),(?),(?)) + Next + End If +End Sub + +Sub JobDone(Job As HttpJob) +Log(Job.Success) +If Job.Success = False Then + ToastMessageShow("Error: " & Job.ErrorMessage, True) +Else + LogColor("JobDone: '" & reqManager.HandleJob(Job).tag & "' - Registros: " & reqManager.HandleJob(Job).Rows.Size, Colors.Green) 'Mod por CHV - 211027 + If Job.JobName = "DBRequest" Then + Dim resultado As DBResult = reqManager.HandleJob(Job) + If resultado.Tag.As(String).IndexOf("insert_noventa_") > -1 Then + Private cliente As String= resultado.Tag + cliente = cliente.SubString(cliente.IndexOf("_") + 9) + Log($"Cliente1:${cliente}"$) + Starter.skmt.ExecNonQuery($"update NOVENTA set NV_ENVIO_OK = '1' where NV_CLIENTE = '${cliente}'"$) + For Each records() As Object In resultado.Rows + For Each k As String In resultado.Columns.Keys + Log(resultado.Tag & ": " & k & ": " & records(resultado.Columns.Get(k))) + Next + Next + End If + End If + Job.Release + End If +End Sub \ No newline at end of file diff --git a/B4A/C_Nota.bas b/B4A/C_Nota.bas new file mode 100644 index 0000000..fff1cef --- /dev/null +++ b/B4A/C_Nota.bas @@ -0,0 +1,473 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore + + Dim skmt As SQL + Dim g As GPS + Dim clie_id As String + Dim sDate,sTime As String + Dim usuario As String + + Dim c As Cursor + Dim ruta As String + Dim Regresar As Button + + Dim ListView1 As ListView + Dim L_CANT As Label + Dim L_TOTAL As Label + Dim borra As Button + Dim Existe As String + Dim result As String + ' Dim lat_gps, lon_gps As String + Dim DESC As String + + Private Titulo As Label + Private b_desc As Button + Dim DESCUENTO As String + Dim folio As String + Dim tgl As Toggle + Private almacen As String + Private p_nota As Panel + Dim vamoaver As List + Dim c2 As Cursor + Dim j3 As Cursor +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + ruta = File.DirInternal + Root.LoadLayout("nota") + borra.Visible = True + Titulo.Text = "Pedido Actual" +' If Existe <> 0 Then +' c=B4XPages.MainPage.skmt.ExecQuery("select pc_noart, pc_monto from pedido_cliente where pc_cliente in (Select CUENTA from cuentaa)") +' C.Position=0 +' L_CANT.Text = c.GetString("PC_NOART") +' L_TOTAL.Text = c.GetString("PC_MONTO") +' End If +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Sub B4XPage_Appear + ' Verificar si el GPS está encendido + If Not(Starter.gps.GPSEnabled) Then + ToastMessageShow("Es necesario tener el GPS encendido", True) + StartActivity(Starter.gps.LocationSettingsIntent) + End If + + ' Obtener el ID del almacén + c = B4XPages.MainPage.skmt.ExecQuery("SELECT ID_ALMACEN FROM CAT_ALMACEN") + If c.RowCount > 0 Then + c.Position = 0 + almacen = c.GetString("ID_ALMACEN") + End If + c.Close + + ' Limpiar los campos de cantidad y total + L_CANT.Text = "" + L_TOTAL.Text = "" + + ' Verificar si existen pedidos para el cliente + c = B4XPages.MainPage.skmt.ExecQuery("SELECT COUNT(*) AS EXISTE FROM pedido_cliente WHERE pc_cliente IN (SELECT CUENTA FROM cuentaa)") + If c.RowCount > 0 Then + c.Position = 0 + Existe = c.GetString("EXISTE") + End If + c.Close + + ' Obtener los pedidos del cliente + c = B4XPages.MainPage.skmt.ExecQuery("SELECT PE_PRONOMBRE, PE_COSTO_TOT, PE_CANT, PE_FOLIO, PE_CEDIS FROM PEDIDO WHERE PE_CLIENTE IN (SELECT CUENTA FROM cuentaa) ORDER BY PE_CEDIS, PE_PRONOMBRE") + ListView1.Clear + vamoaver.Initialize + Private cs As CSBuilder + + If c.RowCount > 0 Then + For i = 0 To c.RowCount - 1 + cs.Initialize + c.Position = i + Dim label1 As Label + label1 = ListView1.TwoLinesLayout.Label + label1.TextSize = 15 + label1.TextColor = Colors.Black + label1.Color = Colors.White + + Private textColor As Int = Colors.Black + Dim folio As String = c.GetString("PE_FOLIO") + + ' Asignar colores según el tipo de folio + If folio = "VENTA" Then + textColor = Colors.RGB(48, 3, 195) + Else If folio = "PREVENTA_CONTADO" Or folio = "ABORDO" Or folio = "RECARGA" Then + textColor = Colors.RGB(166, 0, 0) + Else If folio = "PREVENTA_CREDITO" Then + textColor = Colors.RGB(0, 128, 0) + End If + + ' Cambiar el color si es una promoción + If Not(IsNumber(c.GetString("PE_CEDIS"))) And folio = "VENTA" Then + textColor = Colors.RGB(154, 131, 231) + Else If Not(IsNumber(c.GetString("PE_CEDIS"))) And folio = "PREVENTA_CONTADO" Then + folio = "PREVENTA" + textColor = Colors.RGB(255,0,214) + Else If Not(IsNumber(c.GetString("PE_CEDIS"))) And folio = "PREVENTA_CREDITO" Then + folio = "PREVENTA" + textColor = Colors.RGB(120,178,108) + End If + + + Dim polioreal As String + If folio = "VENTA" Then + textColor = Colors.RGB(154,131,231) + Else If folio = "PREVENTA_CONTADO" Then + polioreal = "PREVENTA" + textColor = Colors.RGB(255,111,111) + Else If folio = "PREVENTA_CREDITO" Then + polioreal = "PREVENTA" + textColor = Colors.RGB(120,178,108) + End If + LogColor(polioreal,Colors.Gray) + Dim label2 As Label + label2 = ListView1.TwoLinesLayout.SecondLabel + label2.TextSize = 10 + label2.TextColor = Colors.Blue +' LogColor(folio,Colors.Gray) + ' Agregar el ítem a la lista +' ListView1.AddTwoLines(cs.Color(textColor).append(c.GetString("PE_PRONOMBRE")).pop, "Cantidad #" & c.GetString("PE_CANT") & " SubTotal $" & c.GetString("PE_COSTO_TOT") & " Folio " & folio ) + ListView1.AddSingleLine(cs.Color(textColor).Size(12).append(c.GetString("PE_PRONOMBRE") & " ").pop.Append(CRLF).Size(8).Color(Colors.Blue).Append("Cantidad #"& c.GetString("PE_CANT")).Append(" SubTotal $"& c.GetString("PE_COSTO_TOT")).Append(" " & polioreal& " " &c.GetString("PE_CEDIS")).PopAll) + + vamoaver.Add(folio) + Next + End If + + Log($"EXISTE: ${Existe}"$) + + ' Calcular la cantidad total y el monto total + c = B4XPages.MainPage.skmt.ExecQuery("SELECT IFNULL(SUM(IFNULL(PE_CANT,0)),0) AS PC_NOART, SUM(IFNULL(PE_COSTO_TOT,0)) AS PC_MONTO FROM PEDIDO WHERE PE_CLIENTE IN (SELECT CUENTA FROM cuentaa) AND PE_PROID NOT IN (SELECT CAT_PA_ID FROM PROMOS_COMP)") + If c.RowCount > 0 Then + c.Position = 0 + Log($"registros: ${c.RowCount}, arts: ${c.GetString("PC_NOART")}, monto:${c.GetString("PC_MONTO")}"$) + L_CANT.Text = c.GetString("PC_NOART") + L_TOTAL.Text = c.GetString("PC_MONTO") + If L_CANT.Text = Null Or L_CANT.Text = "null" Or L_CANT.Text = "" Then L_CANT.Text = "0" + If L_TOTAL.Text = Null Or L_TOTAL.Text = "null" Or L_TOTAL.Text = "" Then L_TOTAL.Text = "0" + c.Close + + ' Obtener el descuento total + c = B4XPages.MainPage.skmt.ExecQuery("SELECT SUM(IFNULL(PE_DESC,0)) AS DESCUENTO FROM PEDIDO WHERE PE_CLIENTE IN (SELECT CUENTA FROM cuentaa)") + If c.RowCount > 0 Then + c.Position = 0 + DESC = c.GetString("DESCUENTO") + b_desc.Visible = False + End If + c.Close + End If + + ' Habilitar o deshabilitar el botón de borrar + If Subs.pedidoGuardado Then + borra.Enabled = False + Else + borra.Enabled = True + End If +End Sub + +Sub Activity_Pause (UserClosed As Boolean) + +End Sub + +Sub GPS_LocationChanged (Location1 As Location) + 'lat_gps=Location1.ConvertToSeconds(Location1.Latitude) + 'lon_gps=Location1.ConvertToSeconds(Location1.Longitude) +End Sub + +Sub Regresar_Click + B4XPages.ShowPage("Cliente") +End Sub + +Private Sub B4XPage_CloseRequest As ResumableSub +' BACK key pressed +' Return True To close, False To cancel + B4XPages.ShowPage("Cliente") + Return False +End Sub + +Sub borra_Click + Log("Entre al btn borrar") + result = Msgbox2("Seguro que desa borrar el pedido?","Cancelar pedido", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore + If result = DialogResponse.POSITIVE Then + c=B4XPages.MainPage.skmt.ExecQuery("select PE_PROID,PE_CANT FROM PEDIDO where pe_cliente in (Select CUENTA from cuentaa) ") + Log($"select PE_PROID,PE_CANT FROM PEDIDO where pe_cliente in (Select CUENTA from cuentaa)"$) + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + B4XPages.MainPage.skmt.ExecNonQuery2($"update ${Starter.tabla} set cat_gp_almacen = cat_gp_almacen + ? where cat_gp_id = ?"$, Array As Object(c.GetString("PE_CANT"),c.GetString("PE_PROID"))) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO INVENT_X_ENVIAR (ALMACEN , PROID , CANTIDAD ) VALUES(?,?,?) ", Array As Object (almacen,c.GetString("PE_PROID"),c.GetString("PE_CANT")* -1)) + Next + End If + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where pc_cliente in (Select CUENTA from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido where pe_cliente in (Select CUENTA from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 0 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + B4XPage_Appear + End If +End Sub + +'Sub ListView1_ItemLongClick (Position As Int, Value As Object) +' Log(Value) +'' If Not(Subs.pedidoGuardado) Then +' result = Msgbox2("Seguro que desea borrar este articulo?","Borrar Articulo", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore +' If result = DialogResponse.POSITIVE Then +' c=B4XPages.MainPage.skmt.ExecQuery2("select PE_PROID,PE_CANT, PE_FOLIO,PE_CEDIS FROM PEDIDO where pe_pronombre = ? and pe_cliente in (Select CUENTA from cuentaa) ", Array As String(Value)) +' c.Position=0 +' Log(vamoaver.Get(Position)) +' If vamoaver.Get(Position) = "VENTA" Then +' Log("CAT_GUNAPROD2") +' Log(Position) +' Log(Value) +' Starter.tabla = "CAT_GUNAPROD2" +' Else +' Log("CAT_GUNAPROD") +' Log(Position) +' Log(Value) +' Starter.tabla = "CAT_GUNAPROD" +' End If +'' B4XPages.MainPage.skmt.ExecNonQuery2($"update ${Starter.tabla} set cat_gp_almacen = cat_gp_almacen + ? where cat_gp_id = ?"$, Array As Object(c.GetString("PE_CANT"),c.GetString("PE_PROID"))) +' B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO INVENT_X_ENVIAR (ALMACEN , PROID , CANTIDAD ) VALUES(?,?,?) ", Array As Object (Subs.traeAlmacen,c.GetString("PE_PROID"),c.GetString("PE_CANT")* -1)) +' c2=B4XPages.MainPage.skmt.ExecQuery2($"select count(*) AS CUANTOS from ${Starter.tabla} where CAT_GP_ID in (select pe_cedis from pedido where pe_pronombre = ? and pe_cliente in (Select CUENTA from cuentaa)) and CAT_GP_CLASIF = 'PROMOS' AND CAT_GP_TIPO = 'PROMOS' AND CAT_GP_SUBTIPO = 'PROMOS'"$, Array As String(Value)) +' c2.Position=0 +' Log(c2.GetString("CUANTOS")) +' If c2.GetString("CUANTOS") > 0 Then +' +' j3 = B4XPages.MainPage.skmt.ExecQuery2("SELECT PE_CEDIS, PE_CANT,PE_PROID, PE_PRONOMBRE FROM PEDIDO WHERE PE_CEDIS IN (SELECT PE_CEDIS FROM PEDIDO WHERE PE_PRONOMBRE = ?) and PE_CLIENTE IN (SELECT CUENTA FROM CUENTAA)",Array As String(Value)) +' Log(j3.RowCount) +' If j3.RowCount > 0 Then +' Log("estoy aqui") +' For i = 0 To j3.RowCount -1 +' Log("aqui tronare?") +' j3.Position = i +' +' If vamoaver.get(Position) = "VENTA" Then +' Log("Entre aqui?") +' B4XPages.MainPage.skmt.ExecNonQuery($"update ${Starter.tabla} set cat_gp_almacen = cat_gp_almacen + ${j3.GetString("PE_CANT")} where cat_gp_id = '${j3.Getstring("PE_PROID")}'"$) +'' B4XPages.MainPage.skmt.ExecNonQuery2("delete from pedido where pe_cedis in (select pe_cedis from pedido where pe_pronombre = ?) and pe_cliente in (Select CUENTA from cuentaa) AND PE_FOLIO = ?", Array As Object(j3.GetString("PE_PRONOMBRE"), c.GetString("PE_FOLIO"))) +' Log("Aqui borro pedido 1") +' B4XPages.MainPage.skmt.ExecNonQuery2("delete from pedido where pe_cedis <> ? and pe_cliente in (Select CUENTA from cuentaa) AND PE_FOLIO = ?", Array As Object(Subs.traeAlmacen, c.GetString("PE_FOLIO"))) +' Else +' Log("Esto es Folio: " & vamoaver.get(Position) & "Esto es cedis: " & Subs.traeAlmacen) +' B4XPages.MainPage.skmt.ExecNonQuery($"update cat_gunaprod set cat_gp_almacen = cat_gp_almacen + ${j3.GetString("PE_CANT")} where cat_gp_id = '${j3.Getstring("PE_PROID")}'"$) +' B4XPages.MainPage.skmt.ExecNonQuery($"update cat_gunaprod4 set cat_gp_almacen = cat_gp_almacen + ${j3.GetString("PE_CANT")} where cat_gp_id = '${j3.Getstring("PE_PROID")}'"$) +' Log("Aqui borro pedido 2") +' B4XPages.MainPage.skmt.ExecNonQuery2("delete from pedido where pe_cedis <> ? and pe_cliente in (Select CUENTA from cuentaa) AND PE_FOLIO = ?", Array As Object(Subs.traeAlmacen, c.GetString("PE_FOLIO"))) +' End If +' Next +' End If +' j3.Close +' Else +' Log("Esto no es una promo") +' If vamoaver.get(Position) = "VENTA" Then +' Log("Esto no es una promo") +' B4XPages.MainPage.skmt.ExecNonQuery($"update CAT_GUNAPROD2 set cat_gp_almacen = cat_gp_almacen + ${c.GetString("PE_CANT")} where cat_gp_id = '${c.Getstring("PE_PROID")}'"$) +' Log("Aqui borro pedido 3") +' B4XPages.MainPage.skmt.ExecNonQuery2("delete from pedido where pe_cedis = ? and pe_pronombre = ? and pe_cliente in (Select CUENTA from cuentaa) AND PE_FOLIO = ?", Array As Object(Subs.traeAlmacen, Value, vamoaver.Get(Position))) +' Else +' Log("Esto no es una promo") +' Log("Esto es Folio: " & vamoaver.get(Position) & "Esto es cedis: " & Subs.traeAlmacen & "Esto es nombre: " & Value) +' B4XPages.MainPage.skmt.ExecNonQuery($"update CAT_GUNAPROD set cat_gp_almacen = cat_gp_almacen + ${c.GetString("PE_CANT")} where cat_gp_id = '${c.Getstring("PE_PROID")}'"$) +' B4XPages.MainPage.skmt.ExecNonQuery($"update CAT_GUNAPROD4 set cat_gp_almacen = cat_gp_almacen + ${c.GetString("PE_CANT")} where cat_gp_id = '${c.Getstring("PE_PROID")}'"$) +' Log("Aqui borro pedido 4") +' B4XPages.MainPage.skmt.ExecNonQuery2("delete from pedido where pe_cedis = ? and pe_pronombre = ? and pe_cliente in (Select CUENTA from cuentaa) AND PE_FOLIO = ?", Array As Object(Subs.traeAlmacen, Value, vamoaver.Get(Position))) +' End If +'' B4XPages.MainPage.skmt.ExecNonQuery($"update ${Starter.tabla} set cat_gp_almacen = cat_gp_almacen + ${c.GetString("PE_CANT")} where cat_gp_id = '${c.Getstring("PE_PROID")}'"$) +'' B4XPages.MainPage.skmt.ExecNonQuery2("delete from pedido where pe_pronombre = ? and pe_cliente in (Select CUENTA from cuentaa) AND PE_FOLIO = ?", Array As Object(Value, c.GetString("PE_FOLIO"))) +' End If +' c.Close +' c2.Close +' DateTime.DateFormat = "MM/dd/yyyy" +' sDate=DateTime.Date(DateTime.Now) +' sTime=DateTime.Time(DateTime.Now) +' c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") +' c.Position=0 +' clie_id = c.GetString("CUENTA") +' c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") +' c.Position=0 +' usuario = c.GetString("USUARIO") +' c=B4XPages.MainPage.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, count(*) as CUANTOS FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") +' c.Position=0 +' If c.GetString("CUANTOS") > 0 Then +' B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") +' B4XPages.MainPage.skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT) VALUES (?,?,?,?,?,?,?)", Array As Object(clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps)) +' B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 0 where CAT_CL_CODIGO In (select cuenta from cuentaa)") +' Else +' B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") +' B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 0 where CAT_CL_CODIGO In (select cuenta from cuentaa)") +' End If +' B4XPage_Appear +' End If +'' Else +'' ToastMessageShow("Pedido guardado, NO se puede editar.",False) +'' End If +'End Sub + +Sub ListView1_ItemLongClick (Position As Int, Value As Object) + Log(Value) + Private X() As String = Regex.Split(" ", Value) + Private nom As String = "" + For i = 0 To X.Length -1 + If X(i).Contains(CRLF) Then + End If + If Not(X(i).Contains(CRLF)) Then + nom = nom & " " & X(i) + Else + Exit + End If + Next + nom = nom.Trim + Log(nom) + Private cedis As String = X(X.Length-1) + Log(cedis) + result = Msgbox2("Seguro que desea borrar este articulo?","Borrar Articulo", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore + If result = DialogResponse.POSITIVE Then + Log("|" &nom & "|") + Log("|" & cedis & "|") + Log("|" & Subs.traeCliente & "|") + Private y As Cursor =B4XPages.MainPage.skmt.ExecQuery($"select PE_PROID,PE_CANT, PE_FOLIO FROM PEDIDO where pe_pronombre = '${nom.TRIM}' and pe_cliente in (Select CUENTA from cuentaa) AND PE_CEDIS = '${cedis}' "$) + Log($"select PE_PROID,PE_CANT, PE_FOLIO FROM PEDIDO where pe_pronombre = '${nom}' and pe_cliente in (Select CUENTA from cuentaa) AND PE_CEDIS = '${cedis}' "$) + Log(y.RowCount) + y.Position=0 + Log(vamoaver.Get(Position)) + If vamoaver.Get(Position) = "VENTA" Then + Log("CAT_GUNAPROD2") + Log(Position) + Log(Value) + Starter.tabla = "CAT_GUNAPROD2" + Else + Log("CAT_GUNAPROD") + Log(Position) + Log(Value) + Starter.tabla = "CAT_GUNAPROD" + End If + + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO INVENT_X_ENVIAR (ALMACEN , PROID , CANTIDAD ) VALUES(?,?,?) ", Array As Object (Subs.traeAlmacen,y.GetString("PE_PROID"),y.GetString("PE_CANT")* -1)) + Log(cedis) + Log(Subs.traeAlmacen) + If cedis <> Subs.traeAlmacen Then + j3 = B4XPages.MainPage.skmt.ExecQuery2("SELECT PE_CEDIS, PE_CANT,PE_PROID, PE_PRONOMBRE, PE_FOLIO FROM PEDIDO WHERE PE_CEDIS IN (SELECT PE_CEDIS FROM PEDIDO WHERE PE_PRONOMBRE = ? and PE_CEDIS = ?)",Array As String(nom,cedis)) + Log(j3.RowCount) + If j3.RowCount > 0 Then + Log("Soy promo") + For j = 0 To j3.RowCount -1 + Log("aqui tronare?") + + j3.Position = j + Log(j3.GetString("PE_CANT")) + Log($"update ${Starter.tabla} set CAT_GP_ALMACEN = CAT_GP_ALMACEN + '${j3.GetString("PE_CANT")}' where CAT_GP_ID = '${j3.GetString("PE_PROID")}'"$) + If vamoaver.Get(Position) = "PREVENTA_CREDITO" Then + Starter.skmt.ExecNonQuery($"update CAT_GUNAPROD4 set CAT_GP_ALMACEN = CAT_GP_ALMACEN + ${j3.GetString("PE_CANT")} where CAT_GP_ID = '${j3.GetString("PE_PROID")}'"$) + B4XPages.MainPage.skmt.ExecNonQuery($"delete from pedido where pe_cedis= '${cedis}' and pe_cliente in (Select CUENTA from cuentaa) AND PE_FOLIO = '${j3.GetString("PE_FOLIO")}' AND PE_PROID = '${j3.GetString("PE_PROID")}'"$)', Array As Object(cedis, c.GetString("PE_FOLIO"))) + Else + Starter.skmt.ExecNonQuery($"update ${Starter.tabla} set CAT_GP_ALMACEN = CAT_GP_ALMACEN + ${j3.GetString("PE_CANT")} where CAT_GP_ID = '${j3.GetString("PE_PROID")}'"$) + B4XPages.MainPage.skmt.ExecNonQuery($"delete from pedido where pe_cedis= '${cedis}' and pe_cliente in (Select CUENTA from cuentaa) AND PE_FOLIO = '${j3.GetString("PE_FOLIO")}' AND PE_PROID = '${j3.GetString("PE_PROID")}'"$)', Array As Object(cedis, c.GetString("PE_FOLIO"))) + + End If + Next + End If + j3.Close + Else + Log(y.GetString("PE_CANT")) + Log(y.Getstring("PE_PROID")) + Log("Esto no es promo") + If vamoaver.Get(Position) = "PREVENTA_CREDITO" Then + B4XPages.MainPage.skmt.ExecNonQuery($"update CAT_GUNAPROD4 set cat_gp_almacen = cat_gp_almacen + ${y.GetString("PE_CANT")} where cat_gp_id = '${y.Getstring("PE_PROID")}'"$) + B4XPages.MainPage.skmt.ExecNonQuery2("delete from pedido where pe_pronombre = ? and pe_cedis = ? and pe_cliente in (Select CUENTA from cuentaa) AND PE_FOLIO = ?", Array As Object(nom, cedis, vamoaver.Get(Position))) + Else + B4XPages.MainPage.skmt.ExecNonQuery($"update ${Starter.tabla} set cat_gp_almacen = cat_gp_almacen + ${y.GetString("PE_CANT")} where cat_gp_id = '${y.Getstring("PE_PROID")}'"$) + B4XPages.MainPage.skmt.ExecNonQuery2("delete from pedido where pe_pronombre = ? and pe_cedis = ? and pe_cliente in (Select CUENTA from cuentaa) AND PE_FOLIO = ?", Array As Object(nom, cedis, vamoaver.Get(Position))) + End If + End If + y.Close + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + c=B4XPages.MainPage.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, count(*) as CUANTOS FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + If c.GetString("CUANTOS") > 0 Then + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT) VALUES (?,?,?,?,?,?,?)", Array As Object(clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps)) + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 0 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + Else + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 0 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + End If + B4XPage_Appear + End If + +End Sub + +Sub b_desc_Click + If DESCUENTO = "MENOS" Then + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + c.Close + result = Msgbox2("Seguro que desea dar descuento del 5%?","Dar descuento", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore + If result = DialogResponse.POSITIVE Then + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE pedido SET PE_COSTO_TOT = PE_COSTO_TOT * .95, PE_DESC = 5 WHERE PE_CLIENTE In (select cuenta from cuentaa)") + c=B4XPages.MainPage.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, count(*) as CUANTOS FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT) VALUES (?,?,?,?,?,?,?)", Array As Object(clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps)) + c.Close + B4XPage_Appear + End If + ELSE IF DESCUENTO = "MAS" Then + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + c.Close + result = Msgbox2("Seguro que desea CANCELAR el descuento?","Cancelar descuento", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore + If result = DialogResponse.POSITIVE Then + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE pedido SET PE_COSTO_TOT = PE_COSTO_TOT / .95, PE_DESC = 0 WHERE PE_CLIENTE In (select cuenta from cuentaa)") + c=B4XPages.MainPage.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, count(*) as CUANTOS FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT) VALUES (?,?,?,?,?,?,?)", Array As Object(clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps)) + c.Close + B4XPage_Appear + End If + End If +End Sub + +Private Sub p_nota_Click + +End Sub \ No newline at end of file diff --git a/B4A/C_NuevoCliente.bas b/B4A/C_NuevoCliente.bas new file mode 100644 index 0000000..af4c21f --- /dev/null +++ b/B4A/C_NuevoCliente.bas @@ -0,0 +1,432 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore + + Dim g As GPS + Dim ruta As String + Dim c As Cursor + + Dim CANCELA As Button + Dim GUARDA As Button + Dim cuenta As String + Dim usuario As String + Dim sDate,sTime As String + Dim sDate2,sTime2 As String + Dim no_cliente As String + Dim no_ruta As String + Dim lista_punta As List + Dim r_4 As RadioButton + Dim E_NOMBRE As EditText + Dim tgl As Toggle + Private l_sinUbicacion As Label + Private p_nuevoCliente As Panel + Private Label1 As Label + Private p_botones As Panel + Private p_cam As Panel + Private p_camara As Panel + Private b_foto_inci As Button +' Private camEx2 As CameraExClass2 + Dim frontCamera As Boolean = False + Dim fototomada As String = "0" + Dim ALMACEN As String + Private et_direccion As EditText + Private Label2 As Label + Dim lat As Double = 0 + Dim lon As Double = 0 + Private b_ubicacion As Label + Private Label3 As Label + Private cb_giro As B4XComboBox + Dim giros As String + Private L_Atiende As Label + Private ET_Atiende As EditText + Private Label5 As Label + Private et_colonia As EditText + Private et_telefono As EditText + Private et_cp As EditText + Private Label6 As Label +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) +' B4XPages.SetTitle(Me, $"${Subs.capitalizar(B4XPages.GetPageId(Me))} - ${Application.VersionName}"$) + Root = Root1 + 'load the layout to Root + Root.LoadLayout("nuevocliente") + ruta = File.DirInternal + If File.Exists(ruta, "kmt.db") = False Then + File.Copy(File.DirAssets, "kmt.db", ruta, "kmt.db") + End If +' skmt.Initialize(ruta,"kmt.db", True) +' p_camara.Height = Root.Height +' p_camara.Width = Root.Width +' Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_CAMERA) +' Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) +' If Result Then + '' camEx2.Initialize(p_cam, frontCamera, Me, "Camera1") + '' frontCamera = camEx2.Front +' Log("inicializamos Camara") +' Else +' ToastMessageShow("Sin permisos de camara!!!", True) +' End If + Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_WRITE_EXTERNAL_STORAGE) + Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) + If Result Then + Log("Con permisos para escritura") + Else + ToastMessageShow("Sin permisos de escritura!!!", True) + End If + + Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_READ_EXTERNAL_STORAGE) + Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) + If Result Then + Log("Con permisos para escritura") + Else + ToastMessageShow("Sin permisos de lectura!!!", True) + End If +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Sub B4XPage_Appear + et_direccion.Text = "" + E_NOMBRE.Text = "" + ET_Atiende.Text = "" + et_colonia.Text = "" + et_telefono.Text = "" + If Not(Starter.gps.GPSEnabled) Then + ToastMessageShow("Es necesario tener el GPS encendido", True) + StartActivity(Starter.gps.LocationSettingsIntent) + End If + GUARDA.Visible = False + Subs.panelVisible(p_nuevoCliente, 0, 0) + p_nuevoCliente.Height = Root.Height + p_nuevoCliente.Width = Root.Width + Subs.centraEtiqueta(Label1, Root.Width) + Subs.centraEtiqueta(Label5, Root.Width) + Subs.centraEtiqueta(Label6, Root.Width) + Subs.centraEtiqueta(Label2, Root.Width) + Subs.centraEtiqueta(Label3, Root.Width) + Subs.centraEtiqueta(l_sinUbicacion, Root.Width) + Subs.centraEtiqueta(b_ubicacion, Root.Width) + Subs.centraPanel(p_botones, Root.Width) + E_NOMBRE.Left = Round(Root.Width/2)-(E_NOMBRE.Width/2) + et_cp.Left = Round(Root.Width/2)-(E_NOMBRE.Width/2) + et_colonia.Left = Round(Root.Width/2)-(et_colonia.Width/2) + et_direccion.Left = Round(Root.Width/2)-(et_direccion.Width/2) + If B4XPages.MainPage.lat_gps <> "0.0" Then + GUARDA.Visible = True 'Si hay ubicaccion, mostramos el boton de guardar. + l_sinUbicacion.Visible = True + End If + + CallSubDelayed(Tracker, "Track") + CallSubDelayed(Tracker, "StartFLPSmall") + If Tracker.FLP.IsInitialized And Tracker.FLP.GetLastKnownLocation.IsInitialized Then 'Si tenemos "UltimaUbicaccionConocida" la usamos. + B4XPages.MainPage.lat_gps = Tracker.FLP.GetLastKnownLocation.Latitude + B4XPages.MainPage.lon_gps = Tracker.FLP.GetLastKnownLocation.Longitude +' Log($"Tenemos UUC: ${Tracker.FLP.GetLastKnownLocation.Latitude},${Tracker.FLP.GetLastKnownLocation.Longitude}"$) + GPS_LocationChanged(Tracker.FLP.GetLastKnownLocation) + End If + + lista_punta.Initialize + Dim pol As Cursor = Starter.skmt.ExecQuery("SELECT LAT, LONG FROM POLIGONO") + If pol.RowCount > 0 Then + + For poli = 0 To pol.RowCount -1 + pol.Position = poli + Dim coords As LatLng + coords.Initialize(pol.GetString("LAT"), pol.GetString("LONG")) + lista_punta.Add(coords) + Next + End If + + If Not(Starter.GPS.GPSEnabled) Then + ToastMessageShow("Debe Activar el GPS del Equipo.", True) + StartActivity(Starter.GPS.LocationSettingsIntent) + Else + Starter.GPS.Start(0, 0) +' If Starter.ubicacionActual.Latitude <> 0 Then GPS_LocationChanged(Starter.ubicacionActual) + End If + CallSubDelayed(Tracker, "StartFLPSmall") + + c = Starter.skmt.ExecQuery("SELECT GIRO FROM CAT_GIRO order by 1") + Dim Items As List + Items.Initialize + Items.Add("SELECCIONA UNA OPCIÓN") + If c.RowCount > 0 Then + For i = 0 To c.RowCount-1 + c.Position = i + Items.Add(c.GetString("GIRO")) + Next + cb_giro.SetItems(Items) + End If + giros = "SELECCIONA UNA OPCIÓN" + c.Close +End Sub + +Sub GPS_LocationChanged (Location1 As Location) + If B4XPages.MainPage.lat_gps <> "0.0" Then + GUARDA.Visible = True 'Si hay ubicaccion, mostramos el boton de guardar. + l_sinUbicacion.Visible = True + lat = Location1.Latitude + lon = Location1.Longitude + l_sinUbicacion.Text = ("Latitud: " & lat & ", Longotud: "& lon) + End If + + b_ubicacion.TextSize = 13 + b_ubicacion.Text = $"Precisión GPS $1.0{Location1.Accuracy} m"$ + If Location1.Accuracy > 200 Then + b_ubicacion.TextColor = Colors.Red + b_ubicacion.TextSize = 16 + b_ubicacion.Text = $"Mala señal $1.0{Location1.Accuracy} m"$ + End If +End Sub + +Sub CANCELA_Click + B4XPages.ShowPage("Principal") + CallSubDelayed(Tracker, "StartFLP") +End Sub + +Sub PointInPolygon(point As LatLng, polygon As List) As Boolean + Dim x As Double = point.Longitude + Dim y As Double = point.Latitude + + Dim inside As Boolean = False + For i = 0 To polygon.Size - 1 + Dim j As Int = (i + 1) Mod polygon.Size + Dim p1_1 As LatLng = polygon.Get(i) + Dim p2_1 As LatLng = polygon.Get(j) + + Dim xi As Double = p1_1.Longitude + Dim yi As Double = p1_1.Latitude + Dim xj As Double = p2_1.Longitude + Dim yj As Double = p2_1.Latitude + + Dim intersect As Boolean = ((yi > y) <> (yj > y)) And (x < (xj - xi) * (y - yi) / (yj - yi) + xi) + If intersect Then + inside = Not(inside) + End If + Next + + Return inside + + +End Sub + +Sub GUARDA_Click + +' Dim mPoint As LatLng +' mPoint.Initialize(B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps) +' +'' If lista_punta.Size > 0 Then +'' Dim dentro As Boolean = PointInPolygon(mPoint, lista_punta) +'' +'' If dentro Then + ToastMessageShow("El punto está DENTRO del polígono", True) + B4XPages.ShowPage("NuevoCliente") + + + ' Verifica si el nombre de la tienda está vacío + If E_NOMBRE.Text = "" Then + MsgboxAsync("Por favor captura el nombre de la Tienda","Atención") + ' Verifica si la dirección tiene más de 3 caracteres + Else If et_direccion.Text.Length > 3 Then + ' Verifica si la latitud es diferente de 0 + If lat <> 0 Then + ' Verifica si el giro del cliente está seleccionado + If giros <> "SELECCIONA UNA OPCIÓN" Or cb_giro.SelectedItem <> "SELECCIONA UNA OPCIÓN" Then + ' Verifica si el encargado que atiende el negocio está capturado + If ET_Atiende.Text <> "" Then + If et_colonia.Text <> "" Then + If et_colonia.Text <> "" Then + If et_cp.Text <> "" Then + + DateTime.DateFormat = "MM/dd/yyyy" + DateTime.Timeformat = "HHmmss" + sDate = DateTime.Date(DateTime.Now) + sTime = DateTime.Time(DateTime.Now) + Log($" //////////// Date: ${sDate} - Time: ${sTime} ////////////////"$) + ' Aquí creamos manualmente la hora con el separador de los 2 puntos porque en algunas versiones de Android no respeta el formato "Timeformat = 'HH:mm:ss'" + Private hora As String = sTime.SubString2(0,2) + Private mins As String = sTime.SubString2(2,4) + Private segs As String = sTime.SubString(4) + sTime = hora & ":" & mins & ":" & segs + Log("////////////// sTime: "&sTime&" ////////////////") + c = Starter.skmt.ExecQuery("select CAT_CL_RUTA FROM kmt_info") + c.Position = 0 + no_ruta = c.GetString("CAT_CL_RUTA") + no_cliente = "N" & sTime & no_ruta + Log("++ ++ no_cliente = "&no_cliente) + c.Close + + Starter.skmt.ExecNonQuery2("INSERT INTO HIST_STAY_STORE(HSS_CODIGO, HSS_IN , HSS_OUT , HSS_TOT) VALUES (?,0,0,0)", Array As Object (no_cliente)) + Starter.skmt.ExecNonQuery("delete from CUENTAA") + Starter.skmt.ExecNonQuery2("INSERT INTO CUENTAA VALUES (?)", Array As Object(no_cliente)) + c = Starter.skmt.ExecQuery("select ID_ALMACEN from CAT_ALMACEN") + If c.RowCount > 0 Then + c.Position = 0 + ALMACEN = c.GetString("ID_ALMACEN") + End If + c.Close + c = Starter.skmt.ExecQuery("select usuario from usuarioa") + c.Position = 0 + usuario = c.GetString("USUARIO") + c.Close + ' Starter.skmt.ExecNonQuery2("INSERT INTO HIST_FOTO_CLIENTE(CODIGO, ALMACEN, RUTA) VALUES(?,?,?)", Array As Object(no_cliente, ALMACEN, no_ruta)) + ' Starter.skmt.ExecNonQuery2("INSERT INTO NOVENTA (NV_CLIENTE,NV_FECHA,NV_USER,NV_MOTIVO,NV_LAT,NV_LON,NV_NOMBRE,NV_DIRECCION) VALUES(?,?,?,?,?,?,?,?) ", Array As Object (no_cliente,sDate & sTime, usuario, "NUEVO CLIENTE", lat, lon, E_NOMBRE.Text,et_direccion.Text)) + + DateTime.DateFormat = "dd/MM/yyyy" + DateTime.Timeformat = "HH:mm:ss" + sDate2 = DateTime.Date(DateTime.Now) + sTime2 = DateTime.Time(DateTime.Now) + + Starter.skmt.ExecNonQuery2("INSERT INTO kmt_info(CAT_CL_CODIGO,CAT_CL_RUTA,CAT_CL_NOMBRE,CAT_CL_ATIENDE1,CAT_CL_ATIENTE2,CAT_CL_TELEFONO,CAT_CL_EMAIL,CAT_CL_CALLE,CAT_CL_NOEXT,CAT_CL_NOINT,CAT_CL_CALLE1,CAT_CL_CALLE2,CAT_CL_COLONIA,CAT_CL_MUNI,CAT_CL_EDO,CAT_CL_CP,CAT_CL_LONG,CAT_CL_LAT,CAT_CL_MTOCOMPRA,CAT_CL_NUM_SERIEFISICO, gestion, CAT_CL_GIRO,CAT_CL_CP) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0,0,0,?,?) ", Array As Object (no_cliente,no_ruta, E_NOMBRE.Text,"null","null","null","null","null","null","null","null","null","null","null","null","null",B4XPages.MainPage.lon_gps,B4XPages.MainPage.lat_gps, cb_giro.SelectedItem,et_cp.Text)) + Starter.skmt.ExecNonQuery2("INSERT INTO CLIENTES_NUEVOS(CN_ID, CN_FECHA, CN_USER, CN_LAT, CN_LON, CN_NOMBRE, CN_DIRECCION, CN_ALMACEN, CN_RUTA, CN_GIRO, CN_SOLICITA,CN_COLONIA, CN_TELEFONO,CN_CP) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)", Array As String(no_cliente, sDate2 &" "&sTime2, usuario, lat, lon, E_NOMBRE.Text, et_direccion.Text, ALMACEN, no_ruta, cb_giro.SelectedItem, ET_Atiende.Text,et_colonia.Text,et_telefono.Text,et_cp.Text)) + ' fototomada = "0" + B4XPages.ShowPage("Cliente") + CallSubDelayed(Tracker, "StartFLP") + Else + MsgboxAsync("Por favor, debe capturar el C.P. el negocio.","Atención") + End If + Else + MsgboxAsync("Por favor, debe capturar la colonia el negocio.","Atención") + End If + Else + MsgboxAsync("Por favor, debe capturar el telfono.","Atención") + End If + Else + ' Mensaje de advertencia si ET_Atiende.Text está vacío + MsgboxAsync("Por favor, debe capturar al encargado que atiende el negocio.","Atención") + End If + Else + MsgboxAsync("Por favor captura el giro del cliente","Atención") + End If + Else + MsgboxAsync("Por favor revisa que tengas señal GPS","Atención") + End If + Else + MsgboxAsync("Por favor captura la dirección del cliente","Atención") + End If + +' Else +' ToastMessageShow("El punto está FUERA del polígono", True) +' End If +' End If +End Sub + + + + +Private Sub p_nuevoCliente_Click + +End Sub + +'Private Sub b_foto_inci_Click +' camEx2.TakePicture +' p_camara.Visible = False +'' StopCamera2 +'End Sub +' +'Private Sub InitializeCamera2 +' Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_CAMERA) +' Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) +' If Result Then +' camEx2.Initialize(p_cam, frontCamera, Me, "Camera1") +' frontCamera = camEx2.Front +' Log("inicializamos Camara") +' Else +' ToastMessageShow("Sin permisos de camara!!!", True) +' End If +' Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_WRITE_EXTERNAL_STORAGE) +' Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) +' If Result Then +' Log("con permisos para escritura") +' Else +' ToastMessageShow("Sin permisos de escritura!!!", True) +' End If +' +' Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_READ_EXTERNAL_STORAGE) +' Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) +' If Result Then +' Log("con permisos para escritura") +' Else +' ToastMessageShow("Sin permisos de lectura!!!", True) +' End If +'End Sub +' +'Sub Camera1_Ready (Success As Boolean) +' Log("Camara ready") +' If Success Then +' camEx2.SetJpegQuality(90) +' camEx2.SetContinuousAutoFocus +' camEx2.CommitParameters +' camEx2.StartPreview +' Log(camEx2.GetPreviewSize) +' Else +' ToastMessageShow("Cannot open camera.", True) +' Log("Cannot open camera") +' End If +'End Sub +' +'Sub Camera1_PictureTaken (Data()As Byte) +' Log("tome foto") +' Dim filename As String = fototomada +' Dim Dirp As String = File.DirInternal +' Dim Dir As String +' Dim Dir2 As String +' Try +' File.MakeDir(Dirp,"/promotoriakmts") +' Dir = "/promotoriakmts" +' Log("creado en promotoria " & Dirp & Dir) +' Catch +' Dir = "" +' Log("creado en raiz") +' End Try +' +' Try +' File.MakeDir(Dirp & Dir,"/reduccion") +' Dir2 = "/reduccion" +' Log("creado en promotoria " & Dirp & Dir & Dir2) +' Catch +' Dir = "" +' Log("creado en raiz") +' End Try +' +' camEx2.SavePictureToFile(Data, Dirp&Dir, filename) +' camEx2.StartPreview 'restart preview +' ToastMessageShow("Picture saved." & CRLF & "File size: " & File.Size(Dir, filename) & Dir &"," & filename, True) +' Log("Picture saved." & CRLF & "File size: " & File.Size(Dir, filename) & Dir &"," & filename) +' p_camara.Visible = False +' StopCamera2 +' +'End Sub +' +'Private Sub StopCamera2 +'' Capturing = False +' If camEx2.IsInitialized Then +' camEx2.Release +' End If +'End Sub +' +' +'Private Sub B_FOTO_Click +' DateTime.DateFormat="ddMMyyyyHHmmss" +' InitializeCamera2 +' Subs.panelVisible(p_camara, 0, 0) +' fototomada = DateTime.Now & "_cliente.jpg" +'End Sub + +Private Sub cb_giro_SelectedIndexChanged (Index As Int) + giros = cb_giro.SelectedItem +End Sub + diff --git a/B4A/C_Pedidos.bas b/B4A/C_Pedidos.bas new file mode 100644 index 0000000..2d6cfc3 --- /dev/null +++ b/B4A/C_Pedidos.bas @@ -0,0 +1,584 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore + + Dim g As GPS + Dim ruta As String + Dim skmt As SQL + Private t3 As Timer + Dim p As Phone + Dim sb As StringBuilder + + Dim c As Cursor + Dim e As Cursor + Dim f As Cursor + Dim h As Cursor + Dim CC As Cursor + Dim DD As Cursor + Dim l_tipo As Label + Dim l_sub As Label + Dim l_marca As Label + Dim l_desc As Label + Dim l_precio As Label + Dim l_bodega As Label + Dim cantidad As EditText + Dim guardar As Button + Dim Terminar As Button + Dim img_prod As ImageView + Dim IMG_PASO() As Byte + Dim L_PROID As Label + Dim clie_id As String + Dim sDate,sTime As String + Dim usuario As String + ' Dim lat_gps, lon_gps As String + Dim t_venta As Label + Dim PROMO_C As String + Dim i_fotol As ImageView + Private DESC_PROMO As Button + Private nopromo As Button + Dim TOT_ART_PROMO As String + Dim cambio As String + Dim COSTO_TOT As String + Dim ALMACEN As String + Dim preciosin As String + Dim cl_ruta As String + Dim d As Cursor + Dim TOT_ART_PROMOR As String + Dim PROMO_CR As String + Dim TOTAL_PROMO As String + Dim HCCP_CANT As String + Dim tgl As Toggle + Dim precio_Cero As String + Private BONSABOR As String + Private BONSABOR2 As String + Dim cmd As DBCommand + Private p_pedido As Panel +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + Root.LoadLayout("pedido") + i_fotol.Visible = False +' B4XPages.MainPage.reqManager.Initialize(Me, "http://177.244.63.54:1782") + ruta = File.DirInternal + If File.Exists(ruta, "kmt.db") = False Then + File.Copy(File.DirAssets, "kmt.db", ruta, "kmt.db") + End If +' skmt.Initialize(ruta,"kmt.db", True) +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Sub B4XPage_Appear + tgl.Initialize + BONSABOR = 0 + BONSABOR2 = 0 + If Not(Starter.gps.GPSEnabled) Then + ToastMessageShow("Es necesario tener el GPS encendido", True) + StartActivity(Starter.gps.LocationSettingsIntent) + End If + cantidad.Text = "" + c=B4XPages.MainPage.skmt.ExecQuery("select ID_ALMACEN from CAT_ALMACEN") + C.Position =0 + ALMACEN = C.GetString("ID_ALMACEN") + C.Close + i_fotol.Visible = False + sb.Initialize + p.Shell("ping -c1 -W1 177.244.63.54",Null, sb,Null) + skmt.Initialize(ruta,"kmt.db", True) + c=B4XPages.MainPage.skmt.ExecQuery("select CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_DEV from CAT_GUNAPROD where CAT_GP_NOMBRE In (Select PDESC from PROID)") + c.Position=0 + L_PROID.Text = c.GetString("CAT_GP_ID") + l_tipo.Text = c.GetString("CAT_GP_TIPO") + l_sub.Text = c.GetString("CAT_GP_SUBTIPO") + l_marca.Text = c.GetString("CAT_GP_CLASIF") + l_desc.Text = c.GetString("CAT_GP_NOMBRE") + l_precio.Text = c.GetDouble("CAT_GP_PRECIO") + l_bodega.Text = c.GetString("CAT_GP_ALMACEN") + IMG_PASO = c.GetBlob("CAT_GP_IMG") + PROMO_C = c.GetString("CAT_GP_STS") + cambio = c.GetString("CAT_GP_DEV") + preciosin = c.GetString("CAT_GP_IMP2") + PROMO_CR = c.GetString("CAT_GP_IMP1") + cambio = "0" + + e=B4XPages.MainPage.skmt.ExecQuery2("select count(*) as CUANTOS FROM pedido WHERE PE_CEDIS = ? AND PE_CLIENTE IN (Select cuenta from cuentaa) ", Array As String(c.GetString("CAT_GP_ID"))) + e.Position =0 + If e.GetString("CUANTOS") = 0 Then + If l_marca.text = "PROMOS" And l_tipo.Text ="PROMOS" Then + DESC_PROMO.Visible = True + CC=B4XPages.MainPage.skmt.ExecQuery2("select count(*) as CUANTOS FROM PROMOS_COMP WHERE CAT_PA_ID = ?", Array As String(c.GetString("CAT_GP_ID"))) + CC.Position =0 + If CC.GetString("CUANTOS") = 0 Then + l_bodega.Text = "0" ' se modifica a cero para evitar error en la promo especial de unilever mayo + Else + CC.Close + CC=B4XPages.MainPage.skmt.ExecQuery2("select CAT_PA_MAXPROM, CAT_PA_MAXPROMREC, CAT_PA_MAXPROMCLIE FROM PROMOS_COMP WHERE CAT_PA_ID = ?", Array As String(c.GetString("CAT_GP_ID"))) + CC.Position =0 + ' SE MODIFICA LA APLICACION PARA QUE VEA EL HISTORIAL DE VENTA DEL CLIENTE. + DD=B4XPages.MainPage.skmt.ExecQuery2("SELECT COUNT(*) AS CUANTOS FROM HIST_CLIENTE_CANT_PROMOS WHERE HCCP_CLIENTE IN (Select cuenta from cuentaa) AND HCCP_PROMO =?", Array As String(c.GetString("CAT_GP_ID"))) + DD.Position =0 + If DD.GetString("CUANTOS") = 0 Then + HCCP_CANT = 0 + Else + DD.Close + DD=B4XPages.MainPage.skmt.ExecQuery2("SELECT HCCP_CANT FROM HIST_CLIENTE_CANT_PROMOS WHERE HCCP_CLIENTE IN (Select cuenta from cuentaa) AND HCCP_PROMO =?", Array As String(c.GetString("CAT_GP_ID"))) + DD.Position =0 + HCCP_CANT = DD.GetString("HCCP_CANT") + DD.Close + End If + BONSABOR = HCCP_CANT + DD=B4XPages.MainPage.skmt.ExecQuery2("SELECT COUNT(*) AS CUANTOS FROM HIST_VENTAS WHERE HVD_CLIENTE IN (Select cuenta from cuentaa) AND HVD_PRONOMBRE =?", Array As String(c.GetString("CAT_GP_NOMBRE"))) + DD.Position =0 + If DD.GetString("CUANTOS") = 0 Then + HCCP_CANT = 0 + Else + DD.Close + DD=B4XPages.MainPage.skmt.ExecQuery2("SELECT SUM(HVD_CANT) AS HCCP_CANT FROM HIST_VENTAS WHERE HVD_CLIENTE IN (Select cuenta from cuentaa) AND HVD_PRONOMBRE =?", Array As String(c.GetString("CAT_GP_NOMBRE"))) + DD.Position =0 + HCCP_CANT = DD.GetString("HCCP_CANT") + DD.Close + End If + DD=B4XPages.MainPage.skmt.ExecQuery2("Select COUNT(*) AS CUANTOS FROM PEDIDO WHERE PE_CLIENTE IN (Select cuenta from cuentaa) AND PE_PROID IN (select CAT_GP_ID from CAT_GUNAPROD where CAT_GP_CLASIF = ?) ",Array As String(c.GetString("CAT_GP_NOMBRE"))) + DD.Position =0 + BONSABOR2 = DD.GetString("CUANTOS") + DD.Close + TOTAL_PROMO = CC.GetString("CAT_PA_MAXPROMCLIE") - HCCP_CANT + If HCCP_CANT = 0 Then + l_bodega.Text = CC.GetString("CAT_PA_MAXPROM") + Else IF TOTAL_PROMO > CC.GetString("CAT_PA_MAXPROMREC") Then + l_bodega.Text = CC.GetString("CAT_PA_MAXPROMREC") + Else + l_bodega.Text = TOTAL_PROMO + End If + End If + Else + DESC_PROMO.Visible = False + End If + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select CASE WHEN pe_costo_tot is null then 0 else sum( pe_costo_tot ) end as TOTAL_CLIE FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + t_venta.Text = c.GetString("TOTAL_CLIE") + c.Close + Terminar.Visible = True + guardar.Visible = True + cantidad.Visible = True + If cambio = "1" Then + nopromo.Visible = True + Else + nopromo.Visible = False + End If + Dim out As OutputStream + out = File.OpenOutput(ruta, "1.jpg", False) + out.WriteBytes(IMG_PASO, 0, IMG_PASO.Length) + out.Close + img_prod.Bitmap = LoadBitmap(ruta,"1.jpg") + TOT_ART_PROMO = "0" + TOT_ART_PROMOR = "0" + If l_marca.text = "PROMOS" And l_tipo.Text ="PROMOS" And l_bodega.Text = "0" Then + Msgbox("ALERTA","EL CLIENTE NO PUEDE TENER ESTA PROMOCION") 'ignore + B4XPages.ShowPage("Productos") + ELSE IF l_marca.text = "PROMOS" And l_tipo.Text ="PROMOS" And L_PROID.Text = "PROUNI1" And BONSABOR <> "1" And BONSABOR2 = 0 Then + Msgbox("ALERTA","EL CLIENTE NO PUEDE TENER ESTA PROMOCION") 'ignore + B4XPages.ShowPage("Productos") + End If + Else + Msgbox("ALERTA","EL CLIENTE YA COMPRO ESTE PRODUCTO REVISAR NOTA") 'ignore + B4XPages.ShowPage("Productos") + End If +End Sub + +Sub guardar_Click + If cantidad.Text = "" Then + B4XPages.ShowPage("Productos") + ELSE If cantidad.Text > l_bodega.Text Then + Msgbox("Exede la existencia", "ADVERTENCIA") 'ignore + Else If l_marca.text = "PROMOS" And l_tipo.Text ="PROMOS" And PROMO_C > 0 And cantidad.Text > 0 Then + B4XPages.MainPage.skmt.ExecNonQuery("delete from PROIDID") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PROIDID VALUES (?)", Array As Object(L_PROID.text)) + c=B4XPages.MainPage.skmt.ExecQuery("Select count(*) as CUANTOSD from pedido where PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID) AND CAT_DP_TIPO = 1)") + c.Position =0 + If c.GetString("CUANTOSD") = 0 Then + Msgbox("No tiene venta el cliente para la promo", "ADVERTENCIA") 'ignore + Else + c=B4XPages.MainPage.skmt.ExecQuery("Select sum(pe_cant) As TOT_ART_PROMO, sum(PE_COSTO_TOT) as COSTO_TOT from pedido where PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID) AND CAT_DP_PRECIO > 1)") + C.Position =0 + TOT_ART_PROMO = C.GetString("TOT_ART_PROMO") + COSTO_TOT = C.GetString("COSTO_TOT") + C.Close + c=B4XPages.MainPage.skmt.ExecQuery("Select count(*) as CUANTOSD from pedido where PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID) AND (CAT_DP_PRECIO = 0.01 or CAT_DP_PRECIO = 1 OR CAT_DP_PRECIO = 0) AND CAT_DP_TIPO = 1)") + c.Position =0 + If c.GetString("CUANTOSD") = 0 Then + TOT_ART_PROMOR = "0" 'Msgbox("No tiene venta el cliente para la promo", "ADVERTENCIA") + Else + c=B4XPages.MainPage.skmt.ExecQuery("Select sum(pe_cant) As TOT_ART_PROMO, sum(PE_COSTO_TOT) as COSTO_TOT from pedido where PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID) AND (CAT_DP_PRECIO = 0.01 or CAT_DP_PRECIO = 1 OR CAT_DP_PRECIO = 0) AND CAT_DP_TIPO = 1)") + C.Position =0 + TOT_ART_PROMOR = C.GetString("TOT_ART_PROMO") + End If + C.Close + PROMO_C = PROMO_C * cantidad.Text + PROMO_CR = PROMO_CR * cantidad.Text + If TOT_ART_PROMO = PROMO_C And TOT_ART_PROMOR = PROMO_CR Then + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE PEDIDO SET PE_CEDIS = (?) WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID))", Array As Object(L_PROID.text)) + D=B4XPages.MainPage.skmt.ExecQuery("select CAT_DP_ID, CAT_DP_PRECIO, CAT_DP_PRECIO_SIMPTOS, CAT_DP_IDPROD FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) AND CAT_DP_PRECIO > 1") + If D.RowCount>0 Then + For i=0 To D.RowCount -1 + D.Position=i + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE PEDIDO SET PE_COSTOU = (?), PE_COSTO_TOT = PE_CANT * (?) , PE_COSTO_SIN = (?) WHERE PE_PROID = (?) And PE_CEDIS In (Select PROIDID from PROIDID) AND PE_CLIENTE IN (Select CUENTA from cuentaa) ",Array As Object( D.GetString("CAT_DP_PRECIO"), D.GetString("CAT_DP_PRECIO"), D.GetString("CAT_DP_PRECIO_SIMPTOS"),D.GetString("CAT_DP_IDPROD"))) + Next + End If + D.Close + D=B4XPages.MainPage.skmt.ExecQuery("select CAT_DP_ID, CAT_DP_PRECIO, CAT_DP_PRECIO_SIMPTOS, CAT_DP_IDPROD FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) AND (CAT_DP_PRECIO = 0.01 or CAT_DP_PRECIO = 1 OR CAT_DP_PRECIO = 0) AND CAT_DP_TIPO = 1") + If D.RowCount>0 Then + For i=0 To D.RowCount -1 + D.Position=i + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE PEDIDO SET PE_COSTOU = (?), PE_COSTO_TOT = PE_CANT * (?) , PE_COSTO_SIN = (?) WHERE PE_PROID = (?) And PE_CEDIS In (Select PROIDID from PROIDID) AND PE_CLIENTE IN (Select CUENTA from cuentaa) ",Array As Object( D.GetString("CAT_DP_PRECIO"), D.GetString("CAT_DP_PRECIO"), D.GetString("CAT_DP_PRECIO_SIMPTOS"),D.GetString("CAT_DP_IDPROD"))) + Next + End If + D.Close + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_RUTA from kmt_info where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + c.Position=0 + cl_ruta = c.GetString("CAT_CL_RUTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + e=B4XPages.MainPage.skmt.ExecQuery("select count(*) as CUANTOS FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) and CAT_DP_TIPO = 0 ") + ' SE LO QUITE DE CONDICION AND (CAT_DP_PRECIO = 0.01 or CAT_DP_PRECIO = 1 OR CAT_DP_PRECIO = 0) + e.Position =0 + If e.GetString("CUANTOS") > 0 Then + F=B4XPages.MainPage.skmt.ExecQuery("select CAT_DP_IDPROD, CAT_DP_PZAS,CAT_DP_PRECIO FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) and CAT_DP_TIPO = 0 ") ' AND (CAT_DP_PRECIO = 0.01 or CAT_DP_PRECIO = 1 OR CAT_DP_PRECIO = 0) + 'meter el otro + 'si jala copiar para guna y el resto + If f.RowCount>0 Then + For i=0 To f.RowCount -1 + f.Position=i + precio_Cero = f.GetString("CAT_DP_PRECIO") + h=B4XPages.MainPage.skmt.ExecQuery2("select CAT_GP_NOMBRE from CAT_GUNAPROD where CAT_GP_ID = ? ", Array As String(f.GetString("CAT_DP_IDPROD"))) + h.Position=0 + '0 + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA) VALUES(?,?,?,?,?,?,?,?,?,?) ", Array As Object (L_PROID.text,precio_Cero * f.GetString("CAT_DP_PZAS") * cantidad.text, precio_Cero, f.GetString("CAT_DP_PZAS") * cantidad.text, h.GetString("CAT_GP_NOMBRE"), f.GetString("CAT_DP_IDPROD"),clie_id, sDate & sTime, usuario,cl_ruta)) + h.Close + Next + End If + f.Close + End If + e.Close + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA,PE_FOLIO) VALUES(?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (L_PROID.text,0 , 0, cantidad.text, l_desc.text, L_PROID.Text,clie_id, sDate & sTime, usuario,cl_ruta, b4xpages.MainPage.tipo_venta)) + B4XPages.MainPage.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cantidad.Text, L_PROID.Text)) + Else + Msgbox("Tiene " & TOT_ART_PROMO & " " & TOT_ART_PROMOR & " y necesita " & PROMO_C & " " & PROMO_CR & " Para la Promo. " , "ADVERTENCIA") 'ignore + End If + End If + cantidad.Text = "" + B4XPages.ShowPage("Productos") + else If l_marca.text = "PROMOS" And l_tipo.Text ="PROMOS" And PROMO_C = 0 Then + B4XPages.MainPage.skmt.ExecNonQuery("delete from PROIDID") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PROIDID VALUES (?)", Array As Object(L_PROID.text)) + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_RUTA from kmt_info where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + c.Position=0 + cl_ruta = c.GetString("CAT_CL_RUTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + 'B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO) VALUES(?,?,?,?,?,?,?,?,?) ", Array As Object ("COACALCO",cantidad.Text * l_precio.Text, l_precio.text, cantidad.text, l_desc.text, L_PROID.Text,clie_id, sDate & sTime, usuario)) + 'para insertar la promo de ades el de regalo en 0 + e=B4XPages.MainPage.skmt.ExecQuery("select count(*) as CUANTOS FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) ") + e.Position =0 + If e.GetString("CUANTOS") > 0 Then + F=B4XPages.MainPage.skmt.ExecQuery("select CAT_DP_IDPROD, CAT_DP_PZAS, CAT_DP_PRECIO FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID)") + For i =0 To f.RowCount -1 + F.Position =i + h=B4XPages.MainPage.skmt.ExecQuery2("select CAT_GP_NOMBRE from CAT_GUNAPROD where CAT_GP_ID = ? ", Array As String(f.GetString("CAT_DP_IDPROD"))) + h.Position=0 + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA,PE_FOLIO) VALUES(?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (L_PROID.text,f.GetString("CAT_DP_PRECIO") * cantidad.text * f.GetString("CAT_DP_PZAS"), f.GetString("CAT_DP_PRECIO"), f.GetString("CAT_DP_PZAS") * cantidad.text, h.GetString("CAT_GP_NOMBRE"), f.GetString("CAT_DP_IDPROD"),clie_id, sDate & sTime, usuario,cl_ruta, B4XPages.MainPage.tipo_venta)) + h.Close + Next + f.Close + End If + e.Close + '0 + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA,PE_FOLIO) VALUES(?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (L_PROID.text,0, 0, cantidad.text, l_desc.text, L_PROID.Text,clie_id, sDate & sTime, usuario,cl_ruta, B4XPages.MainPage.tipo_venta)) + B4XPages.MainPage.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cantidad.Text, L_PROID.Text)) + cantidad.Text = "" + c=B4XPages.MainPage.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, SUM(PE_COSTO_SIN) AS TOTAL_CLIE_SIN FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT,PC_ALMACEN,PC_RUTA,PC_COSTO_SIN) VALUES (?,?,?,?,?,?,?,?,?,?)", Array As Object(clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps,ALMACEN,cl_ruta,c.GetString("TOTAL_CLIE_SIN"))) + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + B4XPages.ShowPage("Productos") + Else + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_RUTA from kmt_info where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + c.Position=0 + cl_ruta = c.GetString("CAT_CL_RUTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA,PE_COSTO_SIN, PE_FOLIO) VALUES(?,?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (ALMACEN,cantidad.Text * l_precio.Text, l_precio.text, cantidad.text, l_desc.text, L_PROID.Text,clie_id, sDate & sTime, usuario,cl_ruta,preciosin, B4XPages.MainPage.tipo_venta)) + B4XPages.MainPage.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cantidad.Text, L_PROID.Text)) + c=B4XPages.MainPage.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, SUM(PE_COSTO_SIN) AS TOTAL_CLIE_SIN FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT,PC_ALMACEN,PC_RUTA,PC_COSTO_SIN) VALUES (?,?,?,?,?,?,?,?,?,?)", Array As Object(clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps,ALMACEN,cl_ruta,c.GetString("TOTAL_CLIE_SIN"))) + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO INVENT_X_ENVIAR (ALMACEN , PROID , CANTIDAD ) VALUES(?,?,?) ", Array As Object (ALMACEN,L_PROID.Text,cantidad.text)) + B4XPages.ShowPage("Productos") + End If +End Sub + +Sub GPS_LocationChanged (Location1 As Location) + 'lat_gps=Location1.ConvertToSeconds(Location1.Latitude) + 'lon_gps=Location1.ConvertToSeconds(Location1.Longitude) +End Sub + +Sub Terminar_Click + If cantidad.Text = "" Then + B4XPages.ShowPage("Cliente") + ELSE If cantidad.Text > l_bodega.Text Then + Msgbox("Exede la existencia", "ADVERTENCIA") 'ignore + Else If l_marca.text = "PROMOS" And l_tipo.Text ="PROMOS" And PROMO_C > 0 And cantidad.Text > 0 Then + B4XPages.MainPage.skmt.ExecNonQuery("delete from PROIDID") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PROIDID VALUES (?)", Array As Object(L_PROID.text)) + c=B4XPages.MainPage.skmt.ExecQuery("Select count(*) as CUANTOSD from pedido where PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID) AND CAT_DP_TIPO = 1)") + c.Position =0 + If c.GetString("CUANTOSD") = 0 Then + Msgbox("No tiene venta el cliente para la promo", "ADVERTENCIA") 'ignore + Else + c=B4XPages.MainPage.skmt.ExecQuery("Select sum(pe_cant) As TOT_ART_PROMO, sum(PE_COSTO_TOT) as COSTO_TOT from pedido where PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID) AND CAT_DP_PRECIO > 1)") + C.Position =0 + TOT_ART_PROMO = C.GetString("TOT_ART_PROMO") + COSTO_TOT = C.GetString("COSTO_TOT") + C.Close + c=B4XPages.MainPage.skmt.ExecQuery("Select count(*) as CUANTOSD from pedido where PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID) AND (CAT_DP_PRECIO = 0.01 or CAT_DP_PRECIO = 1 OR CAT_DP_PRECIO = 0) AND CAT_DP_TIPO = 1)") + c.Position =0 + If c.GetString("CUANTOSD") = 0 Then + TOT_ART_PROMOR = "0" 'Msgbox("No tiene venta el cliente para la promo", "ADVERTENCIA") + Else + c=B4XPages.MainPage.skmt.ExecQuery("Select sum(pe_cant) As TOT_ART_PROMO, sum(PE_COSTO_TOT) as COSTO_TOT from pedido where PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID) AND (CAT_DP_PRECIO = 0.01 or CAT_DP_PRECIO = 1 OR CAT_DP_PRECIO = 0) AND CAT_DP_TIPO = 1)") + C.Position =0 + TOT_ART_PROMOR = C.GetString("TOT_ART_PROMO") + End If + C.Close + PROMO_C = PROMO_C * cantidad.Text + PROMO_CR = PROMO_CR * cantidad.Text + If TOT_ART_PROMO = PROMO_C And TOT_ART_PROMOR = PROMO_CR Then + ' anterior a 29/06/2015 + 'B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE PEDIDO SET PE_COSTOU = (?), PE_COSTO_TOT = PE_CANT * (?) WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID))", Array As Object(l_precio.text/(TOT_ART_PROMO/cantidad.Text),l_precio.text/(TOT_ART_PROMO/cantidad.Text))) + 'en pe_cedis meto el codigo de promocion para hacer esta validacion. + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE PEDIDO SET PE_CEDIS = (?) WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) and pe_proid In (Select cat_dp_idprod from CAT_DETALLES_PAQ WHERE CAT_DP_ID In (Select PROIDID from PROIDID))", Array As Object(L_PROID.text)) + D=B4XPages.MainPage.skmt.ExecQuery("select CAT_DP_ID, CAT_DP_PRECIO, CAT_DP_PRECIO_SIMPTOS, CAT_DP_IDPROD FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) AND CAT_DP_PRECIO > 1") + If D.RowCount>0 Then + For i=0 To D.RowCount -1 + D.Position=i + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE PEDIDO SET PE_COSTOU = (?), PE_COSTO_TOT = PE_CANT * (?) , PE_COSTO_SIN = (?) WHERE PE_PROID = (?) And PE_CEDIS In (Select PROIDID from PROIDID) AND PE_CLIENTE IN (Select CUENTA from cuentaa) ",Array As Object( D.GetString("CAT_DP_PRECIO"), D.GetString("CAT_DP_PRECIO"), D.GetString("CAT_DP_PRECIO_SIMPTOS"),D.GetString("CAT_DP_IDPROD"))) + Next + End If + D.Close + D=B4XPages.MainPage.skmt.ExecQuery("select CAT_DP_ID, CAT_DP_PRECIO, CAT_DP_PRECIO_SIMPTOS, CAT_DP_IDPROD FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) AND (CAT_DP_PRECIO = 0.01 or CAT_DP_PRECIO = 1 OR CAT_DP_PRECIO = 0) AND CAT_DP_TIPO = 1") + If D.RowCount>0 Then + For i=0 To D.RowCount -1 + D.Position=i + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE PEDIDO SET PE_COSTOU = (?), PE_COSTO_TOT = PE_CANT * (?) , PE_COSTO_SIN = (?) WHERE PE_PROID = (?) And PE_CEDIS In (Select PROIDID from PROIDID) AND PE_CLIENTE IN (Select CUENTA from cuentaa) ",Array As Object( D.GetString("CAT_DP_PRECIO"), D.GetString("CAT_DP_PRECIO"), D.GetString("CAT_DP_PRECIO_SIMPTOS"),D.GetString("CAT_DP_IDPROD"))) + Next + End If + D.Close + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_RUTA from kmt_info where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + c.Position=0 + cl_ruta = c.GetString("CAT_CL_RUTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + 'para insertar la promo de ades el de regalo en 0 + e=B4XPages.MainPage.skmt.ExecQuery("select count(*) as CUANTOS FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) and CAT_DP_TIPO = 0 ") + ' SE LO QUITE DE CONDICION AND (CAT_DP_PRECIO = 0.01 or CAT_DP_PRECIO = 1 OR CAT_DP_PRECIO = 0) + e.Position =0 + If e.GetString("CUANTOS") > 0 Then + F=B4XPages.MainPage.skmt.ExecQuery("select CAT_DP_IDPROD, CAT_DP_PZAS,CAT_DP_PRECIO FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) and CAT_DP_TIPO = 0 ") ' AND (CAT_DP_PRECIO = 0.01 or CAT_DP_PRECIO = 1 OR CAT_DP_PRECIO = 0) + 'meter el otro + 'si jala copiar para guna y el resto + If f.RowCount>0 Then + For i=0 To f.RowCount -1 + f.Position=i + precio_Cero = f.GetString("CAT_DP_PRECIO") + h=B4XPages.MainPage.skmt.ExecQuery2("select CAT_GP_NOMBRE from CAT_GUNAPROD where CAT_GP_ID = ? ", Array As String(f.GetString("CAT_DP_IDPROD"))) + h.Position=0 + Log(111) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA,PE_FOLIO) VALUES(?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (L_PROID.text,precio_Cero * f.GetString("CAT_DP_PZAS") * cantidad.text, precio_Cero, f.GetString("CAT_DP_PZAS") * cantidad.text, h.GetString("CAT_GP_NOMBRE"), f.GetString("CAT_DP_IDPROD"),clie_id, sDate & sTime, usuario,cl_ruta, B4XPages.MainPage.tipo_venta)) + h.Close + Next + End If + f.Close + End If + e.Close + Log(222) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA,PE_FOLIO) VALUES(?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (L_PROID.text,0 , 0, cantidad.text, l_desc.text, L_PROID.Text,clie_id, sDate & sTime, usuario,cl_ruta, b4xpages.MainPage.tipo_venta)) + B4XPages.MainPage.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cantidad.Text, L_PROID.Text)) + Else + Msgbox("Tiene " & TOT_ART_PROMO & " " & TOT_ART_PROMOR & " y necesita " & PROMO_C & " " & PROMO_CR & " Para la Promo. " , "ADVERTENCIA") 'ignore + End If + End If + cantidad.Text = "" + B4XPages.ShowPage("Cliente") + else If l_marca.text = "PROMOS" And l_tipo.Text ="PROMOS" And PROMO_C = 0 Then + B4XPages.MainPage.skmt.ExecNonQuery("delete from PROIDID") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PROIDID VALUES (?)", Array As Object(L_PROID.text)) + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_RUTA from kmt_info where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + c.Position=0 + cl_ruta = c.GetString("CAT_CL_RUTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + 'para insertar la promo de ades el de regalo en 0 + e=B4XPages.MainPage.skmt.ExecQuery("select count(*) as CUANTOS FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) ") + e.Position =0 + If e.GetString("CUANTOS") > 0 Then + F=B4XPages.MainPage.skmt.ExecQuery("select CAT_DP_IDPROD, CAT_DP_PZAS, CAT_DP_PRECIO FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID)") + For i =0 To f.RowCount -1 + F.Position =i + h=B4XPages.MainPage.skmt.ExecQuery2("select CAT_GP_NOMBRE from CAT_GUNAPROD where CAT_GP_ID = ? ", Array As String(f.GetString("CAT_DP_IDPROD"))) + h.Position=0 + Log(333) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA,PE_FOLIO) VALUES(?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (L_PROID.text,f.GetString("CAT_DP_PRECIO") * cantidad.text * f.GetString("CAT_DP_PZAS"), f.GetString("CAT_DP_PRECIO"), f.GetString("CAT_DP_PZAS") * cantidad.text, h.GetString("CAT_GP_NOMBRE"), f.GetString("CAT_DP_IDPROD"),clie_id, sDate & sTime, usuario,cl_ruta, B4XPages.MainPage.tipo_venta)) + h.Close + Next + f.Close + End If + e.Close + Log(444) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA,PE_FOLIO) VALUES(?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (L_PROID.text,0, 0, cantidad.text, l_desc.text, L_PROID.Text,clie_id, sDate & sTime, usuario,cl_ruta, B4XPages.MainPage.tipo_venta)) + B4XPages.MainPage.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cantidad.Text, L_PROID.Text)) + cantidad.Text = "" + c=B4XPages.MainPage.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, SUM(PE_COSTO_SIN) AS TOTAL_CLIE_SIN FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT,PC_ALMACEN,PC_RUTA,PC_COSTO_SIN) VALUES (?,?,?,?,?,?,?,?,?,?)", Array As Object(clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps,ALMACEN,cl_ruta,c.GetString("TOTAL_CLIE_SIN"))) + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + B4XPages.ShowPage("Cliente") + Else + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_RUTA from kmt_info where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + c.Position=0 + cl_ruta = c.GetString("CAT_CL_RUTA") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + Log(555) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_RUTA,PE_COSTO_SIN,PE_FOLIO) VALUES(?,?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (ALMACEN,cantidad.Text * l_precio.Text, l_precio.text, cantidad.text, l_desc.text, L_PROID.Text,clie_id, sDate & sTime, usuario,cl_ruta,preciosin, B4XPages.MainPage.tipo_venta)) + B4XPages.MainPage.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cantidad.Text, L_PROID.Text)) + c=B4XPages.MainPage.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, SUM(PE_COSTO_SIN) AS TOTAL_CLIE_SIN FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT,PC_ALMACEN,PC_RUTA,PC_COSTO_SIN) VALUES (?,?,?,?,?,?,?,?,?,?)", Array As Object(clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps,ALMACEN,cl_ruta,c.GetString("TOTAL_CLIE_SIN"))) + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO INVENT_X_ENVIAR (ALMACEN , PROID , CANTIDAD ) VALUES(?,?,?) ", Array As Object (ALMACEN,L_PROID.Text,cantidad.text)) + B4XPages.ShowPage("Cliente") + End If +End Sub + +Private Sub B4XPage_CloseRequest As ResumableSub +' BACK key pressed +' Return True To close, False To cancel + Msgbox("Presione Boton Terminar.","ADVERTENCIA") 'ignore + Return False +End Sub + +Sub img_prod_Click + i_fotol.Visible = True + i_fotol.Bitmap = LoadBitmap(ruta,"1.jpg") + +End Sub +Sub i_fotol_Click + i_fotol.Visible = False + +End Sub + +Sub DESC_PROMO_Click + B4XPages.MainPage.skmt.ExecNonQuery("delete from PROIDID") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PROIDID VALUES (?)", Array As Object(L_PROID.text)) + B4XPages.ShowPage("detalle_promo") +End Sub + +Sub nopromo_Click + If cantidad.Text = "" Then + Msgbox("Cantidad no puede ser 0","Cantidad") 'ignore + Else If cantidad.Text > l_bodega.Text Then + Msgbox("Exede la existencia", "ADVERTENCIA") 'ignore + Else + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PEDIDO (PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO,PE_FOLIO) VALUES(?,?,?,?,?,?,?,?,?,?) ", Array As Object ("COACALCO",0,0, cantidad.text, l_desc.text, L_PROID.Text,clie_id, sDate & sTime, usuario, b4xpages.MainPage.tipo_venta)) + B4XPages.MainPage.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cantidad.Text, L_PROID.Text)) + cantidad.Text = "" + B4XPages.ShowPage("Productos") + End If +End Sub + +Private Sub p_pedido_Click + +End Sub \ No newline at end of file diff --git a/B4A/C_Principal.bas b/B4A/C_Principal.bas new file mode 100644 index 0000000..7c89938 --- /dev/null +++ b/B4A/C_Principal.bas @@ -0,0 +1,3303 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Public rp As RuntimePermissions + Private Root As B4XView 'ignore + Private xui As XUI 'ignore +' Dim reqManager As DBRequestManager + Dim rd As C_RespaldoDiario + Dim reqManager As DBRequestManager + Dim conectado As String + Dim ime As IME + Dim t1 As Timer + Dim sb As StringBuilder + Dim PHONE As Phone + Dim g As GPS + Dim trabajar As Button +' Dim lat_gps, lon_gps As String + Dim c As Cursor + Dim d As Cursor + Dim b As Cursor + Dim e As Cursor + Dim f As Cursor + Dim D2 As Cursor + Dim lv As ListView + Dim cargar As Button + Dim pendiente As Button + Dim foto1() As Byte + Dim usuario As String + Dim connecta As Button + Dim conn As String + Dim Subir As Button + Dim cmd As DBCommand + Dim TOPE As Int + Dim COUNT_CLIE As Int + Dim fecha As String + Dim drop As Double + Dim efectiva As Double + Dim L_MONTOD As Label + Dim l_cuantosc As Label + Dim l_drop As Label + Dim l_efectiva As Label + Dim l_ctast As Label + Dim BUSCA As Button + Dim Cuantos As String + Dim l_cuantosn As Label + Dim e_ruta As EditText + Dim l_porvisitar As Label + Dim b_mapa As Button + Dim l_ruta As Label + Dim ALMACEN As String + Private img2 As ImageView + Dim Listo1 As String + Dim Listo2 As String + Dim Listo3 As String + Dim Listo4 As String + Dim Listo5 As String + Dim EJECUTANDO As String + Dim RES As String + Dim inve As String + Dim cuantos_pedidosc As String + Dim cuantos_pedido As String + Dim cuantos_noventa As String + Dim datos_iguales As String + Dim p As PhoneId + Dim imei As String +' Dim SERVER As String + Private inv As Button + Private P1 As Panel + Private CLAVE As EditText + Private B_OK_PAS As Button + Dim PASO As String + Private USUARIO1 As EditText + Dim connecta1 As Double + Dim armafolio As String + Private NUEVO As Button + Private S_CC As Label + Private S_CP As Label + Private S_CH As Label + Private PB2 As ProgressBar + Private PB1 As ProgressBar + Private L_P_1 As Label + Private L_P_2 As Label + Private L_P_3 As Label + Private CARGA As String + Private PORCENTAJE As String + Private P_RESUMEN As Panel + Private B_OK_RES As Button + Private Resumen As Button + Private L_CUANTOST As Label + Private img3 As ImageView + Private ImageView3 As ImageView + Private ImageView5 As ImageView + Private L_TICKPROM As Label + Private L_MARCAS As ListView + Private ImageView9 As ImageView + Private E_RUTA2 As EditText + Private resdia As ImageView + Private hacer_ped As ImageView + Private nvo_cliente As ImageView + Private tickets_dia As ImageView + Private l_monto_ks As Label + Private l_monto_kp As Label + Private l_monto_k As Label + Private l_monto_c1 As Label + Private l_monto_c2 As Label + Private l_monto_c3 As Label + Private l_encuesta As Label + Private bpv1 As BatteryProgressView + Dim batterystatus(11) As Int + Private bu As BatteryUtilities + Private L_NES As Label + Private L_REAL As Label + Private L_ALCANCE As Label + Private L_VPLAN As Label + Private L_VREAL As Label + Private L_EFEC_VIS As Label + Private L_VISITCC As Label + Private L_EFEC_PV As Label + Private L_EFEC_PURA As Label + Private L_CTE_PROMO As Label + Private L_REDEN_PROMO As Label + Private L_LIN_TICK As Label + Private SCROLL_RESDIA As ScrollView + Private L_ACUMULADO As Label + Private L_UNILEVER As Label + Private L_RECHAZOP As Label + Private L_RECHAZOM As Label + Private L_VTA_3MES As Label + Private L_VTA_2MES As Label + Private L_VTA_1MES As Label + Private L_MES_PY As Label + Private L_FREC_DE_CREAL As Label + Private L_FREC_DE_COBJ As Label + Private L_COB_VISIT As Label + Private L_VISIT_REAL As Label + Private L_VISIT_PLAN As Label + Private L_ECO As Label + Private L_COB_CCC As Label + Private L_CTES As Label + Private L_VPO_VTA As Label + Private L_VPO_OBJ As Label + Private L_DS_VTA As Label + Private L_DS_OBJ As Label + Private L_DRA_VTA As Label + Private L_DRA_OBJ As Label + Private L_ALCANCEM As Label + Private L_TENDENCIA As Label + Private L_VTA_ACUM As Label + Private L_OBJ_MES As Label + Private L_DS_OBJD As Label + Private L_DS_VTAD As Label + Private LPT As String + Private STEYIN As String + Private STEYOUT As String + Private L_PRIO As Label + Private L_SECUND As Label + Private L_COMP As Label + Private stay_hh As String + Private stay_mi As String + Private stay_ss As String + Dim sDate,sTime As String + Dim HORAINGRESO As String + Private L_QUALA As Label + Private L_FERRERO As Label + Private L_SANMARCOS As Label + Private L_CAMPARI As Label + Private L_IBERIA As Label + Private L_BEPENSA As Label + Private L_SCJ As Label + Private L_MEDJ As Label + Private L_DURACELL As Label + Private L_GUNA As Label + Private L_KIMB As Label + Private L_TRESM As Label + Private L_REDB As Label + Private Btn_Ubicar As Button + Private B_COMM As Button + Private L_TOTAL_MM As Label + Private L_TOTAL_VIVE As Label + Private L_TOTAL_GUNA As Label + Private L_TOTAL_BA As Label + Private L_TOTAL_COMIS As Label + Private L_TOTAL_MM_1 As Label + Private L_TOTAL_VIVE_1 As Label + Private L_TOTAL_GUNA_1 As Label + Private L_TOTAL_BA_1 As Label + Private L_TOTAL_COMIS_1 As Label + Private B_OK_COMISS As Button + Private Panel_C As Panel + Private TitleHeight As Int = 50dip + Private Title2Height As Int = 100dip + Private DividerHeight As Int = 5dip + Private CLV1 As CustomListView + Private pnlTitle As B4XView + Private xui As XUI + Type TitleData (Title As String) + Private B_MARCAS As Button + Private Panel5 As Panel + Private lblTitle As Label + Private B_OK_PANEL5 As Button + Private p_principal As Panel + Private p_mandaInfo As Panel + Dim s As Cursor + Private Label22 As Label + Private l_rutasuplencia As Label + Dim userpiezas As String + Private b_abordo As Button + Private L_ABORDO As Label + Private L_VENTA As Label + Private L_PREVENTA As Label + Private p_abordo As Panel + Private Panel11 As Panel + Private CLV_PICK_CIEGO As CustomListView + Private P_PICK_CIEGO As Panel + Dim ET_PICK_CIEGO As EditText + Private L_PICK_CIEGO As Label + Private P_CIEGO As Panel + Dim Panel4 As Panel + Dim q_buscar As String + Private et_buspc As EditText + Private b_tabulador As Button + Private p_b_tabulador As Panel + Private pnlCobranza As Panel + Private clvCobranza As CustomListView + Private pnlBtnCobranza As Panel + Private btnCobranza As Button + Private pnlBtnRegresar As Panel + Private btnRegresar As Button + Private l_Secuencia As Label + Dim pnlContenedorCobranza As Panel + Private l_Nombre As Label + Private l_CuentaXCobrar As Label + Private l_Abono As Label + Private pnlCabecero As Panel + Private lblAbono As Label + Private lblSaldo As Label + Private lblCliente As Label + Private lblSec As Label + Private pnlTotal As Panel + Private lblTotal As Label + Private lblVersion As Label + Dim lista_punta As List + Private p_prod As Panel + Private lv_prod_Prin As ListView + Private b_regreso As Button + Private b_productos As Button +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + Root.LoadLayout("principal") + rd.Initialize + rd.vacuum + EJECUTANDO=1 + Dim ruta As String + img2.Visible =False + ruta = File.DirInternal + If File.Exists(ruta, "kmt.db") = False Then + File.Copy(File.DirAssets, "kmt.db", ruta, "kmt.db") + End If + DateTime.DateFormat = "MM/dd/yyyy" + fecha=DateTime.Date(DateTime.Now) + B4XPages.MainPage.skmt.Initialize(ruta,"kmt.db", True) + b=B4XPages.MainPage.skmt.ExecQuery("Select count(*) as CUANTOS from pedido_cliente") + b.Position=0 + Cuantos = b.GetString("CUANTOS") + b.Close + d=B4XPages.MainPage.skmt.ExecQuery("select count(*) as TOTAL_VISITAR from kmt_info where gestion = 0") + d.Position=0 + e=B4XPages.MainPage.skmt.ExecQuery("select count(*) as POR_VISITAR from kmt_info") + e.Position=0 + f=B4XPages.MainPage.skmt.ExecQuery("select count(*) as CAT_CL_RUTA from kmt_info") + f.Position=0 + l_ruta.Text = f.GetString("CAT_CL_RUTA") + f.Close + If l_ruta.Text = 0 Then + l_ruta.Text =0 + Else + f=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_RUTA from kmt_info") + f.Position=0 + l_ruta.Text = f.GetString("CAT_CL_RUTA") + f.Close + End If + If Cuantos = 0 Then + L_MONTOD.Text =0 + l_cuantosc.Text = 0 + l_cuantosn.Text = 0 + drop = 0 + l_drop.Text = 0 + efectiva = 0 + l_efectiva.text =0 + l_ctast.Text = d.GetString("TOTAL_VISITAR") + l_porvisitar.Text = e.GetString("POR_VISITAR") + Else + c=B4XPages.MainPage.skmt.ExecQuery("select sum(pc_monto) as MONTO_DIA, count(pc_cliente) AS CLIENTES_DIA from pedido_cliente where PC_CLIENTE <> 0 AND PC_CLIENTE <> 1") + b=B4XPages.MainPage.skmt.ExecQuery("select count(*) as CUANTOS from noventa") + 'where pc_fecha = ?", Array As String(fecha) + c.Position=0 + b.Position=0 + L_MONTOD.Text = c.GetString("MONTO_DIA") + l_cuantosc.Text = c.GetString("CLIENTES_DIA") + l_cuantosn.Text = b.GetString("CUANTOS") +' drop = c.GetString("MONTO_DIA") / c.GetString("CLIENTES_DIA") + l_drop.Text = Round2(drop,2) + efectiva = c.GetString("CLIENTES_DIA") / e.GetString("POR_VISITAR") + l_efectiva.text = Round2(efectiva*100,2) + l_ctast.Text = d.GetString("TOTAL_VISITAR") + l_porvisitar.Text = e.GetString("POR_VISITAR") + b.Close + c.Close + End If + d.Close + e.Close +' CallSubDelayed(FirebaseMessaging, "SubscribeToTopics") + s = B4XPages.MainPage.skmt.ExecQuery("select RS_RUTA FROM RUTA_SUPLENCIA") + s.Position = 0 + If s.RowCount = 0 Then + Label22.Visible = False + l_rutasuplencia.Visible = False + Else If s.RowCount > 0 Then + Label22.Visible = True + l_rutasuplencia.Visible = True + l_rutasuplencia.Text = s.GetString("RS_RUTA") + End If + Starter.Skmt.ExecNonQuery($"create table if not exists kmt_info2 (${getTableColumnList(Starter.skmt, "kmt_info")})"$) +End Sub + +Sub chkIfTableExists(db As SQL, table As String) As Boolean 'ignore + Private t As Boolean = False 'ignore + If db.IsInitialized Then + Private c As Cursor = Starter.skmt.ExecQuery($"SELECT name FROM sqlite_master WHERE type='table' AND name='${table}'"$) + If c.RowCount > 0 Then t = True + c.Close + End If + Return t +End Sub + +'Regresa solo los nombres de las columnas de una tabla dada. +Sub getTableColumnListName(db As SQL, table As String) As String 'ignore + Private l As String = "" + If chkIfTableExists(db, table) Then + Private c As Cursor = Starter.skmt.ExecQuery($"pragma table_info(${table})"$) + If c.RowCount > 0 Then + For i = 0 To c.RowCount - 1 + c.Position = i + If l.Length = 0 Then + l = $"${c.GetString("name")}"$ + Else + l = $"${l}, ${c.GetString("name")}"$ + End If + Next + End If + Else + Return "No existe la tabla." + End If + c.Close + Return l +End Sub + +Sub getTableColumnList(db As SQL, table As String) As String 'ignore + Private l As String = "" + If chkIfTableExists(db, table) Then + Private c As Cursor = Starter.skmt.ExecQuery($"pragma table_info(${table})"$) + If c.RowCount > 0 Then + For i = 0 To c.RowCount - 1 + c.Position = i + If l.Length = 0 Then + l = $"${c.GetString("name")} ${c.GetString("type")}"$ + Else + l = $"${l}, ${c.GetString("name")} ${c.GetString("type")}"$ + End If + Next + End If + Else + Return "No existe la tabla." + End If + c.Close + Return l +End Sub + +Sub B4XPage_Appear +' nvo_cliente.Enabled = False + rd.respaldaPedido + rd.respaldaInventarios + rd.respaldaPaquetes + HORAINGRESO ="000000" + Btn_Ubicar.Left = (Root.Width/2) - (Btn_Ubicar.Width/2) + reqManager.Initialize(Me, Starter.DBReqServer) + Log(Starter.DBReqServer) + PASO =0 + If Not(Starter.gps.GPSEnabled) Then + If Starter.marcaCel <> "Sony" Then ToastMessageShow("Es necesario tener el GPS encendido", True) + StartActivity(Starter.gps.LocationSettingsIntent) + End If + c=B4XPages.MainPage.skmt.ExecQuery2("select count(*) as CUANTOS from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("FECHA")) + c.Position =0 + If c.GetString("CUANTOS") = 0 Then + cmd.Initialize + cmd.Name = "select_fecha" + Log( Starter.DBReqServer) + reqManager.ExecuteQuery(cmd , 0, "fecha") + Msgbox("AJUSTAR FECHA","AVISO") 'ignore + B4XPage_Appear + Else + c=B4XPages.MainPage.skmt.ExecQuery2("select CAT_VA_VALOR from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("FECHA")) + c.Position=0 + Dim sDate,sTime As String + DateTime.DateFormat = "yyyyMMdd" + sDate=DateTime.Date(DateTime.Now) + If c.GetString("CAT_VA_VALOR") > sDate Then + Msgbox("AJUSTAR LA FECHA YA QUE ES MENOR AL SISTEMA" ,"AVISO") 'ignore + c.Close + B4XPage_Appear + End If + c.Close + End If + c.Close + If EJECUTANDO =0 Then + Listo1 = 0 + Listo2 = 0 + Listo3 = 0 + Listo4 = 0 + Listo5 = 0 + inve = 0 + img2.Visible =False + End If + DateTime.DateFormat = "MM/dd/yyyy" + fecha=DateTime.Date(DateTime.Now) + b=B4XPages.MainPage.skmt.ExecQuery("Select count(*) as CUANTOS from pedido_cliente WHERE PC_CLIENTE <> 0 AND PC_CLIENTE <> 1") + b.Position=0 + Cuantos = b.GetString("CUANTOS") + b.Close +' If Starter.marcaCel <> "Sony" Then ToastMessageShow(Cuantos , True) + d=B4XPages.MainPage.skmt.ExecQuery("select count(*) as TOTAL_VISITAR from kmt_info where gestion = 0") + d.Position=0 + e=B4XPages.MainPage.skmt.ExecQuery("select count(*) as POR_VISITAR from kmt_info WHERE CAT_CL_CODIGO <>0 OR CAT_CL_CODIGO <>1 ") + e.Position=0 + f=B4XPages.MainPage.skmt.ExecQuery("select count(*) as CAT_CL_RUTA from kmt_info WHERE CAT_CL_CODIGO <>0 OR CAT_CL_CODIGO <>1 ") + f.Position=0 + l_ruta.Text = f.GetString("CAT_CL_RUTA") + f.Close + If l_ruta.Text = 0 Then + l_ruta.Text =0 + p_b_tabulador.Visible = False + pnlBtnCobranza.Visible = False + Else + p_b_tabulador.Visible = False + pnlBtnCobranza.Visible = False + f=B4XPages.MainPage.skmt.ExecQuery("select CAT_CL_RUTA from kmt_info") + f.Position=0 + l_ruta.Text = f.GetString("CAT_CL_RUTA") + f.Close + End If + If Cuantos = 0 Then + L_MONTOD.Text =0 + l_cuantosc.Text = 0 + l_cuantosn.Text = 0 + L_CUANTOST.Text = 0 + drop = 0 + l_drop.Text = 0 + efectiva = 0 + l_efectiva.text =0 + l_ctast.Text = d.GetString("TOTAL_VISITAR") + l_porvisitar.Text = e.GetString("POR_VISITAR") + d.Close + e.Close + b=B4XPages.MainPage.skmt.ExecQuery("select count(*) as CUANTOS from noventa") + b.Position=0 + l_cuantosn.Text = b.GetString("CUANTOS") + b.close + Else + c=B4XPages.MainPage.skmt.ExecQuery("select SUM(PE_COSTO_TOT) as MONTO_DIA, COUNT(DISTINCT(PE_CLIENTE)) AS CLIENTES_DIA from PEDIDO WHERE PE_CLIENTE <> 0") + b=B4XPages.MainPage.skmt.ExecQuery("select count(*) as CUANTOS from noventa") + c.Position=0 + b.Position=0 + L_MONTOD.Text = c.GetString("MONTO_DIA") + l_cuantosc.Text = c.GetString("CLIENTES_DIA") + + D2=B4XPages.MainPage.skmt.ExecQuery("select COUNT(*) AS CUANTOS from PEDIDO ") + D2.Position = 0 + LPT = D2.GetString("CUANTOS") / l_cuantosc.Text + D2.Close + + l_cuantosn.Text = b.GetString("CUANTOS") + efectiva = c.GetString("CLIENTES_DIA") / e.GetString("POR_VISITAR") + l_efectiva.text = Round2(efectiva*100,2) + l_ctast.Text = d.GetString("TOTAL_VISITAR") + d.Close + l_porvisitar.Text = e.GetString("POR_VISITAR") + L_CUANTOST.Text = l_cuantosc.Text + l_cuantosn.Text + drop = L_CUANTOST.Text / l_porvisitar.Text + l_drop.Text = Round(drop * 100) + If L_CUANTOST.Text < 40 Then + ImageView3.Bitmap = LoadBitmap(File.DirAssets, "tache_rojo.png") + Else If L_CUANTOST.Text > = 40 And L_CUANTOST.Text < 50 Then + ImageView3.bitmap = LoadBitmap(File.DirAssets, "alerta_amarilla.png") + Else + ImageView3.Bitmap = LoadBitmap(File.DirAssets, "palomita_verde.png") + End If +' L_TICKPROM.Text = Round2((c.GetString("MONTO_DIA") / c.GetString("CLIENTES_DIA")),2) +' If c.GetString("MONTO_DIA") < 4000 Then +' ImageView5.Bitmap = LoadBitmap(File.DirAssets, "tache_rojo.png") +' Else if c.GetString("MONTO_DIA") > = 4000 And c.GetString("MONTO_DIA") < 6250 Then +' ImageView5.bitmap = LoadBitmap(File.DirAssets, "alerta_amarilla.png") +' Else +' ImageView5.Bitmap = LoadBitmap(File.DirAssets, "palomita_verde.png") +' End If + b.Close + c.Close + End If + c.Close + b.Close + e.Close + c=B4XPages.MainPage.skmt.ExecQuery("select ID_ALMACEN from CAT_ALMACEN") + C.Position =0 + ALMACEN = C.GetString("ID_ALMACEN") + c.Close + bu.Initialize + batterystatus = bu.BatteryInformation + + + c=B4XPages.MainPage.skmt.ExecQuery("select usuario from usuarioa") + c.Position = 0 + usuario = c.GetString("USUARIO") + c.Close +' B4XPages.MainPage.batt = batterystatus(0) +' B4XPages.MainPage.montoActual = L_MONTOD.Text +' B4XPages.MainPage.clientestotal = L_CUANTOST.Text +' B4XPages.MainPage.clientesventa = l_cuantosc.Text +' B4XPages.MainPage.clientesvisitados = l_porvisitar.TEXT +' B4XPages.MainPage.ALMACEN = ALMACEN +' B4XPages.MainPage.rutapreventa = l_ruta.text + + Dim conVen As Int = 0 + Dim sinVen As Int = 0 + + Dim cursor As Cursor = Starter.skmt.ExecQuery($"SELECT SUM(PE_COSTO_TOT) AS PE_COSTO_TOT, COUNT(DISTINCT PE_CLIENTE) AS PE_CLIENTE FROM PEDIDO WHERE PE_FOLIO <> 'RECARGA'"$) + If cursor.RowCount > 0 Then + cursor.Position = 0 + B4XPages.MainPage.montoActual = cursor.GetString("PE_COSTO_TOT") + B4XPages.MainPage.clientesventa = cursor.GetString("PE_CLIENTE") + conVen = cursor.GetInt("PE_CLIENTE") + End If + Log("Clientes con venta: " & conVen) + + Dim cNoVenta As Cursor = Starter.skmt.ExecQuery($"SELECT COUNT(DISTINCT NV_CLIENTE) AS NV_CLIENTE FROM NOVENTA"$) + If cNoVenta.RowCount > 0 Then + cNoVenta.Position = 0 + sinVen = cNoVenta.GetInt("NV_CLIENTE") + + Log("Clientes sin venta: " & sinVen) + + Dim totClientes As Int = sinVen + conVen + Log("Total clientes visitados: " & totClientes) + + End If + + + B4XPages.MainPage.batt = batterystatus(0) + B4XPages.MainPage.clientestotal = totClientes + B4XPages.MainPage.clientesvisitados = l_porvisitar.Text + B4XPages.MainPage.ALMACEN = ALMACEN + B4XPages.MainPage.rutapreventa = l_ruta.Text + + '////// Para el usuario global - Chv + c=B4XPages.MainPage.skmt.ExecQuery("select usuario from usuarioa") + c.Position = 0 + usuario = c.GetString("USUARIO") + B4XPages.MainPage.usuario = usuario + c.Close + '/////// + CallSub(Starter, "ENVIA_ULTIMA_GPS") + + + s = B4XPages.MainPage.skmt.ExecQuery("select RS_RUTA FROM RUTA_SUPLENCIA") + s.Position = 0 + If s.RowCount = 0 Then + + Label22.Visible = False + l_rutasuplencia.Visible = False + l_rutasuplencia.Text = "" + + Else If s.RowCount > 0 Then + + Label22.Visible = True + l_rutasuplencia.Visible = True + l_rutasuplencia.Text = s.GetString("RS_RUTA") + + End If + s.Close + + s = B4XPages.MainPage.skmt.ExecQuery("select RUTAA FROM RUTAA") + s.Position = 0 + If s.RowCount = 0 Then + + + l_ruta.Text = 0 + + Else If s.RowCount > 0 Then + + l_ruta.Text = s.GetString("RUTAA") + + End If + + If l_ruta.Text = "0" Then + p_abordo.Visible = False + b_productos.Visible = False + Else + p_abordo.Visible = False + b_productos.Visible = True + End If + +' d = B4XPages.MainPage.skmt.ExecQuery("SELECT CAT_GP_ID, CAT_GP_NOMBRE FROM CAT_GUNAPROD2") +' CLV_PICK_CIEGO.Clear +' For i = 0 To d.RowCount - 1 +' d.Position = i +' CLV_PICK_CIEGO.Add(CreateListItem(d.GetString("CAT_GP_ID"), d.GetString("CAT_GP_NOMBRE")),i) +' Log(d.GetString("CAT_GP_ID")) +' Log(d.GetString("CAT_GP_NOMBRE")) +' Next +' d.Close + '----------------------------- + +' Dim fg As Cursor = Starter.skmt.ExecQuery("SELECT IFNULL(SUM(CASE WHEN PE_FOLIO = 'PREVENTA_CREDITO' THEN PE_COSTO_TOT ELSE 0 END), 0) AS COSTO_CRED, IFNULL(SUM(CASE WHEN PE_FOLIO = 'PREVENTA_CONTADO' THEN PE_COSTO_TOT ELSE 0 END), 0) AS COSTO_CONTADO FROM PEDIDO WHERE PE_CLIENTE IN (SELECT CUENTA FROM CUENTAA) AND PE_FOLIO IN ('PREVENTA_CREDITO', 'PREVENTA_CONTADO')") +' +' fg.Position = 0 +' Dim COSTO_CRED As Double = fg.GetDouble("COSTO_CRED") +' Dim COSTO_CONTADO As Double = fg.GetDouble("COSTO_CONTADO") +' +' Log("Costo Crédito: " & COSTO_CRED & "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<") +' Log("Costo Contado: " & COSTO_CONTADO & "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<") +' +' If COSTO_CRED > 0 And COSTO_CRED < 1000 Then +' Msgbox2Async($"Se ha detectado venta a crédito menor a $1000 pesos. ¿Desea borrarla?"$, "Venta Mínima de Crédito", "Sí", "", "", LoadBitmap(File.DirAssets, "alert2.png"), False) +' Wait For Msgbox_Result (resultado As Int) +' If resultado = DialogResponse.POSITIVE Then +' Subs.borraPedidoCredito +' End If +' End If +' +' fg.Close + + CallSubDelayed(Tracker, "Track") + CallSubDelayed(Tracker, "StartFLPSmall") + If Tracker.FLP.IsInitialized And Tracker.FLP.GetLastKnownLocation.IsInitialized Then 'Si tenemos "UltimaUbicaccionConocida" la usamos. + B4XPages.MainPage.lat_gps = Tracker.FLP.GetLastKnownLocation.Latitude + B4XPages.MainPage.lon_gps = Tracker.FLP.GetLastKnownLocation.Longitude +' Log($"Tenemos UUC: ${Tracker.FLP.GetLastKnownLocation.Latitude},${Tracker.FLP.GetLastKnownLocation.Longitude}"$) + GPS_LocationChanged(Tracker.FLP.GetLastKnownLocation) + End If + lista_punta.Initialize + Dim pol As Cursor = Starter.skmt.ExecQuery("SELECT LAT, LONG FROM POLIGONO") + If pol.RowCount > 0 Then + + For poli = 0 To pol.RowCount -1 + pol.Position = poli + Dim coords As LatLng + coords.Initialize(pol.GetString("LAT"), pol.GetString("LONG")) + lista_punta.Add(coords) + Next + End If + checaPedido + '----------------------------- +End Sub + +Sub PointInPolygon(point As LatLng, polygon As List) As Boolean + Dim x As Double = point.Longitude + Dim y As Double = point.Latitude + + Dim inside As Boolean = False + For i = 0 To polygon.Size - 1 + Dim j As Int = (i + 1) Mod polygon.Size + Dim p1_1 As LatLng = polygon.Get(i) + Dim p2_1 As LatLng = polygon.Get(j) + + Dim xi As Double = p1_1.Longitude + Dim yi As Double = p1_1.Latitude + Dim xj As Double = p2_1.Longitude + Dim yj As Double = p2_1.Latitude + + Dim intersect As Boolean = ((yi > y) <> (yj > y)) And (x < (xj - xi) * (y - yi) / (yj - yi) + xi) + If intersect Then + inside = Not(inside) + End If + Next + + Return inside + + +End Sub + +Sub MapFragment1_LongClick (mPoint As LatLng) + ' Verificar si el punto está dentro del polígono + If lista_punta.Size > 0 Then + Dim dentro As Boolean = PointInPolygon(mPoint, lista_punta) + + If dentro Then + ToastMessageShow("El punto está DENTRO del polígono", True) + Else + ToastMessageShow("El punto está FUERA del polígono", True) + End If + End If +End Sub + + +Sub Subir_Click + CARGA = "SUBIR" + p_mandaInfo.Width = Root.Width + p_mandaInfo.Height = Root.Height + P1.Visible = True + P1.Left = (p_mandaInfo.Width/2) - (P1.Width/2) + P1.top = (p_mandaInfo.Height/2) - (P1.Height/2) + p_mandaInfo.Visible = True + P1.BringToFront + p_mandaInfo.BringToFront + 'trabajar.Visible = False + NUEVO.Visible =False + BUSCA.Visible=False + connecta.Visible=False + Subir.Visible=False + cargar.Visible=False + L_P_1.Visible = False + S_CC.Visible = False + L_P_3.Visible = False + S_CH.Visible = False + PB1.Visible = False + Resumen.Visible= False + L_P_2.Text = "Envio de Pedidos" + L_P_3.Text = "Envio de Pedidos" + S_CH.Text = "EN PROCESO" + S_CP.Text = "EN PROCESO" + PB1.Progress = 0 + PB2.Progress = 0 + 'c=skmt.ExecQuery("SELECT sum(IFNULL(PE_DESC,0)) as DESCUENTO FROM PEDIDO") + 'c.Position =0 + 'If c.GetString("DESCUENTO") > 0 And PASO = 0 Then + 'P1.Visible = True + 'ELSE IF c.GetString("DESCUENTO") = 0 Then + PASO = 1 + 'End If + If PASO = 1 Then + B4XPages.MainPage.skmt.ExecNonQuery2("delete from PEDIDO WHERE PE_PRONOMBRE = ? ", Array As Object("N/A") ) + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE not In (select PE_CLIENTE from pedido)") + c=B4XPages.MainPage.skmt.ExecQuery("select usuario from usuarioa") + c.Position = 0 + usuario = c.GetString("USUARIO") + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("select HGDATE, HGLAT, HGLON from HIST_GPS") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "UPDATE_IZCA_ACTUAL2_GPS" + cmd.Parameters = Array As String(B4XPages.MainPage.montoActual, B4XPages.MainPage.clientestotal, B4XPages.MainPage.clientesventa,B4XPages.MainPage.clientesvisitados,B4XPages.MainPage.lat_gps,B4XPages.MainPage.lon_gps,B4XPages.MainPage.batt,0, 0, 0,B4XPages.MainPage.ALMACEN,B4XPages.MainPage.rutapreventa ) + reqManager.ExecuteCommand(cmd , "update_gps") + Next + End If + c.Close + + ' ENVIO DE LOS CODIGOS QR +' 'c=skmt.ExecQuery2("SELECT CAT_CL_NUM_SERIEFISICO,CAT_CL_CODIGO ,CAT_CL_LONG,CAT_CL_LAT, CAT_CL_FOTO FROM kmt_info where CAT_CL_NUM_SERIEFISICO = ?", Array As String("OK")) +' c=B4XPages.MainPage.skmt.ExecQuery("SELECT CODIGOKMTS, CODIGOB, LAT, LON FROM HIST_CODIGO_BARRAS" ) +' If c.RowCount>0 Then +' For i=0 To c.RowCount -1 +' c.Position=i +' Dim cmd As DBCommand +' cmd.Initialize +' cmd.Name = "insert_QR_2_IZCA" +' cmd.Parameters = Array As Object(C.GetString("CODIGOKMTS"),C.GetString("CODIGOB"),C.GetString("LON"),C.GetString("LAT"),ALMACEN,l_ruta.text ) +' reqManager.ExecuteCommand(cmd , "ins_QR") +' Next +' End If +' c.Close + +' c=B4XPages.MainPage.skmt.ExecQuery("SELECT CAT_CL_NUM_SERIEFISICO, CAT_CL_CODIGO, CAT_CL_LONG, CAT_CL_LAT, CAT_CL_FOTO FROM kmt_info where CAT_CL_NUM_SERIEFISICO IS NOT NULL") +' If c.RowCount>0 Then +' For i=0 To c.RowCount -1 +' c.Position=i +' 's=skmt.ExecQuery2("SELECT HIST_VI_IMAGEN FROM HIST_VISITAS WHERE HIST_VI_CREDITO =?", Array As String (c.GetString("HIST_VI_CREDITO"))) +' 's.Position =0 +' foto1 = c.GetBlob("CAT_CL_FOTO") +' Dim cmd As DBCommand +' cmd.Initialize +' cmd.Name = "insert_QR_IZCA" +' cmd.Parameters = Array As Object(C.GetString("CAT_CL_NUM_SERIEFISICO"),C.GetString("CAT_CL_CODIGO"),C.GetString("CAT_CL_LONG"),C.GetString("CAT_CL_LAT"),ALMACEN,l_ruta.text ) +' reqManager.ExecuteCommand(cmd , "ins_QR") +' Next +' End If +' c.Close + +' 'Envio de Pagares +' c=B4XPages.MainPage.skmt.ExecQuery("SELECT * FROM PAGARES") +' If c.RowCount>0 Then +' For i=0 To c.RowCount -1 +' c.Position=i +' Dim cmd As DBCommand +' cmd.Initialize +' cmd.Name = "insert_pagares_IZCA" +' cmd.Parameters = Array As Object(C.GetString("PA_ALMACEN"),Subs.traeRuta2(c.GetString("PA_CLIENTE")),C.GetString("PA_FECHA"),C.GetString("PA_CAPTURA"),C.GetString("PA_MONTO"),C.GetString("PA_USUARIO"),C.GetString("PA_CLIENTE") ) +' reqManager.ExecuteCommand(cmd , "ins_pagares") +' Next +' End If +' c.Close +' +' 'ABONOS +' Dim ab As Cursor = B4XPages.MainPage.skmt.ExecQuery($"SELECT * from ABONOS where a_enviado is null"$) +' Log(ab.RowCount) +' If ab.RowCount > 0 Then +' For i=0 To ab.RowCount -1 +' ab.Position = i +' Dim cmd As DBCommand +' cmd.Initialize +' cmd.Name = "insert_abono_IZCA" +' cmd.Parameters = Array As Object( ab.GetString("a_usuario"), ab.GetString("a_ruta"), ab.GetString("a_cliente"), ab.GetString("a_abono"), ab.GetString("a_fecha"),ALMACEN ) +' reqManager.ExecuteCommand(cmd , $"ins_abonosPendientes_${ab.GetString("a_cliente")}"$) +' Log($"ins_abonosPendientes_${ab.GetString("a_cliente")}"$) +' Next +' End If +' ab.Close + + ' CLIENTES NUEVOS +' Dim fotocn() As Byte +' Dim Dirp As String = File.DirInternal +' Dim Dir As String +' Dim Dir2 As String +' Dir = "/promotoriakmts" + + c=Starter.skmt.ExecQuery("SELECT CN_ID, CN_FECHA , CN_USER, CN_LAT, CN_LON, CN_NOMBRE, CN_DIRECCION, CN_FOTO, CN_ALMACEN, CN_RUTA, CN_GIRO, CN_SOLICITA, CN_COLONIA, CN_TELEFONO, CN_CP FROM CLIENTES_NUEVOS") + If c.RowCount>0 Then + For i = 0 To c.RowCount - 1 + c.Position = i + Dim dia As Int = DateTime.GetDayOfWeek(DateTime.Now) + If dia = 2 Then + Dim dialetra As String = "LUNES" + Else If dia = 3 Then + Dim dialetra As String = "MARTES" + Else If dia = 4 Then + Dim dialetra As String = "MIERCOLES" + Else If dia = 5 Then + Dim dialetra As String = "JUEVES" + Else If dia = 6 Then + Dim dialetra As String = "VIERNES" + Else If dia = 7 Then + Dim dialetra As String = "SABADO" + End If + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_clientesnuevos_IZCA4" + Log(c.GetString("CN_ID")&" ,"& c.GetString("CN_FECHA")&" ,"& c.GetString("CN_USER")&" ,"& c.GetString("CN_LAT")&" ,"& c.GetString("CN_LON")&" ,"& c.GetString("CN_NOMBRE")&" ,"& c.GetString("CN_DIRECCION")&" ,"&ALMACEN& c.GetString("CN_RUTA")&" ,"& "En espera"&c.GetString("CN_GIRO")&" ,"&dialetra& c.GetString("CN_SOLICITA")&" ,"& c.GetString("CN_COLONIA")&" ,"& c.GetString("CN_TELEFONO")) + cmd.Parameters = Array As Object(c.GetString("CN_ID"), c.GetString("CN_FECHA"), c.GetString("CN_USER"), c.GetString("CN_LAT"), c.GetString("CN_LON"), c.GetString("CN_NOMBRE"), c.GetString("CN_DIRECCION"),ALMACEN, c.GetString("CN_RUTA"), "En espera",c.GetString("CN_GIRO"),dialetra, c.GetString("CN_SOLICITA"), c.GetString("CN_COLONIA"), c.GetString("CN_TELEFONO"), c.GetString("CN_CP").As(String).SubString2(0,5)) + reqManager.ExecuteCommand(cmd , "inst_clientesn") + Next + End If + c.Close + +' c=B4XPages.MainPage.skmt.ExecQuery("SELECT HE_CLIE, HE_RES, HE_FECHA, HE_TIPO FROM HIST_ENCUESTA") +' If c.RowCount>0 Then +' For i=0 To c.RowCount -1 +' c.Position=i +' Dim cmd As DBCommand +' cmd.Initialize +' cmd.Name = "insert_encuesta_INTMEX" +' cmd.Parameters = Array As Object(C.GetString("HE_CLIE"),C.GetString("HE_RES"),C.GetString("HE_FECHA"), c.GetString("HE_TIPO")) +' reqManager.ExecuteCommand(cmd , "inst_noventa") +' Next +' End If +' c.Close + + ' PEDIDO_CLIENTE + Dim PCNoArts As String + Dim PCMonto As String + c = B4XPages.MainPage.skmt.ExecQuery("SELECT PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT, PC_COSTO_SIN, PC_RUTA, PC_ALMACEN, PC_FACTURA FROM PEDIDO_CLIENTE WHERE PC_CLIENTE <> '1' ") + d = B4XPages.MainPage.skmt.ExecQuery("SELECT COUNT(*) as CUANTOS_PEDIDOSC FROM PEDIDO_CLIENTE WHERE PC_CLIENTE <> 1 ") + If c.RowCount > 0 Then + For i = 0 To c.RowCount - 1 + c.Position = i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_pedidos_IZCA" + PCNoArts = c.GetString("PC_NOART") + PCMonto = c.GetString("PC_MONTO") + cmd.Parameters = Array As Object(c.GetString("PC_CLIENTE"), c.GetString("PC_FECHA"), c.GetString("PC_USER"), c.GetString("PC_NOART"), c.GetString("PC_MONTO"), c.GetString("PC_LON"), c.GetString("PC_LAT"), ALMACEN, Subs.traeRuta2(c.GetString("PC_CLIENTE")), c.GetString("PC_COSTO_SIN"), c.GetString("PC_FACTURA")) + reqManager.ExecuteCommand(cmd , "ins_pedidos") + Log(">>>>>> INSERT PEDIDO_CLIENTE") + Next + End If + c.Close + d.Position = 0 + cuantos_pedidosc = d.GetString("CUANTOS_PEDIDOSC") + d.Close + + ' PEDIDO + c = B4XPages.MainPage.skmt.ExecQuery("SELECT PE_CEDIS,PE_COSTO_TOT,PE_COSTOU,PE_CANT,PE_PRONOMBRE,PE_PROID,PE_CLIENTE,PE_FECHA,PE_USUARIO, PE_COSTO_SIN, PE_RUTA, PE_DESC, PE_FOLIO, PE_CANTC, PE_BCAJAS FROM PEDIDO WHERE PE_FOLIO <> 'RECARGA'") + d = B4XPages.MainPage.skmt.ExecQuery("SELECT COUNT(*) as CUANTOS_PEDIDO FROM PEDIDO") + If c.RowCount > 0 Then + For i = 0 To c.RowCount - 1 + c.Position = i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_pedido5_IZCA" 'CON TOTALES INCLUIDOS +' Log(c.GetString("PE_CEDIS")&", "&ALMACEN&", "&c.GetString("PE_COSTO_TOT")&", "&c.GetString("PE_COSTOU")&", "&c.GetString("PE_CANT")&", "&c.GetString("PE_PRONOMBRE")&", "&c.GetString("PE_PROID")&", "&c.GetString("PE_CLIENTE")&", "&c.GetString("PE_FECHA")&", "&c.GetString("PE_USUARIO")&", "&Subs.traeRuta2(c.GetString("PE_CLIENTE"))&", "& c.GetString("PE_COSTO_SIN")&", "&c.GetString("PE_DESC")&", "&c.GetString("PE_FOLIO")&", "& ALMACEN) + If c.GetString("PE_FOLIO") = "PREVENTA_CONTADO" Then + cmd.Parameters = Array As Object(c.GetString("PE_CEDIS"),ALMACEN,c.GetString("PE_COSTO_TOT"),c.GetString("PE_COSTOU"),c.GetString("PE_CANT"),c.GetString("PE_PRONOMBRE"),c.GetString("PE_PROID"),c.GetString("PE_CLIENTE"),c.GetString("PE_FECHA"),c.GetString("PE_USUARIO"),Subs.traeRuta2(c.GetString("PE_CLIENTE")), c.GetString("PE_COSTO_SIN"),c.GetString("PE_DESC"),"PREVENTA",0) + Else If c.GetString("PE_FOLIO") = "PREVENTA_CREDITO" Then + cmd.Parameters = Array As Object(c.GetString("PE_CEDIS"),ALMACEN,c.GetString("PE_COSTO_TOT"),c.GetString("PE_COSTOU"),c.GetString("PE_CANT"),c.GetString("PE_PRONOMBRE"),c.GetString("PE_PROID"),c.GetString("PE_CLIENTE"),c.GetString("PE_FECHA"),c.GetString("PE_USUARIO"),Subs.traeRuta2(c.GetString("PE_CLIENTE")), c.GetString("PE_COSTO_SIN"),c.GetString("PE_DESC"),"PREVENTA",1) + Else If c.GetString("PE_FOLIO") = "ABORDO" Then + cmd.Parameters = Array As Object(c.GetString("PE_CEDIS"),ALMACEN,c.GetString("PE_COSTO_TOT"),c.GetString("PE_COSTOU"),c.GetString("PE_CANT"),c.GetString("PE_PRONOMBRE"),c.GetString("PE_PROID"),c.GetString("PE_CLIENTE"),c.GetString("PE_FECHA"),c.GetString("PE_USUARIO"),Subs.traeRuta2(c.GetString("PE_CLIENTE")), c.GetString("PE_COSTO_SIN"),c.GetString("PE_DESC"),"ABORDO",0) + Else If c.GetString("PE_FOLIO") = "RECARGA" Then + cmd.Parameters = Array As Object(c.GetString("PE_CEDIS"),ALMACEN,c.GetString("PE_COSTO_TOT"),c.GetString("PE_COSTOU"),c.GetString("PE_CANT"),c.GetString("PE_PRONOMBRE"),c.GetString("PE_PROID"),c.GetString("PE_CLIENTE"),c.GetString("PE_FECHA"),c.GetString("PE_USUARIO"),Subs.traeRuta2(c.GetString("PE_CLIENTE")), c.GetString("PE_COSTO_SIN"),c.GetString("PE_DESC"),"RECARAGA",0) + Else + cmd.Parameters = Array As Object(c.GetString("PE_CEDIS"),ALMACEN,c.GetString("PE_COSTO_TOT"),c.GetString("PE_COSTOU"),c.GetString("PE_CANT"),c.GetString("PE_PRONOMBRE"),c.GetString("PE_PROID"),c.GetString("PE_CLIENTE"),c.GetString("PE_FECHA"),c.GetString("PE_USUARIO"),Subs.traeRuta2(c.GetString("PE_CLIENTE")), c.GetString("PE_COSTO_SIN"),c.GetString("PE_DESC"),"VENTA",0) + End If + reqManager.ExecuteCommand(cmd , $"ins_pedidosPendientes_prods_${c.GetString("PE_CLIENTE")}_${c.GetString("PE_PROID")}"$) + Next + End If + c.Close + d.Position=0 + cuantos_pedido = D.GetString("CUANTOS_PEDIDO") + d.Close + + ' NOVENTA + c=B4XPages.MainPage.skmt.ExecQuery("SELECT NV_CLIENTE,NV_FECHA,NV_USER,NV_MOTIVO,NV_COMM,NV_LAT,NV_LON FROM NOVENTA") + D=B4XPages.MainPage.skmt.ExecQuery("SELECT COUNT(*) AS CUANTOS_NOVENTA FROM NOVENTA") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_noventa_IZCA" + cmd.Parameters = Array As Object(C.GetString("NV_CLIENTE"),C.GetString("NV_FECHA"),C.GetString("NV_USER"),C.GetString("NV_MOTIVO"),C.GetString("NV_COMM"),C.GetString("NV_LAT"),C.GetString("NV_LON"), ALMACEN, Subs.traeRuta2(c.GetString("NV_CLIENTE"))) + reqManager.ExecuteCommand(cmd , "inst_noventa") + Next + End If + c.Close + d.Position=0 + cuantos_noventa = D.GetString("CUANTOS_NOVENTA") + d.Close + + ' GEO CERCA + c=B4XPages.MainPage.skmt.ExecQuery("Select HGCLIENTE, HGDATE, HGLAT, HGLON from HIST_GEOCERCA") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_geocerca_IZCA" + cmd.Parameters = Array As Object(C.GetString("HGCLIENTE"),C.GetString("HGDATE"),C.GetString("HGLAT"),C.GetString("HGLON")) + reqManager.ExecuteCommand(cmd , "inst_noventa") + Next + End If + c.Close + + ' Cambio ubicaciones + c=B4XPages.MainPage.skmt.ExecQuery("Select CAT_CL_LAT, CAT_CL_LONG, CAT_CL_CODIGO, CAT_CL_BCOORDENADAS from kmt_info where CAT_CL_BCOORDENADAS <> 0") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "update_coordenadas_IZCA" + cmd.Parameters = Array As Object(C.GetString("CAT_CL_LAT"),C.GetString("CAT_CL_LONG"),C.GetString("CAT_CL_BCOORDENADAS"),C.GetString("CAT_CL_CODIGO"),ALMACEN,Subs.traeRuta2(C.GetString("CAT_CL_CODIGO"))) + reqManager.ExecuteCommand(cmd , "up_coordenadas") + Next + End If + c.Close + + 'TABULADOR + c = Starter.skmt.ExecQuery("SELECT VEINTE, DIEZ, CINCO, DOS, PESO, CENTAVO, TOTAL FROM TABULADOR_MONEDAS") + d = Starter.skmt.ExecQuery("SELECT RUTAA FROM RUTAA") + b = Starter.skmt.ExecQuery("SELECT ID_ALMACEN FROM CAT_ALMACEN") +' f = Starter.skmt.ExecQuery("SELECT HVD_FECHA FROM HIST_VENTAS") + d.Position = 0 + b.Position = 0 + f.Position = 0 + If c.RowCount > 0 Then + For i = 0 To c.RowCount - 1 + c.Position=i + Dim cmd As DBCommand + + Dim sDate,sTime As String + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + +' Dim fechatabulador() As String = Regex.Split(" ", f.GetString("HVD_FECHA")) +' Dim fechatabulador2() As String = Regex.Split("-", fechatabulador(0)) +' Dim fechatabulador3 As String = fechatabulador2(1)&"/"&fechatabulador2(2)&"/"&fechatabulador2(0) + cmd.Initialize + cmd.Name = "insert_tabulador_monedas_IZCA2" + cmd.Parameters = Array As Object(d.GetString("RUTAA"), b.GetString("ID_ALMACEN"),c.GetString("VEINTE"),c.GetString("DIEZ"),c.GetString("CINCO"),c.GetString("DOS"),c.GetString("PESO"),c.GetString("CENTAVO"),sDate, "PREVENTA") + reqManager.ExecuteCommand(cmd , "ins_tabulador_mon") + Next + c.Close + d.Close + b.Close + f.Close + End If + + c = Starter.skmt.ExecQuery("SELECT MIL, QUINIENTOS, DOCIENTOS, CIEN, CINCUENTA, VEINTE FROM TABULADOR_BILLETES") + d = Starter.skmt.ExecQuery("SELECT RUTAA FROM RUTAA") + b = Starter.skmt.ExecQuery("SELECT ID_ALMACEN FROM CAT_ALMACEN") +' f = Starter.skmt.ExecQuery("SELECT HVD_FECHA FROM HIST_VENTAS") + d.Position = 0 + b.Position = 0 + f.Position = 0 + If c.RowCount > 0 Then + For i = 0 To c.RowCount - 1 + c.Position=i + Dim cmd As DBCommand + + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + +' Dim fechatabulador() As String = Regex.Split(" ", f.GetString("HVD_FECHA")) +' Dim fechatabulador2() As String = Regex.Split("-", fechatabulador(0)) +' Dim fechatabulador3 As String = fechatabulador2(1)&"/"&fechatabulador2(2)&"/"&fechatabulador2(0) + cmd.Initialize + cmd.Name = "insert_tabulador_billetes_IZCA2" + cmd.Parameters = Array As Object(b.GetString("ID_ALMACEN"), d.GetString("RUTAA"),c.GetString("MIL"),c.GetString("QUINIENTOS"),c.GetString("DOCIENTOS"),c.GetString("CIEN"),c.GetString("CINCUENTA"),c.GetString("VEINTE"),sDate, "PREVENTA") + reqManager.ExecuteCommand(cmd , "ins_tabulador_bill") + Next + c.Close + d.Close + b.Close + f.Close + End If + 'FIN TABULADOR + + ' DROP + t1.Initialize("T1", 30000) ' 1000 = 1 second + t1.Enabled = True + Dim sDate,sTime As String + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + Dim cmd As DBCommand + cmd.Initialize + cmd.Name ="insert_drop_IZCA" + cmd.Parameters = Array As Object(usuario,l_ruta.Text,sDate & sTime, l_porvisitar.Text,l_drop.Text,l_efectiva.Text,l_cuantosc.Text,l_cuantosn.Text, L_MONTOD.Text,"ENVIO",ALMACEN,Application.VersionName) + reqManager.ExecuteCommand(cmd , "inst_noventa") + img2.Visible =True + PORCENTAJE = Round(100/ (cuantos_noventa + cuantos_pedido + cuantos_pedidosc + 1)) + If Starter.marcaCel <> "Sony" Then ToastMessageShow("Se Actualizaran los datos, Este proceso podria tardar hasta un minuto, gracias "& l_ruta.text , True) + +' 'CUESTIONARIOS +' c = B4XPages.MainPage.skmt.ExecQuery($"select * from cuestionario"$) +' Private rutaActual As String = Subs.traeRuta +' If c.RowCount > 0 Then +' For x = 0 To c.RowCount - 1 +' c.Position = x +' Dim cmd As DBCommand +' cmd.Initialize +' cmd.Name = "insert_CUESTIONARIO_INTMEX" +' cmd.Parameters = Array As Object(c.GetString("Q_IDCLIENTE"), rutaActual, ALMACEN, c.GetString("Q_FECHA"), c.GetString("Q_IDPREGUNTA"), c.GetString("Q_PREGUNTA"), c.GetString("Q_IDRESPUESTA"), C.GetString("Q_RESPUESTA")) +' reqManager.ExecuteCommand(cmd , "ins_cuestionario") +' Next +' End If +' c.Close + + +' c = B4XPages.MainPage.skmt.ExecQuery("SELECT * FROM PEDIDO_CLIENTE WHERE PC_CLIENTE <> 01") +' If c.RowCount > 0 Then +' For i = 0 To c.RowCount - 1 +' c.Position = i +' Dim cmd As DBCommand +' cmd.Initialize +' cmd.Name = "select_piezas_IZCA" +' cmd.Parameters = Array As Object(c.GetString("PC_CLIENTE"), ALMACEN,l_ruta.Text) +' userpiezas = c.GetString("PC_CLIENTE") +' reqManager.ExecuteQuery(cmd , 0, "piezas") +' Next +' +' End If + + End If +End Sub + + +Sub cargar_Click + Dim pedidodiaanterior As Boolean = False + Dim cp As Cursor = B4XPages.MainPage.skmt.ExecQuery("select * from PEDIDO") + If cp.RowCount > 0 Then + cp.Position = 0 + Private fecha As String = cp.GetString("PE_FECHA") + Dim fecha2() As String = Regex.Split("/",fecha) + Dim dia As String = fecha2(1) + Log(dia) + Dim dia2 As String = DateTime.GetDayOfMonth(DateTime.Now) + Log(dia & " , " & dia2) + If dia < dia2 Then + pedidodiaanterior = True + End If + End If + If Not (pedidodiaanterior) Then + CARGA = "CARGAR" + p_mandaInfo.Width = Root.Width + p_mandaInfo.Height = Root.Height + P1.Left = (p_mandaInfo.Width/2) - (P1.Width/2) + P1.top = (p_mandaInfo.Height/2) - (P1.Height/2) + img2.Visible =True + L_P_1.Visible = True + S_CC.Visible = True + Btn_Ubicar.Visible=False + P1.Visible = True + p_mandaInfo.Visible = True + p_principal.Visible = False + Subs.panelVisible(P1, 0, 0) + Subs.centraPanel(P1, Root.Width) + Subs.centraPanelV(P1, Root.Height) +' trabajar.Visible = False + NUEVO.Visible =False + BUSCA.Visible=False + connecta.Visible=False + L_P_3.Visible = True + S_CH.Visible = True + PB1.Visible = True + Resumen.Visible= False + + L_P_1.Text = "Catalogo de Clientes" + L_P_2.Text = "Catalogos de Productos" + L_P_3.Text = "Catalogos Historicos" + S_CC.Text = "EN PROCESO" + S_CH.Text = "EN PROCESO" + S_CP.Text = "EN PROCESO" + PB1.Progress = 0 + PB2.Progress = 0 + EJECUTANDO = 1 + + 'c=skmt.ExecQuery("CREATE TABLE kmt_info (pr_cd_credito NUMERIC,pr_cd_nombre TEXT,pr_cd_calle TEXT,pr_cd_numero TEXT,pr_cd_num_int TEXT,pr_cd_entrecalle1 TEXT,pr_cd_entrecalle2 TEXT,pr_cd_colonia TEXT,pr_cd_poblacion TEXT,pr_cd_edo TEXT,pr_cd_cp TEXT,pr_cd_zona TEXT,pr_cf_credito NUMERIC,pr_cf_saldotot NUMERIC,pr_cf_saldooper NUMERIC,pr_cf_saldof1 NUMERIC, pr_cf_penalizacion NUMERIC)") + TOPE = 0 + ' NUEVOS CLIENTE + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM RUTA_SUPLENCIA") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM RUTAA") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM GEOCERCA") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM COORDS_ALMACEN") + B4XPages.MainPage.skmt.ExecNonQuery("delete from CLIENTE_NUEVO") + B4XPages.MainPage.skmt.ExecNonQuery("delete from kmt_info") + B4XPages.MainPage.skmt.ExecNonQuery("delete from kmt_info2") + B4XPages.MainPage.skmt.ExecNonQuery("delete from cod_result") + B4XPages.MainPage.skmt.ExecNonQuery("delete from hist_gest") + B4XPages.MainPage.skmt.ExecNonQuery("delete from cat_gunaprod") + B4XPages.MainPage.skmt.ExecNonQuery("delete from cat_gunaprod2") + B4XPages.MainPage.skmt.ExecNonQuery("delete from cat_gunaprod3") + B4XPages.MainPage.skmt.ExecNonQuery("delete from cat_gunaprod4") + B4XPages.MainPage.skmt.ExecNonQuery("delete from CAT_DETALLES_PAQ") + B4XPages.MainPage.skmt.ExecNonQuery("delete from telefonos") + B4XPages.MainPage.skmt.ExecNonQuery("delete from HIST_VENTAS") + B4XPages.MainPage.skmt.ExecNonQuery("delete from HIST_PROMOS") + B4XPages.MainPage.skmt.ExecNonQuery("delete from HIST_CLIENTE_CANT_PROMOS") + B4XPages.MainPage.skmt.ExecNonQuery("delete from PROMOS_COMP") + B4XPages.MainPage.skmt.ExecNonQuery("delete from CAT_VERIFICACION") + Starter.skmt.ExecNonQuery("delete from CAT_GIRO") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM MARCAS_RUTAS") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_STAY_STORE") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_GEOCERCA") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_MARCAS_CUOTAS") +' B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_AVANCE") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM ABONOSP") + + c = B4XPages.MainPage.skmt.ExecQuery2("select count(CAT_VA_DESCRIPCION) as HoraIngreso from cat_variables where CAT_VA_DESCRIPCION = ? ", Array As String("HoraIngreso")) + c.Position = 0 + DateTime.TimeFormat = "HHmmss" + 'Valida si ya se cuenta con hora actualiza el valor si no lo inserta----------- + If c.GetString("HoraIngreso") > 0 Then + B4XPages.MainPage.skmt.ExecNonQuery2("Update cat_variables set CAT_VA_VALOR = ? WHERE CAT_VA_DESCRIPCION = ?" , Array As String(DateTime.Time(DateTime.Now),"HoraIngreso")) + Else + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_VALOR,CAT_VA_DESCRIPCION) VALUES (?,?)" , Array As String(DateTime.Time(DateTime.Now),"HoraIngreso")) + End If + c.Close + DateTime.TimeFormat = "HH:mm:ss" + c=B4XPages.MainPage.skmt.ExecQuery("select usuario from usuarioa") + c.Position = 0 + usuario = c.GetString("USUARIO") + c.Close +' + Dim sDate,sTime As String + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + + Dim P As PhoneId +' imei = P.GetDeviceId + imei = "xxxx" + cmd.Initialize + cmd.Name ="insert_drop_IZCA" + cmd.Parameters = Array As Object(usuario,e_ruta.text,sDate,imei,sTime,"","","","","CARGA",ALMACEN,Application.VersionName) + 'usuario,l_ruta.Text,sDate & sTime, l_porvisitar.Text,l_drop.Text,l_efectiva.Text,l_cuantosc.Text,l_cuantosn.Text, L_MONTOD.Text,"ENVIO",ALMACEN,Application.VersionName + reqManager.ExecuteCommand(cmd , "inst_noventa") + + cmd.Initialize + cmd.Name = "select_cat_gunaprod_IZCA" + cmd.Parameters = Array As Object(ALMACEN) + reqManager.ExecuteQuery(cmd , 0, "gunaprod") + + cmd.Initialize + cmd.Name = "select_cat_gunaprod2_IZCA" + cmd.Parameters = Array As Object(ALMACEN,e_ruta.Text) + reqManager.ExecuteQuery(cmd , 0, "gunaprod2") + + cmd.Initialize + cmd.Name = "select_GEOCERCA_IZCA" + cmd.Parameters = Array As Object(ALMACEN) + reqManager.ExecuteQuery(cmd , 0, "GEOCERCA") + + cmd.Initialize + cmd.Name = "select_coords_almacen_IZCA" + cmd.Parameters = Array As Object(ALMACEN) + reqManager.ExecuteQuery(cmd , 0, "coords_almacen") + + cmd.Initialize + cmd.Name = "select_cat_gunaprod3_IZCA" + cmd.Parameters = Array As Object(ALMACEN,e_ruta.Text) + reqManager.ExecuteQuery(cmd , 0, "gunaprod3") + + cmd.Initialize + cmd.Name = "select_cat_GIRO_IZCA" + reqManager.ExecuteQuery(cmd , 0, "giro") + +' cmd.Initialize +' cmd.Name = "select_resum_apk_INTMEX" ''' va el nombre de archivo de config +' cmd.Parameters = Array As Object(ALMACEN) +' reqManager.ExecuteQuery(cmd , 0, "resum_apk") ''' donde regresa la info ver job_done + + cmd.Initialize + cmd.Name = "select_cat_paquetes_IZCA" + cmd.Parameters = Array As Object(ALMACEN) + reqManager.ExecuteQuery(cmd , 0, "gunaprodp") +' Log("ALMACEN = " & ALMACEN) + + cmd.Initialize + cmd.Name = "select_cat_paquetess_IZCA" + cmd.Parameters = Array As Object(ALMACEN) + reqManager.ExecuteQuery(cmd , 0, "gunaprodp") + + cmd.Initialize + cmd.Name = "select_cat_detallepa_IZCA" + cmd.Parameters = Array As Object(ALMACEN) + reqManager.ExecuteQuery(cmd , 0, "detallepaq") + + cmd.Initialize + cmd.Name = "select_cat_clientes_IZCA" + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) + reqManager.ExecuteQuery(cmd , 0, "kmt_datos") + + cmd.Initialize + cmd.Name = "select_cat_clientes_todos_IZCA" + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) + reqManager.ExecuteQuery(cmd , 0, "kmt_datos_todos") + + cmd.Initialize + cmd.Name = "select_hist_datos_IZCA" + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN,e_ruta.text, ALMACEN) + reqManager.ExecuteQuery(cmd , 0, "hist_datos") + + cmd.Initialize + cmd.Name = "select_hist_promos_IZCA" + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) + reqManager.ExecuteQuery(cmd , 0, "hist_promos") + +' cmd.Initialize +' cmd.Name = "select_clientes_cuestionario_IZCA" +' cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) +' reqManager.ExecuteQuery(cmd , 0, "clientes_cuestionario") + + cmd.Initialize + cmd.Name = "select_hist_cliente_promos_IZCA" + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) + reqManager.ExecuteQuery(cmd , 0, "hist_cliente_promos") + + cmd.Initialize + cmd.Name = "select_nom_user_IZCA" + cmd.Parameters = Array As Object(usuario) + reqManager.ExecuteQuery(cmd , 0, "nom_user") + + cmd.Initialize + cmd.Name = "select_telefono_IZCA" + cmd.Parameters = Array As Object(usuario) + reqManager.ExecuteQuery(cmd , 0, "telefono") + + +' cmd.Initialize +' cmd.Name = "select_HIST_MARCAS_CUOTAS_INTMEX" +' cmd.Parameters = Array As Object( ALMACEN, e_ruta.text) +' reqManager.ExecuteQuery(cmd , 0, "HIST_MARCAS_CUOTAS") + + If E_RUTA2.text <> "" Then + +' B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO RUTA_SUPLENCIA(RS_RUTA) VALUES(?)",Array As String(E_RUTA2.Text)) + + E_RUTA2.Visible = False + Panel11.Visible = False + + cmd.Initialize + cmd.Name = "select_cat_clientes_IZCA" + cmd.Parameters = Array As Object(E_RUTA2.text, ALMACEN) + reqManager.ExecuteQuery(cmd , 0, "kmt_datos") + + cmd.Initialize + cmd.Name = "select_cat_clientes_todos_IZCA" + cmd.Parameters = Array As Object(E_RUTA2.text, ALMACEN) + reqManager.ExecuteQuery(cmd , 0, "kmt_datos_todos") + + cmd.Initialize + cmd.Name = "select_hist_datos_IZCA" + cmd.Parameters = Array As Object(E_RUTA2.text, ALMACEN) + reqManager.ExecuteQuery(cmd , 0, "hist_datos") + + cmd.Initialize + cmd.Name = "select_hist_promos_IZCA" + cmd.Parameters = Array As Object(E_RUTA2.text, ALMACEN) + reqManager.ExecuteQuery(cmd , 0, "hist_promos") + + cmd.Initialize + cmd.Name = "select_hist_cliente_promos_IZCA" + cmd.Parameters = Array As Object(E_RUTA2.text, ALMACEN) + reqManager.ExecuteQuery(cmd , 0, "hist_cliente_promos") + End If + + cmd.Initialize + cmd.Name = "select_promo_comp_IZCA" + cmd.Parameters = Array As Object(ALMACEN) + reqManager.ExecuteQuery(cmd , 0, "hist_comp_promos") + +' cmd.Initialize +' cmd.Name = "select_verificacion_INTMEX" +' cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) +' reqManager.ExecuteQuery(cmd , 0, "cat_verificacion") + + cmd.Initialize + cmd.Name = "select_fecha" + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) + reqManager.ExecuteQuery(cmd , 0, "fecha") + + cmd.Initialize + cmd.Name = "select_folio_IZCA" + cmd.Parameters = Array As Object(ALMACEN, e_ruta.text) + reqManager.ExecuteQuery(cmd , 0, "folio") + +' cmd.Initialize +' cmd.Name = "select_abonosp_IZCA" +' cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) +' reqManager.ExecuteQuery(cmd , 0, "select_abonosp") + + cmd.Initialize + cmd.Name = "select_marcas_rutas_IZCA" + cmd.Parameters = Array As Object( ALMACEN, e_ruta.text) + reqManager.ExecuteQuery(cmd , 0, "marcas_rutas") + +' cmd.Initialize +' cmd.Name = "select_CUEST_INTMEX" +' cmd.Parameters = Array As Object(ALMACEN) +' reqManager.ExecuteQuery(cmd , 0, "CUESTIONARIO") + +' cmd.Initialize +' cmd.Name = "select_HIST_CUOTAS_INTMEX" +' cmd.Parameters = Array As Object( ALMACEN,e_ruta.text ) +' reqManager.ExecuteQuery(cmd , 0, "CUOTAS") + +' cmd.Initialize +' cmd.Name = "select_comis_cedex_IZCA" +' cmd.Parameters = Array As Object( ALMACEN, e_ruta.text ) +' reqManager.ExecuteQuery(cmd , 0, "COMISIONES") + +' cmd.Initialize +' cmd.Name = "select_hist_avance_IZCA" 'select * from HIST_AVANCE_MESACTUAL where HIST_AM_RUTA = ? and HIST_AM_IDALMACEN order by HIST_AM_MARCA +' cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) +' LogColor($"HIST_AVANCE Ruta=|${e_ruta.text}|, almacen=|${ALMACEN}|"$, Colors.Red) +' reqManager.ExecuteQuery(cmd , 0, "hist_avance") + + cargar.Visible = False + Subir.Visible = False + inv.Visible = False + If Starter.marcaCel <> "Sony" Then ToastMessageShow("Se Actualizaran los datos, Este proceso podria tardar hasta un minuto, gracias" , True) + Else +' Log("XXXX") + MsgboxAsync("Para poder cargar día no puedes tener venta del día anterior. Por favor haz FIN DIA e intenta nuevamente.","Atención") + End If +End Sub + +Sub JobDone(Job As HttpJob) + Log("JOBDONE PRINCIPAL") + If reqManager.reqsList.IsInitialized Then 'Si tenemos lista de requests, la procesamos. + If reqManager.reqsList.IndexOf(Job.tag) <> -1 Then + reqManager.reqsList.RemoveAt(reqManager.reqsList.IndexOf(Job.tag)) + LogColor($">>>>>> Quitamos ${Job.tag}"$, Colors.Blue) + End If + LogColor(">>>>>> " & reqManager.reqsList.Size & " - " & reqManager.reqsList, Colors.Blue) + End If + If Job.Success = False Then + Log("ERROR") + LogColor("Error: " & Job.tag & " : " & Job.ErrorMessage, Colors.red) + Log("ex") +' Log(2) +' Job.Release + Else 'If Job Success then ... +' Log(3) + LogColor("JobDone: '" & reqManager.HandleJob(Job).tag & "' - Registros: " & reqManager.HandleJob(Job).Rows.Size, Colors.RGB(0,160,0)) 'Mod por CHV - 211027 + 'Verificamos que el usuario guardado en BD sea VALIDO. + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = reqManager.HandleJob(Job) + If RESULT.Tag = "update_gps" Then + For Each records() As Object In RESULT.Rows + Log("==========================REGISTROS="&RESULT.Rows) + For Each k As String In RESULT.Columns.Keys + Log(RESULT.Tag & ": " & k & ": " & records(RESULT.Columns.Get(k))) + Next + Next + End If + If RESULT.Tag = "ins_pedidos" Then + For Each records() As Object In RESULT.Rows + Log("==========================REGISTROS="&RESULT.Rows) + For Each k As String In RESULT.Columns.Keys + Log(RESULT.Tag & ": " & k & ": " & records(RESULT.Columns.Get(k))) + Next + Next + End If + If RESULT.Tag = "usuarioA" Then 'query tag + Private n As String = "Sin Usuario" + For Each records() As Object In RESULT.Rows + n = records(RESULT.Columns.Get("USUARIO")) + Next + LogColor("**************************"&n, Colors.Green) + If n = "OKActivo" Then + Log("Usuario guardado en BD es 'Valido'") + Else If n = "OKExpirado" Then + Msgbox("Usuario Expirado llamar al administrador","") 'ignore + B4XPages.ShowPage("B4XMainPage") + Else If n = "OKCancelado" Then + Msgbox("Usuario Cancelado llamar al administrador","") 'ignore + B4XPages.ShowPage("B4XMainPage") + Else + Msgbox("Usuario o password No validos","") 'ignore + B4XPages.ShowPage("B4XMainPage") + End If + Log("***************** "&n) + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = reqManager.HandleJob(Job) + If RESULT.Tag = "giro" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim giro As String = records(RESULT.Columns.Get("CAT_GR_DESC")) + + Starter.skmt.ExecNonQuery2("INSERT INTO CAT_GIRO(GIRO) VALUES (?)", Array As Object (giro)) + Next + If PB2.Progress = 0 Then + PB2.Progress = 30 + S_CP.Text = "CARGANDO" + ELSE If PB2.Progress = 30 Then + PB2.Progress = 60 + ELSE IF PB2.Progress = 60 Then + PB2.Progress = 100 + S_CP.Text = "LISTO" + End If + Listo3 =1 + If Listo1 =1 And Listo2 =1 And Listo3 = 1 And Listo4 = 1 Then + B4XPage_Appear + img2.Visible=False + EJECUTANDO=0 + Else If Listo4 = 1 And Listo3 = 1 And inve = 1 Then + B4XPage_Appear + img2.Visible=False + EJECUTANDO=0 + End If + + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = reqManager.HandleJob(Job) + If RESULT.Tag = "kmt_datos" Then 'query tag + S_CC.TEXT = "CARGANDO" + For Each records() As Object In RESULT.Rows + Dim CAT_CL_CODIGO As String = records(RESULT.Columns.Get("CAT_CL_CODIGO")) + Dim CAT_CL_RUTA As String = records(RESULT.Columns.Get("CAT_CL_RUTA")) + Dim CAT_CL_NOMBRE As String = records(RESULT.Columns.Get("CAT_CL_NOMBRE")) + Dim CAT_CL_ATIENDE1 As String = records(RESULT.Columns.Get("CAT_CL_ATIENDE1")) + Dim CAT_CL_ATIENTE2 As String = records(RESULT.Columns.Get("CAT_CL_ATIENTE2")) + Dim CAT_CL_TELEFONO As String = records(RESULT.Columns.Get("CAT_CL_TELEFONO")) + Dim CAT_CL_EMAIL As String = records(RESULT.Columns.Get("CAT_CL_EMAIL")) + Dim CAT_CL_CALLE As String = records(RESULT.Columns.Get("CAT_CL_CALLE")) + Dim CAT_CL_NOEXT As String = records(RESULT.Columns.Get("CAT_CL_NOEXT")) + Dim CAT_CL_NOINT As String = records(RESULT.Columns.Get("CAT_CL_NOINT")) + Dim CAT_CL_CALLE1 As String = records(RESULT.Columns.Get("CAT_CL_CALLE1")) + Dim CAT_CL_CALLE2 As String = records(RESULT.Columns.Get("CAT_CL_CALLE2")) + Dim CAT_CL_COLONIA As String = records(RESULT.Columns.Get("CAT_CL_COLONIA")) + Dim CAT_CL_MUNI As String = records(RESULT.Columns.Get("CAT_CL_MUNI")) + Dim CAT_CL_EDO As String = records(RESULT.Columns.Get("CAT_CL_EDO")) + Dim CAT_CL_CP As String = records(RESULT.Columns.Get("CAT_CL_CP")) + Dim CAT_CL_LONG As String = records(RESULT.Columns.Get("CAT_CL_LONG")) + Dim CAT_CL_LAT As String = records(RESULT.Columns.Get("CAT_CL_LAT")) + Dim CAT_CL_MTOCOMPRA As String = records(RESULT.Columns.Get("CAT_CL_MTOCOMPRA")) + Dim CAT_CL_NUM_SERIEFISICO As String = records(RESULT.Columns.Get("CAT_CL_NUM_SERIEFISICO")) + Dim CAT_CL_BCREDITO As String = records(RESULT.Columns.Get("CAT_CL_BCREDITO")) + Dim CAT_CL_LIMITECREDITO As String = records(RESULT.Columns.Get("CAT_CL_LIMITECREDITO")) + Dim CAT_CL_BCOORDENADAS As String = records(RESULT.Columns.Get("CAT_CL_BCOORDENADAS")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO kmt_info(CAT_CL_CODIGO,CAT_CL_RUTA,CAT_CL_NOMBRE,CAT_CL_ATIENDE1,CAT_CL_ATIENTE2,CAT_CL_TELEFONO,CAT_CL_EMAIL,CAT_CL_CALLE,CAT_CL_NOEXT,CAT_CL_NOINT,CAT_CL_CALLE1,CAT_CL_CALLE2,CAT_CL_COLONIA,CAT_CL_MUNI,CAT_CL_EDO,CAT_CL_CP,CAT_CL_LONG,CAT_CL_LAT,CAT_CL_MTOCOMPRA,CAT_CL_NUM_SERIEFISICO, CAT_CL_BCREDITO, CAT_CL_LIMITECREDITO, gestion,CAT_CL_BCOORDENADAS) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ,?,0,?)", Array As Object (CAT_CL_CODIGO,CAT_CL_RUTA,CAT_CL_NOMBRE,CAT_CL_ATIENDE1,CAT_CL_ATIENTE2,CAT_CL_TELEFONO,CAT_CL_EMAIL,CAT_CL_CALLE,CAT_CL_NOEXT,CAT_CL_NOINT,CAT_CL_CALLE1,CAT_CL_CALLE2,CAT_CL_COLONIA,CAT_CL_MUNI,CAT_CL_EDO,CAT_CL_CP,CAT_CL_LONG,CAT_CL_LAT,CAT_CL_MTOCOMPRA,CAT_CL_NUM_SERIEFISICO, CAT_CL_BCREDITO, CAT_CL_LIMITECREDITO,CAT_CL_BCOORDENADAS)) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_STAY_STORE(HSS_CODIGO, HSS_IN , HSS_OUT , HSS_TOT) VALUES (?,0,0,0)", Array As Object (CAT_CL_CODIGO)) + Next +' Starter.skmt.ExecNonQuery2("INSERT INTO kmt_info(CAT_CL_CODIGO,CAT_CL_RUTA,CAT_CL_NOMBRE,CAT_CL_ATIENDE1,CAT_CL_ATIENTE2,CAT_CL_TELEFONO,CAT_CL_EMAIL,CAT_CL_CALLE,CAT_CL_NOEXT,CAT_CL_NOINT,CAT_CL_CALLE1,CAT_CL_CALLE2,CAT_CL_COLONIA,CAT_CL_MUNI,CAT_CL_EDO,CAT_CL_CP,CAT_CL_LONG,CAT_CL_LAT,CAT_CL_MTOCOMPRA,CAT_CL_NUM_SERIEFISICO, gestion) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0,0,0) ",Array As Object ("0",e_ruta.TEXT, "VENTA ABORDO","null","null","null","null","null","null","null","null","null","null","null","null","NULL","null","NULL")) +' Starter.skmt.ExecNonQuery2("INSERT INTO kmt_info(CAT_CL_CODIGO,CAT_CL_RUTA,CAT_CL_NOMBRE,CAT_CL_ATIENDE1,CAT_CL_ATIENTE2,CAT_CL_TELEFONO,CAT_CL_EMAIL,CAT_CL_CALLE,CAT_CL_NOEXT,CAT_CL_NOINT,CAT_CL_CALLE1,CAT_CL_CALLE2,CAT_CL_COLONIA,CAT_CL_MUNI,CAT_CL_EDO,CAT_CL_CP,CAT_CL_LONG,CAT_CL_LAT,CAT_CL_MTOCOMPRA,CAT_CL_NUM_SERIEFISICO, gestion) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0,0,0) ",Array As Object ("1",e_ruta.TEXT, "VENTA RECARGA","null","null","null","null","null","null","null","null","null","null","null","null","NULL","null","NULL")) + Listo1 = 1 + S_CC.Text = "LISTO" + If Starter.marcaCel <> "Sony" Then ToastMessageShow("Catalogo Clientes Actualizados." , True) + If Listo1 =1 And Listo2 =1 And Listo3 = 1 And Listo4 = 1 Then + B4XPage_Appear + img2.Visible=False + EJECUTANDO=0 + End If + End If + End If + + If Job.JobName = "DBRequest" Then + Dim resultado As DBResult = reqManager.HandleJob(Job) + If resultado.Tag = "piezas" Then 'query tag +' B4XPages.MainPage.picking.cl_picking.Clear + Dim piezasexiste As Int + + For Each records() As Object In resultado.Rows + + piezasexiste = records(resultado.Columns.Get("COUNT(*)")) + Log(piezasexiste) + DateTime.DateFormat = "MM/dd/yyyy" + DateTime.TimeFormat = "HH:mm:ss" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + + If piezasexiste = 0 Then + + Dim PCNoArts As String + Dim PCMonto As String + c = B4XPages.MainPage.skmt.ExecQuery2("SELECT * FROM PEDIDO_CLIENTE WHERE PC_CLIENTE = ? AND PC_CLIENTE <> 1", Array As String(userpiezas)) + + If c.RowCount > 0 Then + c.Position = 0 + PCNoArts = c.GetString("PC_NOART") + PCMonto = c.GetString("PC_MONTO") + End If + + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_HVC_IZCA" + cmd.Parameters = Array As Object((sDate & " " & sTime), userpiezas, PCNoArts, PCMonto, ALMACEN, l_ruta.Text) + reqManager.ExecuteCommand(cmd , "insert_hvc") +' reqManager.ExecuteCommand(cmd , $"ins_abonosPendientes_${ab.GetString("a_cliente")}"$) + + End If + Next + + + End If + End If + + + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = reqManager.HandleJob(Job) + If RESULT.Tag = "kmt_datos_todos" Then 'query tag + S_CC.TEXT = "CARGANDO" + For Each records() As Object In RESULT.Rows + Dim CAT_CL_CODIGO As String = records(RESULT.Columns.Get("CAT_CL_CODIGO")) + Dim CAT_CL_RUTA As String = records(RESULT.Columns.Get("CAT_CL_RUTA")) + Dim CAT_CL_NOMBRE As String = records(RESULT.Columns.Get("CAT_CL_NOMBRE")) + Dim CAT_CL_ATIENDE1 As String = records(RESULT.Columns.Get("CAT_CL_ATIENDE1")) + Dim CAT_CL_ATIENTE2 As String = records(RESULT.Columns.Get("CAT_CL_ATIENTE2")) + Dim CAT_CL_TELEFONO As String = records(RESULT.Columns.Get("CAT_CL_TELEFONO")) + Dim CAT_CL_EMAIL As String = records(RESULT.Columns.Get("CAT_CL_EMAIL")) + Dim CAT_CL_CALLE As String = records(RESULT.Columns.Get("CAT_CL_CALLE")) + Dim CAT_CL_NOEXT As String = records(RESULT.Columns.Get("CAT_CL_NOEXT")) + Dim CAT_CL_NOINT As String = records(RESULT.Columns.Get("CAT_CL_NOINT")) + Dim CAT_CL_CALLE1 As String = records(RESULT.Columns.Get("CAT_CL_CALLE1")) + Dim CAT_CL_CALLE2 As String = records(RESULT.Columns.Get("CAT_CL_CALLE2")) + Dim CAT_CL_COLONIA As String = records(RESULT.Columns.Get("CAT_CL_COLONIA")) + Dim CAT_CL_MUNI As String = records(RESULT.Columns.Get("CAT_CL_MUNI")) + Dim CAT_CL_EDO As String = records(RESULT.Columns.Get("CAT_CL_EDO")) + Dim CAT_CL_CP As String = records(RESULT.Columns.Get("CAT_CL_CP")) + Dim CAT_CL_LONG As String = records(RESULT.Columns.Get("CAT_CL_LONG")) + Dim CAT_CL_LAT As String = records(RESULT.Columns.Get("CAT_CL_LAT")) + Dim CAT_CL_MTOCOMPRA As String = records(RESULT.Columns.Get("CAT_CL_MTOCOMPRA")) + Dim CAT_CL_NUM_SERIEFISICO As String = records(RESULT.Columns.Get("CAT_CL_NUM_SERIEFISICO")) + Dim CAT_CL_BCREDITO As String = records(RESULT.Columns.Get("CAT_CL_BCREDITO")) + Dim CAT_CL_LIMITECREDITO As String = records(RESULT.Columns.Get("CAT_CL_LIMITECREDITO")) + Dim CAT_CL_DIAS_VISITA As String = records(RESULT.Columns.Get("CAT_CL_DIAS_VISITA")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO kmt_info2(CAT_CL_CODIGO,CAT_CL_RUTA,CAT_CL_NOMBRE,CAT_CL_ATIENDE1,CAT_CL_ATIENTE2,CAT_CL_TELEFONO,CAT_CL_EMAIL,CAT_CL_CALLE,CAT_CL_NOEXT,CAT_CL_NOINT,CAT_CL_CALLE1,CAT_CL_CALLE2,CAT_CL_COLONIA,CAT_CL_MUNI,CAT_CL_EDO,CAT_CL_CP,CAT_CL_LONG,CAT_CL_LAT,CAT_CL_MTOCOMPRA,CAT_CL_NUM_SERIEFISICO, gestion, CAT_CL_DIAS_VISITA, CAT_CL_BCREDITO, CAT_CL_LIMITECREDITO) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0, ?,?,?)", Array As Object (CAT_CL_CODIGO,CAT_CL_RUTA,CAT_CL_NOMBRE,CAT_CL_ATIENDE1,CAT_CL_ATIENTE2,CAT_CL_TELEFONO,CAT_CL_EMAIL,CAT_CL_CALLE,CAT_CL_NOEXT,CAT_CL_NOINT,CAT_CL_CALLE1,CAT_CL_CALLE2,CAT_CL_COLONIA,CAT_CL_MUNI,CAT_CL_EDO,CAT_CL_CP,CAT_CL_LONG,CAT_CL_LAT,CAT_CL_MTOCOMPRA,CAT_CL_NUM_SERIEFISICO,CAT_CL_DIAS_VISITA, CAT_CL_BCREDITO, CAT_CL_LIMITECREDITO)) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_STAY_STORE(HSS_CODIGO, HSS_IN , HSS_OUT , HSS_TOT) VALUES (?,0,0,0)", Array As Object (CAT_CL_CODIGO)) + Next + Listo1 = 1 + S_CC.Text = "LISTO" + If Starter.marcaCel <> "Sony" Then ToastMessageShow("Catalogo Clientes Actualizados." , True) + If Listo1 =1 And Listo2 =1 And Listo3 = 1 And Listo4 = 1 Then + B4XPage_Appear + img2.Visible=False + EJECUTANDO=0 + End If + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = reqManager.HandleJob(Job) + If RESULT.Tag = "resum_apk" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim HIST_RA_OBJMES As String = records(RESULT.Columns.Get("HIST_RA_OBJMES")) + Dim HIST_RA_VENTA As String = records(RESULT.Columns.Get("HIST_RA_VENTA")) + Dim HIST_RA_TENDENCIA As String = records(RESULT.Columns.Get("HIST_RA_TENDENCIA")) + Dim HIST_RA_ALCANCE As String = records(RESULT.Columns.Get("HIST_RA_ALCANCE")) + Dim HISR_RA_DRAOBJ As String = records(RESULT.Columns.Get("HISR_RA_DRAOBJ")) + Dim HIST_RA_DRAVTA As String = records(RESULT.Columns.Get("HIST_RA_DRAVTA")) + Dim HIST_RA_DSOBJ As String = records(RESULT.Columns.Get("HIST_RA_DSOBJ")) + Dim HIST_RA_DSVTA As String = records(RESULT.Columns.Get("HIST_RA_DSVTA")) + Dim HIST_RA_VPOOBJ As String = records(RESULT.Columns.Get("HIST_RA_VPOOBJ")) + Dim HIST_RA_VPOVTA As String = records(RESULT.Columns.Get("HIST_RA_VPOVTA")) + Dim HIST_RA_CTES As String = records(RESULT.Columns.Get("HIST_RA_CTES")) + Dim HIST_RA_COBCCC As String = records(RESULT.Columns.Get("HIST_RA_COBCCC")) + Dim HIST_RA_ECO As String = records(RESULT.Columns.Get("HIST_RA_ECO")) + Dim HIST_RA_VISITPLAN As String = records(RESULT.Columns.Get("HIST_RA_VISITPLAN")) + Dim HIST_RA_VISIREAL As String = records(RESULT.Columns.Get("HIST_RA_VISIREAL")) + Dim HIST_RA_COBVISIT As String = records(RESULT.Columns.Get("HIST_RA_COBVISIT")) + Dim HIST_RA_FRECCOMPOBJ As String = records(RESULT.Columns.Get("HIST_RA_FRECCOMPOBJ")) + Dim HIST_RA_FRECCOMREAL As String = records(RESULT.Columns.Get("HIST_RA_FRECCOMREAL")) + Dim HIST_RA_VENTAMES1 As String = records(RESULT.Columns.Get("HIST_RA_VENTAMES1")) + Dim HIST_RA_VENTAMES2 As String = records(RESULT.Columns.Get("HIST_RA_VENTAMES2")) + Dim HIST_RA_VENTAMES3 As String = records(RESULT.Columns.Get("HIST_RA_VENTAMES3")) + Dim HIST_RA_VENTAMES4 As String = records(RESULT.Columns.Get("HIST_RA_VENTAMES4")) + Dim HIST_RA_RECHAZO As String = records(RESULT.Columns.Get("HIST_RA_RECHAZO")) + Dim HIST_RA_RECHAZOPORCEN As String = records(RESULT.Columns.Get("HIST_RA_RECHAZOPORCEN")) + Dim HIST_RA_SEMANA1 As String = records(RESULT.Columns.Get("HIST_RA_SEMANA1")) + Dim HIST_RA_SEMANA1_DIAS As String = records(RESULT.Columns.Get("HIST_RA_SEMANA1_DIAS")) + Dim HIST_RA_SEMANA1_DRA As String = records(RESULT.Columns.Get("HIST_RA_SEMANA1_DRA")) + Dim HIST_RA_SEMANA2 As String = records(RESULT.Columns.Get("HIST_RA_SEMANA2")) + Dim HIST_RA_SEMANA2_DIAS As String = records(RESULT.Columns.Get("HIST_RA_SEMANA2_DIAS")) + Dim HIST_RA_SEMANA2_DRA As String = records(RESULT.Columns.Get("HIST_RA_SEMANA2_DRA")) + Dim HIST_RA_SEMANA3 As String = records(RESULT.Columns.Get("HIST_RA_SEMANA3")) + Dim HIST_RA_SEMANA3_DIAS As String = records(RESULT.Columns.Get("HIST_RA_SEMANA3_DIAS")) + Dim HIST_RA_SEMANA3_DRA As String = records(RESULT.Columns.Get("HIST_RA_SEMANA3_DRA")) + Dim HIST_RA_SEMANA4 As String = records(RESULT.Columns.Get("HIST_RA_SEMANA4")) + Dim HIST_RA_SEMANA4_DIAS As String = records(RESULT.Columns.Get("HIST_RA_SEMANA4_DIAS")) + Dim HIST_RA_SEMANA4_DRA As String = records(RESULT.Columns.Get("HIST_RA_SEMANA4_DRA")) + Dim HIST_RA_SEMANA5 As String = records(RESULT.Columns.Get("HIST_RA_SEMANA5")) + Dim HIST_RA_SEMANA5_DIAS As String = records(RESULT.Columns.Get("HIST_RA_SEMANA5_DIAS")) + Dim HIST_RA_SEMANA5_DRA As String = records(RESULT.Columns.Get("HIST_RA_SEMANA5_DRA")) + Dim HIST_RA_SEMANA1_LPT As String = records(RESULT.Columns.Get("HIST_RA_SEMANA1_LPT")) + Dim HIST_RA_SEMANA2_LPT As String = records(RESULT.Columns.Get("HIST_RA_SEMANA2_LPT")) + Dim HIST_RA_SEMANA3_LPT As String = records(RESULT.Columns.Get("HIST_RA_SEMANA3_LPT")) + Dim HIST_RA_SEMANA4_LPT As String = records(RESULT.Columns.Get("HIST_RA_SEMANA4_LPT")) + Dim HIST_RA_SEMANA5_LPT As String = records(RESULT.Columns.Get("HIST_RA_SEMANA5_LPT")) + Dim HIST_RA_RUTA As String = records(RESULT.Columns.Get("HIST_RA_RUTA")) + Dim HIST_RA_IDALMACEN As String = records(RESULT.Columns.Get("HIST_RA_IDALMACEN")) + + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_RESUM_APK(HIST_RA_OBJMES,HIST_RA_VENTA,HIST_RA_TENDENCIA,HIST_RA_ALCANCE,HISR_RA_DRAOBJ,HIST_RA_DRAVTA,HIST_RA_DSOBJ,HIST_RA_DSVTA,HIST_RA_VPOOBJ,HIST_RA_VPOVTA,HIST_RA_CTES,HIST_RA_COBCCC,HIST_RA_ECO,HIST_RA_VISITPLAN,HIST_RA_VISIREAL,HIST_RA_COBVISIT,HIST_RA_FRECCOMPOBJ,HIST_RA_FRECCOMREAL,HIST_RA_VENTAMES1,HIST_RA_VENTAMES2,HIST_RA_VENTAMES3,HIST_RA_VENTAMES4,HIST_RA_RECHAZO,HIST_RA_RECHAZOPORCEN,HIST_RA_SEMANA1,HIST_RA_SEMANA1_DIAS,HIST_RA_SEMANA1_DRA,HIST_RA_SEMANA2,HIST_RA_SEMANA2_DIAS,HIST_RA_SEMANA2_DRA,HIST_RA_SEMANA3,HIST_RA_SEMANA3_DIAS,HIST_RA_SEMANA3_DRA,HIST_RA_SEMANA4,HIST_RA_SEMANA4_DIAS,HIST_RA_SEMANA4_DRA,HIST_RA_SEMANA5,HIST_RA_SEMANA5_DIAS,HIST_RA_SEMANA5_DRA,HIST_RA_SEMANA1_LPT,HIST_RA_SEMANA2_LPT,HIST_RA_SEMANA3_LPT,HIST_RA_SEMANA4_LPT,HIST_RA_SEMANA5_LPT,HIST_RA_RUTA,HIST_RA_IDALMACEN) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (HIST_RA_OBJMES,HIST_RA_VENTA,HIST_RA_TENDENCIA,HIST_RA_ALCANCE,HISR_RA_DRAOBJ,HIST_RA_DRAVTA,HIST_RA_DSOBJ,HIST_RA_DSVTA,HIST_RA_VPOOBJ,HIST_RA_VPOVTA,HIST_RA_CTES,HIST_RA_COBCCC,HIST_RA_ECO,HIST_RA_VISITPLAN,HIST_RA_VISIREAL,HIST_RA_COBVISIT,HIST_RA_FRECCOMPOBJ,HIST_RA_FRECCOMREAL,HIST_RA_VENTAMES1,HIST_RA_VENTAMES2,HIST_RA_VENTAMES3,HIST_RA_VENTAMES4,HIST_RA_RECHAZO,HIST_RA_RECHAZOPORCEN,HIST_RA_SEMANA1,HIST_RA_SEMANA1_DIAS,HIST_RA_SEMANA1_DRA,HIST_RA_SEMANA2,HIST_RA_SEMANA2_DIAS,HIST_RA_SEMANA2_DRA,HIST_RA_SEMANA3,HIST_RA_SEMANA3_DIAS,HIST_RA_SEMANA3_DRA,HIST_RA_SEMANA4,HIST_RA_SEMANA4_DIAS,HIST_RA_SEMANA4_DRA,HIST_RA_SEMANA5,HIST_RA_SEMANA5_DIAS,HIST_RA_SEMANA5_DRA,HIST_RA_SEMANA1_LPT,HIST_RA_SEMANA2_LPT,HIST_RA_SEMANA3_LPT,HIST_RA_SEMANA4_LPT,HIST_RA_SEMANA5_LPT,HIST_RA_RUTA,HIST_RA_IDALMACEN)) + ' Msgbox("pasa","alo") + Next + Listo1 = 1 + S_CC.Text = "LISTO" + If Starter.marcaCel <> "Sony" Then ToastMessageShow("Catalogo Resumen Actualizado." , True) + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = reqManager.HandleJob(Job) + If RESULT.Tag = "hist_promos" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim HP_CLIENTE As String = records(RESULT.Columns.Get("HP_CLIENTE")) + Dim HP_CODIGO_PROMOCION As String = records(RESULT.Columns.Get("HP_CODIGO_PROMOCION")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_PROMOS(HP_CLIENTE, HP_CODIGO_PROMOCION) VALUES (?,?)", Array As Object (HP_CLIENTE, HP_CODIGO_PROMOCION)) + Next + If Starter.marcaCel <> "Sony" Then ToastMessageShow("Historico Promociones Actualizado." , True) + If PB1.Progress = 0 Then + PB1.Progress = 30 + S_CH.Text = "CARGANDO" + ELSE If PB1.Progress = 30 Then + PB1.Progress = 60 + ELSE IF PB1.Progress = 60 Then + PB1.Progress = 100 + S_CH.Text = "LISTO" + End If + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = reqManager.HandleJob(Job) + If RESULT.Tag = "hist_cliente_promos" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim HCCP_CLIENTE As String = records(RESULT.Columns.Get("HCCP_CLIENTE")) + Dim HCCP_PROMO As String = records(RESULT.Columns.Get("HCCP_PROMO")) + Dim HCCP_CANT As String = records(RESULT.Columns.Get("HCCP_CANT")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_CLIENTE_CANT_PROMOS(HCCP_CLIENTE, HCCP_PROMO, HCCP_CANT) VALUES (?,?,?)", Array As Object (HCCP_CLIENTE, HCCP_PROMO,HCCP_CANT)) + Next + If Starter.marcaCel <> "Sony" Then ToastMessageShow(" Historico Clientes Promociones Actualizado." , True) + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = reqManager.HandleJob(Job) + If RESULT.Tag = "GEOCERCA" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim CAT_AL_GEOCERCA As String = records(RESULT.Columns.Get("CAT_AL_GEOCERCA")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO GEOCERCA(ACTIVA) VALUES (?)", Array As Object (CAT_AL_GEOCERCA)) + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = reqManager.HandleJob(Job) + If RESULT.Tag = "coords_almacen" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim CAT_AL_LATITUD As String = records(RESULT.Columns.Get("CAT_AL_LATITUD")) + Dim CAT_AL_LONGITUD As String = records(RESULT.Columns.Get("CAT_AL_LONGITUD")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO COORDS_ALMACEN(LAT,LONG) VALUES (?,?)", Array As Object (CAT_AL_LATITUD,CAT_AL_LONGITUD)) + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = reqManager.HandleJob(Job) + If RESULT.Tag = "HIST_MARCAS_CUOTAS" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim HMC_MARCA As String = records(RESULT.Columns.Get("HMC_MARCA")) + Dim HMC_TOTAL As String = records(RESULT.Columns.Get("HMC_TOTAL")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_MARCAS_CUOTAS(HMC_MARCA, HMC_TOTAL) VALUES (?,?)", Array As Object (HMC_MARCA, HMC_TOTAL)) + Next + If Starter.marcaCel <> "Sony" Then ToastMessageShow(" Historico Marcas" , True) + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = reqManager.HandleJob(Job) + If RESULT.Tag = "hist_comp_promos" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim CAT_PA_ID As String = records(RESULT.Columns.Get("CAT_PA_ID")) + Dim CAT_PA_MAXPROM As String = records(RESULT.Columns.Get("CAT_PA_MAXPROM")) + Dim CAT_PA_MAXPROMREC As String = records(RESULT.Columns.Get("CAT_PA_MAXPROMREC")) + Dim CAT_PA_MAXPROMCLIE As String = records(RESULT.Columns.Get("CAT_PA_MAXPROMCLIE")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PROMOS_COMP(CAT_PA_ID, CAT_PA_MAXPROM, CAT_PA_MAXPROMREC, CAT_PA_MAXPROMCLIE) VALUES (?,?,?,?)", Array As Object (CAT_PA_ID, CAT_PA_MAXPROM,CAT_PA_MAXPROMREC,CAT_PA_MAXPROMCLIE)) + Next + If PB1.Progress = 0 Then + PB1.Progress = 30 + S_CH.Text = "CARGANDO" + ELSE If PB1.Progress = 30 Then + PB1.Progress = 60 + ELSE IF PB1.Progress = 60 Then + PB1.Progress = 100 + S_CH.Text = "LISTO" + End If + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = reqManager.HandleJob(Job) + If RESULT.Tag = "cat_verificacion" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim CAT_VE_IDPROD As String = records(RESULT.Columns.Get("CAT_VE_IDPROD")) + Dim CAT_VE_NOMBRE As String = records(RESULT.Columns.Get("CAT_VE_NOMBRE")) + Dim CAT_VE_ORDEN As String = records(RESULT.Columns.Get("CAT_VE_ORDEN")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_VERIFICACION(CAT_VE_IDPROD, CAT_VE_NOMBRE,CAT_VE_ORDEN) VALUES (?,?,?)", Array As Object (CAT_VE_IDPROD, CAT_VE_NOMBRE,CAT_VE_ORDEN)) + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = reqManager.HandleJob(Job) + If RESULT.Tag = "marcas_rutas" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim HVD_MARCA As String = records(RESULT.Columns.Get("HVD_MARCA")) + Dim CLIENTES As String = records(RESULT.Columns.Get("CLIENTES")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO MARCAS_RUTAS(HVD_MARCA, CLIENTES) VALUES (?,?)", Array As Object (HVD_MARCA, CLIENTES)) + Next + End If + End If + + 'CUOTAS + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = reqManager.HandleJob(Job) + If RESULT.Tag = "CUOTAS" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim HC_RUTA As String = records(RESULT.Columns.Get("HC_RUTA")) + Dim HC_CUOTA1 As String = records(RESULT.Columns.Get("HC_CUOTA1")) + Dim HC_CUOTA2 As String = records(RESULT.Columns.Get("HC_CUOTA2")) + Dim HC_CUOTA3 As String = records(RESULT.Columns.Get("HC_CUOTA3")) + Dim HC_CUOTA4 As String = records(RESULT.Columns.Get("HC_CUOTA4")) + Dim HC_CUOTA5 As String = records(RESULT.Columns.Get("HC_CUOTA5")) + Dim HC_CUOTA6 As String = records(RESULT.Columns.Get("HC_CUOTA6")) + Dim HC_META1 As String = records(RESULT.Columns.Get("HC_META1")) + Dim HC_META2 As String = records(RESULT.Columns.Get("HC_META2")) + Dim HC_META3 As String = records(RESULT.Columns.Get("HC_META3")) + Dim HC_META4 As String = records(RESULT.Columns.Get("HC_META4")) + Dim HC_META5 As String = records(RESULT.Columns.Get("HC_META5")) + Dim HC_META6 As String = records(RESULT.Columns.Get("HC_META6")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_CUOTAS(HC_RUTA, HC_CUOTA1,HC_CUOTA2,HC_CUOTA3,HC_CUOTA4,HC_CUOTA5,HC_CUOTA6,HC_META1,HC_META2,HC_META3,HC_META4,HC_META5,HC_META6) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (HC_RUTA, HC_CUOTA1,HC_CUOTA2,HC_CUOTA3,HC_CUOTA4,HC_CUOTA5,HC_CUOTA6,HC_META1,HC_META2,HC_META3,HC_META4,HC_META5,HC_META6)) + Next + + End If + End If + 'COMISIONES + +' If Job.JobName = "DBRequest" Then +' Dim RESULT As DBResult = reqManager.HandleJob(Job) +' If RESULT.Tag = "COMISIONES" Then 'query tag +' For Each records() As Object In RESULT.Rows +' Dim HCM_TOTAL_V As String = records(RESULT.Columns.Get("HCM_TOTAL_V")) +' Dim HCM_TOTAL_VIVE As String = records(RESULT.Columns.Get("HCM_TOTAL_VIVE")) +' Dim HCM_TOTAL_GUNA As String = records(RESULT.Columns.Get("HCM_TOTAL_GUNA")) +' Dim HCM_TOTAL_BEB As String = records(RESULT.Columns.Get("HCM_TOTAL_BEB")) +' B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_COMISIONES_MOVIL (HCM_TOTAL_V , HCM_TOTAL_VIVE , HCM_TOTAL_GUNA , HCM_TOTAL_BEB) VALUES (?,?,?,?)", Array As Object (HCM_TOTAL_V , HCM_TOTAL_VIVE , HCM_TOTAL_GUNA , HCM_TOTAL_BEB)) +' Next +' End If +' End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = reqManager.HandleJob(Job) + If RESULT.Tag = "gunaprod" Then 'query tag + If PB2.Progress < 30 Then S_CP.Text = "CARGANDO" 'Mod por CHV - 20211028 Agregue el "If PB2.Progress < 30 then" + For Each records() As Object In RESULT.Rows + Dim CAT_GP_ID As String = records(RESULT.Columns.Get("CAT_GP_ID")) + Dim CAT_GP_NOMBRE As String = records(RESULT.Columns.Get("CAT_GP_NOMBRE")) + Dim CAT_GP_IMP1 As String = records(RESULT.Columns.Get("CAT_GP_IMP1")) + Dim CAT_GP_IMP2 As String = records(RESULT.Columns.Get("CAT_GP_IMP2")) + Dim CAT_GP_PRECIO As String = records(RESULT.Columns.Get("CAT_GP_PRECIO")) + Dim CAT_GP_CLASIF As String = records(RESULT.Columns.Get("CAT_GP_CLASIF")) + Dim CAT_GP_STS As String = records(RESULT.Columns.Get("CAT_GP_STS")) + Dim CAT_GP_TIPO As String = records(RESULT.Columns.Get("CAT_GP_TIPO")) + Dim CAT_GP_SUBTIPO As String = records(RESULT.Columns.Get("CAT_GP_SUBTIPO")) + Dim CAT_GP_IMG() As Byte = records(RESULT.Columns.Get("CAT_GP_IMG")) + Dim CAT_GP_ALMACEN As Int = records(RESULT.Columns.Get("CAT_GP_ALMACEN")) +' Dim CAT_GP_DEV As String = records(RESULT.Columns.Get("CAT_GP_DEV")) + Dim CAT_GP_TIPOPROD As Int = records(RESULT.Columns.Get("CAT_GP_TIPOPROD")) + Dim CAT_GP_INICIATIVA As Int = records(RESULT.Columns.Get("CAT_GP_INICIATIVA")) + Dim CAT_DP_PRECIO4 As Float = records(RESULT.Columns.Get("CAT_DP_PRECIO4")) + Dim CAT_DP_CONVERSION1 As Int = records(RESULT.Columns.Get("CAT_DP_CONVERSION1")) +' CAT_GP_INICIATIVA = 5 +' B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD4(CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN) VALUES (?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_DEV)) + Dim CAT_GP_NOMBRE As String = CAT_GP_NOMBRE.Trim + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD(CAT_GP_ID, CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_TIPOPROD,CAT_GP_INICIATIVA,CAT_DP_PRECIO4,CAT_DP_CONVERSION1) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_TIPOPROD, CAT_GP_INICIATIVA,CAT_DP_PRECIO4,CAT_DP_CONVERSION1)) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD4(CAT_GP_ID, CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_TIPOPROD,CAT_GP_INICIATIVA,CAT_DP_PRECIO4,CAT_DP_CONVERSION1) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_TIPOPROD, CAT_GP_INICIATIVA,CAT_DP_PRECIO4,CAT_DP_CONVERSION1)) + Next + Listo2=1 + If PB2.Progress = 0 Then + PB2.Progress = 30 + S_CP.Text = "CARGANDO" + ELSE If PB2.Progress = 30 Then + PB2.Progress = 60 + ELSE IF PB2.Progress = 60 Then + PB2.Progress = 100 + S_CP.Text = "LISTO" + End If + If Starter.marcaCel <> "Sony" Then ToastMessageShow("Productos Actualizados." , True) + If Listo1 =1 And Listo2 =1 And Listo3 = 1 And Listo4 = 1 Then + B4XPage_Appear + img2.Visible=False + EJECUTANDO=0 + End If + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = reqManager.HandleJob(Job) + If RESULT.Tag = "gunaprod3" Then 'query tag + If PB2.Progress < 30 Then S_CP.Text = "CARGANDO" 'Mod por CHV - 20211028 Agregue el "If PB2.Progress < 30 then" + For Each records() As Object In RESULT.Rows + Dim CAT_GP_ID As String = records(RESULT.Columns.Get("CAT_GP_ID")) + Dim CAT_GP_NOMBRE As String = records(RESULT.Columns.Get("CAT_GP_NOMBRE")) + Dim CAT_GP_IMP1 As String = records(RESULT.Columns.Get("CAT_GP_IMP1")) + Dim CAT_GP_IMP2 As String = records(RESULT.Columns.Get("CAT_GP_IMP2")) + Dim CAT_GP_PRECIO As String = records(RESULT.Columns.Get("CAT_GP_PRECIO")) + Dim CAT_GP_CLASIF As String = records(RESULT.Columns.Get("CAT_GP_CLASIF")) + Dim CAT_GP_STS As String = records(RESULT.Columns.Get("CAT_GP_STS")) + Dim CAT_GP_TIPO As String = records(RESULT.Columns.Get("CAT_GP_TIPO")) + Dim CAT_GP_SUBTIPO As String = records(RESULT.Columns.Get("CAT_GP_SUBTIPO")) + Dim CAT_GP_IMG() As Byte = records(RESULT.Columns.Get("CAT_GP_IMG")) + Dim CAT_GP_ALMACEN As Int = records(RESULT.Columns.Get("CAT_GP_ALMACEN")) + ' Dim CAT_GP_DEV As String = records(RESULT.Columns.Get("CAT_GP_DEV")) + Dim CAT_GP_TIPOPROD As Int = records(RESULT.Columns.Get("CAT_GP_TIPOPROD")) + Dim CAT_GP_INICIATIVA As Int = records(RESULT.Columns.Get("CAT_GP_INICIATIVA")) + Dim CAT_DP_PRECIO4 As Float = records(RESULT.Columns.Get("CAT_DP_PRECIO4")) + Dim CAT_DP_CONVERSION1 As Int = records(RESULT.Columns.Get("CAT_DP_CONVERSION1")) +' CAT_GP_INICIATIVA = 5 +' skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD(CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_DEV) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_DEV)) + Dim CAT_GP_NOMBRE As String = CAT_GP_NOMBRE.Trim + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD3(CAT_GP_ID, CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_TIPOPROD,CAT_GP_INICIATIVA,CAT_DP_PRECIO4,CAT_DP_CONVERSION1) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_TIPOPROD, CAT_GP_INICIATIVA,CAT_DP_PRECIO4,CAT_DP_CONVERSION1)) + Next + End If + End If + + ''AQUI ESTAMOS TRABAJANDO + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = reqManager.HandleJob(Job) + If RESULT.Tag = "gunaprod2" Then 'query tag + If PB2.Progress < 30 Then S_CP.Text = "CARGANDO" 'Mod por CHV - 20211028 Agregue el "If PB2.Progress < 30 then" + For Each records() As Object In RESULT.Rows + Dim CAT_GP_ID As String = records(RESULT.Columns.Get("CAT_GP_ID")) + Dim CAT_GP_NOMBRE As String = records(RESULT.Columns.Get("CAT_GP_NOMBRE")) + Dim CAT_GP_IMP1 As String = records(RESULT.Columns.Get("CAT_GP_IMP1")) + Dim CAT_GP_IMP2 As String = records(RESULT.Columns.Get("CAT_GP_IMP2")) + Dim CAT_GP_PRECIO As String = records(RESULT.Columns.Get("CAT_GP_PRECIO")) + Dim CAT_GP_CLASIF As String = records(RESULT.Columns.Get("CAT_GP_CLASIF")) + Dim CAT_GP_STS As String = records(RESULT.Columns.Get("CAT_GP_STS")) + Dim CAT_GP_TIPO As String = records(RESULT.Columns.Get("CAT_GP_TIPO")) + Dim CAT_GP_SUBTIPO As String = records(RESULT.Columns.Get("CAT_GP_SUBTIPO")) + Dim CAT_GP_IMG() As Byte = records(RESULT.Columns.Get("CAT_GP_IMG")) + Dim CAT_GP_ALMACEN As Int = records(RESULT.Columns.Get("CAT_GP_ALMACEN")) + ' Dim CAT_GP_DEV As String = records(RESULT.Columns.Get("CAT_GP_DEV")) + Dim CAT_GP_TIPOPROD As Int = records(RESULT.Columns.Get("CAT_GP_TIPOPROD")) + Dim CAT_GP_INICIATIVA As Int = records(RESULT.Columns.Get("CAT_GP_INICIATIVA")) + Dim CAT_DP_PRECIO4 As Float = records(RESULT.Columns.Get("CAT_DP_PRECIO4")) +' Dim CAT_DP_CONVERSION1 As Int = records(RESULT.Columns.Get("CAT_DP_CONVERSION1")) + Dim CAT_DP_CONVERSION1 As Int = 1 + +' CAT_GP_INICIATIVA = 5 + Dim CAT_GP_NOMBRE As String = CAT_GP_NOMBRE.Trim +' skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD(CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_DEV) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_DEV)) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD2(CAT_GP_ID, CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_TIPOPROD,CAT_GP_INICIATIVA,CAT_DP_PRECIO4,CAT_DP_CONVERSION1) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_TIPOPROD, CAT_GP_INICIATIVA,CAT_DP_PRECIO4,CAT_DP_CONVERSION1)) + Next + Listo2=1 + If PB2.Progress = 0 Then + PB2.Progress = 30 + S_CP.Text = "CARGANDO" + ELSE If PB2.Progress = 30 Then + PB2.Progress = 60 + ELSE IF PB2.Progress = 60 Then + PB2.Progress = 100 + S_CP.Text = "LISTO" + End If + If Starter.marcaCel <> "Sony" Then ToastMessageShow("Productos Actualizados." , True) + If Listo1 =1 And Listo2 =1 And Listo3 = 1 And Listo4 = 1 Then + B4XPage_Appear + img2.Visible=False + EJECUTANDO=0 + End If + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = reqManager.HandleJob(Job) + If RESULT.Tag = "gunaprodp" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim CAT_GP_ID As String = records(RESULT.Columns.Get("CAT_GP_ID")) + Dim CAT_GP_NOMBRE As String = records(RESULT.Columns.Get("CAT_GP_NOMBRE")) + Dim CAT_GP_IMP1 As String = records(RESULT.Columns.Get("CAT_GP_IMP1")) + Dim CAT_GP_IMP2 As String = records(RESULT.Columns.Get("CAT_GP_IMP2")) + Dim CAT_GP_PRECIO As String = records(RESULT.Columns.Get("CAT_GP_PRECIO")) + Dim CAT_GP_CLASIF As String = records(RESULT.Columns.Get("CAT_GP_CLASIF")) + Dim CAT_GP_STS As String = records(RESULT.Columns.Get("CAT_GP_STS")) + Dim CAT_GP_TIPO As String = records(RESULT.Columns.Get("CAT_GP_TIPO")) + Dim CAT_GP_SUBTIPO As String = records(RESULT.Columns.Get("CAT_GP_SUBTIPO")) + Dim CAT_GP_IMG() As Byte = records(RESULT.Columns.Get("CAT_GP_IMG")) + Dim CAT_GP_ALMACEN As Int = records(RESULT.Columns.Get("CAT_GP_ALMACEN")) + Dim CAT_GP_TIPOPROD As Int = records(RESULT.Columns.Get("CAT_GP_TIPOPROD")) + CAT_GP_TIPOPROD = "5" + If CAT_GP_ID = "PAQUNI003" Then + CAT_GP_ALMACEN = 60 + End If +' Log("XXXXXXX gunaprodp XXXXXXXXX " & CAT_GP_ID & "|" & CAT_GP_IMP1 & "|" & CAT_GP_IMP2) + Dim CAT_GP_NOMBRE As String = CAT_GP_NOMBRE.Trim + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD(CAT_GP_ID, CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_TIPOPROD) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_TIPOPROD)) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD2(CAT_GP_ID, CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_TIPOPROD) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_TIPOPROD)) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD4(CAT_GP_ID, CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_TIPOPROD) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_TIPOPROD)) + Next + If PB2.Progress = 0 Then + PB2.Progress = 30 + S_CP.Text = "CARGANDO" + ELSE If PB2.Progress = 30 Then + PB2.Progress = 60 + ELSE IF PB2.Progress = 60 Then + PB2.Progress = 100 + S_CP.Text = "LISTO" + End If + If Starter.marcaCel <> "Sony" Then ToastMessageShow("Promociones Actualizados." , True) + Listo4=1 + If Listo1 =1 And Listo2 =1 And Listo3 = 1 And Listo4 = 1 Then + B4XPage_Appear + img2.Visible=False + EJECUTANDO=0 + Else If Listo4 = 1 And Listo3 = 1 And inve = 1 Then + B4XPage_Appear + img2.Visible=False + EJECUTANDO=0 + End If + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = reqManager.HandleJob(Job) + If RESULT.Tag = "gunaprodps" Then 'query tag + For Each records() As Object In RESULT.Rows + + Dim CAT_GP_ID As String = records(RESULT.Columns.Get("CAT_GP_ID")) + Dim CAT_GP_NOMBRE As String = records(RESULT.Columns.Get("CAT_GP_NOMBRE")) + Dim CAT_GP_IMP1 As String = records(RESULT.Columns.Get("CAT_GP_IMP1")) + Dim CAT_GP_IMP2 As String = records(RESULT.Columns.Get("CAT_GP_IMP2")) + Dim CAT_GP_PRECIO As String = records(RESULT.Columns.Get("CAT_GP_PRECIO")) + Dim CAT_GP_CLASIF As String = records(RESULT.Columns.Get("CAT_GP_CLASIF")) + Dim CAT_GP_STS As String = records(RESULT.Columns.Get("CAT_GP_STS")) + Dim CAT_GP_TIPO As String = records(RESULT.Columns.Get("CAT_GP_TIPO")) + Dim CAT_GP_SUBTIPO As String = records(RESULT.Columns.Get("CAT_GP_SUBTIPO")) + Dim CAT_GP_IMG() As Byte = records(RESULT.Columns.Get("CAT_GP_IMG")) + Dim CAT_GP_ALMACEN As Int = records(RESULT.Columns.Get("CAT_GP_ALMACEN")) + Dim CAT_GP_TIPOPROD As Int = records(RESULT.Columns.Get("CAT_GP_TIPOPROD")) + Log("XXXXXXXX gunaprodps XXXXXXXX " & records(RESULT.Columns.Get("CAT_GP_ID")) & "|" & records(RESULT.Columns.Get("CAT_GP_IMP1"))) + Dim CAT_GP_NOMBRE As String = CAT_GP_NOMBRE.Trim + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD(CAT_GP_ID, CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_TIPOPROD) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_TIPOPROD)) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD2(CAT_GP_ID, CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_TIPOPROD) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_TIPOPROD)) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_GUNAPROD4(CAT_GP_ID, CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG,CAT_GP_ALMACEN,CAT_GP_TIPOPROD) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_GP_ID,CAT_GP_NOMBRE,CAT_GP_IMP1,CAT_GP_IMP2,CAT_GP_PRECIO,CAT_GP_CLASIF,CAT_GP_STS,CAT_GP_TIPO,CAT_GP_SUBTIPO,CAT_GP_IMG, CAT_GP_ALMACEN,CAT_GP_TIPOPROD)) + Next + If PB2.Progress = 0 Then + PB2.Progress = 30 + S_CP.Text = "CARGANDO" + Log("C4") + ELSE If PB2.Progress = 30 Then + PB2.Progress = 60 + ELSE IF PB2.Progress = 60 Then + PB2.Progress = 100 + S_CP.Text = "LISTO" + Log("3") + End If + If Starter.marcaCel <> "Sony" Then ToastMessageShow("Promociones especiales Actualizados." , True) + + Listo4=1 + If Listo1 =1 And Listo2 =1 And Listo3 = 1 And Listo4 = 1 Then + B4XPage_Appear + img2.Visible=False + EJECUTANDO=0 + Else If Listo4 = 1 And Listo3 = 1 And inve = 1 Then + B4XPage_Appear + img2.Visible=False + EJECUTANDO=0 + End If + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = reqManager.HandleJob(Job) + If RESULT.Tag = "detallepaq" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim CAT_DP_ALMACEN As String = records(RESULT.Columns.Get("CAT_DP_ALMACEN")) + Dim CAT_DP_ID As String = records(RESULT.Columns.Get("CAT_DP_ID")) + Dim CAT_DP_IDPROD As String = records(RESULT.Columns.Get("CAT_DP_IDPROD")) + Dim CAT_DP_TIPO As String = records(RESULT.Columns.Get("CAT_DP_TIPO")) + Dim CAT_DP_PZAS As String = records(RESULT.Columns.Get("CAT_DP_PZAS")) + Dim CAT_DP_USUARIO As String = records(RESULT.Columns.Get("CAT_DP_USUARIO")) + Dim CAT_DP_FECHA As String = records(RESULT.Columns.Get("CAT_DP_FECHA")) + Dim CAT_DP_REGALO As String = records(RESULT.Columns.Get("CAT_DP_REGALO")) + Dim CAT_DP_CLASIF As String = records(RESULT.Columns.Get("CAT_DP_CLASIF")) + Dim CAT_DP_PRECIO As String = records(RESULT.Columns.Get("CAT_DP_PRECIO")) + Dim CAT_DP_PRECIO_SIMPTOS As String = records(RESULT.Columns.Get("CAT_DP_PRECIO_SIMPTOS")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_DETALLES_PAQ(CAT_DP_ALMACEN,CAT_DP_ID,CAT_DP_IDPROD,CAT_DP_TIPO,CAT_DP_PZAS,CAT_DP_USUARIO,CAT_DP_FECHA,CAT_DP_REGALO,CAT_DP_CLASIF,CAT_DP_PRECIO,CAT_DP_PRECIO_SIMPTOS) VALUES (?,?,?,?,?,?,?,?,?,?,?)", Array As Object (CAT_DP_ALMACEN,CAT_DP_ID,CAT_DP_IDPROD,CAT_DP_TIPO,CAT_DP_PZAS,CAT_DP_USUARIO,CAT_DP_FECHA,CAT_DP_REGALO,CAT_DP_CLASIF,CAT_DP_PRECIO,CAT_DP_PRECIO_SIMPTOS)) + Next + If PB2.Progress = 0 Then + PB2.Progress = 30 + S_CP.Text = "CARGANDO" + ELSE If PB2.Progress = 30 Then + PB2.Progress = 60 + ELSE IF PB2.Progress = 60 Then + PB2.Progress = 100 + S_CP.Text = "LISTO" + End If + Listo3 =1 + If Listo1 =1 And Listo2 =1 And Listo3 = 1 And Listo4 = 1 Then + B4XPage_Appear + img2.Visible=False + EJECUTANDO=0 + Else If Listo4 = 1 And Listo3 = 1 And inve = 1 Then + B4XPage_Appear + img2.Visible=False + EJECUTANDO=0 + End If + + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = reqManager.HandleJob(Job) + If RESULT.Tag = "hist_datos" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim HVD_CLIENTE As String = records(RESULT.Columns.Get("HVD_CLIENTE")) + Dim HVD_PRONOMBRE As String = records(RESULT.Columns.Get("HVD_PRONOMBRE")) + Dim HVD_CANT As String = records(RESULT.Columns.Get("HVD_CANT")) + Dim HVD_COSTO_TOT As String = records(RESULT.Columns.Get("HVD_COSTO_TOT")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_VENTAS(HVD_CLIENTE,HVD_PRONOMBRE,HVD_CANT,HVD_COSTO_TOT) VALUES (?,?,?,?)", Array As Object (HVD_CLIENTE,HVD_PRONOMBRE,HVD_CANT,HVD_COSTO_TOT)) + Next + Listo3 =1 + If PB1.Progress = 0 Then + PB1.Progress = 30 + S_CH.Text = "CARGANDO" + ELSE If PB1.Progress = 30 Then + PB1.Progress = 60 + ELSE IF PB1.Progress = 60 Then + PB1.Progress = 100 + S_CH.Text = "LISTO" + End If + If Starter.marcaCel <> "Sony" Then ToastMessageShow("Venta historico Actualizado." , True) + If Listo1 =1 And Listo2 =1 And Listo3 = 1 And Listo4 = 1 Then + B4XPage_Appear + img2.Visible=False + EJECUTANDO=0 + End If + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = reqManager.HandleJob(Job) + If RESULT.Tag = "variables" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim Cat_Va_Descripcion As String = records(RESULT.Columns.Get("CAT_VA_DESCRIPCION")) + Dim Cat_Va_Valor As String = records(RESULT.Columns.Get("CAT_VA_VALOR")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object (Cat_Va_Descripcion, Cat_Va_Valor)) + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = reqManager.HandleJob(Job) + If RESULT.Tag = "CUESTIONARIO" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim Cat_Va_Valor As String = records(RESULT.Columns.Get("CAT_VALOR")) + B4XPages.MainPage.skmt.ExecNonQuery2("DELETE FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As Object ("CUESTIONARIO")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("CUESTIONARIO", Cat_Va_Valor)) + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = reqManager.HandleJob(Job) + If RESULT.Tag = "valida_pedido" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim CUANTOSP As Int = records(RESULT.Columns.Get("CUANTOSP")) + If cuantos_pedido <= CUANTOSP Then + ' ToastMessageShow("rojo val ok 1 cuantosp." , True) + datos_iguales = "ok" + S_CP.Text = "INFO OK" + Else + If Starter.marcaCel <> "Sony" Then ToastMessageShow("No se cargo bien la info P. Sync Nuevamente" & CUANTOSP & " " & cuantos_pedido, True) + S_CP.Text = "ENVIAR DATOS (K-2)" + End If + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = reqManager.HandleJob(Job) + If RESULT.Tag = "valida_pedidoc" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim CUANTOSC As Int = records(RESULT.Columns.Get("CUANTOSC")) + If cuantos_pedidosc = CUANTOSC Then + ' ToastMessageShow("rojo val ok 1 cuantosp." , True) + datos_iguales = "ok" + Else + If Starter.marcaCel <> "Sony" Then ToastMessageShow("No se cargo bien la info C. Sync Nuevamente" & CUANTOSC & " " & cuantos_pedidosc, True) + End If + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = reqManager.HandleJob(Job) + If RESULT.Tag = "valida_noventa" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim CUANTOSN As Int = records(RESULT.Columns.Get("CUANTOSN")) + If cuantos_noventa = CUANTOSN Then + ' ToastMessageShow("rojo val ok 1 cuantosp." , True) + datos_iguales = "ok" + Else + If Starter.marcaCel <> "Sony" Then ToastMessageShow("No se cargo bien la info N. Sync Nuevamente" & CUANTOSN & " " & cuantos_noventa, True) + End If + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = reqManager.HandleJob(Job) + If RESULT.Tag = "ins_pedido" Then 'query tag + For Each records() As Object In RESULT.Rows + PB2.Progress = PB2.Progress + 5 + S_CP.Text = "SUBIENDO" + Next + PB2.Progress = 100 + S_CP.Text = "REVISANDO ..." + Log("5") + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = reqManager.HandleJob(Job) + If RESULT.Tag = "version" Then 'query tag + For Each records() As Object In RESULT.Rows + B4XPages.MainPage.skmt.ExecNonQuery("delete from VERSION") + Dim CAT_VE_VERSION As String = records(RESULT.Columns.Get("CAT_VE_VERSION")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO VERSION(NOVERSION) VALUES (?)", Array As Object (CAT_VE_VERSION)) + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = reqManager.HandleJob(Job) + If RESULT.Tag = "count_cli" Then 'query tag + For Each records() As Object In RESULT.Rows + COUNT_CLIE = records(RESULT.Columns.Get("COUNT_CLIE")) + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = reqManager.HandleJob(Job) + If RESULT.Tag = "ruta" Then 'query tag + Log("JOBDONE PRINCIPAL RUTA") + Log(RESULT.Rows.Size) + For Each records() As Object In RESULT.Rows + Dim VALIDO As String = records(RESULT.Columns.Get("VALIDO")) + Log("|"&VALIDO) + If VALIDO = "OK" Then + cargar.Visible = True + Subir.Visible = True + inv.Visible = True + connecta.Visible = False + If conn = "1" Then + ToastMessageShow("Existe Conexión con el Servidor." , True) + End If + Else + cargar.Visible = False + Subir.Visible = False + inv.Visible = False + connecta.Visible = False + ToastMessageShow("Ruta invalida." , True) + End If + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = reqManager.HandleJob(Job) + If RESULT.Tag = "usuario" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim name2 As String = records(RESULT.Columns.Get("VALIDO")) + Next + If name2 = "OK" Then + PASO = 1 + End If + P1.Visible = False + p_mandaInfo.Visible = False + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = reqManager.HandleJob(Job) + If RESULT.Tag = "fecha" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim FECHA_HOY As String = records(RESULT.Columns.Get("FECHA")) + B4XPages.MainPage.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("FECHA")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("FECHA",FECHA_HOY)) + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = reqManager.HandleJob(Job) + If RESULT.Tag = "folio" Then 'query tag + For Each records() As Object In RESULT.Rows + Dim FOLIO As String = records(RESULT.Columns.Get("FOLIO")) + B4XPages.MainPage.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("FOLIO")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("FOLIO",FOLIO)) + Next + End If + End If + +' If Job.JobName = "DBRequest" Then +' Dim RESULT As DBResult = reqManager.HandleJob(Job) +' If RESULT.Tag = "hist_avance" Then 'query tag +' For Each records() As Object In RESULT.Rows +' Dim marca As String = records(RESULT.Columns.Get("HIST_AM_MARCA")) +' Dim avance As String = records(RESULT.Columns.Get("HIST_AM_AVANCE")) +' Dim objetivo As String = records(RESULT.Columns.Get("HIST_AM_OBJETIVO")) +' Dim porcentaje1 As String = records(RESULT.Columns.Get("HIST_AM_PORCENTAJE")) +' B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_AVANCE(HA_MARCA, HA_AVANCE, HA_OBJETIVO, HA_PORCENTAJE) VALUES (?,?,?,?)", Array As Object (marca, avance, objetivo, porcentaje1)) +' Next +' End If +' End If + +' If Job.JobName = "DBRequest" Then +' Dim RESULT As DBResult = reqManager.HandleJob(Job) +' If RESULT.Tag = "select_abonosp" Then 'query tag +' For Each records() As Object In RESULT.Rows +' Dim NOTA As String = records(RESULT.Columns.Get("NOTA")) +' Dim CLIENTE As String = records(RESULT.Columns.Get("CLIENTE")) +' Dim SALDO_PENDIENTE As String = records(RESULT.Columns.Get("SALDO_PENDIENTE")) +' Dim DIA_VENCIMIENTO As String = records(RESULT.Columns.Get("DIA_VENCIMIENTO")) +' B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO ABONOSP(NOTA,CLIENTE,SALDO_PENDIENTE,DIA_VENCIMIENTO) VALUES (?,?,?,?)", Array As Object (NOTA, CLIENTE,SALDO_PENDIENTE,DIA_VENCIMIENTO)) +' Next +' End If +' End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = reqManager.HandleJob(Job) + If RESULT.Tag = "ins_cuestionario" Then 'query tag + Subs.logJobDoneResultados(RESULT) + End If + + Dim RESULT As DBResult = reqManager.HandleJob(Job) + If RESULT.Tag = "test" Then 'query tag + Log(">>>>>>>>>>>>> TEST") + Subs.logJobDoneResultados(RESULT) + End If + + Dim RESULT As DBResult = reqManager.HandleJob(Job) + If RESULT.Tag = "clientes_cuestionario" Then + Log("Entramos a clientes_cuestionario - Regs:" & RESULT.Rows.Size) + Starter.skmt.ExecNonQuery("delete from HIST_CUESTIONARIO") + For Each records() As Object In RESULT.Rows + Dim idCliente As String = records(RESULT.Columns.Get("HC_CLIENTE")) + Starter.skmt.ExecNonQuery2("INSERT INTO HIST_CUESTIONARIO(HC_CLIENTE) VALUES (?)", Array As Object (idCliente)) + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim RESULT As DBResult = reqManager.HandleJob(Job) + If RESULT.Tag = "telefono" Then 'query tag + + For Each records() As Object In RESULT.Rows + Dim TELEFONO As String = "" + + If RESULT.Columns.Get("CAT_LO_IDTELEFONO") <> Null Then + Dim index As Int = RESULT.Columns.Get("CAT_LO_IDTELEFONO") + If records(index) <> Null Then + TELEFONO = records(index) + End If + End If + + If TELEFONO <> "" Then + B4XPages.MainPage.skmt.ExecNonQuery2("DELETE FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As Object("TELEFONO")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object("TELEFONO", TELEFONO)) + End If + Next + End If + End If + + If RESULT.Tag = "nom_user" Then + For Each records() As Object In resultado.Rows + Dim nombre_user As String = records(resultado.Columns.Get("CAT_LO_NOMBRE")) + B4XPages.MainPage.skmt.ExecNonQuery2("DELETE FROM CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As Object ("nom_usuario")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("nom_usuario", nombre_user)) + Next + End If + + Job.Release +End Sub + +Private Sub B4XPage_CloseRequest As ResumableSub + 'Return True to close, False to cancel + If SCROLL_RESDIA.Visible Then + SCROLL_RESDIA.Visible = False + B_OK_RES_Click + Return False + Else if Panel5.Visible Then + B_OK_PANEL5_Click + Return False + Else If pnlCobranza.Visible Then + pnlCobranza.Visible = False + Return False + Else + B4XPages.ShowPage("login") + End If + Return False +End Sub + +Sub connecta_Click + Log( Starter.DBReqServer) + reqManager.Initialize(Me, Starter.DBReqServer) + ime.HideKeyboard + connecta1 = connecta1 + 1 +' imei = p.GetDeviceId + imei = "xxxx" + conn = "1" +' Dim cmd As DBCommand +' cmd.Initialize +' cmd.Name = "select_version_INTMEX" +' reqManager.ExecuteQuery(cmd , 0, "version") + + ' Cuando nos conectamos verificamos que el usuario guardado en BD sea VALIDO. +' c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO, PASS from usuarioa") +' c.Position=0 +' If c.RowCount > 0 And c.GetString("USUARIO") <> "KMTS1" Then +' Private usrT As String = c.GetString("USUARIO") +' Private passT As String = c.GetString("PASS") +' cmd.Initialize +' cmd.Name = "select_usuario_guna_INTMEX_1" +' Log(usrT & "|" & passT) +' cmd.Parameters = Array As Object(usrT, passT) +' reqManager.ExecuteQuery(cmd , 0, "usuarioA") +' End If +' c.Close + + Dim cmd As DBCommand + cmd.Initialize + + cmd.Name = "select_ruta_IZCA5" + cmd.Parameters = Array As Object(ALMACEN, e_ruta.text,usuario) +' Log($"${ALMACEN},${e_ruta.text},${imei}"$) + reqManager.ExecuteQuery(cmd , 0, "ruta") + + If e_ruta.Text = "KMTS1" Then + cargar.Visible = True + Subir.Visible = True + e_ruta.Text = "" + End If + + If e_ruta.Text = "BERNA1" Then + cargar.Visible = True + Subir.Visible = True + e_ruta.Text = "" + End If + + ToastMessageShow("Validando Conexión." , True) + +' If connecta1 / 2 = 1 Then +' 'Starter.DBReqServer = "http://177.244.63.54:1782" +' 'Starter.DBReqServer = "http://keymon.com.mx:1782" +' 'Starter.DBReqServer = "http://201.99.139.28:1782" + '' Starter.DBReqServer = "http://187.189.244.154:1782" + '' Starter.DBReqServer = "http://10.0.0.205:1782" +' Else +' 'SERVER = "http://keymon.com.mx:1782" +' 'SERVER = "http://201.99.139.28:1782" +' 'SERVER = "http://177.244.63.54:1782" + '' Starter.DBReqServer = "http://187.189.244.154:1782" + '' SERVER = "http://10.0.0.205:1782" +' reqManager.Initialize(Me, Starter.DBReqServer) +' End If +End Sub + +Sub BUSCA_Click + B4XPages.ShowPage("TicketsDia") +End Sub + +Sub b_mapa_Click + Log("mapClic") + B4XPages.GetPage("Mapas") +End Sub + +Sub e_ruta_EnterPressed + If e_ruta.Text = "FIN DIA" Then + RES = Msgbox2("Seguro que desea hacer el cierre todos los datos se borraran?","Cierre", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore + If RES = DialogResponse.POSITIVE Then + e_ruta.Text = "" + Starter.skmt.ExecNonQuery("delete from CAT_GIRO") + B4XPages.MainPage.skmt.ExecNonQuery("delete from CLIENTE_NUEVO") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM GEOCERCA") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM COORDS_ALMACEN") + B4XPages.MainPage.skmt.ExecNonQuery("delete from COORDENADAS") + B4XPages.MainPage.skmt.ExecNonQuery("delete from PICKCIEGO_HECHO") + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente") + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido") + B4XPages.MainPage.skmt.ExecNonQuery("delete from PAGARES") + B4XPages.MainPage.skmt.ExecNonQuery("delete from noventa") + B4XPages.MainPage.skmt.ExecNonQuery("delete from clie_act") + B4XPages.MainPage.skmt.ExecNonQuery("delete from kmt_info") + B4XPages.MainPage.skmt.ExecNonQuery("delete from kmt_info2") + B4XPages.MainPage.skmt.ExecNonQuery("delete from cat_gunaprod") + B4XPages.MainPage.skmt.ExecNonQuery("delete from cat_gunaprod2") + B4XPages.MainPage.skmt.ExecNonQuery("delete from cat_gunaprod3") + B4XPages.MainPage.skmt.ExecNonQuery("delete from cat_gunaprod4") + B4XPages.MainPage.skmt.ExecNonQuery("delete from CAT_DETALLES_PAQ") + B4XPages.MainPage.skmt.ExecNonQuery("delete from HIST_VENTAS") + B4XPages.MainPage.skmt.ExecNonQuery("delete from HIST_VERIFICACION") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_ENCUESTA") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_STAY_OUT") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_GPS") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_FACE") + B4XPages.MainPage.skmt.ExecNonQuery("INSERT INTO HIST_STAY_OUT(HSO_INI, HSO_FIN) VALUES (0,0)") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM HIST_CODIGO_BARRAS") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM ABONOSP") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM ABONOS") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM PICK_CIEGO") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM RUTA_SUPLENCIA") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM RUTAA") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM CLIENTES_NUEVOS") + Starter.skmt.ExecNonQuery("DELETE FROM TABULADOR_MONEDAS") + Starter.skmt.ExecNonQuery("DELETE FROM TABULADOR_BILLETES") + B4XPages.MainPage.skmt.ExecNonQuery("DELETE FROM ENV_MONTO_LIQ") + B4XPage_Appear + l_rutasuplencia.Visible = False + Label22.Visible = False + l_rutasuplencia.Text = "" + End If + End If + If e_ruta.Text = "IWL" Then + ' trabajar.Visible = False + NUEVO.Visible =False + BUSCA.Visible=False + connecta.Visible=False + img3.Visible =True + Resumen.Visible= False + End If + If e_ruta.Text = "SUPLENCIA" Then + E_RUTA2.Visible = True + Panel11.Visible = True +' ImageView9.Visible = True + e_ruta.Text= "" + End If +End Sub + +Sub inv_Click + img2.Visible =True + EJECUTANDO = 1 + inve = 1 + B4XPages.MainPage.skmt.ExecNonQuery("delete from cat_gunaprod") + B4XPages.MainPage.skmt.ExecNonQuery("delete from cat_gunaprod2") + B4XPages.MainPage.skmt.ExecNonQuery("delete from CAT_DETALLES_PAQ") + c=B4XPages.MainPage.skmt.ExecQuery("select usuario from usuarioa") + c.Position = 0 + usuario = c.GetString("USUARIO") + c.Close + cmd.Initialize + cmd.Name = "select_cat_gunaprod_IZCA" + cmd.Parameters = Array As Object(ALMACEN) + reqManager.ExecuteQuery(cmd , 0, "gunaprod") + cmd.Initialize + cmd.Name = "select_cat_paquetes_IZCA" + cmd.Parameters = Array As Object(ALMACEN) + reqManager.ExecuteQuery(cmd , 0, "gunaprodp") + + cmd.Initialize + cmd.Name = "select_cat_detallepa_IZCA" + cmd.Parameters = Array As Object(ALMACEN) + reqManager.ExecuteQuery(cmd , 0, "detallepaq") + + cargar.Visible = False + Subir.Visible = False + connecta.Visible = True + inv.Visible = False + ToastMessageShow("Se Actualizaran los datos, Este proceso podria tardar hasta un minuto, gracias" , True) +End Sub + +Sub t1_tick + cmd.Initialize + cmd.Name = "select_cuantos_pedido_IZCA" + cmd.Parameters = Array As Object(ALMACEN,l_ruta.text) + reqManager.ExecuteQuery(cmd , 0, "valida_pedido") + + cmd.Initialize + cmd.Name = "select_cuantos_noventa_IZCA" + cmd.Parameters = Array As Object(ALMACEN,l_ruta.text) + reqManager.ExecuteQuery(cmd , 0, "valida_noventa") + + cmd.Initialize + cmd.Name = "select_cuantos_pedidoc_IZCA" + cmd.Parameters = Array As Object(ALMACEN,l_ruta.text) + reqManager.ExecuteQuery(cmd , 0, "valida_pedidoc") + + If PB2.Progress = 0 Then + S_CP.Text = "ENVIAR DATOS (K-1)" + End If + img2.Visible=False + t1.Enabled = False +End Sub + +Sub B_OK_PAS_Click + If CARGA = "SUBIR" And S_CP.Text = "INFO OK" Then + P1.Visible = False + p_mandaInfo.Visible = False + Btn_Ubicar.Visible=True + 'trabajar.Visible = True + NUEVO.Visible =True + BUSCA.Visible=True + connecta.Visible=True + Resumen.Visible= True + img2.Visible=False + Subs.panelVisible(p_principal, 0, 0) + Else If CARGA = "SUBIR" And S_CP.Text = "ERROR" Then + Msgbox("Tiene que subir de nuevo la información","Atención") 'ignore + P1.Visible = False + p_mandaInfo.Visible = False + ' trabajar.Visible = True + NUEVO.Visible =True + BUSCA.Visible=True + connecta.Visible=True + Resumen.Visible= True + img2.Visible=False + Subs.panelVisible(p_principal, 0, 0) + Else if CARGA = "SUBIR" And S_CP.Text <> "INFO OK" Then + RES = Msgbox2("Seguro que desea abortar el proceso","Cierre", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore + If RES = DialogResponse.POSITIVE Then + P1.Visible = False +' trabajar.Visible = True + NUEVO.Visible =True + BUSCA.Visible=True + connecta.Visible=True + Resumen.Visible= True + img2.Visible=False + Subs.panelVisible(p_principal, 0, 0) + ExitApplication + End If + End If + If CARGA = "CARGAR" And S_CP.Text = "LISTO" And S_CC.Text = "LISTO" And S_CH.Text = "LISTO" Then + P1.Visible = False + p_mandaInfo.Visible = False + p_mandaInfo.Visible = False + Btn_Ubicar.Visible=True + 'trabajar.Visible = True + NUEVO.Visible =True + BUSCA.Visible=True + connecta.Visible=True + Resumen.Visible= True + img2.Visible=False + Subs.panelVisible(p_principal, 0, 0) + + Dim cn As Cursor = Starter.skmt.ExecQuery("SELECT * FROM CLIENTES_NUEVOS") + If cn.RowCount > 0 Then + For gh = 0 To cn.RowCount -1 + cn.Position = gh + Starter.skmt.ExecNonQuery2("INSERT INTO kmt_info(CAT_CL_CODIGO,CAT_CL_RUTA,CAT_CL_NOMBRE,CAT_CL_ATIENDE1,CAT_CL_ATIENTE2,CAT_CL_TELEFONO,CAT_CL_EMAIL,CAT_CL_CALLE,CAT_CL_NOEXT,CAT_CL_NOINT,CAT_CL_CALLE1,CAT_CL_CALLE2,CAT_CL_COLONIA,CAT_CL_MUNI,CAT_CL_EDO,CAT_CL_CP,CAT_CL_LONG,CAT_CL_LAT,CAT_CL_MTOCOMPRA,CAT_CL_NUM_SERIEFISICO, gestion, CAT_CL_GIRO) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,0,0,0,?) ", Array As Object (cn.GetString("CN_ID"),cn.GetString("CN_RUTA"), cn.GetString("CN_NOMBRE"),"null","null","null","null","null","null","null","null","null","null","null","null","null",cn.GetString("CN_LON"),cn.GetString("CN_LAT"), cn.GetString("CN_GIRO"))) + Next + End If + + If E_RUTA2.Text <> "" Then + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO RUTA_SUPLENCIA(RS_RUTA) VALUES(?)",Array As String(E_RUTA2.Text)) + End If + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO RUTAA(RUTAA) VALUES(?)",Array As String(e_ruta.Text)) + checaPedido + + Dim c12 As Cursor = Starter.skmt.ExecQuery("Select PE_PRONOMBRE, PE_PROID, PE_CANT FROM PEDIDO WHERE PE_FOLIO = 'PREVENTA'") + If c12.RowCount > 0 Then + For i = 0 To c12.RowCount - 1 + c12.Position = i + Starter.skmt.ExecNonQuery($"UPDATE CAT_GUNAPROD SET CAT_GP_ALMACEN = CAT_GP_ALMACEN - ${c12.GetString("PE_CANT")} WHERE CAT_GP_ID = '${c12.GetString("PE_PROID")}'"$) + Next + End If + c12.Close + + Dim c13 As Cursor = Starter.skmt.ExecQuery("Select PE_PRONOMBRE, PE_PROID, PE_CANT FROM PEDIDO WHERE PE_FOLIO = 'VENTA'") + If c13.RowCount > 0 Then + For i = 0 To c13.RowCount - 1 + c13.Position = i + Starter.skmt.ExecNonQuery($"UPDATE CAT_GUNAPROD2 SET CAT_GP_ALMACEN = CAT_GP_ALMACEN - ${c13.GetString("PE_CANT")} WHERE CAT_GP_ID = '${c13.GetString("PE_PROID")}'"$) + Next + End If + c13.Close + + B4XPage_Appear + Else if CARGA = "CARGAR" And (S_CP.Text <> "LISTO" Or S_CC.Text <> "LISTO" Or S_CH.Text <> "LISTO") Then + RES = Msgbox2("Seguro que desea abortar el proceso","Cierre", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore + If RES = DialogResponse.POSITIVE Then + P1.Visible = False + p_mandaInfo.Visible = False +' trabajar.Visible = True + NUEVO.Visible =True + BUSCA.Visible=True + connecta.Visible=True + Resumen.Visible= True + img2.Visible=False + Subs.panelVisible(p_principal, 0, 0) + B4XPages.MainPage.skmt.ExecNonQuery("delete from kmt_info") + B4XPages.MainPage.skmt.ExecNonQuery("delete from cod_result") + B4XPages.MainPage.skmt.ExecNonQuery("delete from hist_gest") + B4XPages.MainPage.skmt.ExecNonQuery("delete from cat_gunaprod") + B4XPages.MainPage.skmt.ExecNonQuery("delete from cat_gunaprod2") + B4XPages.MainPage.skmt.ExecNonQuery("delete from cat_gunaprod3") + B4XPages.MainPage.skmt.ExecNonQuery("delete from cat_gunaprod4") + B4XPages.MainPage.skmt.ExecNonQuery("delete from CAT_DETALLES_PAQ") + B4XPages.MainPage.skmt.ExecNonQuery("delete from telefonos") + B4XPages.MainPage.skmt.ExecNonQuery("delete from HIST_VENTAS") + B4XPages.MainPage.skmt.ExecNonQuery("delete from HIST_PROMOS") + B4XPages.MainPage.skmt.ExecNonQuery("delete from HIST_CLIENTE_CANT_PROMOS") + B4XPages.MainPage.skmt.ExecNonQuery("delete from PROMOS_COMP") + B4XPages.MainPage.skmt.ExecNonQuery("delete from CAT_VERIFICACION") + ExitApplication + End If + End If +End Sub + +Sub NUEVO_Click + + ' Verificar si el punto está dentro del polígono + + Dim mPoint As LatLng + mPoint.Initialize(B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps) + +' If lista_punta.Size > 0 Then +' Dim dentro As Boolean = PointInPolygon(mPoint, lista_punta) +' +' If dentro Then +' ToastMessageShow("El punto está DENTRO del polígono", True) + B4XPages.ShowPage("NuevoCliente") +' Else +' ToastMessageShow("El punto está FUERA del polígono", True) +' End If +' End If + +End Sub + +Sub B_OK_RES_Click + ' trabajar.Visible = True + NUEVO.Visible =True + BUSCA.Visible=True + connecta.Visible=True + Resumen.Visible= True + P_RESUMEN.Visible=False + Panel4.Visible = False + SCROLL_RESDIA.Visible = False + Btn_Ubicar.Visible=True + p_principal.Visible = True +End Sub + +Sub Resumen_Click + P_RESUMEN.Visible = True + +' NUEVO.Visible =False +' BUSCA.Visible=False +' connecta.Visible=False +' Subir.Visible=False +' cargar.Visible=False +' Resumen.Visible= False +End Sub + +Sub P_RESUMEN_click + +End Sub + +Sub CARGA_Click + B4XPages.ShowPage("Productos") +End Sub + +Sub resdia_Click + p_principal.Visible = False + Btn_Ubicar.Visible=False + SCROLL_RESDIA.Visible = True + SCROLL_RESDIA.Panel.LoadLayout("RESDIA") + SCROLL_RESDIA.Panel.Height = Panel4.Height + Panel4.Visible = True + + NUEVO.Visible =False + BUSCA.Visible=False + connecta.Visible=False + Subir.Visible=False + cargar.Visible=False + Resumen.Visible= False + + d=B4XPages.MainPage.skmt.ExecQuery2("select COUNT(*) AS CUANTOS FROM HIST_ENCUESTA WHERE HE_TIPO = ?", Array As String("TELEFONO")) + d.Position = 0 + l_encuesta.Text = d.GetString("CUANTOS") + d.Close + + L_MARCAS.CLEAR + d=B4XPages.MainPage.skmt.ExecQuery2("select distinct HE_CLIE AS CLIENTE FROM HIST_ENCUESTA WHERE HE_TIPO = ?", Array As String("TELEFONO")) + If D.RowCount>0 Then + For i=0 To D.RowCount -1 + D.Position=i + c=B4XPages.MainPage.skmt.ExecQuery2("Select HE_RES from HIST_ENCUESTA where HE_CLIE = ? AND HE_TIPO = ?", Array As String(d.GetString("CLIENTE"), "TELEFONO")) + c.Position = 0 + Dim label1 As Label + label1 = L_MARCAS.TwoLinesLayout.Label + label1.TextSize = 13 + label1.TextColor = Colors.Black + Dim label2 As Label + label2 = L_MARCAS.TwoLinesLayout.SecondLabel + label2.TextSize = 13 + label2.TextColor = Colors.Black + L_MARCAS.AddTwoLines(d.GetString("CLIENTE"),"TELEFONO :" & c.GetString("HE_RES") ) + c.Close + Next + End If + d.Close + + c=B4XPages.MainPage.skmt.ExecQuery2("Select sum(PE_COSTO_TOT) As MONTO_DIA from pedido where PE_CLIENTE <> 0 and pe_proid in (Select CAT_GP_ID from cat_gunaprod where CAT_GP_TIPO = ? )", Array As String("RTEC")) + c.Position = 0 + l_monto_k.Text = c.GetString("MONTO_DIA") + If l_monto_k.Text = "null" Then + l_monto_k.Text = "0" + End If + c.Close + + c=B4XPages.MainPage.skmt.ExecQuery2("Select sum(PE_COSTO_TOT) As MONTO_DIA from pedido where PE_CLIENTE <> 0 and pe_proid in (Select CAT_GP_ID from cat_gunaprod where CAT_GP_TIPO = ? )", Array As String("PING")) + c.Position = 0 + l_monto_kp.Text = c.GetString("MONTO_DIA") + If l_monto_kp.Text = "null" Then + l_monto_kp.Text = "0" + End If + c.Close + +' c=skmt.ExecQuery2("Select sum(PE_COSTO_TOT) As MONTO_DIA from pedido where PE_CLIENTE <> 0 and pe_proid in (Select CAT_GP_ID from cat_gunaprod where CAT_GP_TIPO = ? )", Array As String("SALTY SNACKS")) +' c.Position = 0 +' l_monto_ks.Text = c.GetString("MONTO_DIA") +' If l_monto_ks.Text = "null" Then +' l_monto_ks.Text = "0" +' End If + ' +' c.Close + c=B4XPages.MainPage.skmt.ExecQuery("Select sum(PE_COSTO_TOT) As MONTO_DIA from pedido where PE_CLIENTE <> 0 ") + c.Position = 0 + l_monto_ks.Text = Subs.traeTotalCliente + + If l_monto_ks.Text = "null" Then + l_monto_ks.Text = "0" + End If + c.Close + c=B4XPages.MainPage.skmt.ExecQuery2("Select sum(PE_COSTO_TOT) As PREVENTA from pedido where PE_FOLIO = ? AND PE_CLIENTE <> 0", Array As String ("PREVENTA")) + If c.RowCount > 0 Then + c.Position = 0 + L_PREVENTA.Text = Subs.traeTotalClientepreventa + If L_PREVENTA.TEXT = "null" Then + L_PREVENTA.Text = "0" + End If + End If + c.Close + c=B4XPages.MainPage.skmt.ExecQuery2("Select sum(PE_COSTO_TOT) As VENTA from pedido where PE_FOLIO = ? AND PE_CLIENTE <> 0", Array As String ("VENTA")) + If c.RowCount > 0 Then + c.Position = 0 + L_VENTA.Text = Subs.traeTotalClienteventa + If L_VENTA.TEXT = "null" Then + L_VENTA.Text = "0" + End If + End If + c.Close + c=B4XPages.MainPage.skmt.ExecQuery2("Select sum(PE_COSTO_TOT) As ABORDO from pedido where PE_FOLIO = ? AND PE_CLIENTE = ?", Array As String ("ABORDO", "0")) + If c.RowCount > 0 Then + c.Position = 0 + L_ABORDO.Text = Subs.traeTotalClienteabordo + If L_ABORDO.TEXT = "null" Then + L_ABORDO.Text = "0" + End If + End If + c.Close + Dim cuantos_obj As String + c=B4XPages.MainPage.skmt.ExecQuery("Select count(*) AS TOTAL from HIST_MARCAS_CUOTAS ") + c.Position = 0 + cuantos_obj = c.GetString("TOTAL") + c.Close + + If cuantos_obj > 0 Then + c=B4XPages.MainPage.skmt.ExecQuery("Select SUM( HMC_TOTAL) AS TOTAL from HIST_MARCAS_CUOTAS ") + c.Position = 0 + L_NES.Text = c.GetString("TOTAL") + c.Close + End If + L_REAL.Text = l_monto_ks.Text + L_ALCANCE.Text = Round2((L_NES.Text / L_REAL.Text + 1),2) + L_VPLAN.Text = l_porvisitar.Text + L_VREAL.Text = L_CUANTOST.text + L_EFEC_VIS.Text = Round2(L_VREAL.text / L_VPLAN.Text,2) + L_VISITCC.Text = l_cuantosc.text + L_EFEC_PV.Text = Round2(L_VISITCC.Text / L_VREAL.Text,2) + L_EFEC_PURA.Text = Round2(L_VISITCC.Text / L_VPLAN.Text,2) + L_LIN_TICK.Text = LPT + If l_monto_ks.Text <> "0" Then + + c=B4XPages.MainPage.skmt.ExecQuery2("Select COUNT(DISTINCT(PE_CLIENTE)) AS CUANTOS FROM PEDIDO WHERE PE_CEDIS = ? ", Array As String(ALMACEN)) + c.Position = 0 + L_CTE_PROMO.Text = c.GetString("CUANTOS") + c.Close + d=B4XPages.MainPage.skmt.ExecQuery2("Select sum(PE_COSTO_TOT) AS MONTO_DIA FROM PEDIDO WHERE PE_PROID IN (select CAT_GP_ID from cat_gunaprod where CAT_GP_TIPOPROD = ?) ", Array As String("PRIORITARIO")) + d.Position = 0 + '/////////////////////////////////////////////////////////////////////////////// + '//////////////////////////// ULTIMA LINEA ANTES DEL ERROR ////////////////// + '////////// java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference + ' + '/// Al parecer d.GetString("MONTO_DIA") regresa null y la funcion numberFormat truena + '///////////////////////////////////////////////////////////////////////////////// + Log("|"&d.GetString("MONTO_DIA")&"|") + 'L_PRIO.Text = NumberFormat(d.GetString("MONTO_DIA"),0,2) + L_PRIO.Text = d.GetString("MONTO_DIA") + d.Close + + d=B4XPages.MainPage.skmt.ExecQuery2("Select sum(PE_COSTO_TOT) AS MONTO_DIA FROM PEDIDO WHERE PE_PROID IN (select CAT_GP_ID from cat_gunaprod where CAT_GP_TIPOPROD = ?) ", Array As String("ESTRATEGICO")) + d.Position = 0 + L_SECUND.Text =d.GetString("MONTO_DIA") + d.Close + + d=B4XPages.MainPage.skmt.ExecQuery2("Select sum(PE_COSTO_TOT) AS MONTO_DIA FROM PEDIDO WHERE PE_PROID IN (select CAT_GP_ID from cat_gunaprod where CAT_GP_TIPOPROD = ?) ", Array As String("COMPLEMENTARIO")) + d.Position = 0 + L_COMP.Text =d.GetString("MONTO_DIA") + d.Close + Else + L_PRIO.Text = "0" + L_SECUND.Text = "0" + L_COMP.Text = "0" + End If + + c=B4XPages.MainPage.skmt.ExecQuery("Select COUNT(*) AS CUANTOS FROM PEDIDO WHERE PE_CEDIS = PE_PROID ") + c.Position = 0 + If c.GetString("CUANTOS") > 0 Then + d=B4XPages.MainPage.skmt.ExecQuery("Select sum(pe_cant) AS CUANTOS FROM PEDIDO WHERE PE_CEDIS = PE_PROID ") + d.Position = 0 + L_CTE_PROMO.Text = d.GetString("CUANTOS") + d.Close + L_REDEN_PROMO.TEXT = Round2(L_VISITCC.Text / L_CTE_PROMO.Text,2) + Else + L_CTE_PROMO.Text = 0 + L_REDEN_PROMO.Text = 0 + End If + c.Close + d=B4XPages.MainPage.skmt.ExecQuery("Select COUNT(*) AS CUANTOS FROM PEDIDO ") + d.Position = 0 + L_LIN_TICK.Text = Round2(d.GetString("CUANTOS") / L_VISITCC.Text,2) + d.Close + + d=B4XPages.MainPage.skmt.ExecQuery("Select count(*) as CUANTOS from HIST_CUOTAS ") + d.Position = 0 + If d.GetString("CUANTOS") > 0 Then + ' c=skmt.ExecQuery("Select HC_CUOTA1,HC_CUOTA2,HC_CUOTA3 from HIST_CUOTAS ") + ' c.Position = 0 + ' l_monto_c1.Text = Round( c.GetString("HC_CUOTA1") / 6) + ' l_monto_c2.Text = Round(c.GetString("HC_CUOTA2") / 6) + ' l_monto_c3.Text = Round(c.GetString("HC_CUOTA3") / 6) + ' c.Close + Else + l_monto_c1.Text = 4000 + l_monto_c2.Text = 2000 + l_monto_c3.Text = 1000 + End If + d.Close +End Sub + +Sub hacer_ped_Click + B4XPages.ShowPage("Clientes") +End Sub + +Sub nvo_cliente_Click + ' Verificar si el punto está dentro del polígono + + Dim mPoint As LatLng + mPoint.Initialize(B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps) + +' If lista_punta.Size > 0 Then +' Dim dentro As Boolean = PointInPolygon(mPoint, lista_punta) +' +' If dentro Then +' ToastMessageShow("El punto está DENTRO del polígono", True) + B4XPages.ShowPage("NuevoCliente") +' Else +' ToastMessageShow("El punto está FUERA del polígono", True) +' End If +' End If +End Sub + +Sub tickets_dia_Click + B4XPages.ShowPage("TicketsDia") +End Sub + +Sub GPS_LocationChanged (Location1 As Location) + +End Sub + +Sub Btn_Ubicar_Click + rp.CheckAndRequest(rp.PERMISSION_ACCESS_FINE_LOCATION) + Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) + If Result Then + StartActivity(MAPA_RUTAS) + End If +End Sub + +'''''''''''''''''''''''''''''''''''' VALIDAR CARACTERES +Sub e_ruta_TextChanged (Old As String, New As String) + Dim validChars As String ="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 " +' Log("Antes: " & Old & " | " & New) + If Old <> "KMTS1" Then +' Log("Desp: " & Old & " | " & New) + Try + If validChars.Contains(New.SubString(New.Length-1)) = False Then + e_ruta.Text = New.SubString2(0, New.Length-1) + e_ruta.SelectionStart = e_ruta.Text.Length + End If + Catch + Log(LastException) + End Try + End If +End Sub + +Sub B_COMM_Click + Btn_Ubicar.Visible=False + SCROLL_RESDIA.Visible = True + SCROLL_RESDIA.Panel.LoadLayout("COMIS") + SCROLL_RESDIA.Panel.Height = Panel_C.Height + Panel4.Visible = False + Panel_C.Visible = True + +' trabajar.Visible = False + NUEVO.Visible =False + BUSCA.Visible=False + connecta.Visible=False + Subir.Visible=False + cargar.Visible=False + Resumen.Visible= False +' +' If l_ruta.Text <> 0 Then +' c=B4XPages.MainPage.skmt.ExecQuery("Select HCM_TOTAL_V , HCM_TOTAL_VIVE , HCM_TOTAL_GUNA , HCM_TOTAL_BEB from HIST_COMISIONES_MOVIL ") +' c.Position = 0 +' L_TOTAL_BA.Text = c.GetString("HCM_TOTAL_BEB") +' L_TOTAL_GUNA.Text = c.GetString("HCM_TOTAL_GUNA") +' L_TOTAL_MM.Text = c.GetString("HCM_TOTAL_V") +' L_TOTAL_VIVE.Text = c.GetString("HCM_TOTAL_VIVE") +' c.Close +' L_TOTAL_COMIS.Text = 0 +' Else +' L_TOTAL_BA.Text = 0 +' L_TOTAL_GUNA.Text = 0 +' L_TOTAL_MM.Text = 0 +' L_TOTAL_VIVE.Text = 0 +' L_TOTAL_COMIS.Text = 0 +' End If +End Sub + +Sub B_OK_COMISS_Click + NUEVO.Visible =True + BUSCA.Visible=True + connecta.Visible=True + Resumen.Visible= True + P_RESUMEN.Visible=False + Panel_C.Visible = False + SCROLL_RESDIA.Visible = False + Btn_Ubicar.Visible=True +End Sub + + +Sub B_MARCAS_Click +' SCROLL_RESDIA.Visible = False +' Panel5.Visible = True +' pnlTitle.Visible = False +' pnlTitle.SetLayoutAnimated(0, 0, 0, CLV1.AsView.Width, TitleHeight + DividerHeight) +' pnlTitle.LoadLayout("CellTitle") +' c=B4XPages.MainPage.skmt.ExecQuery("Select CAT_GP_CLASIF, sum(pe_costo_tot) As total from CATALOGO, pedido where pe_proid = cat_gp_id And pe_cliente <> 0 group by cat_gp_clasif") +' +' CLV1.Clear +' If c.RowCount>0 Then +' For i=0 To c.RowCount -1 +' c.Position=i +' AddTitle(c.GetString("CAT_GP_CLASIF")) +' f=B4XPages.MainPage.skmt.ExecQuery2("select * from HIST_AVANCE where HA_MARCA = ?", Array As String(c.GetString("CAT_GP_CLASIF"))) +' f.Position=0 +' If f.RowCount > 0 Then +' CLV1.AddTextItem("VENTA = $" & f.GetString("HA_AVANCE"),"1") +' CLV1.AddTextItem("META = $" & f.GetString("HA_OBJETIVO"),"1") +' CLV1.AddTextItem("PORCENTAJE = %" & (f.GetString("HA_PORCENTAJE")) ,"1") +' End If +' f.Close +' Next +' End If +' c.Close + + SCROLL_RESDIA.Visible = False + Panel5.Visible = True + pnlTitle.Visible = False + pnlTitle.SetLayoutAnimated(0, 0, 0, CLV1.AsView.Width, TitleHeight + DividerHeight) + pnlTitle.LoadLayout("CellTitle") + c=B4XPages.MainPage.skmt.ExecQuery("Select CAT_GP_CLASIF, SUM(TOTAL) AS TOTAL FROM TOTAL_MARCAS GROUP BY CAT_GP_CLASIF") + CLV1.Clear + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + AddTitle(c.GetString("CAT_GP_CLASIF")) + If c.GetString("CAT_GP_CLASIF") = "PROMOS" Then + d=B4XPages.MainPage.skmt.ExecQuery("SELECT SUM(PE_CANT) AS CUANTOS FROM PEDIDO WHERE PE_CEDIS = PE_PROID") + d.Position=0 + CLV1.AddTextItem("CANTIDAD DE PROMOS = " & d.GetString("CUANTOS"),"1") + d.Close + Else + f=B4XPages.MainPage.skmt.ExecQuery2("select COUNT(*) AS CUANTOS from HIST_MARCAS_CUOTAS where HMC_MARCA = ?", Array As String(c.GetString("CAT_GP_CLASIF"))) + f.Position=0 + If f.GetString("CUANTOS") > 0 Then + e=B4XPages.MainPage.skmt.ExecQuery2("select HMC_MARCA, HMC_TOTAL from HIST_MARCAS_CUOTAS where HMC_MARCA = ?", Array As String(c.GetString("CAT_GP_CLASIF"))) + e.Position=0 + d=B4XPages.MainPage.skmt.ExecQuery2("SELECT count(distinct(PE_CLIENTE)) AS CUANTOS FROM PEDIDO WHERE PE_PROID in (select CAT_GP_ID from cat_gunaprod WHERE CAT_GP_CLASIF =?)", Array As String (c.GetString("CAT_GP_CLASIF"))) + d.Position=0 + CLV1.AddTextItem("TOTAL PREVENTA = $" & c.GetString("TOTAL"),"1") + CLV1.AddTextItem("M E T A = $" & e.GetString("HMC_TOTAL"),"1") + CLV1.AddTextItem("FALTA = $" & (e.GetString("HMC_TOTAL") - c.GetString("TOTAL")) ,"1") + CLV1.AddTextItem("CLIENTES = " & d.GetString("CUANTOS"),"1") + d.Close + e.Close + Else + d=B4XPages.MainPage.skmt.ExecQuery2("SELECT count(distinct(pe_cliente)) AS CUANTOS FROM PEDIDO WHERE PE_PROID in (select CAT_GP_ID from cat_gunaprod WHERE CAT_GP_CLASIF =?)", Array As String (c.GetString("CAT_GP_CLASIF"))) + d.Position=0 + CLV1.AddTextItem("TOTAL PREVENTA = $" & c.GetString("TOTAL"),"1") + CLV1.AddTextItem("M E T A = $" & "1000","1") + CLV1.AddTextItem("FALTA = $" & (1000 - c.GetString("TOTAL")) ,"1") + CLV1.AddTextItem("CLIENTES = " & d.GetString("CUANTOS"),"1") + d.Close + End If + f.Close + End If + Next + End If + c.Close + c=B4XPages.MainPage.skmt.ExecQuery("Select HMC_MARCA, HMC_TOTAL from HIST_MARCAS_CUOTAS where HMC_MARCA not in (SELECT CAT_GP_CLASIF FROM TOTAL_MARCAS )") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + AddTitle(c.GetString("HMC_MARCA")) + CLV1.AddTextItem("TOTAL PREVENTA = $ 0.00","1") + CLV1.AddTextItem("M E T A = $" & C.GetString("HMC_TOTAL"),"1") + CLV1.AddTextItem("CLIENTES = 0","1") + Next + End If + c.Close + + +End Sub + +Sub AddTitle (Title As String) + Dim p_MARCAS As B4XView = xui.CreatePanel("") + p_MARCAS.SetLayoutAnimated(0, 0, 0, CLV1.AsView.Width, TitleHeight) + p_MARCAS.LoadLayout("CellTitle") + lblTitle.Text = Title + Dim td As TitleData + td.Title = Title + CLV1.Add(p_MARCAS, td) +End Sub + +Sub B_OK_PANEL5_Click + Panel5.Visible = False + NUEVO.Visible =True + BUSCA.Visible=True + connecta.Visible=True + Resumen.Visible= True + P_RESUMEN.Visible=False + Panel4.Visible=False + SCROLL_RESDIA.Visible = False + Btn_Ubicar.Visible=True + p_principal.Visible = True + +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Private Sub p_mandaInfo_Click + +End Sub + +Private Sub iv_abordo_Click + Starter.skmt.ExecNonQuery("delete from CUENTAA") + Starter.skmt.ExecNonQuery2("INSERT INTO CUENTAA VALUES (?)", Array As Object("0")) + B4XPages.MainPage.tipo_venta = "ABORDO" + B4XPages.ShowPage("Productos") +End Sub + +Sub checaPedido + Private c As Cursor = Starter.skmt.ExecQuery("SELECT PC_CLIENTE FROM PEDIDO_CLIENTE") + If c.RowCount > 0 Then + Starter.skmt.ExecNonQuery("Update kmt_info set gestion = 2 WHERE CAT_CL_CODIGO IN (SELECT PC_CLIENTE FROM PEDIDO_CLIENTE)") + End If + Private c As Cursor = Starter.skmt.ExecQuery("SELECT NV_CLIENTE FROM NOVENTA") + If c.RowCount > 0 Then + Starter.skmt.ExecNonQuery("Update kmt_info set gestion = 3 WHERE CAT_CL_CODIGO IN (SELECT NV_CLIENTE FROM NOVENTA)") + End If + + Private coord As Cursor = Starter.skmt.ExecQuery("SELECT * FROM COORDENADAS") + If coord.RowCount > 0 Then + For cor = 0 To coord.RowCount -1 + coord.Position = cor + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE kmt_info set CAT_CL_LONG = ?, CAT_CL_LAT =?, CAT_CL_BCOORDENADAS = ? where CAT_CL_CODIGO = ?", Array As Object(coord.GetString("LAT"), coord.GetString("LONG"),(coord.GetInt("CANTIDAD")+1),coord.GetString("CLIENTE"))) + Next + End If +End Sub + +Private Sub b_tabulador_Click + B4XPages.ShowPage("tabulador") +End Sub + +Private Sub btnCobranza_Click + Log("Entrando al Panel de Cobranza") + + pnlCobranza.Width = Root.Width + pnlCobranza.Height = Root.Height + pnlCobranza.Left = 0 + pnlCobranza.Top = 0 + pnlCobranza.BringToFront + pnlCobranza.Visible = True + pnlTotal.Visible = True + Dim ct As Cursor = B4XPages.MainPage.skmt.ExecQuery($"SELECT IFNULL(sum(IFNULL(a.a_abono,0)),0) as suma_abono FROM kmt_info2 ki LEFT JOIN ABONOSP ap ON ki.CAT_CL_CODIGO = ap.CLIENTE LEFT JOIN ABONOS a ON ki.CAT_CL_CODIGO = a.a_cliente WHERE CAST(ap.SALDO_PENDIENTE AS REAL) > 0"$) + ct.Position = 0 + If ct.RowCount > 0 Then + lblTotal.Text = "El total abonado es: $" & ct.getString("suma_abono") + End If + lblVersion.Text = Application.VersionName + ct.Close + CargarDatosCobranza +End Sub + +Private Sub CargarDatosCobranza + For i = pnlCobranza.NumberOfViews - 1 To 0 Step -1 + Dim v As View = pnlCobranza.GetView(i) + If v Is Label Then + Dim lbl As Label = v + If lbl.Text = "No hay cuentas por cobrar" Then + pnlCobranza.RemoveViewAt(i) + End If + End If + Next + c = B4XPages.MainPage.skmt.ExecQuery($"SELECT ROW_NUMBER() OVER (ORDER BY ki.CAT_CL_NOMBRE) AS Secuencia, ki.CAT_CL_CODIGO, ki.CAT_CL_NOMBRE, ap.SALDO_PENDIENTE, IFNULL(a.a_abono,0) as a_abono FROM kmt_info2 ki LEFT JOIN ABONOSP ap ON ki.CAT_CL_CODIGO = ap.CLIENTE LEFT JOIN ABONOS a ON ki.CAT_CL_CODIGO = a.a_cliente WHERE CAST(ap.SALDO_PENDIENTE AS REAL) > 0"$) + Log("Número de registros: " & c.RowCount) + + clvCobranza.Clear + + For i = 0 To c.RowCount - 1 + c.Position = i + + Dim pItem As B4XView = xui.CreatePanel("") + pItem.LoadLayout("C_CuentasXCobrar") + pItem.SetLayoutAnimated(0, 0, 0, Root.Width, 100dip) + pItem.Color = Colors.White + + pnlContenedorCobranza.SetLayoutAnimated(0, 0, 0, pItem.Width, pItem.Height) + pnlContenedorCobranza.Color = xui.Color_Transparent + + l_Secuencia.Text = c.GetString("Secuencia") + + ' Manejo seguro del nombre + Dim codigo As String = c.GetString("CAT_CL_CODIGO") + Dim nombre As String = c.GetString("CAT_CL_NOMBRE") + If codigo = Null Then codigo = "" + If nombre = Null Then nombre = "" + l_Nombre.SingleLine = False + l_Nombre.Text = codigo & " " & nombre + + l_CuentaXCobrar.Text = "$" & NumberFormat(c.GetDouble("SALDO_PENDIENTE"), 1, 2) + l_Abono.Text = "$" & NumberFormat(c.GetDouble("a_abono"), 1, 2) + + clvCobranza.Add(pItem, "Item-" & i) + Next + + c.Close + pnlCobranza.Invalidate + + If c.RowCount = 0 Then + Dim lblEmpty As Label + lblEmpty.Initialize("") + lblEmpty.Text = "No hay cuentas por cobrar" + lblEmpty.TextSize = 16 + lblEmpty.TextColor = Colors.Gray + lblEmpty.Gravity = Gravity.CENTER + pnlCobranza.AddView(lblEmpty, 0, 100dip, Root.Width, 50dip) + End If +End Sub + +Private Sub btnRegresar_Click + pnlCobranza.Visible = False +End Sub + +Private Sub pnlCobranza_Click + +End Sub + +'Private Sub clvCobranza_ItemClick (Index As Int, Value As Object) +' Dim CodigoCliente As Cursor = Value +' CodigoCliente = B4XPages.MainPage.skmt.ExecQuery($"SELECT ROW_NUMBER() OVER (ORDER BY ki.CAT_CL_NOMBRE) AS Secuencia, ki.CAT_CL_NOMBRE, ap.SALDO_PENDIENTE, IFNULL(a.a_abono,0) as a_abono FROM kmt_info2 ki LEFT JOIN ABONOSP ap ON ki.CAT_CL_CODIGO = ap.CLIENTE LEFT JOIN ABONOS a ON ki.CAT_CL_CODIGO = a.a_cliente WHERE CAST(ap.SALDO_PENDIENTE AS REAL) > 0"$) +' B4XPages.ShowPage("cliente") +'End Sub + +Private Sub b_regreso_Click + p_prod.Visible = False +End Sub + +Private Sub p_prod_Click + +End Sub + +Private Sub b_productos_Click + + Dim label1 As Label + label1 = lv_prod_Prin.SingleLineLayout.Label + label1.TextSize = 14 + p_prod.Width = Root.Width + p_prod.Height = Root.Height + b_regreso.Left = (p_prod.Width - b_regreso.Width) / 2 + b_regreso.Top = p_prod.Height - b_regreso.Height + + p_prod.Visible = True + p_prod.BringToFront + + + Private c As Cursor = Starter.skmt.ExecQuery("select CAT_GP_NOMBRE AS HVD_PRONOMBRE, IFNULL(CAT_GP_PRECIO, 0) AS HVD_RECHAZOCANT from CAT_GUNAPROD order by CAT_GP_NOMBRE asc") + + lv_prod_Prin.SingleLineLayout.Label.TextColor = Colors.Black + lv_prod_Prin.Clear + If c.RowCount > 0 Then + For i = 0 To c.RowCount - 1 + c.Position = i + Dim itemText As String + + + + itemText = $"${c.GetString("HVD_PRONOMBRE")} ${CRLF}Precio: ${(c.GetDouble("HVD_RECHAZOCANT"))}"$ + lv_prod_Prin.AddSingleLine(itemText) + + + Next + Else + lv_prod_Prin.AddSingleLine("No hay datos disponibles.") + End If + c.Close + +End Sub \ No newline at end of file diff --git a/B4A/C_Productos.bas b/B4A/C_Productos.bas new file mode 100644 index 0000000..e785419 --- /dev/null +++ b/B4A/C_Productos.bas @@ -0,0 +1,1985 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore + Dim ruta As String + Dim q_buscar As String + Dim forzarBusqueda As Boolean = False + Dim skmt As SQL + Dim c As Cursor + Dim c2 As Cursor + Dim C3 As Cursor + Dim s As Cursor + Dim lv_catalogos As ListView + Dim lv_promos As ListView + Dim entro As String + Dim gest As Button + Dim lfila As Label + Dim marca As String + Dim tipo As String + Dim subtipo As String + Private BUSCA As EditText + Dim ya_entro As String + Dim TIENE_PROMOS As String + Dim RES As String + Dim S1 As Cursor + Dim bmp As Bitmap + Dim ciclo As String + Private b_qr As Button + Private p_productos As Panel + Dim clv_productos As CustomListView + Private ImageView1 As ImageView + Private Panel3 As Panel + Private p_prods As Panel + Private i_prod As ImageView + Private l_prodX As Label + Private b_prodMas As Button + Private l_pCant As Label + Private et_pCant As EditText + Private b_prodMenos As Button + Dim b_terminar1 As Button + Dim b_continuar As Button + Private l_total As Label + Private l_totProds As Label + Dim totalProds As Int = 0 + Dim totalCompra As Float = 0 + Dim etCantHasFocus As Boolean = False + Dim prodsMap As Map + Private l_Cargando As Label + Private l_info As Label + Private b_buscar As Button + Private p_botonesVenta As Panel + Private lv_tipo As ListView + Private lv_subtipo As ListView + Private p_vistaPreviaTrans As Panel + Private lv_prodsPedido As ListView + Private b_rechazar As Button + Private b_aceptar As Button + Private p_vistaPrevia As Panel + Dim folio As String + Dim result As String + Private l_cant As Label + Private l_total2 As Label + Dim prodsPedidoActual As String + Dim montoPedidoActual As String + + Dim clv_prods_ll As CustomListView + Private PCLV As PreoptimizedCLV + Dim listaProds As List +' Type AirportData (Name As String, AirportID As Int, IATA As String, ICAO As String, City As String, Latitude As Float, Longitude As Float, Altitude As String) + Dim pedidoMap As Map + Private p_botMasMen As Panel + Dim reiniciarlistaProds As Boolean= False +' Dim listaRenglones As List + Dim listaTiempos As List + Dim clienteId As String + Dim rutaUsuario As String + Dim hayPedido As Boolean + Dim listaHints As List + Dim r As Cursor + Dim vamoaver As List + Dim j3 As Cursor + Dim invTotal As Int + Private et_pCantc As EditText + Private b_prodMenosc As Button + Private b_prodMasc As Button + Dim totalcajasmaspiezas As Int + Dim cajas As Int + Dim piezas As Int + + Private p_botMasMenc As Panel +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root +' Activity.RemoveAllViews + Root.LoadLayout("productos") + ruta = File.DirInternal + If File.Exists(ruta, "kmt.db") = False Then + File.Copy(File.DirAssets, "kmt.db", ruta, "kmt.db") + End If + PCLV.Initialize(Me, "PCLV", clv_prods_ll) + ciclo = 1 + l_info.Width = Root.Width * 0.8 + l_info.Left = (Root.Width/2) - (l_info.Width/2) + c = B4XPages.MainPage.skmt.ExecQuery("select distinct CAT_GP_TIPO from cat_gunaprod where CAT_GP_TIPO <> 'PROMOS' order by CAT_GP_TIPO") + If c.RowCount > 0 Then + Dim label1 As Label + label1 = lv_tipo.SingleLineLayout.Label + label1.TextSize = 17 + label1.TextColor = Colors.Black + lv_tipo.Clear + For i=0 To c.RowCount-1 + c.Position=i + Log("ENTRE AQUI EN PROMOS create") + lv_tipo.AddSingleLine(c.GetString("CAT_GP_TIPO")) + Next + End If + c.Close +' llenaCatalogo(False) +' listaRenglones.Initialize + listaTiempos.Initialize + listaProds.Initialize + pedidoMap.Initialize + listaHints.Initialize +' Log("Llamamos LlenaProdsLL") +' LlenaProdsLL(Null) + clv_prods_ll.Clear + prodsMap.Initialize +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Sub B4XPage_Appear + Log(B4XPages.MainPage.tipo_venta) + If B4XPages.MainPage.tipo_venta = "PREVENTA_CONTADO" Or B4XPages.MainPage.tipo_venta = "ABORDO" Then + Starter.tabla = "CAT_GUNAPROD" + Log("1") + Else If B4XPages.MainPage.tipo_venta = "VENTA" Then + Starter.tabla = "CAT_GUNAPROD2" + Log(2) + Else If B4XPages.MainPage.tipo_venta = "RECARGA" Then + Starter.tabla = "CAT_GUNAPROD" + Log(3) + Else If B4XPages.MainPage.tipo_venta = "PREVENTA_CREDITO" Then + Starter.tabla = "CAT_GUNAPROD4" + Log(4) + End If + Log(Starter.tabla) + clienteId = Subs.traeCliente + rutaUsuario = Subs.traeRuta(Subs.traeCliente) + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE CAT_GUNAPROD SET CAT_GP_TIPOPROD = (?) WHERE CAT_GP_TIPOPROD = (?) ",Array As Object("PRIORITARIO","1")) + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE CAT_GUNAPROD SET CAT_GP_TIPOPROD = (?) WHERE CAT_GP_TIPOPROD = (?) ",Array As Object("ESTRATEGICO","2")) + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE CAT_GUNAPROD SET CAT_GP_TIPOPROD = (?) WHERE CAT_GP_TIPOPROD = (?) ",Array As Object("COMPLEMENTARIO","3")) + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE CAT_GUNAPROD SET CAT_GP_TIPOPROD = (?) WHERE CAT_GP_TIPOPROD = (?) ",Array As Object("CATALOGO REGULAR","0")) + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE CAT_GUNAPROD SET CAT_GP_TIPOPROD = (?) WHERE CAT_GP_CLASIF = (?) ",Array As Object("PROMOS","PROMOS")) + clv_prods_ll.GetBase.SetLayoutAnimated(0, 5dip, 130dip, Root.Width + 10, Root.Height * 0.74) 'Cambiamos el tamaño y posición de la lista de productos + clv_prods_ll.Base_Resize(clv_prods_ll.GetBase.Width, clv_prods_ll.GetBase.Height) 'Cambiamos el tamaño del panel interno de la lista para que ajuste al nuevo tamaño. + If B4XPages.MainPage.bTerminarClicked Then + lv_catalogos.Visible = True + lv_promos.Visible = False + lv_tipo.Visible = False + lv_subtipo.Visible = False + clv_prods_ll.AsView.Visible = False + B4XPages.MainPage.bTerminarClicked = False + End If + If ya_entro <> "1" Then + If BUSCA.Text <> "" Then BUSCA.Text ="" + entro ="3" + lv_catalogos.Clear + Sleep(100) + lfila.Text = "CATALOGOS" + p_productos.Height = Root.Height + clv_prods_ll.AsView.Visible = False + lv_catalogos.Visible = True + p_botonesVenta.Visible = False + p_botonesVenta.Top = clv_prods_ll.AsView.top + clv_prods_ll.AsView.Height - 10 + lv_promos.Visible = False + End If + Dim label1 As Label + label1 = lv_catalogos.SingleLineLayout.Label + label1.TextSize = 17 + label1.TextColor = Colors.Black + lv_catalogos.Clear + lv_catalogos.AddSingleLine("CATALOGO") +' c = B4XPages.MainPage.skmt.ExecQuery($"select count(*) as hayPromos from ${Starter.tabla} where CAT_GP_TIPOPROD = 'PROMOS'"$) + c = B4XPages.MainPage.skmt.ExecQuery($"select count(*) as hayPromos from ${Starter.tabla} where CAT_GP_TIPO = 'PROMOS'"$) + c.Position = 0 + + c = B4XPages.MainPage.skmt.ExecQuery($"SELECT CUENTA FROM CUENTAA"$) + c.Position = 0 + If c.GetString("CUENTA") <> "0" And c.GetString("CUENTA") <> "1" Then + c2=B4XPages.MainPage.skmt.ExecQuery2($"select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, IFNULL(CAT_GP_IMG,0) AS CAT_GP_IMG from ${Starter.tabla} where CAT_GP_PRECIO > 0 AND CAT_GP_ALMACEN > 0 AND CAT_GP_TIPO = ? AND CAT_GP_SUBTIPO = ? AND CAT_GP_ID NOT IN (SELECT PE_PROID FROM PEDIDO WHERE PE_CLIENTE IN (Select cuenta from cuentaa))"$, Array As String("PROMOS", "PROMOS")) + LogColor($"select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, IFNULL(CAT_GP_IMG,0) AS CAT_GP_IMG from ${Starter.tabla} where CAT_GP_PRECIO > 0 AND CAT_GP_ALMACEN > 0 AND CAT_GP_TIPO = ? AND CAT_GP_SUBTIPO = ? AND CAT_GP_ID NOT IN (SELECT PE_PROID FROM PEDIDO WHERE PE_CLIENTE IN (Select cuenta from cuentaa))"$,Colors.Cyan) 'Isaac +' Log($"res:${c2.RowCount}, ${Value}, ${marca}, ${tipo}"$) + Private hayPromos As Boolean = False + If c2.RowCount > 0 Then + Log("Esto es un conteo --->"&c2.RowCount) 'Isaac + For i = 0 To c2.RowCount - 1 + c2.Position = i + Log("Esto es i----->" & i) 'Isaac + Private tm As Map = Subs.procesaPromocion(c2.GetString("CAT_GP_ID"), clienteId) + + ' Verificar si tm es null antes de acceder a sus valores + If tm <> Null Then + If tm.Get("status") = "ok" Then 'Solo muestrala si hay producto. + hayPromos = True + End If + Else + Log("El Map devuelto por procesaPromocion es null") + End If + Next + If hayPromos Then lv_catalogos.AddSingleLine("PROMOS") + Else + Log("NO HAY PROMOS") + End If + c2.Close + End If + + Sleep(100) + l_total.Visible = False + l_totProds.Visible = False + l_total.Left = 5dip + l_totProds.Width = Root.Width * 0.19 + l_total.Left = l_totProds.Width + 20 + l_total.Width = Root.Width * 0.25 +' Log(Subs.traeTotalesClienteActual) + Dim m As Map = Subs.traeTotalesClienteActual + prodsPedidoActual = m.Get("productos") + montoPedidoActual = m.Get("monto") + hayPedido = Subs.hayPedido +' LogColor("Pedido ant? - "&hayPedido, Colors.Magenta) + B4XPages.MainPage.productos.clv_prods_ll.Clear + If reiniciarlistaProds Then +' Log("Llamamos LlenaProdsLL") +' LlenaProdsLL(Null) + clv_prods_ll.Clear + else If hayPedido Then +' LogColor("HAY PEDIDO ANTERIOR", Colors.red) +' Log("Llamamos LlenaProdsLL") +' LlenaProdsLL(Null) + clv_prods_ll.Clear + End If + If clv_prods_ll.Size = 0 Then LlenaProdsLL(Null) + clv_prods_ll.JumpToItem(0) 'Vamos al primer artículo de la lista. + PCLV.lblHint.SetTextSizeAnimated(0,13) + PCLV.B4XSeekBar1.Color1=Colors.DarkGray + PCLV.B4XSeekBar1.Color2=Colors.DarkGray + PCLV.B4XSeekBar1.ThumbColor=Colors.red + PCLV.B4XSeekBar1.mBase.Left=Root.Width *0.91 +' PCLV.B4XSeekBar1.mBase.Top=-50 + PCLV.B4XSeekBar1.mBase.Height=clv_prods_ll.AsView.Height + PCLV.pnlOverlay.Height = clv_prods_ll.AsView.Height + PCLV.B4XSeekBar1.Update +End Sub + +Sub PCLV_AddProds + +End Sub + +Sub lv_catalogos_ItemClick (Position As Int, Value As Object) + If Value = "CATALOGO" Then +' lfila.text = "TIPO" + lfila.text = "PRODUCTOS" + lv_catalogos.Visible = False +' lv_tipo.Visible = True + If clv_prods_ll.Size = 0 Then LlenaProdsLL(Null) + clv_prods_ll.AsView.Visible = True + If hayPedido Then p_botonesVenta.Visible = True 'Si ya hay pedido, entonces mostramos los botones. + Else + clv_prods_ll.AsView.Visible = False + lv_promos.Visible = True + lfila.text = "PROMOCIONES" + lv_catalogos.Visible = False + lv_promos.Clear + Dim label1 As Label + label1 = lv_promos.TwoLinesLayout.Label + label1.TextSize = 12 + label1.TextColor = Colors.Black + Dim label2 As Label + label2 = lv_promos.TwoLinesLayout.SecondLabel + label2.TextSize = 12 + label2.TextColor = Colors.Black + Dim label13 As Label + label13 = lv_promos.TwoLinesAndBitmap.Label + label13.TextSize = 12 + label13.TextColor = Colors.Black + Dim label14 As Label + label14 = lv_promos.TwoLinesAndBitmap.SecondLabel + label14.TextSize = 12 + label14.TextColor = Colors.Black + lfila.text = "PROMOS" + +' c2=B4XPages.MainPage.skmt.ExecQuery2($"select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG from ${Starter.tabla} where CAT_GP_PRECIO > 0 AND CAT_GP_ALMACEN > 0 and CAT_GP_TIPOPROD = ? AND CAT_GP_TIPO = ? AND CAT_GP_SUBTIPO = ? AND CAT_GP_ID NOT IN (SELECT PE_PROID FROM PEDIDO WHERE PE_CLIENTE IN (Select cuenta from cuentaa) )"$, Array As String(Value, Value, Value)) + c2=B4XPages.MainPage.skmt.ExecQuery2($"select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG from ${Starter.tabla} where CAT_GP_PRECIO > 0 AND CAT_GP_ALMACEN > 0 AND CAT_GP_TIPO = ? AND CAT_GP_SUBTIPO = ? AND CAT_GP_ID NOT IN (SELECT PE_PROID FROM PEDIDO WHERE PE_CLIENTE IN (Select cuenta from cuentaa) )"$, Array As String(Value, Value)) +' Log($"res:${c2.RowCount}, ${Value}, ${marca}, ${tipo}"$) + If c2.RowCount > 0 Then + For i = 0 To c2.RowCount - 1 + c2.Position = i + Private tm As Map = Subs.procesaPromocion(c2.GetString("CAT_GP_ID"), clienteId) + + If tm <> Null Then + If tm.Get("status") = "ok" Then + lv_promos.AddTwoLines(c2.GetString("CAT_GP_NOMBRE"), "# " & c2.GetString("CAT_GP_ALMACEN") & " $ " & c2.GetString("CAT_GP_PRECIO") & " F:" & tm.Get("mp").As(Map).Get("prodsFijosCant") & " V:" & tm.Get("mp").As(Map).Get("prodsVariablesCant")) + End If + Else + Log("El Map devuelto por procesaPromocion es null para el producto: " & c2.GetString("CAT_GP_NOMBRE")) + End If + Next + Else + ToastMessageShow("No hay promociones disponibles.", False) + End If + c2.Close + entro = "4" + End If +End Sub + +Sub lv_catalogos2_ItemClick (Position As Int, Value As Object) + clv_prods_ll.AsView.Visible = False + BUSCA.Text = "" + Dim cliente As C_Cliente = B4XPages.GetPage("Cliente") + Log($"value=${Value}"$) + If Value = "PROMOS" And cliente.cuenta <> "N" Then + entro = "3" + marca = "PROMOS" + tipo = "PROMOS" + Else if Value = "PROMOS" And cliente.cuenta = "N" Then + entro = "5" + B4XPages.ShowPage("Cliente") + End If + If Value = "PROMOS" Then + LogColor("Promos", Colors.red) + c2=B4XPages.MainPage.skmt.ExecQuery2($"select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG from ${Starter.tabla} where CAT_GP_PRECIO > 0 AND CAT_GP_ALMACEN > 0 and CAT_GP_TIPOPROD = ? AND CAT_GP_TIPO = ? AND CAT_GP_SUBTIPO = ? AND CAT_GP_ID NOT IN (SELECT PE_PROID FROM PEDIDO WHERE PE_CLIENTE IN (Select cuenta from cuentaa) ) ORDER BY 1"$, Array As String(Value, marca, tipo)) + Else + LogColor("Catalogo", Colors.red) + c2=B4XPages.MainPage.skmt.ExecQuery($"select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG, CAT_GP_TIPOPROD, CAT_GP_INICIATIVA from ${Starter.tabla} where CAT_GP_PRECIO > 0 AND CAT_GP_ALMACEN > 0 and CAT_GP_TIPOPROD <> 'PROMOS' "$) + End If + If Value = "CATALOGO" Then + lv_catalogos.Visible = False + lv_promos.Visible = False + lfila.text = "CATALOGO" + Log("PGS") + ProgressDialogShow("Cargando catalogo ...") + Sleep(100) + Private inicioContador As String = DateTime.Now + llenaCatalogo(False) + clv_prods_ll.AsView.Visible = True + Log("PGH") + LogColor("TIEMPO DE PROCESO DEL CATALOGO: " & ((DateTime.Now-inicioContador)/1000), Colors.Red) + ProgressDialogHide + c2.Close + Else + clv_prods_ll.AsView.Visible = False + lv_promos.Visible = True + lv_catalogos.Visible = False + lv_promos.Clear + Dim label1 As Label + label1 = lv_promos.TwoLinesLayout.Label + label1.TextSize = 15 + label1.TextColor = Colors.Black + Dim label2 As Label + label2 = lv_promos.TwoLinesLayout.SecondLabel + label2.TextSize = 15 + label2.TextColor = Colors.Black + Dim label13 As Label + label13 = lv_promos.TwoLinesAndBitmap.Label + label13.TextSize = 15 + label13.TextColor = Colors.Black + Dim label14 As Label + label14 = lv_promos.TwoLinesAndBitmap.SecondLabel + label14.TextSize = 15 + label14.TextColor = Colors.Black + lfila.text = "PROMOS" + If c2.RowCount > 0 Then + For i=0 To c2.RowCount -1 + c2.Position=i + Private tm As Map = Subs.procesaPromocion(c2.GetString("CAT_GP_ID"), clienteId) + If tm.Get("status") = "ok" Then 'Solo muestrala si hay producto. + lv_promos.AddTwoLines(c2.GetString("CAT_GP_NOMBRE"),"# " & c2.GetString("CAT_GP_ALMACEN") & " $ " & c2.GetString("CAT_GP_PRECIO") & " F:" & tm.Get("mp").As(Map).Get("prodsFijosCant") & " V:" & tm.Get("mp").As(Map).Get("prodsVariablesCant")) + End If + Next + End If + c2.Close + End If + entro = "4" +End Sub + +Sub lv_promos_ItemClick (Position As Int, Value As Object) + clv_prods_ll.AsView.Visible = False + Dim cliente As C_Cliente = B4XPages.GetPage("Cliente") +' Log($"Entro=${entro}, value=${Value}, cuenta=${cliente.cuenta}"$) + If Value = "PROMOS" And cliente.cuenta <> "N" Then + entro = "3" + marca = "PROMOS" + tipo = "PROMOS" + Else if Value = "PROMOS" And cliente.cuenta = "N" Then + entro = "5" + B4XPages.ShowPage("Cliente") + End If + If entro = "3" Then + 'xxxxxxxxxxxxxxxxxxxxx + Else If entro = "4" Then +' Log("Entro = 4") + B4XPages.MainPage.skmt.ExecNonQuery("delete from PROID") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO PROID VALUES (?)", Array As Object(Value)) + Dim promos As C_Promos = B4XPages.GetPage("Promos") + promos.laPromo = Subs.traeProdIdDeBD.Get("id") + promos.elCliente = Subs.traeUsuarioDeBD + B4XPages.ShowPage("Promos") + End If +End Sub + +'Generamos la lista de productos. +Sub llenaCatalogo(subtipo1 As String) +' Log("LlenaCatalogo") +' Private c2 As Cursor +' c2=B4XPages.MainPage.skmt.ExecQuery2("select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG, CAT_GP_TIPOPROD, CAT_GP_INICIATIVA from cat_gunaprod where CAT_GP_PRECIO > 0 AND CAT_GP_ALMACEN > 0 and CAT_GP_TIPOPROD <> 'PROMOS' and CAT_GP_SUBTIPO = ? ", Array As String(subtipo1)) +' Private bgColor, textColor As Int +' If c2.RowCount > 0 And clv_productos.Size <> c2.RowCount Then +' clv_productos.Clear : Log("limpiamos productos") +' For i=0 To c2.RowCount -1 +' c2.Position=i +' If c2.GetString("CAT_GP_TIPOPROD") = "PRIORITARIO" Then +' bgColor = Colors.RGB(255, 212, 163) 'naranja +' Else If c2.GetString("CAT_GP_TIPOPROD") = "COMPLEMENTARIO" Then +' bgColor = Colors.RGB(177, 200, 249)'azul +' else If c2.GetString("CAT_GP_TIPOPROD") = "CATALOGO REGULAR" Then +' bgColor = Colors.White +' else If c2.GetString("CAT_GP_TIPOPROD") = "ESTRATEGICO" Then +' bgColor = Colors.RGB(241, 255, 163) 'amarillo +' End If +' textColor = Colors.Black +' clv_productos.Add(CreateListItem(c2.GetString("CAT_GP_NOMBRE"), c2.GetString("CAT_GP_PRECIO"), c2.GetString("CAT_GP_ALMACEN"), clv_productos.AsView.Width, 60dip, bmp, c2.GetString("CAT_GP_ID"), bgColor, textColor), c2.GetString("CAT_GP_NOMBRE")) +' Next +' End If +' c2.Close +End Sub + +Private Sub B4XPage_CloseRequest As ResumableSub +' BACK key pressed +' Return True To close, False To cancel + If l_info.Visible Then + l_info.Visible = False + Return False + else if p_vistaPreviaTrans.Visible Then + p_vistaPreviaTrans.Visible = False + Return False + else if lv_promos.visible Then + lv_promos.Visible = False + lv_catalogos.Visible = True + p_botonesVenta.Visible = False + l_total.Visible = False + l_totProds.Visible = False + Return False + else if clv_prods_ll.AsView.Visible Then + lfila.text = "CATALOGO" + clv_prods_ll.AsView.Visible = False + lv_subtipo.Visible = False + p_botonesVenta.Visible = False + l_total.Visible = False + l_totProds.Visible = False + lv_catalogos.Visible = True + Return False +' else if lv_subtipo.Visible Then +' lfila.text = "TIPO" +' lv_subtipo.Visible = False +' lv_tipo.Visible = False +' Return False +' else if lv_tipo.Visible Then +' lfila.text = "CATALOGO" +' lv_tipo.Visible = False +' lv_catalogos.Visible = True +' Return False + else If entro = "4" Then + entro = "3" + B4XPage_Appear + Return True + Else If entro = "3" Then + B4XPages.ShowPage("Cliente") + Return False + Else + B4XPages.ShowPage("Cliente") + Return False + End If +End Sub + + + +Sub b_QR_Click + If ciclo = 1 Then + ciclo = 2 + ya_entro = "0" + B4XPage_Appear + else if ciclo = 2 Then + ciclo = 3 + ya_entro = "0" + B4XPage_Appear + else if ciclo = 3 Then + ciclo = 4 + ya_entro = "0" + B4XPage_Appear + else if ciclo = 4 Then + ciclo = 5 + ya_entro = "0" + B4XPage_Appear + else if ciclo = 5 Then + ciclo = 1 + ya_entro = "0" + B4XPage_Appear + End If +End Sub + +'**************************************************************************** +'***************** PARA EL MAS/MENOS ************************************* +'**************************************************************************** +Sub CreateListItem(Text As String, precioU As String, inv As Int, Width As Int, Height As Int, img As Bitmap, prodId As String, bc As Int, tc As Int) As Panel +' Dim p As B4XView = xui.CreatePanel("") +' p.SetLayoutAnimated(0, 0, 0, Width, Height) +' p.LoadLayout("prodItem") +' p_prods.Color = bc +' l_prodX.TextColor = tc +' l_prodX.TextSize = 15 +' p_prods.Height = Height +' l_prodX.Height = Height +' l_prodX.Text = Text&CRLF&"# " & inv & " $ " & precioU +' l_prodX.Tag = $"ID: ${prodId}${CRLF}${Text}${CRLF}Precio: $$1.2{precioU}${CRLF}Inv: ${inv} pzs"$ +' l_pCant.Tag = precioU&"|"&inv&"|"&prodId +' et_pCant.Tag = precioU&"|"&inv&"|"&prodId +' et_pCant.BringToFront +' Return p +End Sub + +Sub b_prodMenos_Click + totalcajasmaspiezas = 0 + etCantHasFocus = False + Root.RequestFocus +' LogColor("b_prodMenos_Click", Colors.Magenta) + Dim index As Int = clv_prods_ll.GetItemFromView(Sender) + Dim pnl0 As B4XView = clv_prods_ll.GetPanel(index) + Dim pnl As B4XView = pnl0.GetView(0) + Dim laCant As B4XView = pnl.GetView(2).GetView(2) + Dim laCant2 As B4XView = pnl.GetView(3).GetView(2) + Dim panelbotonesc As B4XView = pnl.GetView(3) + Dim lProdX As B4XView = pnl.GetView(1) + Dim panelcajas As B4XView = pnl.GetView(3) + Dim panelpiezas As B4XView = pnl.GetView(2) +' Log($"precio|stock:${laCant.tag}"$) + If laCant.Text = "" Then laCant.Text = 0 +' Log("lacant.text="&laCant.text) + laCant.Text = $"${NumberFormat2(laCant.Text-1,0,0,0,False)}"$ + If laCant.Text < 0 Then laCant.Text = 0 + Private tmpMap1 As Map = clv_prods_ll.GetValue(index).As(Map) + Private precio As String=clv_prods_ll.GetValue(index).As(Map).Get("precio") + Private id As String=clv_prods_ll.GetValue(index).As(Map).Get("id") + Private tmpMap As Map = CreateMap("precio":precio, "cant":laCant.Text, "almacen":Subs.traeAlmacen) + Private nombreX As String = Subs.traeProdNombre(id) + LogColor(tmpMap1,Colors.Magenta) +' prodsMap.Put(id, tmpMap) + If laCant.Text = 0 Then prodsMap.Remove(id) + + If laCant.Text = 0 Then + panelcajas.Visible = True + Else If laCant.Text > 0 Then + panelcajas.Visible = False + End If +' If laCant2.IsInitialized Then +' totalcajasmaspiezas = laCant.Text + laCant2.Text +' Else +' totalcajasmaspiezas = laCant.Text +' End If + LogColor("prodsMap="&prodsMap, Colors.blue) +' (Subs.traeAlmacen, p1.Get("precio"), p1.Get("cant"), pn, p, clienteId, Subs.traeFecha, Subs.traeUsuarioDeBD, rutaUsuario, 0, B4XPages.MainPage.tipo_venta) + Log($"${Subs.traeAlmacen}, ${precio}, ${laCant.text}, ${Subs.traeProdNombre(id)}, ${id}, ${clienteId}"$) + Subs.actualizaProducto(Subs.traeAlmacen, precio, laCant.Text, Subs.traeProdNombre(id), id, clienteId, Subs.traeFecha, Subs.traeUsuarioDeBD, rutaUsuario, 0, B4XPages.MainPage.tipo_venta,0,0) + cuentaProds + LogColor("prodsMap="&prodsMap, Colors.blue) + Log($"Total Prods: ${totalProds}, Total Compra: $$1.2{totalCompra}"$) + If 1 = 1 Then + Private cs As CSBuilder + cs.Initialize + Private o As Cursor = Starter.skmt.ExecQuery($"select CAT_GP_ALMACEN from ${Starter.tabla} where CAT_GP_ID = '${id}'"$) + Private invActualizado As String = "0" + If o.RowCount > 0 Then + o.Position = 0 + invActualizado = o.GetString("CAT_GP_ALMACEN") + End If + If clv_prods_ll.GetValue(index).As(Map).Get("precio_caja").As(Float) = 0 Or clv_prods_ll.GetValue(index).As(Map).Get("conversion").As(Int) = 1 Then + Private maxcajas As Int = 0 + Log("cajas a 0") + Else + Private maxcajas As Int = invActualizado/clv_prods_ll.GetValue(index).As(Map).Get("conversion") + Log("cajas no a 0") + End If +' Private maxcajas As Int = invActualizado/clv_prods_ll.GetValue(index).As(Map).Get("conversion") + If 2 = 2 Then lProdX.Text = cs.Color(Colors.red).append(nombreX).pop.Append(CRLF).Append("Existencias: " & invActualizado).Color(0xFF017F01).Append($" $${NumberFormat2(precio, 1, 2, 2, False)}${CRLF}Max. Cajas: ${maxcajas}"$).Popall +' Log(lProdX.Text) + End If + + If laCant.Text = 0 Then + If maxcajas > 0 Then + panelcajas.Visible = True + Else + panelcajas.Visible = False + End If + Else If laCant.Text > 0 Then + panelcajas.Visible = False + End If + + If Subs.totalPedido < 1 Then laCant.Text = "0" + invTotal = totalcajasmaspiezas + Subs.traeinventario(id) + 'aqui si lo comentamos aparece la parte de cajas + If tmpMap1.Get("conversion") = "1" Or tmpMap1.Get("precio_caja") = "0" Then + Log("invisible") + panelbotonesc.Visible = False + End If + + If clv_prods_ll.GetValue(index).As(Map).Get("almacen") < clv_prods_ll.GetValue(index).As(Map).Get("conversion") Then + Log(clv_prods_ll.GetValue(index).As(Map).Get("cant")) + If clv_prods_ll.GetValue(index).As(Map).Get("cant").As(Int) = 0 Then + Log("Aqui debemos ponerlo invisible") + panelcajas.Visible = False + Else + + End If +' p_botMasMenc.Visible = False + End If + 'fin aparecer parte de cajas +' LogColor("InvTotal PRODMAS: " & invTotal, Colors.Red) +End Sub + +Sub b_prodMas_Click + totalcajasmaspiezas = 0 + etCantHasFocus = False + Root.RequestFocus +' LogColor("b_prodMas_Click", Colors.Magenta) + + Dim index As Int = clv_prods_ll.GetItemFromView(Sender) + Dim pnl0 As B4XView = clv_prods_ll.GetPanel(index) + Dim pnl As B4XView = pnl0.GetView(0) + Dim laCant As B4XView = pnl.GetView(2).GetView(2) + Dim panelcajas As B4XView = pnl.GetView(3) + Dim panelpiezas As B4XView = pnl.GetView(2) + Dim laCant2 As B4XView = pnl.GetView(3).GetView(2) + Dim lProdX As B4XView = pnl.GetView(1) + +' Private tmpMap As Map = clv_prods_ll.GetValue(index).As(Map) + Private precio As String=clv_prods_ll.GetValue(index).As(Map).Get("precio") + Private inv As String=clv_prods_ll.GetValue(index).As(Map).Get("almacen") + Private existencias As String = clv_prods_ll.GetValue(index).As(Map).Get("almacen") + Log($"Existencias: ${existencias}"$) + If laCant.Text = "" Then laCant.Text = 0 + Private id As String=clv_prods_ll.GetValue(index).As(Map).Get("id") +' If laCant.Text + 1 <= inv Then +'' Log(NumberFormat2(laCant.Text+1,0,0,0,False)) +' laCant.Text = $"${NumberFormat2(laCant.Text+1,0,0,0,False)}"$ +'' Private precio As String=clv_prods_ll.GetValue(index).As(Map).Get("precio") +' Private id As String=clv_prods_ll.GetValue(index).As(Map).Get("id") +'' Private tmpMap As Map = CreateMap("precio":precio, "cant":laCant.Text, "almacen":Subs.traeAlmacen) +'' Log(tmpMap) +'' prodsMap.Put(id, tmpMap) +'' LogColor(prodsMap, Colors.blue) +' End If +' Log("Cantidad + exis " & (laCant.Text + existencias)) +' Log( (laCant.Text + 1 <= (laCant.Text + existencias))) +' Log("inventario "&Subs.traeinventario(id)) +' Log((Subs.totalPedido - precio > 1)) +' Log((Subs.totalPedido)) +' Log(precio) + Log(B4XPages.MainPage.tipo_venta) + Log(B4XPages.MainPage.cliente.credito_diponible) + LogColor(laCant.Text,Colors.Red) + + If B4XPages.MainPage.tipo_venta = "PREVENTA_CREDITO" Then + + Dim fg As Cursor = Starter.skmt.ExecQuery("Select IFNULL(sum(PE_COSTO_TOT),0) AS COSTO FROM PEDIDO WHERE PE_CLIENTE IN (SELECT CUENTA FROM CUENTAA) AND PE_FOLIO = 'PREVENTA_CREDITO'") + fg.Position = 0 + + If fg.GetString("COSTO") + precio <= B4XPages.MainPage.cliente.credito_diponible Then + + If Subs.traeinventario(id) > 0 And (laCant.Text <= (laCant.Text + Subs.traeinventario(id))) Then 'And (Subs.totalPedido - precio > 1) +' Log(clv_prods_ll.GetValue(index).As(Map)) + clv_prods_ll.GetValue(index).As(Map).Put("almacen", (inv - 1)) + inv = inv - 1 +' laCant.Text = $"$1.0{laCant.Text+1}"$ + laCant.Text = NumberFormat2((laCant.Text + 1), 1, 0, 0, False) +' Log(clv_prods_ll.GetValue(index).As(Map)) + End If + Private nombreX As String = Subs.traeProdNombre(id) +' Subs.actualizaProducto(Subs.traeAlmacen, laCant.text, id, clienteId) + + If laCant.Text > 0 Then + panelcajas.Visible = False + Else If laCant.Text = 0 Then + panelcajas.Visible = True + End If + + LogColor(laCant.Text,Colors.Red) +' If laCant2.IsInitialized Then +' totalcajasmaspiezas = laCant.Text + laCant2.Text +' Else +' totalcajasmaspiezas = laCant.Text +' End If + + + Subs.actualizaProducto(Subs.traeAlmacen, precio, laCant.Text, Subs.traeProdNombre(id), id, clienteId, Subs.traeFecha, Subs.traeUsuarioDeBD, rutaUsuario, 0, B4XPages.MainPage.tipo_venta,0,0) + cuentaProds +' Log($"Total Prods: ${totalProds}, Total Compra: $$1.2{totalCompra}"$) + If 1 = 1 Then + Private cs As CSBuilder + cs.Initialize + Private o As Cursor = Starter.skmt.ExecQuery($"select CAT_GP_ALMACEN from ${Starter.tabla} where CAT_GP_ID = '${id}'"$) + Private invActualizado As String = "0" + If o.RowCount > 0 Then + o.Position = 0 + invActualizado = o.GetString("CAT_GP_ALMACEN") + End If + If clv_prods_ll.GetValue(index).As(Map).Get("precio_caja").As(Float) = 0 Or clv_prods_ll.GetValue(index).As(Map).Get("conversion").As(Int) = 1 Then + Private maxcajas As Int = 0 + Log("cajas a 0") + Else + Private maxcajas As Int = invActualizado/clv_prods_ll.GetValue(index).As(Map).Get("conversion") + Log("cajas no a 0") + End If + If 2 = 2 Then lProdX.Text = cs.Color(Colors.red).append(nombreX).pop.Append(CRLF).Append("Existencias: " & invActualizado).Color(0xFF017F01).Append($" $${NumberFormat2(precio, 1, 2, 2, False)}${CRLF}Max. Cajas: ${maxcajas}"$).Popall +' Log(lProdX.Text) + End If + invTotal = totalcajasmaspiezas + Subs.traeinventario(id) +' LogColor("InvTotal PRODMAS: " & invTotal, Colors.Red) + Else + MsgboxAsync("No se puede meter mas venta a credito por que supera el limite del credito","Atencion") + End If + Else + + If Subs.traeinventario(id) > 0 And (laCant.Text <= (laCant.Text + Subs.traeinventario(id))) Then 'And (Subs.totalPedido - precio > 1) +' Log(clv_prods_ll.GetValue(index).As(Map)) + clv_prods_ll.GetValue(index).As(Map).Put("almacen", (inv - 1)) + inv = inv - 1 +' laCant.Text = $"$1.0{laCant.Text+1}"$ + laCant.Text = NumberFormat2((laCant.Text + 1), 1, 0, 0, False) +' Log(clv_prods_ll.GetValue(index).As(Map)) + End If + Private nombreX As String = Subs.traeProdNombre(id) +' Subs.actualizaProducto(Subs.traeAlmacen, laCant.text, id, clienteId) + + If laCant.Text > 0 Then + panelcajas.Visible = False + Else If laCant.Text = 0 Then + panelcajas.Visible = True + End If + + LogColor(laCant.Text,Colors.Red) +' If laCant2.IsInitialized Then +' totalcajasmaspiezas = laCant.Text + laCant2.Text +' Else +' totalcajasmaspiezas = laCant.Text +' End If + + + Subs.actualizaProducto(Subs.traeAlmacen, precio, laCant.Text, Subs.traeProdNombre(id), id, clienteId, Subs.traeFecha, Subs.traeUsuarioDeBD, rutaUsuario, 0, B4XPages.MainPage.tipo_venta,0,0) + cuentaProds +' Log($"Total Prods: ${totalProds}, Total Compra: $$1.2{totalCompra}"$) + If 1 = 1 Then + Private cs As CSBuilder + cs.Initialize + Private o As Cursor = Starter.skmt.ExecQuery($"select CAT_GP_ALMACEN from ${Starter.tabla} where CAT_GP_ID = '${id}'"$) + Private invActualizado As String = "0" + If o.RowCount > 0 Then + o.Position = 0 + invActualizado = o.GetString("CAT_GP_ALMACEN") + End If + If clv_prods_ll.GetValue(index).As(Map).Get("precio_caja").As(Float) = 0 Or clv_prods_ll.GetValue(index).As(Map).Get("conversion").As(Int) = 1 Then + Private maxcajas As Int = 0 + Log("cajas a 0") + Else + Private maxcajas As Int = invActualizado/clv_prods_ll.GetValue(index).As(Map).Get("conversion") + Log("cajas no a 0") + End If + If 2 = 2 Then lProdX.Text = cs.Color(Colors.red).append(nombreX).pop.Append(CRLF).Append("Existencias: " & invActualizado).Color(0xFF017F01).Append($" $${NumberFormat2(precio, 1, 2, 2, False)}${CRLF}Max. Cajas: ${maxcajas}"$).Popall +' Log(lProdX.Text) + End If + invTotal = totalcajasmaspiezas + Subs.traeinventario(id) +' LogColor("InvTotal PRODMAS: " & invTotal, Colors.Red) + + End If + + +End Sub + +Private Sub et_pCant_FocusChanged (HasFocus As Boolean) + LogColor($"focus changed=${HasFocus}"$, Colors.Magenta) + If et_pCant.Text = "" Then et_pCant.Text = "0" + Dim index As Int = clv_prods_ll.GetItemFromView(Sender) + Dim pnl0 As B4XView = clv_prods_ll.GetPanel(index) + Dim pnl As B4XView = pnl0.GetView(0) + Dim laCant As B4XView = pnl.GetView(2).GetView(2) + Dim laCant2 As B4XView = pnl.GetView(3).GetView(2) + Private id As String=clv_prods_ll.GetValue(index).As(Map).Get("id") + If laCant.Text = "" Then laCant.Text = "0" + etCantHasFocus = HasFocus + LogColor(laCant.Text,Colors.Red) + If laCant2.IsInitialized Then + totalcajasmaspiezas = laCant.Text + laCant2.Text + Else + totalcajasmaspiezas = laCant.Text + End If + invTotal = totalcajasmaspiezas + Subs.traeinventario(id) +' LogColor("InvTotal PRODMAS: " & invTotal, Colors.Red) + + cuentaProds +End Sub + +Private Sub et_pCant_TextChanged (Old As String, New As String) +' Log(etCantHasFocus) +' Log("InvTotal: " & invTotal) + If etCantHasFocus = True Then + LogColor($"txt changed: ${Old}|${New}, hasfocus=${etCantHasFocus}"$,Colors.Magenta) + Dim index As Int = clv_prods_ll.GetItemFromView(Sender) + Dim pnl0 As B4XView = clv_prods_ll.GetPanel(index) + Dim pnl As B4XView = pnl0.GetView(0) + Dim laCant As B4XView = pnl.GetView(2).GetView(2) + Dim laCant2 As B4XView = pnl.GetView(3).GetView(2) + Dim lProdX As B4XView = pnl.GetView(1) + Private id As String=clv_prods_ll.GetValue(index).As(Map).Get("id") + Private precio As String=clv_prods_ll.GetValue(index).As(Map).Get("precio") + Private inv As String=clv_prods_ll.GetValue(index).As(Map).Get("almacen") + Private inv As String=Subs.traeinventario(id) + Private nombreX As String = Subs.traeProdNombre(id) + Dim panelcajas As B4XView = pnl.GetView(3) + Dim panelpiezas As B4XView = pnl.GetView(2) + + If(New = "" Or New = Null Or New = "-") Then New = 0 +' If New < 0 Then New = 0 + If(New > invTotal) Then + Sender.As(EditText).text = invTotal + End If + ' Log($"inventario=${inv}"$) + + If New = "" Then New = 0 + If Old = "" Or Old = Null Then New = 0 + If laCant.Text = "" Then laCant.Text = 0 + LogColor(laCant.Text,Colors.Red) + + If New > 0 Then + panelcajas.Visible = False + Else If New = 0 Then + + panelcajas.Visible = True + End If + Log(Old) + + If Old <> "" Then + + Log("--------------->Credito Disponible: "&B4XPages.MainPage.cliente.credito_diponible) + If B4XPages.MainPage.tipo_venta = "PREVENTA_CREDITO" Then + + Dim fg As Cursor = Starter.skmt.ExecQuery("Select IFNULL(sum(PE_COSTO_TOT),0) AS COSTO FROM PEDIDO WHERE PE_CLIENTE IN (SELECT CUENTA FROM CUENTAA) AND PE_FOLIO = 'PREVENTA_CREDITO'") + fg.Position = 0 + If Old = "" Or Old = Null Then New = 0 + Log(precio &" * "&Old) + + + + Log(fg.GetString("COSTO") +(precio*New)) + If fg.GetString("COSTO") +((precio*New)-(precio*Old)) <= B4XPages.MainPage.cliente.credito_diponible Then + + + +' If laCant2.IsInitialized Then +' totalcajasmaspiezas = laCant.Text + laCant2.Text +' Else +' totalcajasmaspiezas = laCant.Text +' End If + If Not(Old = "0" And New = "") And laCant.Text <> Null And laCant.Text <> "" And etCantHasFocus Then + Log("actualizamos producto") + Subs.actualizaProducto(Subs.traeAlmacen, precio, laCant.Text, Subs.traeProdNombre(id), id, clienteId, Subs.traeFecha, Subs.traeUsuarioDeBD, rutaUsuario, 0, B4XPages.MainPage.tipo_venta,0,0) + cuentaProds + End If + +' If New <> "" And New.SubString2(0,0) = "0" Then +' New.SubString(1) +' End If +' If New <> "" And New.SubString(1) <> "" Then +' Log(New.SubString(1)) +' New = New.SubString(1) +' laCant.Text = New.SubString(1) +' Log(laCant.Text) +' End If + + If 1 = 1 Then + Private cs As CSBuilder + cs.Initialize + Private o As Cursor = Starter.skmt.ExecQuery($"select CAT_GP_ALMACEN from ${Starter.tabla} where CAT_GP_ID = '${id}'"$) + Private invActualizado As String = "0" +' If o.RowCount > 0 Then + o.Position = 0 + invActualizado = Subs.traeinventario(id) + Log(Subs.traeinventario(id)) +' End If + + If New = "" Then New = 0 + If clv_prods_ll.GetValue(index).As(Map).Get("precio_caja").As(Float) = 0 Or clv_prods_ll.GetValue(index).As(Map).Get("conversion").As(Int) = 1 Then + Private maxcajas As Int = 0 + Log("cajas a 0") + Else + Private maxcajas As Int = invActualizado/clv_prods_ll.GetValue(index).As(Map).Get("conversion") + Log("cajas no a 0") + End If + lProdX.Text = cs.Color(Colors.red).append(nombreX).pop.Append(CRLF).Append("Existencias: " & (Subs.traeinventario(id))).Color(0xFF017F01).Append($" $${NumberFormat2(precio, 1, 2, 2, False)}${CRLF}Max. Cajas: ${maxcajas}"$).Popall + End If + Else + laCant.Text = 0 + MsgboxAsync("No se puede meter mas venta a credito por que supera el limite del credito","Atencion") + End If + Else +' If laCant2.IsInitialized Then +' totalcajasmaspiezas = laCant.Text + laCant2.Text +' Else +' totalcajasmaspiezas = laCant.Text +' End If + If Not(Old = "0" And New = "") And laCant.Text <> Null And laCant.Text <> "" And etCantHasFocus Then + Log("actualizamos producto") + Subs.actualizaProducto(Subs.traeAlmacen, precio, laCant.Text, Subs.traeProdNombre(id), id, clienteId, Subs.traeFecha, Subs.traeUsuarioDeBD, rutaUsuario, 0, B4XPages.MainPage.tipo_venta,0,0) + cuentaProds + End If + +' If New <> "" And New.SubString2(0,0) = "0" Then +' New.SubString(1) +' End If +' If New <> "" And New.SubString(1) <> "" Then +' Log(New.SubString(1)) +' New = New.SubString(1) +' laCant.Text = New.SubString(1) +' Log(laCant.Text) +' End If + If 1 = 1 Then + Private cs As CSBuilder + cs.Initialize + Private o As Cursor = Starter.skmt.ExecQuery($"select CAT_GP_ALMACEN from ${Starter.tabla} where CAT_GP_ID = '${id}'"$) + Private invActualizado As String = "0" +' If o.RowCount > 0 Then + o.Position = 0 + invActualizado = Subs.traeinventario(id) + Log(Subs.traeinventario(id)) +' End If + If New = "" Then New = 0 + If clv_prods_ll.GetValue(index).As(Map).Get("precio_caja").As(Float) = 0 Or clv_prods_ll.GetValue(index).As(Map).Get("conversion").As(Int) = 1 Then + Private maxcajas As Int = 0 + Log("cajas a 0") + Else + Private maxcajas As Int = invActualizado/clv_prods_ll.GetValue(index).As(Map).Get("conversion") + Log("cajas no a 0") + End If + lProdX.Text = cs.Color(Colors.red).append(nombreX).pop.Append(CRLF).Append("Existencias: " & (Subs.traeinventario(id))).Color(0xFF017F01).Append($" $${NumberFormat2(precio, 1, 2, 2, False)}${CRLF}Max. Cajas: ${maxcajas}"$).Popall + End If + End If + End If + If New > 0 Then + panelcajas.Visible = False + Else If New = 0 Then + If maxcajas = 0 Then + panelcajas.Visible = False + Else + panelcajas.Visible = True + End If + End If + End If +End Sub + +Sub cuentaProds +' LogColor($"Productos de la orden: ${c_prods.GetString("cantProds")}, Total: ${c_prodsX.GetString("costoTotal")}"$, Colors.red) + Log("===========================") + Private c As Cursor = B4XPages.MainPage.skmt.ExecQuery($"select sum(PE_COSTO_TOT) as total, sum(PE_CANT) as cant from PEDIDO where PE_CLIENTE = '${clienteId}'"$) +' LogColor("TIEMPO cuentaProds =" & ((DateTime.Now-inicioContador)/1000), Colors.Red) +' LogColor(prodsMap, Colors.Magenta) + p_botonesVenta.Visible = True + p_botonesVenta.BringToFront + c.Position=0 +' Log($"Total Prods: ${c.GetString("cant")}, Total Compra: $$1.2{c.GetString("total")}"$) + c.Close +' Log($"HAY PEDIDO: ${hayPedido}"$) +End Sub + +Sub b_terminar1_Click +' Log("b_terminar1_Click") +' ya_entro = "0" : Log("ya_entro=1") + B4XPages.MainPage.skmt.ExecNonQuery2("delete from PEDIDO WHERE PE_PRONOMBRE = ? ", Array As Object("N/A") ) + + lv_promos.Visible = False + clv_prods_ll.AsView.Visible = False + lv_catalogos.Visible = True + lv_prodsPedido.Clear + lv_prodsPedido.TwoLinesLayout.Label.Height = 35dip + lv_prodsPedido.TwoLinesLayout.SecondLabel.Height = 25dip + Private c_prods As Cursor=B4XPages.MainPage.skmt.ExecQuery("select PE_PRONOMBRE,PE_COSTO_TOT, PE_CANT, PE_FOLIO, PE_CEDIS FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) order by PE_CEDIS, PE_PRONOMBRE") + If c_prods.RowCount > 0 Then + Private cs As CSBuilder + + vamoaver.Initialize + For i=0 To c_prods.RowCount -1 + cs.Initialize + c_prods.Position=i + Dim label1 As Label + label1 = lv_prodsPedido.TwoLinesLayout.Label + label1.TextSize = 15 + label1.TextColor = Colors.Black + label1.color = Colors.White + Private textColor As Int = Colors.black + + If c_prods.GetString("PE_FOLIO") = "VENTA" Then + textColor = Colors.RGB(48,3,195) + Else If c_prods.GetString("PE_FOLIO") = "PREVENTA_CONTADO" Or c_prods.GetString("PE_FOLIO") = "ABORDO" Or c_prods.GetString("PE_FOLIO") = "RECARGA" Then + textColor = Colors.RGB(166,0,0) + Else If folio = "PREVENTA_CREDITO" Then + textColor = Colors.RGB(0, 128, 0) + End If + + If Not(IsNumber(c_prods.GetString("PE_CEDIS"))) And folio = "VENTA" Then + textColor = Colors.RGB(154,131,231) + Else If Not(IsNumber(c_prods.GetString("PE_CEDIS"))) And folio = "PREVENTA_CONTADO" Then + folio = "PREVENTA" + textColor = Colors.RGB(255,0,214) + Else If Not(IsNumber(c_prods.GetString("PE_CEDIS"))) And folio = "PREVENTA_CREDITO" Then + folio = "PREVENTA" + textColor = Colors.RGB(120,178,108) + End If + Dim label2 As Label + label2 = lv_prodsPedido.TwoLinesLayout.SecondLabel + label2.TextSize = 10 + label2.TextColor = Colors.Blue + Dim polioreal As String + If folio = "VENTA" Then + + Else If folio = "PREVENTA_CONTADO" Then + polioreal = "PREVENTA" + + Else If folio = "PREVENTA_CREDITO" Then + polioreal = "PREVENTA" + + End If + LogColor(polioreal,Colors.Gray) +' lv_prodsPedido.AddTwoLines(cs.Color(textColor).append(c_prods.GetString("PE_PRONOMBRE")).pop,"Cantidad #"& c_prods.GetString("PE_CANT")& " SubTotal $"& c_prods.GetString("PE_COSTO_TOT")& " Folio "& c_prods.GetString("PE_FOLIO")) + lv_prodsPedido.AddSingleLine(cs.Color(textColor).Size(12).append(c_prods.GetString("PE_PRONOMBRE") & " ").pop.Append(CRLF).Size(8).Color(Colors.Blue).Append("Cantidad #"& c_prods.GetString("PE_CANT")).Append(" SubTotal $"& c_prods.GetString("PE_COSTO_TOT")).Append(" " & polioreal& " " &c_prods.GetString("PE_CEDIS")).PopAll) + vamoaver.Add(c_prods.GetString("PE_FOLIO")) + folio = c_prods.GetString("PE_FOLIO") + Next +' c=B4XPages.MainPage.skmt.ExecQuery("select pc_noart, pc_monto from pedido_cliente where pc_cliente in (Select CUENTA from cuentaa)") +' c = B4XPages.MainPage.skmt.ExecQuery("SELECT SUM (PE_CANT) AS CANTIDAD FROM PEDIDO WHERE PE_PROID not like 'PRO%' and PE_CLIENTE IN (Select CUENTA from cuentaa)") + c = B4XPages.MainPage.skmt.ExecQuery("select sum(PE_CANT) as PC_NOART, sum (PE_COSTO_TOT) as PC_MONTO from PEDIDO where PE_CLIENTE in (Select CUENTA from cuentaa) AND PE_PROID NOT IN (SELECT CAT_PA_ID FROM PROMOS_COMP )") +' r = B4XPages.MainPage.skmt.ExecQuery("SELECT SUM (PE_COSTO_TOT) AS MONTO FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 +' r.Position = 0 + l_cant.Text = c.GetString("PC_NOART") + l_total2.Text = c.GetString("PC_MONTO") + c.Close +' r.Close + End If + c_prods.Close + p_vistaPreviaTrans.Width = Root.Width + p_vistaPreviaTrans.Height = Root.Height + Subs.centraPanel(p_vistaPrevia, Root.Width) +' If Subs.pedidoGuardado Then b_rechazar.Enabled = False Else b_rechazar.Enabled = True + +' Dim fg As Cursor = Starter.skmt.ExecQuery("Select IFNULL(sum(PE_COSTO_TOT),0) AS COSTO, PE_FOLIO FROM PEDIDO WHERE PE_CLIENTE IN (SELECT CUENTA FROM CUENTAA) AND PE_FOLIO = 'PREVENTA_CREDITO'") +' fg.Position = 0 +' Dim costo As String = fg.GetString("COSTO") +' If costo > 0 And costo < 1000 And fg.GetString("PE_FOLIO") = "PREVENTA_CREDITO" Then +' result = Msgbox2($"¿Desea continuar?${CRLF}Si acepta, el pedido se borrará (mínimo $1,000).${CRLF}Si cancela, podrá seguir agregando productos."$,"Venta Minima de Credito", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) +' If result = DialogResponse.POSITIVE Then +' Subs.borraPedidoCredito +'' B4XPages.MainPage.promos.promosMap.Initialize + B4XPages.ShowPage("Cliente") +' Else +' lv_catalogos.Visible = True +' End If +' Else +' p_vistaPrevia.Visible=True +' p_vistaPreviaTrans.Visible=True +' End If +' fg.Close +End Sub + +Private Sub b_continuar_Click + Log("b_continuar_Click") + cuentaProds +' Private p1 As Map + Log($"prodsMap=${prodsMap}"$) +' For Each p As String In prodsMap.Keys +' p1 = prodsMap.Get(p) +' Log(p & "|" & p1) +' Private pn As String = Subs.traeProdNombre(p) +' Subs.guardaProductoSinGestion(Subs.traeAlmacen, p1.Get("precio"), p1.Get("cant"), pn, p, clienteId, Subs.traeFecha, Subs.traeUsuarioDeBD, rutaUsuario, 0, B4XPages.MainPage.tipo_venta) +' Next + Log("promos-inv, prods-inv, cat-vis") + lv_promos.Visible = False + clv_prods_ll.AsView.Visible = False + lv_subtipo.Visible = False + lv_tipo.Visible = False + lv_catalogos.Visible = True + Log("Continuar") + Dim m As Map = Subs.traeTotalesClienteActual + prodsPedidoActual = m.Get("productos") + montoPedidoActual = m.Get("monto") + +' Dim fg As Cursor = Starter.skmt.ExecQuery("Select IFNULL(sum(PE_COSTO_TOT),0) AS COSTO FROM PEDIDO WHERE PE_CLIENTE IN (SELECT CUENTA FROM CUENTAA) AND PE_FOLIO = 'PREVENTA_CREDITO'") +' fg.Position = 0 +' Dim costo As String = fg.GetString("COSTO") +' +' If costo > 0 And costo < 1000 Then +' result = Msgbox2($"¿Desea continuar?${CRLF}Si acepta, el pedido se borrará (mínimo $1,000).${CRLF}Si cancela, podrá seguir agregando productos."$,"Venta Minima de Credito", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) +' If result = DialogResponse.POSITIVE Then +' Subs.borraPedidoCredito +' B4XPages.MainPage.promos.promosMap.Initialize + B4XPages.ShowPage("Cliente") +' Else +' lv_catalogos.Visible = True +' End If +' End If +' fg.Close +End Sub + +Private Sub l_prodX_LongClick + Log("longclic = "&Sender.as(Label).tag) + l_info.Text = Sender.as(Label).tag + l_info.Visible = True +End Sub + +Private Sub l_info_Click + l_info.Visible = False +End Sub + +Private Sub lv_promos_ItemLongClick (Position As Int, Value As Object) + Log("Promo longclic = "&Value) + Private id As String = "" + Dim c As Cursor = B4XPages.MainPage.skmt.ExecQuery($"select CAT_GP_ID from ${Starter.tabla} where CAT_GP_TIPO = 'PROMOS' and CAT_GP_NOMBRE = '${Value}'"$) + If c.RowCount > 0 Then + c.Position = 0 + id = c.GetString("CAT_GP_ID") + End If + l_info.Text = $"ID: ${id}${CRLF}${Value}"$ + l_info.Visible = True +End Sub + +'Private Sub b_buscar_Click +' forzarBusqueda = True +' Busca_TextChanged("",BUSCA.Text) +'End Sub + +Private Sub lv_tipo_ItemClick (Position As Int, Value As Object) +' lfila.text = "SUB TIPO" +' lv_tipo.Visible = False +' lv_subtipo.Height = Root.Height * 0.7 +' lv_subtipo.Visible = True +' Private c As Cursor = B4XPages.MainPage.skmt.ExecQuery2("select distinct CAT_GP_SUBTIPO from cat_gunaprod where CAT_GP_TIPO = ? order by CAT_GP_SUBTIPO", Array As String(Value)) +' If c.RowCount > 0 Then +' Dim label1 As Label +' label1 = lv_subtipo.SingleLineLayout.Label +' label1.TextSize = 17 +' label1.TextColor = Colors.Black +' lv_subtipo.Clear +' For i=0 To c.RowCount-1 +' c.Position=i +' lv_subtipo.AddSingleLine(c.GetString("CAT_GP_SUBTIPO")) +' Next +' End If +' c.Close +End Sub + +Private Sub lv_subtipo_ItemClick (Position As Int, Value As Object) +' lfila.text = "SUB TIPO" +' LogColor("Catalogo", Colors.red) +' lv_catalogos.Visible = False +' lv_subtipo.Visible = False +' lv_promos.Visible = False +' lfila.text = "CATALOGO" +' ProgressDialogShow("Cargando catalogo ...") +' Sleep(100) +' Private inicioContador As String = DateTime.Now +' llenaCatalogo(Value) +' clv_prods_ll.AsView.Visible = True +' LogColor("TIEMPO DE PROCESO DEL CATALOGO: " & ((DateTime.Now-inicioContador)/1000), Colors.Red) +' ProgressDialogHide +End Sub + +Private Sub p_vistaPreviaTrans_Click + +End Sub + +Private Sub b_rechazar_Click +' If folio <> "" Then + result = Msgbox2($"Seguro que desea borrar el pedido completo?${CRLF}Haciendo clic largo sobre un producto se pueden borrar articulos independientes."$,"Rechazar Pedido", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore + If result = DialogResponse.POSITIVE Then + Subs.borraPedidoClienteActual + prodsMap.Initialize + B4XPages.MainPage.promos.promosMap.Initialize +' Log("Llamamos LlenaProdsLL") +' LlenaProdsLL(Null) + clv_prods_ll.Clear + Log("Positivo") + B4XPages.ShowPage("Cliente") + Else + Log("NO Positivo") + p_vistaPreviaTrans.Visible = False + End If +' Else +' Msgbox("CLIENTE YA SE TRANSMITIO, FAVOR DE LLAMAR A SOPORTE PARA ASISTENCIA","AVISO") 'ignore +' End If + p_vistaPreviaTrans.Visible=False + B4XPages.ShowPage("Cliente") +End Sub + +Private Sub b_aceptar_Click + p_vistaPreviaTrans.Visible=False + B4XPages.ShowPage("Cliente") +End Sub + +Private Sub lv_prodsPedido_ItemLongClick (Position As Int, Value As Object) + Private sDate,sTime, clie_id, usuario As String + Log(Value) + Private X() As String = Regex.Split(" ", Value) +' Log(X.Length) + Private nom As String = "" + For i = 0 To X.Length -1 + If X(i).Contains(CRLF) Then + End If + If Not(X(i).Contains(CRLF)) Then + nom = nom & " " & X(i) + Else + Exit + End If + Next + nom = nom.Trim + Log(nom) + Private cedis As String = X(X.Length-1) + Log(cedis) +' If Not(Subs.pedidoGuardado) Then + result = Msgbox2("Seguro que desea borrar este articulo?","Borrar Articulo", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore + If result = DialogResponse.POSITIVE Then + c =B4XPages.MainPage.skmt.ExecQuery2("select PE_PROID,PE_CANT, PE_FOLIO FROM PEDIDO where pe_pronombre = ? and pe_cliente in (Select CUENTA from cuentaa) AND PE_CEDIS = ? ", Array As String(nom, cedis)) + c.Position = 0 + Log(vamoaver.Get(Position)) + If vamoaver.Get(Position) = "VENTA" Then + Log("CAT_GUNAPROD2") + Log(Position) + Log(Value) + Starter.tabla = "CAT_GUNAPROD2" + Else + Log("CAT_GUNAPROD") + Log(Position) + Log(Value) + Starter.tabla = "CAT_GUNAPROD" + End If + Log(Subs.traeAlmacen) +' B4XPages.MainPage.skmt.ExecNonQuery2($"update ${Starter.tabla} set cat_gp_almacen = cat_gp_almacen + ? where cat_gp_id = ?"$, Array As Object(c.GetString("PE_CANT"),c.GetString("PE_PROID"))) +' Log(c.GetString("PE_CANT")) + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO INVENT_X_ENVIAR (ALMACEN , PROID , CANTIDAD ) VALUES(?,?,?) ", Array As Object (Subs.traeAlmacen,c.GetString("PE_PROID"),c.GetString("PE_CANT")* -1)) +' c2=B4XPages.MainPage.skmt.ExecQuery2($"select count(*) AS CUANTOS from ${Starter.tabla} where CAT_GP_ID in (select pe_cedis from pedido where pe_pronombre = ? and pe_cliente in (Select CUENTA from cuentaa)) and CAT_GP_CLASIF = 'PROMOS' AND CAT_GP_TIPO = 'PROMOS' AND CAT_GP_SUBTIPO = 'PROMOS'"$, Array As String(Value)) +' c2.Position=0 + If cedis <> Subs.traeAlmacen Then + j3 = B4XPages.MainPage.skmt.ExecQuery2("SELECT PE_CEDIS, PE_CANT,PE_PROID, PE_PRONOMBRE, PE_FOLIO FROM PEDIDO WHERE PE_CEDIS IN (SELECT PE_CEDIS FROM PEDIDO WHERE PE_PRONOMBRE = ? and PE_CEDIS = ?)",Array As String(nom,cedis)) + Log(j3.RowCount) + If j3.RowCount > 0 Then + Log("Soy promo") + For j = 0 To j3.RowCount -1 + Log("aqui tronare?") + + j3.Position = j + Log(j3.GetString("PE_CANT")) + Log($"update ${Starter.tabla} set CAT_GP_ALMACEN = CAT_GP_ALMACEN + '${j3.GetString("PE_CANT")}' where CAT_GP_ID = '${j3.GetString("PE_PROID")}'"$) + If vamoaver.Get(Position) = "PREVENTA_CREDITO" Then + Starter.skmt.ExecNonQuery($"update CAT_GUNAPROD4 set CAT_GP_ALMACEN = CAT_GP_ALMACEN + ${j3.GetString("PE_CANT")} where CAT_GP_ID = '${j3.GetString("PE_PROID")}'"$) + B4XPages.MainPage.skmt.ExecNonQuery($"delete from pedido where pe_cedis= '${cedis}' and pe_cliente in (Select CUENTA from cuentaa) AND PE_FOLIO = '${j3.GetString("PE_FOLIO")}' AND PE_PROID = '${j3.GetString("PE_PROID")}'"$)', Array As Object(cedis, c.GetString("PE_FOLIO"))) + Else + Starter.skmt.ExecNonQuery($"update ${Starter.tabla} set CAT_GP_ALMACEN = CAT_GP_ALMACEN + ${j3.GetString("PE_CANT")} where CAT_GP_ID = '${j3.GetString("PE_PROID")}'"$) + B4XPages.MainPage.skmt.ExecNonQuery($"delete from pedido where pe_cedis= '${cedis}' and pe_cliente in (Select CUENTA from cuentaa) AND PE_FOLIO = '${j3.GetString("PE_FOLIO")}' AND PE_PROID = '${j3.GetString("PE_PROID")}'"$)', Array As Object(cedis, c.GetString("PE_FOLIO"))) + End If + Next + End If + j3.Close + Else + Log(c.GetString("PE_CANT")) + Log(c.Getstring("PE_PROID")) + If vamoaver.Get(Position) = "PREVENTA_CREDITO" Then + B4XPages.MainPage.skmt.ExecNonQuery($"update CAT_GUNAPROD4 set cat_gp_almacen = cat_gp_almacen + ${c.GetString("PE_CANT")} where cat_gp_id = '${c.Getstring("PE_PROID")}'"$) + B4XPages.MainPage.skmt.ExecNonQuery2("delete from pedido where pe_pronombre = ? and pe_cedis = ? and pe_cliente in (Select CUENTA from cuentaa) AND PE_FOLIO = ?", Array As Object(nom, cedis, vamoaver.Get(Position))) + Else + B4XPages.MainPage.skmt.ExecNonQuery($"update ${Starter.tabla} set cat_gp_almacen = cat_gp_almacen + ${c.GetString("PE_CANT")} where cat_gp_id = '${c.Getstring("PE_PROID")}'"$) + B4XPages.MainPage.skmt.ExecNonQuery2("delete from pedido where pe_pronombre = ? and pe_cedis = ? and pe_cliente in (Select CUENTA from cuentaa) AND PE_FOLIO = ?", Array As Object(nom, cedis, vamoaver.Get(Position))) + End If + End If + c.Close +' c2.Close + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=B4XPages.MainPage.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c=B4XPages.MainPage.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + c=B4XPages.MainPage.skmt.ExecQuery("select sum(pe_costo_tot) as TOTAL_CLIE, SUM(PE_CANT) AS CANT_CLIE, count(*) as CUANTOS FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + If c.GetString("CUANTOS") > 0 Then + Log("aqui5") + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery2("insert into pedido_cliente(PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT) VALUES (?,?,?,?,?,?,?)", Array As Object(clie_id, sDate & sTime, usuario, c.GetString("CANT_CLIE"),c.GetString("TOTAL_CLIE"), B4XPages.MainPage.lon_gps, B4XPages.MainPage.lat_gps)) + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 0 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + Private h As Cursor = B4XPages.MainPage.skmt.ExecQuery("select sum(PE_CANT) as PC_NOART, sum (PE_COSTO_TOT) as PC_MONTO from PEDIDO where PE_CLIENTE in (Select CUENTA from cuentaa) AND PE_PROID NOT IN (SELECT CAT_PA_ID FROM PROMOS_COMP )") + Log($"select sum(PE_CANT) as PC_NOART, sum (PE_COSTO_TOT) as PC_MONTO from PEDIDO where PE_CLIENTE in (Select CUENTA from cuentaa) AND PE_PROID NOT IN (SELECT CAT_PA_ID FROM PROMOS_COMP )"$) + h.Position=0 + l_cant.Text = h.GetString("PC_NOART") + l_total2.Text = h.GetString("PC_MONTO") + h.Close + Else + Log("aqui6") + B4XPages.MainPage.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") + B4XPages.MainPage.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 0 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + Private h As Cursor = B4XPages.MainPage.skmt.ExecQuery("select sum(PE_CANT) as PC_NOART, sum (PE_COSTO_TOT) as PC_MONTO from PEDIDO where PE_CLIENTE in (Select CUENTA from cuentaa) AND PE_PROID NOT IN (SELECT CAT_PA_ID FROM PROMOS_COMP )") + h.Position=0 + l_cant.Text = 0 + l_total2.Text = 0 + h.Close + End If + b_terminar1_Click + End If +' Else +' ToastMessageShow("Esta venta ya esta guardada, no se puede editar ni borrar.", False) +' End If +End Sub + +Private Sub clv_prods_ll_ItemClick (Index As Int, Value As Object) + +End Sub + +Sub l_prodx_click + Dim index As Int = clv_prods_ll.GetItemFromView(Sender) + Private p0 As B4XView = clv_prods_ll.GetPanel(index) + Private p As B4XView = p0.GetView(0) + Private cant1 As B4XView = p.GetView(2).GetView(2) + Dim index As Int = clv_prods_ll.GetItemFromView(Sender) +' Log(clv_prods_ll.GetValue(index)) + Log(cant1.Text) +End Sub + +Private Sub clv_prods_ll_VisibleRangeChanged (FirstIndex As Int, LastIndex As Int) +' Private inicioContador As String = DateTime.Now +' Log($"clv_prods_ll_VisibleRangeChanged : ${FirstIndex}, ${LastIndex} "$) + Dim ExtraSize As Int = 15 'List size + For i = Max(0, FirstIndex - ExtraSize) To Min(LastIndex + ExtraSize, clv_prods_ll.Size - 1) + Dim Pnl As B4XView = clv_prods_ll.GetPanel(i) + If i > FirstIndex - ExtraSize And i < LastIndex + ExtraSize Then +' Log(listaRenglones) + If Pnl.NumberOfViews = 0 Then 'Add each item/layout to the list/main layout + Pnl.LoadLayout("proditem") +' Pnl.Color = Colors.Cyan + p_prods.Width = Root.Width * 0.92 + p_botMasMen.Left = p_prods.Width - (p_botMasMen.Width + 5) + p_botMasMenc.Left = p_prods.Width - (p_botMasMen.Width + 5) + p_prods.Height = 134dip +' b_prodMenos.Height = 50dip +' b_prodMas.Height = 50dip +' et_pCant.Height = 51dip +' l_pCant.Height = 44dip +' l_pCant.Top = l_pCant.Top + 8 +' Pnl.Height = p_prods.Height +' Pnl.Height = 300dip + Pnl.SetLayoutAnimated(0,0,0,Pnl.Width,145dip) + Private cs As CSBuilder + cs.Initialize + l_prodX.SetTextSizeAnimated(0, 13) + If clv_prods_ll.GetValue(i).As(Map).Get("cant") <> Null And clv_prods_ll.GetValue(i).As(Map).Get("cant") > 0 Then + p_prods.Color=0xFFE2EEFF + et_pCant.TextColor=Colors.Red + et_pCantc.TextColor=Colors.Red + If Subs.pedidoGuardado Then +' Log("YA SE GUARDO") + et_pCant.Enabled = False +' b_prodMas.Enabled = False + b_prodMenos.Enabled = False + End If + + End If + + Private precio As String=NumberFormat2(clv_prods_ll.GetValue(i).As(Map).Get("precio").As(Double),1,2,2,False) +' Log(clv_prods_ll.GetValue(i).As(Map)) + + c = Starter.skmt.ExecQuery2("SELECT PE_BCAJAS FROM PEDIDO WHERE PE_PROID = ? AND PE_CLIENTE IN (SELECT CUENTA FROM CUENTAA) AND PE_FOLIO = ?",Array As String(clv_prods_ll.GetValue(i).As(Map).Get("id"), B4XPages.MainPage.tipo_venta)) +' Log(clv_prods_ll.GetValue(i).As(Map).Get("id")) + If c.RowCount = 0 Then + p_botMasMen.Visible = True + p_botMasMenc.Visible = True + Else If c.RowCount > 0 Then + c.Position = 0 + If c.GetString("PE_BCAJAS") = "0" Then + If clv_prods_ll.GetValue(i).As(Map).Get("cant") <> Null Then et_pCant.Text = clv_prods_ll.GetValue(i).As(Map).Get("cant") + p_botMasMen.Visible = True + p_botMasMenc.Visible = False + Else If c.GetString("PE_BCAJAS") = "1" Then + If clv_prods_ll.GetValue(i).As(Map).Get("cant") <> Null Then et_pCantc.Text = clv_prods_ll.GetValue(i).As(Map).Get("cant") + p_botMasMen.Visible = False + p_botMasMenc.Visible = True + End If + End If + +' If clv_prods_ll.GetValue(i).As(Map).Get("b_caja").As(String) = "0" Then +' If clv_prods_ll.GetValue(i).As(Map).Get("cant") <> Null Then et_pCant.Text = clv_prods_ll.GetValue(i).As(Map).Get("cant") +' p_botMasMen.Visible = True +' p_botMasMenc.Visible = False +' Else If clv_prods_ll.GetValue(i).As(Map).Get("b_caja").As(String) = "1" Then +' If clv_prods_ll.GetValue(i).As(Map).Get("cant") <> Null Then et_pCantc.Text = clv_prods_ll.GetValue(i).As(Map).Get("cant") +' p_botMasMen.Visible = False +' p_botMasMenc.Visible = True +' Log("visible verdadero") +' Else IF clv_prods_ll.GetValue(i).As(Map).Get("b_caja").As(String) = "null" Then +' p_botMasMen.Visible = True +' p_botMasMenc.Visible = True +' Log("visible verdadero") +' End If + If clv_prods_ll.GetValue(i).As(Map).Get("precio_caja").As(Float) = 0 Or clv_prods_ll.GetValue(i).As(Map).Get("conversion").As(Int) = 1 Then + Private maxcajas As Int = 0 + Log("cajas a 0") + Else + Private maxcajas As Int = clv_prods_ll.GetValue(i).As(Map).Get("almacen")/clv_prods_ll.GetValue(i).As(Map).Get("conversion") +' Log("cajas no a 0") + End If +' Private maxcajas As Int = clv_prods_ll.GetValue(i).As(Map).Get("almacen")/clv_prods_ll.GetValue(i).As(Map).Get("conversion") + l_prodX.Text = cs.Color(Colors.red).append(clv_prods_ll.GetValue(i).As(Map).Get("prod")).pop.append(CRLF).Append("Existencias: " & clv_prods_ll.GetValue(i).As(Map).Get("almacen")).Color(0xFF017F01).Append($" $${precio}${CRLF}Max. Cajas: ${maxcajas}"$).Popall + 'aqui si lo comentamos aparece la parte de cajas + '' por aqui vamos a corregir + ''Or clv_prods_ll.GetValue(i).As(Map).Get("almacen") < clv_prods_ll.GetValue(i).As(Map).Get("conversion") + If clv_prods_ll.GetValue(i).As(Map).Get("conversion") = "1" Or clv_prods_ll.GetValue(i).As(Map).Get("precio_caja") = "0.0" Then + p_botMasMenc.Visible = False + End If + If clv_prods_ll.GetValue(i).As(Map).Get("almacen") < clv_prods_ll.GetValue(i).As(Map).Get("conversion") Then + Log(clv_prods_ll.GetValue(i).As(Map).Get("cant")) + If clv_prods_ll.GetValue(i).As(Map).Get("cant").As(Int) = 0 Then + Log("Aqui debemos ponerlo invisible") + p_botMasMenc.Visible = False + Else + + End If +' p_botMasMenc.Visible = False + End If + 'fin aparecer parte de cajas + End If +' Log($"${i}, ${FirstIndex}, ${LastIndex}, ${Pnl.NumberOfViews}. ${clv_prods_ll.Size}"$) + Else 'Not visible + ' If Pnl.NumberOfViews > 0 Then + ' Pnl.RemoveAllViews 'Remove none visable item/layouts from the list/main layout + ' End If + End If + PCLV.B4XSeekBar1.Value = clv_prods_ll.Size - FirstIndex +' Log($"Bar value: ${PCLV.B4XSeekBar1.Value}"$) + Next +End Sub + +Sub Busca_TextChanged (Old As String, New As String) +' Private inicioContador As String = DateTime.Now + If Not(clv_prods_ll.AsView.Visible) Then clv_prods_ll.AsView.Visible = True + If (New.Length = 1 Or New.Length = 2) And Not(forzarBusqueda) Then Return + forzarBusqueda = False + clv_prods_ll.Clear + listaProds.Initialize + listaHints.Initialize + Sleep(0) +' Dim p As ResultSet = B4XPages.MainPage.skmt.ExecQuery($"select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_ALMACEN, CAT_GP_PRECIO, CAT_GP_TIPOPROD from ${Starter.tabla} where CAT_GP_NOMBRE like '%${New}%' and CAT_GP_PRECIO > 0 AND CAT_GP_ALMACEN > 0 and CAT_GP_CLASIF <> 'PROMOS' order by CAT_GP_NOMBRE"$) + Dim p As ResultSet = B4XPages.MainPage.skmt.ExecQuery($"select DISTINCT CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_ALMACEN, CAT_GP_PRECIO, CAT_GP_TIPOPROD, CAT_DP_CONVERSION1, CAT_DP_PRECIO4, PE_BCAJAS from ${Starter.tabla} LEFT JOIN PEDIDO ON CAT_GP_ID = PE_PROID where CAT_GP_NOMBRE like '%${New}%' AND CAT_GP_PRECIO > 0 And CAT_GP_ALMACEN > 0 And CAT_GP_CLASIF <> 'PROMOS' union all select DISTINCT CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_ALMACEN, CAT_GP_PRECIO, CAT_GP_TIPOPROD, CAT_DP_CONVERSION1, CAT_DP_PRECIO4 , PE_BCAJAS from ${Starter.tabla} LEFT JOIN PEDIDO ON CAT_GP_ID = PE_PROID where CAT_GP_PRECIO > 0 And CAT_GP_ALMACEN = 0 And CAT_GP_CLASIF <> 'PROMOS' and cat_gp_id in (select pe_proid from pedido where pe_cliente in (select cuenta from cuentaa)) order by 2"$) + Log("Llamamos LlenaProdsLL") + LlenaProdsLL(p) +' Do While p.NextRow +' Dim tempMap As Map = CreateMap("prod":p.GetString("CAT_GP_NOMBRE"), "precio":p.GetString("CAT_GP_PRECIO"), "almacen":p.GetString("CAT_GP_ALMACEN"), "id":p.GetString("CAT_GP_ID")) +' listaProds.Add(tempMap) +' listaHints.Add(p.GetString("CAT_GP_NOMBRE")) +' Dim Pnl As B4XView = xui.CreatePanel("") +' Pnl.SetLayoutAnimated(0, 0, 0, clv_prods_ll.AsView.Width, 50dip) 'Panel height + 4 for drop shadow +' clv_prods_ll.Add(Pnl, tempMap) +' Loop +' LogColor(clv_prods_ll.Size, Colors.red) +'' Log(listaProds) +' p.Close +' PCLV.B4XSeekBar1.MaxValue = clv_prods_ll.Size +' PCLV.B4XSeekBar1.MinValue = 0 +' PCLV.B4XSeekBar1.Interval = clv_prods_ll.Size/10 +' PCLV.B4XSeekBar1.Value = clv_prods_ll.Size +' PCLV.B4XSeekBar1.Update +' Log($"Min:0, max:${clv_prods_ll.Size}, Interval:${clv_prods_ll.Size/10}"$) +' LogColor("TIEMPO DE PROCESO DEL TEXTCHANGED: " & ((DateTime.Now-inicioContador)/1000), Colors.Red) +End Sub + +Sub LlenaProdsLL(p As ResultSet) + Log("Iniciamos LlenaProdsLL") + listaProds.Initialize + If hayPedido Then 'Si hay pedido obtenemos las cantidades de los productos para agregarlos al CLV. + Dim cantsMap As Map + cantsMap.Initialize + Dim pe As ResultSet = B4XPages.MainPage.skmt.ExecQuery($"select PE_PROID, PE_CANT, PE_CANTC, PE_BCAJAS from PEDIDO where PE_CLIENTE = '${clienteId}' and PE_CEDIS = '${Subs.traeAlmacen}' and PE_FOLIO = '${B4XPages.MainPage.tipo_venta}'"$) +' LogColor("Ponemos productos de pedido anterior: "&pe.RowCount, Colors.red) + Do While pe.NextRow + Private cant As Int = 0 + If pe.GetString("PE_BCAJAS") = 0 Then + cantsMap.put(pe.GetString("PE_PROID"), pe.GetString("PE_CANT")) + Else If pe.GetString("PE_BCAJAS") = 1 Then + cantsMap.put(pe.GetString("PE_PROID"), pe.GetString("PE_CANTC")) + End If + Log(clienteId &"|||||"&pe.GetString("PE_PROID")&"|||||"& pe.GetString("PE_CANT")) + Loop + pe.Close + End If +' Log(p.IsInitialized) + If p.IsInitialized Then +' Log("YA HAY RESULSET") + Else +' Log("NO HAY RESULSET") +LogColor(Starter.tabla,Colors.blue) +' Dim p As ResultSet = B4XPages.MainPage.skmt.ExecQuery($"select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_ALMACEN, CAT_GP_PRECIO, CAT_GP_TIPOPROD from ${Starter.tabla} where CAT_GP_PRECIO > 0 And CAT_GP_ALMACEN > 0 And CAT_GP_CLASIF <> 'PROMOS' order by CAT_GP_NOMBRE"$) + + Dim p As ResultSet = B4XPages.MainPage.skmt.ExecQuery($"select distinct CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_ALMACEN, CAT_GP_PRECIO, CAT_GP_TIPOPROD, CAT_DP_CONVERSION1, CAT_DP_PRECIO4, PE_BCAJAS from ${Starter.tabla} LEFT JOIN PEDIDO ON CAT_GP_ID = PE_PROID where CAT_GP_PRECIO > 0 And CAT_GP_ALMACEN > 0 And CAT_GP_CLASIF <> 'PROMOS' union all select CAT_GP_ID, CAT_GP_NOMBRE, CAT_GP_ALMACEN, CAT_GP_PRECIO, CAT_GP_TIPOPROD, CAT_DP_CONVERSION1, CAT_DP_PRECIO4 , PE_BCAJAS from ${Starter.tabla} LEFT JOIN PEDIDO ON CAT_GP_ID = PE_PROID where CAT_GP_PRECIO > 0 And CAT_GP_ALMACEN = 0 And CAT_GP_CLASIF <> 'PROMOS' and cat_gp_id in (select pe_proid from pedido where pe_cliente in (select cuenta from cuentaa)) order by 2"$) + + End If + + Do While p.NextRow + Private cant As Int = 0 + If hayPedido And cantsMap.ContainsKey(p.GetString("CAT_GP_ID")) Then + Log(p.GetString("CAT_GP_ID")) + cant = cantsMap.Get(p.GetString("CAT_GP_ID")) + End If + Dim tempMap As Map = CreateMap("prod":p.GetString("CAT_GP_NOMBRE"), "precio":p.GetString("CAT_GP_PRECIO"), "almacen":p.GetString("CAT_GP_ALMACEN"), "id":p.GetString("CAT_GP_ID"), "cant":cant, "conversion":p.GetString("CAT_DP_CONVERSION1"), "precio_caja":p.GetString("CAT_DP_PRECIO4"), "b_caja":p.GetString("PE_BCAJAS")) +' Log(tempMap) + listaProds.Add(tempMap) + Loop + p.Close +' Log(listaProds) + PCLV.Commit + clv_prods_ll.Clear + Private listaProdsConCant, listaProdsConCantIndex As List + listaProdsConCant.Initialize + listaProdsConCantIndex.Initialize + listaHints.Initialize + For q=0 To listaProds.Size-1' Sacamos los productos con cantidad previa. + If listaProds.Get(q).As(Map).Get("cant").As(Int) <> 0 Then +' Log(listaProds.Get(q).As(Map).Get("cant")) + listaProdsConCant.Add(listaProds.Get(q)) + listaProdsConCantIndex.Add(q) + End If + Next +' Log(listaProdsConCantIndex) + Private cont As Int = 0 + For pr0=0 To listaProdsConCant.Size - 1 'Agregamos los productos con cantidad previa. + Private Pnl As B4XView = xui.CreatePanel("") +' Pnl.SetLayoutAnimated(0, 0, 0, clv_prods_ll.AsView.Width, 300dip) + Pnl.SetLayoutAnimated(0, 0, 0, clv_prods_ll.AsView.Width, 135dip) + clv_prods_ll.Add(Pnl, listaProdsConCant.Get(pr0)) + listaHints.Add(listaProdsConCant.get(pr0).As(Map).Get("prod")) + cont = cont + 1 + Next +' LogColor(clv_prods_ll.Size, Colors.red) +' Log(listaProds.Size) + For pr=0 To listaProds.Size-1 + If listaProdsConCantIndex.IndexOf(pr) = -1 Then + Private Pnl As B4XView = xui.CreatePanel("") + Pnl.SetLayoutAnimated(0, 0, 0, clv_prods_ll.AsView.Width, 135dip) + clv_prods_ll.Add(Pnl, listaProds.Get(pr)) + listaHints.Add(listaProds.get(pr).As(Map).Get("prod")) + cont = cont + 1 + End If + Next +' LogColor(clv_prods_ll.Size, Colors.red) +' PCLV.Commit +' Log("CONT=" & cont) +' Log("CLV_PRODSLL="&clv_prods_ll.Size) + PCLV.B4XSeekBar1.MaxValue = clv_prods_ll.Size + PCLV.B4XSeekBar1.MinValue = 0 + PCLV.B4XSeekBar1.Interval = clv_prods_ll.Size/20 + PCLV.B4XSeekBar1.Value = clv_prods_ll.Size + PCLV.B4XSeekBar1.Update +' Log($"Min:0, max:${clv_prods_ll.Size}, Interval:${clv_prods_ll.Size/20}"$) + reiniciarlistaProds = False +End Sub + +'Return the hint that will be displayed when the user fast scrolls the list. It can be a string or CSBuilder. +Sub PCLV_HintRequested(Index As Int) As Object + Dim word As String = listaHints.get(Index) + Return word +End Sub + + + + +Sub b_prodMenosc_Click + totalcajasmaspiezas = 0 + etCantHasFocus = False + Root.RequestFocus +' LogColor("b_prodMenos_Click", Colors.Magenta) + Dim index As Int = clv_prods_ll.GetItemFromView(Sender) + Dim pnl0 As B4XView = clv_prods_ll.GetPanel(index) + Dim pnl As B4XView = pnl0.GetView(0) + Dim laCant As B4XView = pnl.GetView(2).GetView(2) + Dim laCant2 As B4XView = pnl.GetView(3).GetView(2) + Dim lProdX As B4XView = pnl.GetView(1) + Dim panelcajas As B4XView = pnl.GetView(3) + Dim panelpiezas As B4XView = pnl.GetView(2) +' Log($"precio|stock:${laCant.tag}"$) + If laCant2.Text = "" Then laCant2.Text = 0 +' Log("lacant.text="&laCant.text) + laCant2.Text = $"${NumberFormat2(laCant2.Text-1,0,0,0,False)}"$ + If laCant2.Text < 0 Then laCant2.Text = 0 + Private tmpMap As Map = clv_prods_ll.GetValue(index).As(Map) + Private precio As String=clv_prods_ll.GetValue(index).As(Map).Get("precio") + Private id As String=clv_prods_ll.GetValue(index).As(Map).Get("id") + Private tmpMap As Map = CreateMap("precio":precio, "cant":laCant2.Text, "almacen":Subs.traeAlmacen) + Private nombreX As String = Subs.traeProdNombre(id) + Private conversion As String = clv_prods_ll.GetValue(index).As(Map).Get("conversion") + Private preciocaja As String = clv_prods_ll.GetValue(index).As(Map).Get("precio_caja") + + Log(tmpMap) +' prodsMap.Put(id, tmpMap) + If laCant2.Text = 0 Then prodsMap.Remove(id) + If laCant2.Text = 0 Then + panelpiezas.Visible = True + Else If laCant2.Text > 0 Or clv_prods_ll.GetValue(index).As(Map).Get("conversion") < clv_prods_ll.GetValue(index).As(Map).Get("almacen") Then + panelpiezas.Visible = False + End If +' If laCant.IsInitialized Then +' totalcajasmaspiezas = laCant.Text + laCant2.Text +' Else +' totalcajasmaspiezas = laCant2.Text +' End If + LogColor("prodsMap="&prodsMap, Colors.blue) +' (Subs.traeAlmacen, p1.Get("precio"), p1.Get("cant"), pn, p, clienteId, Subs.traeFecha, Subs.traeUsuarioDeBD, rutaUsuario, 0, B4XPages.MainPage.tipo_venta) + Log($"${Subs.traeAlmacen}, ${precio}, ${laCant2.text}, ${Subs.traeProdNombre(id)}, ${id}, ${clienteId}"$) +' Subs.actualizaProducto(Subs.traeAlmacen, preciocaja,(laCant2.Text * conversion), Subs.traeProdNombre(id), id, clienteId, Subs.traeFecha, Subs.traeUsuarioDeBD, rutaUsuario, 0, B4XPages.MainPage.tipo_venta,laCant2.Text,1) + Subs.actualizaProducto2(Subs.traeAlmacen, preciocaja,(laCant2.Text * conversion), Subs.traeProdNombre(id), id, clienteId, Subs.traeFecha, Subs.traeUsuarioDeBD, rutaUsuario, 0, B4XPages.MainPage.tipo_venta,laCant2.Text,1) + cuentaProds + LogColor("prodsMap="&prodsMap, Colors.blue) + Log($"Total Prods: ${totalProds}, Total Compra: $$1.2{totalCompra}"$) + If 1 = 1 Then + Private cs As CSBuilder + cs.Initialize + Private o As Cursor = Starter.skmt.ExecQuery($"select CAT_GP_ALMACEN from ${Starter.tabla} where CAT_GP_ID = '${id}'"$) + Private invActualizado As String = "0" + If o.RowCount > 0 Then + o.Position = 0 + invActualizado = o.GetString("CAT_GP_ALMACEN") + End If + If clv_prods_ll.GetValue(index).As(Map).Get("precio_caja").As(Float) = 0 Or clv_prods_ll.GetValue(index).As(Map).Get("conversion").As(Int) = 1 Then + Private maxcajas2 As Int = 0 + Log("cajas a 0") + Else + Private maxcajas2 As Int = invActualizado/clv_prods_ll.GetValue(index).As(Map).Get("conversion") + Log("cajas no a 0") + End If + If 2 = 2 Then lProdX.Text = cs.Color(Colors.red).append(nombreX).pop.Append(CRLF).Append("Existencias: " & invActualizado).Color(0xFF017F01).Append($" $${NumberFormat2(precio, 1, 2, 2, False)}${CRLF}Max. Cajas: ${maxcajas2}"$).Popall +' Log(lProdX.Text) + End If + If Subs.totalPedido < 1 Then laCant2.Text = "0" + invTotal = totalcajasmaspiezas + Subs.traeinventario(id) +' LogColor("InvTotal PRODMAS: " & invTotal, Colors.Red) + +End Sub + +Sub b_prodMasc_Click + etCantHasFocus = False + Root.RequestFocus +' LogColor("b_prodMas_Click", Colors.Magenta) + + Dim index As Int = clv_prods_ll.GetItemFromView(Sender) + Dim pnl0 As B4XView = clv_prods_ll.GetPanel(index) + Dim pnl As B4XView = pnl0.GetView(0) + Dim laCant As B4XView = pnl.GetView(2).GetView(2) + Dim laCant2 As B4XView = pnl.GetView(3).GetView(2) + Dim lProdX As B4XView = pnl.GetView(1) + Dim panelcajas As B4XView = pnl.GetView(3) + Dim panelpiezas As B4XView = pnl.GetView(2) +' Private tmpMap As Map = clv_prods_ll.GetValue(index).As(Map) + Private precio As String=clv_prods_ll.GetValue(index).As(Map).Get("precio") + Private inv As String=clv_prods_ll.GetValue(index).As(Map).Get("almacen") + Private existencias As String = clv_prods_ll.GetValue(index).As(Map).Get("almacen") + Private conversion As String = clv_prods_ll.GetValue(index).As(Map).Get("conversion") + Private preciocaja As String = clv_prods_ll.GetValue(index).As(Map).Get("precio_caja") + Log(conversion) + Log($"Existencias: ${existencias}"$) + If laCant2.Text = "" Then laCant2.Text = 0 + Private id As String=clv_prods_ll.GetValue(index).As(Map).Get("id") +' If laCant.Text + 1 <= inv Then + '' Log(NumberFormat2(laCant.Text+1,0,0,0,False)) +' laCant.Text = $"${NumberFormat2(laCant.Text+1,0,0,0,False)}"$ + '' Private precio As String=clv_prods_ll.GetValue(index).As(Map).Get("precio") +' Private id As String=clv_prods_ll.GetValue(index).As(Map).Get("id") + '' Private tmpMap As Map = CreateMap("precio":precio, "cant":laCant.Text, "almacen":Subs.traeAlmacen) + '' Log(tmpMap) + '' prodsMap.Put(id, tmpMap) + '' LogColor(prodsMap, Colors.blue) +' End If +' Log("Cantidad + exis " & (laCant.Text + existencias)) +' Log( (laCant.Text + 1 <= (laCant.Text + existencias))) +' Log("inventario "&Subs.traeinventario(id)) +' Log((Subs.totalPedido - precio > 1)) +' Log((Subs.totalPedido)) + + Log(B4XPages.MainPage.tipo_venta) + Log("--------------->Credito Disponible: "&B4XPages.MainPage.cliente.credito_diponible) + Log(preciocaja) +' Log(precio) + If B4XPages.MainPage.tipo_venta = "PREVENTA_CREDITO" Then + + Dim fg As Cursor = Starter.skmt.ExecQuery("Select Ifnull(sum(PE_COSTO_TOT),0) AS COSTO FROM PEDIDO WHERE PE_CLIENTE IN (SELECT CUENTA FROM CUENTAA) AND PE_FOLIO = 'PREVENTA_CREDITO'") + fg.Position = 0 + If fg.GetString("COSTO") + preciocaja <= B4XPages.MainPage.cliente.credito_diponible Then + + Log(Subs.traeinventario(id)) + Log((laCant2.Text * conversion) + conversion) + Log((laCant2.Text *conversion)+ Subs.traeinventario(id)) + If Subs.traeinventario(id) > 0 And ((laCant2.Text * conversion) + conversion <= ((laCant2.Text *conversion)+ Subs.traeinventario(id))) Then 'And (Subs.totalPedido - precio > 1) +' Log(clv_prods_ll.GetValue(index).As(Map)) + clv_prods_ll.GetValue(index).As(Map).Put("almacen", (inv - conversion)) + inv = inv - conversion +' laCant.Text = $"$1.0{laCant.Text+1}"$ + laCant2.Text = NumberFormat2((laCant2.Text + 1), 1, 0, 0, False) +' Log(clv_prods_ll.GetValue(index).As(Map)) + Log("cuando entro aqui?") + End If + Private nombreX As String = Subs.traeProdNombre(id) +' Subs.actualizaProducto(Subs.traeAlmacen, laCant.text, id, clienteId) + Log((laCant2.Text * conversion)) + If laCant2.Text > 0 Then + panelpiezas.Visible = False + Else If laCant2.Text = 0 Then + panelpiezas.Visible = True + End If + +' LogColor(laCant.Text,Colors.Red) +' If laCant.IsInitialized Then +' totalcajasmaspiezas = laCant.Text + laCant2.Text +' Else +' totalcajasmaspiezas = laCant2.Text +' End If + +' Subs.actualizaProducto(Subs.traeAlmacen,preciocaja,(laCant2.Text * conversion), Subs.traeProdNombre(id), id, clienteId, Subs.traeFecha, Subs.traeUsuarioDeBD, rutaUsuario, 0, B4XPages.MainPage.tipo_venta,laCant2.Text,1) + Subs.actualizaProducto2(Subs.traeAlmacen,preciocaja,(laCant2.Text * conversion), Subs.traeProdNombre(id), id, clienteId, Subs.traeFecha, Subs.traeUsuarioDeBD, rutaUsuario, 0, B4XPages.MainPage.tipo_venta,laCant2.Text,1) + cuentaProds +' Log($"Total Prods: ${totalProds}, Total Compra: $$1.2{totalCompra}"$) + If 1 = 1 Then + Private cs As CSBuilder + cs.Initialize + Private o As Cursor = Starter.skmt.ExecQuery($"select CAT_GP_ALMACEN from ${Starter.tabla} where CAT_GP_ID = '${id}'"$) + Private invActualizado As String = "0" + If o.RowCount > 0 Then + o.Position = 0 + invActualizado = o.GetString("CAT_GP_ALMACEN") + End If + If clv_prods_ll.GetValue(index).As(Map).Get("precio_caja").As(Float) = 0 Or clv_prods_ll.GetValue(index).As(Map).Get("conversion").As(Int) = 1 Then + Private maxcajas2 As Int = 0 + Log("cajas a 0") + Else + Private maxcajas2 As Int = invActualizado/clv_prods_ll.GetValue(index).As(Map).Get("conversion") + Log("cajas no a 0") + End If + If 2 = 2 Then lProdX.Text = cs.Color(Colors.red).append(nombreX).pop.Append(CRLF).Append("Existencias: " & invActualizado).Color(0xFF017F01).Append($" $${NumberFormat2(precio, 1, 2, 2, False)}${CRLF}Max. Cajas: ${maxcajas2}"$).Popall +' Log(lProdX.Text) + End If + invTotal = totalcajasmaspiezas + Subs.traeinventario(id) +' LogColor("InvTotal PRODMAS: " & invTotal, Colors.Red) + + + Else + MsgboxAsync("No se puede meter mas venta a credito por que supera el limite del credito","Atencion") + End If + + Else + + Log(Subs.traeinventario(id)) + Log((laCant2.Text * conversion) + conversion) + Log((laCant2.Text *conversion)+ Subs.traeinventario(id)) + If Subs.traeinventario(id) > 0 And ((laCant2.Text * conversion) + conversion <= ((laCant2.Text *conversion)+ Subs.traeinventario(id))) Then 'And (Subs.totalPedido - precio > 1) +' Log(clv_prods_ll.GetValue(index).As(Map)) + clv_prods_ll.GetValue(index).As(Map).Put("almacen", (inv - conversion)) + inv = inv - conversion +' laCant.Text = $"$1.0{laCant.Text+1}"$ + laCant2.Text = NumberFormat2((laCant2.Text + 1), 1, 0, 0, False) +' Log(clv_prods_ll.GetValue(index).As(Map)) + Log("cuando entro aqui?") + End If + Private nombreX As String = Subs.traeProdNombre(id) +' Subs.actualizaProducto(Subs.traeAlmacen, laCant.text, id, clienteId) + Log((laCant2.Text * conversion)) + If laCant2.Text > 0 Then + panelpiezas.Visible = False + Else If laCant2.Text = 0 Then + panelpiezas.Visible = True + End If + +' LogColor(laCant.Text,Colors.Red) +' If laCant.IsInitialized Then +' totalcajasmaspiezas = laCant.Text + laCant2.Text +' Else +' totalcajasmaspiezas = laCant2.Text +' End If + +' Subs.actualizaProducto(Subs.traeAlmacen,preciocaja,(laCant2.Text * conversion), Subs.traeProdNombre(id), id, clienteId, Subs.traeFecha, Subs.traeUsuarioDeBD, rutaUsuario, 0, B4XPages.MainPage.tipo_venta,laCant2.Text,1) + Subs.actualizaProducto2(Subs.traeAlmacen,preciocaja,(laCant2.Text * conversion), Subs.traeProdNombre(id), id, clienteId, Subs.traeFecha, Subs.traeUsuarioDeBD, rutaUsuario, 0, B4XPages.MainPage.tipo_venta,laCant2.Text,1) + cuentaProds +' Log($"Total Prods: ${totalProds}, Total Compra: $$1.2{totalCompra}"$) + If 1 = 1 Then + Private cs As CSBuilder + cs.Initialize + Private o As Cursor = Starter.skmt.ExecQuery($"select CAT_GP_ALMACEN from ${Starter.tabla} where CAT_GP_ID = '${id}'"$) + Private invActualizado As String = "0" + If o.RowCount > 0 Then + o.Position = 0 + invActualizado = o.GetString("CAT_GP_ALMACEN") + End If + If clv_prods_ll.GetValue(index).As(Map).Get("precio_caja").As(Float) = 0 Or clv_prods_ll.GetValue(index).As(Map).Get("conversion").As(Int) = 1 Then + Private maxcajas2 As Int = 0 + Log("cajas a 0") + Else + Private maxcajas2 As Int = invActualizado/clv_prods_ll.GetValue(index).As(Map).Get("conversion") + Log("cajas no a 0") + End If + If 2 = 2 Then lProdX.Text = cs.Color(Colors.red).append(nombreX).pop.Append(CRLF).Append("Existencias: " & invActualizado).Color(0xFF017F01).Append($" $${NumberFormat2(precio, 1, 2, 2, False)}${CRLF}Max. Cajas: ${maxcajas2}"$).Popall +' Log(lProdX.Text) + End If + invTotal = totalcajasmaspiezas + Subs.traeinventario(id) +' LogColor("InvTotal PRODMAS: " & invTotal, Colors.Red) + + End If + + + +End Sub + +Private Sub et_pCantc_FocusChanged (HasFocus As Boolean) + LogColor($"focus changed=${HasFocus}"$, Colors.Magenta) + If et_pCantc.Text = "" Then et_pCantc.Text = "0" + Dim index As Int = clv_prods_ll.GetItemFromView(Sender) + Dim pnl0 As B4XView = clv_prods_ll.GetPanel(index) + Dim pnl As B4XView = pnl0.GetView(0) + Dim laCant As B4XView = pnl.GetView(2).GetView(2) + Dim laCant2 As B4XView = pnl.GetView(3).GetView(2) + Private id As String=clv_prods_ll.GetValue(index).As(Map).Get("id") + If laCant2.Text = "" Then laCant2.Text = "0" + etCantHasFocus = HasFocus +' LogColor(laCant.Text,Colors.Red) +' If laCant.IsInitialized Then +' totalcajasmaspiezas = laCant.Text + laCant2.Text +' Else +' totalcajasmaspiezas = laCant2.Text +' End If + invTotal = totalcajasmaspiezas + Subs.traeinventario(id) +' LogColor("InvTotal PRODMAS: " & invTotal, Colors.Red) + + cuentaProds +End Sub + +Private Sub et_pCantc_TextChanged (Old As String, New As String) +' Log(etCantHasFocus) +' Log("InvTotal: " & invTotal) + If etCantHasFocus = True Then +' Sleep(500) +' LogColor($"txt changed: ${Old}|${New}, hasfocus=${etCantHasFocus}"$,Colors.Magenta) + Dim index As Int = clv_prods_ll.GetItemFromView(Sender) + Dim pnl0 As B4XView = clv_prods_ll.GetPanel(index) + Dim pnl As B4XView = pnl0.GetView(0) + Dim laCant As B4XView = pnl.GetView(2).GetView(2) + Dim laCant2 As B4XView = pnl.GetView(3).GetView(2) + Dim lProdX As B4XView = pnl.GetView(1) + Private id As String=clv_prods_ll.GetValue(index).As(Map).Get("id") + Private precio As String=clv_prods_ll.GetValue(index).As(Map).Get("precio") + Private inv As String=clv_prods_ll.GetValue(index).As(Map).Get("almacen") + Private inv As String=Subs.traeinventario(id) + Private nombreX As String = Subs.traeProdNombre(id) + Dim panelcajas As B4XView = pnl.GetView(3) + Dim panelpiezas As B4XView = pnl.GetView(2) + Private conversion As String = clv_prods_ll.GetValue(index).As(Map).Get("conversion") + Private preciocaja As String = clv_prods_ll.GetValue(index).As(Map).Get("precio_caja") + + invTotal = Subs.traeinventario(id) + Log("inventario total "& invTotal) + If(New = "" Or New = Null Or New = "-") Then New = 0 +' If New < 0 Then New = 0 + Log(($"new*conversion ${New * conversion} > ${invTotal} = ${((New * conversion) > invTotal)}"$)) + If((New * conversion) > invTotal) Then +' Dim maximocajas As Int = invTotal / conversion + Sender.As(EditText).text = 0 + New = 0 +' LogColor("cajas maximas "& maximocajas, Colors.Red) + pnl.GetView(2).Visible = True + Log("ponemos en 0") + End If + + Log("--------------->Credito Disponible: "&B4XPages.MainPage.cliente.credito_diponible) + + Dim fg As Cursor = Starter.skmt.ExecQuery("Select IFNULL(sum(PE_COSTO_TOT),0) AS COSTO FROM PEDIDO WHERE PE_CLIENTE IN (SELECT CUENTA FROM CUENTAA) AND PE_FOLIO = 'PREVENTA_CREDITO'") + fg.Position = 0 + If Old = "" Or Old = Null Then New = 0 + Log(preciocaja &" * "&Old) + + Log((fg.GetString("COSTO") + (preciocaja*New)) & " Monto Actual<-------") + If fg.GetString("COSTO") +((preciocaja*New)) > B4XPages.MainPage.cliente.credito_diponible Then + laCant2.Text = 0 + MsgboxAsync("No se puede meter mas venta a credito por que supera el limite del credito","Atencion") + End If + + ' Log($"inventario=${inv}"$) + Log("inventario total despues de max "& invTotal) + + If New = "" Then New = 0 + If laCant2.Text = "" Then laCant2.Text = 0 +' LogColor("la cant2 " &laCant2.Text,Colors.Red) + + If New > 0 Then + Log("lo ocultamos") + panelpiezas.Visible = False + Else If New = 0 Then + panelpiezas.Visible = True + End If + +' If laCant.IsInitialized Then +' totalcajasmaspiezas = laCant.Text + laCant2.Text +' Else +' totalcajasmaspiezas = laCant2.Text +' End If + Log("InvTotal: " & invTotal) + + If Not(Old = "0" And New = "") And laCant2.Text <> Null And laCant2.Text <> "" And etCantHasFocus Then + If invTotal - (laCant2.Text * conversion) >= 0 Then + LogColor("validacion inventariio " & (invTotal - (laCant2.Text * conversion)), Colors.Blue) + Log("actualizamos producto") + Subs.actualizaProducto2(Subs.traeAlmacen, preciocaja,(laCant2.Text * conversion), Subs.traeProdNombre(id), id, clienteId, Subs.traeFecha, Subs.traeUsuarioDeBD, rutaUsuario, 0, B4XPages.MainPage.tipo_venta,laCant2.Text,1) + cuentaProds + Else + Private totalcajaspermi As Int = invTotal / conversion + laCant2.Text = totalcajaspermi + Log("cajas permitidas total por guerra "& totalcajaspermi) + End If + End If + LogColor("la cant2 " & laCant2.Text,Colors.Green) + + +' If New <> "" And New.SubString2(0,0) = "0" Then +' New.SubString(1) +' End If +' If New <> "" And New.SubString(1) <> "" Then +' Log(New.SubString(1)) +' New = New.SubString(1) +' laCant.Text = New.SubString(1) +' Log(laCant.Text) +' End If + + If 1 = 1 Then + Private cs As CSBuilder + cs.Initialize + Private o As Cursor = Starter.skmt.ExecQuery($"select CAT_GP_ALMACEN from ${Starter.tabla} where CAT_GP_ID = '${id}'"$) + Private invActualizado As String = "0" +' If o.RowCount > 0 Then + o.Position = 0 + invActualizado = Subs.traeinventario(id) + Log(Subs.traeinventario(id)) +' End If + + If New = "" Then New = 0 + Log(clv_prods_ll.GetValue(index).As(Map).Get("precio_caja").As(Float)&" Precio caja") + Log(clv_prods_ll.GetValue(index).As(Map).Get("conversion").As(Int)& " Conversion" ) + If clv_prods_ll.GetValue(index).As(Map).Get("precio_caja").As(Float) = 0 Or clv_prods_ll.GetValue(index).As(Map).Get("conversion").As(Int) = 1 Then + Private maxcajas2 As Int = 0 + Log("cajas a 0") + Else + Private maxcajas2 As Int = invActualizado/clv_prods_ll.GetValue(index).As(Map).Get("conversion") + Log("cajas no a 0") + End If + lProdX.Text = cs.Color(Colors.red).append(nombreX).pop.Append(CRLF).Append("Existencias: " & (Subs.traeinventario(id))).Color(0xFF017F01).Append($" $${NumberFormat2(precio, 1, 2, 2, False)}${CRLF}Max. Cajas: ${maxcajas2}"$).Popall + End If + End If +End Sub \ No newline at end of file diff --git a/B4A/C_Promos.bas b/B4A/C_Promos.bas new file mode 100644 index 0000000..41a5907 --- /dev/null +++ b/B4A/C_Promos.bas @@ -0,0 +1,1209 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +'Sub Class_Globals +' Private Root As B4XView 'ignore +' Private xui As XUI +' Private l_promoDesc As Label +' Private lv_prodsFijos As ListView +' Private clv_prodsVariabes, clv_prodsVariabes2 As CustomListView +' Private l_prodsFijos As Label +' Private l_prodsVariables, l_prodsVariables2 As Label +' Private i_prod As ImageView +' Private l_prodX As Label +' Private p_prods As Panel +' Private b_prodMenos, b_prodMenos2 As Button +' Private et_pCant As EditText +' Private b_prodMas, b_prodMas2 As Button +' Private l_pCant As Label +' Dim totalProds As Int = 0 +' Dim prodsVar1 As Int = 0 +' Dim prodsVar2 As Int = 0 +' Dim prodsVarReq As Int = 0 +' Dim prodsVarReq_ As Int = 0 +' Dim prodsVarReq2 As Int = 0 +' Dim prodsVarReq2_ As Int = 0 +' Dim totalCompra As Float = 0 +' Dim prodsFijosTot As Float = 0 +' Dim tpf As Int = 0 +' Dim tpf2 As Int = 0 +' Dim maxCantPromos As Int = 1 +' Private l_totProds As Label +' Private l_total As Label +' Private b_terminar1 As Button +' Private p_promociones As Panel +' Dim prodsIds, prodsCants, prodsPrecios, prodsIds2, prodsCants2, prodsPrecios2 As List +' Dim estaPromo, esteCliente As String +' Private b_promoMas As Button +' Private b_promoMenos As Button +' Private et_promoCant As EditText +' Private l_promosCant As Label +' Private b_continuar As Button +' Private p_prodsVariables, p_prodsVariables2 As Panel +' Dim laPromo = "", elCliente = "" As String +' Dim prodsPedidoActual As String +' Dim montoPedidoActual As String +' Dim promosMap As Map +' Dim su As StringUtils +'End Sub +' +''You can add more parameters here. +'Public Sub Initialize As Object +' Return Me +'End Sub +' +''This event will be called once, before the page becomes visible. +'Private Sub B4XPage_Created (Root1 As B4XView) +' Root = Root1 +' 'load the layout to Root +' Root.LoadLayout("promociones") +' +' p_promociones.Height= Root.Height +' p_promociones.Width= Root.Width +' +' promosMap.Initialize +' p_promociones.Top=0 +' p_promociones.Left=0 +' b_terminar1.Left = Root.Width - (b_terminar1.Width + 10) +' b_continuar.Left = Root.Width - b_terminar1.Width - (b_continuar.Width + 20) +'End Sub +' +'Sub B4XPage_Appear +'' LogColor(B4XPages.MainPage.productos.prodsMap, Colors.blue) +' prodsIds.Initialize +' prodsCants.Initialize +' prodsPrecios.Initialize +' prodsIds2.Initialize +' prodsCants2.Initialize +' prodsPrecios2.Initialize +' Dim m As Map = Subs.traeTotalesClienteActual +' prodsPedidoActual = m.Get("productos") +' montoPedidoActual = m.Get("monto") +'' Log($"laPromo=${laPromo}, el cliente=${elCliente}"$) +' If laPromo <> "" Then muestraPromo(laPromo, elCliente) +'End Sub +''You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. +' +'Sub muestraPromo(promo As String, cliente As String) +' Private thisLog As Boolean = False +'' If thisLog Then Log(promo) +' estaPromo = promo +' esteCliente = cliente +' Private mp As Map = Subs.traePromo(promo, cliente) +' Private prodsPromo As Map = mp.Get("productos") 'Los productos de la promoción. +' Private invDispPromo As Map = Subs.traemosInventarioDisponibleParaPromo(promo) +'' If thisLog Then Log($"invDispPromo=${invDispPromo}"$) +' If thisLog Then Log("Max promos por inv de prods FIJOS: " & Subs.revisaMaxPromosProdsFijosPorInventario(mp)) +' If thisLog Then Log("Max promos por inv de prods VARIABLES: " & Subs.revisaMaxPromosProdsVariablesPorInventario(mp)) +' maxCantPromos = Subs.revisaMaxPromosProdsVariablesPorInventario(mp) +' et_promoCant.Text = 1 +' l_promosCant.text = "Max promos: " & maxCantPromos +' Private cs As CSBuilder +' cs.Initialize +' If thisLog Then Log(mp) +' If thisLog Then Log(prodsPromo) +' Private listaPV As List = mp.Get("prodsVariables") +' Private listaPreciosPV As List = mp.Get("prodsVariablesPrecios") +' Private listaPV2 As List = mp.Get("prodsVariables2") +' Private listaPreciosPV2 As List = mp.Get("prodsVariablesPrecios2") +'' Log("============ " & CRLF & listaPV) +' 'Ponemos la promo y descripción. +'' Dim desc As String = $"Promoción: ${promo}${CRLF}${mp.Get("descripcion")}"$ +'' Dim desc As String = cs.append("Promocion: ").Color(Colors.RGB(100,149,237)).Append(promo).pop.append(CRLF).Append(mp.Get("descripcion")).Popall +' l_promoDesc.Text = cs.Color(Colors.RGB(100,149,237)).append("Promocion: ").pop.append(CRLF).Append(promo).append(CRLF).Append(mp.Get("descripcion")).Popall +' prodsFijosTot = 0 +' 'Ponemos el texto en las etiquetas de la cantidad de productos. +'' Dim pf As List = mp.Get("prodsFijos") +' Dim pv As List = mp.Get("prodsVariables") +' Dim pv2 As List = mp.Get("prodsVariables2") +' If thisLog Then Log(mp) +' tpf = 0 +' For Each pfp As Int In mp.Get("prodsFijosPiezas").As(List) +' tpf = tpf + pfp +' Next +' tpf2 = tpf +'' tpf = tpf * maxCantPromos +' l_prodsFijos.Text = $"Productos fijos (${tpf})"$ +' prodsVarReq = mp.Get("prodsVariablesRequeridos") +' prodsVarReq_ = prodsVarReq +' prodsVarReq2 = mp.Get("prodsVariables2Requeridos") +' prodsVarReq2_ = prodsVarReq2 +'' Log("========= " & prodsVarReq2) +' l_prodsVariables.Text = $"Productos variables requeridos: ${prodsVarReq}"$ +' l_prodsVariables2.Text = $"Productos variables2 requeridos: ${prodsVarReq2}"$ +' If prodsVarReq = 0 Then +' p_prodsVariables.Visible = False +' Else +' p_prodsVariables.Visible = True +' End If +' 'Llenamos el listview con los productos fijos. +' Dim label1 As Label +' label1 = lv_prodsFijos.SingleLineLayout.Label +' label1.TextSize = 13 +' label1.TextColor = Colors.black +' lv_prodsFijos.SingleLineLayout.ItemHeight = 30dip +' lv_prodsFijos.Clear +'' If pf.Size < 1 Then pf.Add("Sin productos fijos.") +' lv_prodsFijos.Clear +' agregaFijosALista(mp, True) +' If thisLog Then Log("Total prods fijos = " & prodsFijosTot) +'' If thisLog Then Log("======="&prodsMap) +' l_totProds.text = $"Productos: ${tpf}"$ +' l_total.Text = $"Total: $$1.2{prodsFijosTot}"$ +'' Dim ins As InputStream +'' Dim bmp As Bitmap +'' Dim jpeg() As Byte +' +' 'Llenamos el listview con los productos variables. +' If thisLog Then Log($"PV1: ${pv.Size}, ${pv}"$) +' If thisLog Then Log($"PV2: ${pv2.Size}, ${pv2}"$) +' If thisLog Then Log("invDisp=" & invDispPromo) +' clv_prodsVariabes.Clear +' clv_prodsVariabes2.Clear +' For Each p As String In pv +' If invDispPromo.ContainsKey(p) Then 'Si no esta en la lista de productos con inventario no lo mostramos. +' Private indicePV = listaPV.IndexOf(p) +'' Log(p & "|" & indicePV & "|" & listaPreciosPV.Get(indicePV)) +' Private estePrecio = listaPreciosPV.Get(indicePV) +'' c2.Position=i +'' jpeg = c2.GetBlob("CAT_GP_IMG") +'' ins.InitializeFromBytesArray(jpeg, 0, jpeg.Length) +'' bmp.Initialize2(ins) +' Private thisProd As Map = prodsPromo.Get(p) +' If thisLog Then Log(thisProd) +' clv_prodsVariabes.Add(CreateListItem(Subs.traeProdNombre(p)&CRLF&"Hay " & invDispPromo.Get(p) & " $" & estePrecio, estePrecio, invDispPromo.Get(p), clv_prodsVariabes.AsView.Width, 50dip, Null, p), p) +' End If +' Next +' For Each p As String In pv2 +' If invDispPromo.ContainsKey(p) Then 'Si no esta en la lista de productos con inventario no lo mostramos. +'' Log(p) +'' Log($"${invDispPromo}$"$) +'' Log($"${listaPV2}"$) +'' Log("listaPrecios:"&listaPreciosPV2) +' Private indicePV2 = listaPV2.IndexOf(p) +'' Log($"${indicePV2}"$) +'' Log(p & "|" & indicePV & "|" & listaPreciosPV2.Get(indicePV2)) +' Private estePrecio = listaPreciosPV2.Get(indicePV2) +'' c2.Position=i +'' jpeg = c2.GetBlob("CAT_GP_IMG") +'' ins.InitializeFromBytesArray(jpeg, 0, jpeg.Length) +'' bmp.Initialize2(ins) +' Private thisProd As Map = prodsPromo.Get(p) +' If thisLog Then Log(thisProd) +' clv_prodsVariabes2.Add(CreateListItem2(Subs.traeProdNombre(p)&CRLF&"Hay " & invDispPromo.Get(p) & " $" & estePrecio, estePrecio, invDispPromo.Get(p), clv_prodsVariabes2.AsView.Width, 50dip, Null, p), p) +' End If +' Next +' If pv2.Size = 0 Then +'' Log("PV2 = 0") +' l_prodsVariables2.Visible = False +' p_prodsVariables2.Visible = False +' +' p_prodsVariables.Height = 410dip +' clv_prodsVariabes.GetBase.Height = p_prodsVariables.Height - 20 +'' p_prodsVariables.Height = 380dip +'' clv_prodsVariabes.GetBase.Height = 380dip 'Cambiamos el tamaño y posición de la lista de productos +''' clv_prodsVariabes.GetBase.Width = +' clv_prodsVariabes.Base_Resize(clv_prodsVariabes.GetBase.Width, p_prodsVariables.Height - 20) 'Cambiamos el tamaño del panel interno de la lista para que ajuste al nuevo tamaño. +' Else +' l_prodsVariables2.Visible = True +' p_prodsVariables2.Visible = True +' p_prodsVariables.Height = 210dip +' clv_prodsVariabes.GetBase.Height = p_prodsVariables.Height - 20 +' End If +' b_terminar1.Visible = False +' b_continuar.Visible = False +' cuentaProds +'End Sub +' +''Agregamos los productos fijos a una lista para despues meterlos en el pedido. +'Sub agregaFijosALista(mp As Map, addListItem As Boolean) +' Private thisLog As Boolean = False +' Private cont As Int = 0 +' prodsFijosTot = 0 +' Dim pf As List = mp.Get("prodsFijos") +' If pf.Size < 1 Then pf.Add("Sin productos fijos.") +'' Private m As Map +'' prodsMap.Put(estaPromo, CreateMap("cant":1, "precio":0)) +'' prodsIds.Add(estaPromo) +' prodsIds.clear +' prodsCants.clear +' prodsPrecios.clear +' prodsIds.Add(estaPromo) +' prodsCants.Add(et_promoCant.text.As(Int)) +' prodsPrecios.Add(0) +' For Each p As String In pf +'' Log($"cont=${cont}, mp=${mp}"$) +' If mp.Get("prodsFijosPiezas").As(List).Size > 0 Then +' Private tpi As String = mp.Get("prodsFijosPiezas").As(List).Get(cont) +' Else +' Private tpi As String = 0 +' End If +' If mp.Get("prodsFijosPrecios").As(List).Size > 0 Then +' Private tpr As String = mp.Get("prodsFijosPrecios").As(List).Get(cont) +' Else +' Private tpr As String = 0 +' End If +' prodsFijosTot = prodsFijosTot + (tpi * tpr) +' If thisLog Then Log("|"&tpi&"|"&p) +' Private ntpi As Int = tpi * et_promoCant.text +' If addListItem And tpi > 0 Then lv_prodsFijos.AddSingleLine(ntpi & " " & Subs.traeProdNombre(p) & " - $" & tpr) +' cont = cont+1 +'' m=CreateMap("cant":tpi, "precio":tpr) +'' prodsMap.Put(p, m) +' prodsIds.Add(p) +' prodsCants.Add(tpi.As(Int)*et_promoCant.text.As(Int)) +' prodsPrecios.Add(tpr) '*et_promoCant.text.As(Int) +' Next +'End Sub +' +'Sub CreateListItem(Text As String, precioU As String, inv As Int, Width As Int, Height As Int, img As Bitmap, prodId As String) As Panel 'ignore +' Dim p As B4XView = xui.CreatePanel("") +' p.SetLayoutAnimated(0, 0, 0, Width, Height) +' p.LoadLayout("prodItem1") +' l_prodX.TextSize = 15 +' l_prodX.Text = Text +' l_prodX.TextSize = 15 +'' p_prods.Height = Height + 70 +'' l_prodX.Height = Height +' p_prods.height = su.MeasureMultilineTextHeight(l_prodX, l_prodX.Text) + 20 'Calculamos la altura del panel de acuerdo al texto contenido. +' If p_prods.Height < Height Then p_prods.Height = Height +' l_prodX.Height = p_prods.Height +' l_pCant.Tag = precioU&"|"&inv&"|"&prodId +' et_pCant.Tag = precioU&"|"&inv&"|"&prodId +' et_pCant.BringToFront +'' i_prod.Bitmap = img +' p.Height = p_prods.Height +' Return p +'End Sub +' +'Sub CreateListItem2(Text As String, precioU As String, inv As Int, Width As Int, Height As Int, img As Bitmap, prodId As String) As Panel 'ignore +' Dim p As B4XView = xui.CreatePanel("") +' p.SetLayoutAnimated(0, 0, 0, Width, Height) +' p.LoadLayout("prodItem2") +' l_prodX.TextSize = 15 +' l_prodX.Text = Text +' l_prodX.TextSize = 15 +'' p_prods.Height = Height +'' l_prodX.Height = Height +' p_prods.height = su.MeasureMultilineTextHeight(l_prodX, l_prodX.Text) + 20 'Calculamos la altura del panel de acuerdo al texto contenido. +' If p_prods.Height < Height Then p_prods.Height = Height +' l_prodX.Height = p_prods.Height +'' l_pCant.Text = 0 +' l_pCant.Tag = precioU&"|"&inv&"|"&prodId +' et_pCant.Tag = precioU&"|"&inv&"|"&prodId +' et_pCant.BringToFront +'' i_prod.Bitmap = img +' p.Height = p_prods.Height +' Return p +'End Sub +' +'Sub b_prodMenos_Click +' Dim index As Int = clv_prodsVariabes.GetItemFromView(Sender) +' Dim pnl0 As B4XView = clv_prodsVariabes.GetPanel(index) +' Dim pnl As B4XView = pnl0.GetView(0) +'' Dim laCant As B4XView = pnl.GetView(5) +' Dim laCant As B4XView = pnl.GetView(2).GetView(4) +'' Log($"precio|stock:${laCant.tag}"$) +' laCant.Text = $"$1.0{laCant.Text-1}"$ +' If laCant.Text < 0 Then laCant.Text = 0 +' +'' Log(Regex.Split("\|", laCant.tag)(0)) +' Private precio As String = Regex.Split("\|", laCant.tag)(0) +'' Private inv As String = Regex.Split("\|", laCant.tag)(1) +' Private prodId As String = Regex.Split("\|", laCant.tag)(2) +' Private tmpMap As Map = CreateMap("precio":precio, "cant":laCant.Text, "almacen":estaPromo) +'' Log(tmpMap) +' promosMap.Put(prodId, tmpMap) +' If laCant.Text = 0 Then promosMap.Remove(prodId) +'' LogColor(promosMap, Colors.Magenta) +' cuentaProds +'' l_total.Text = $"Total Compra: $$1.2{totalCompra}"$ +'' l_totProds.text = $"Total Productos: ${totalProds}"$ +'End Sub +' +'Sub b_prodMas_Click +' If prodsVar1 < prodsVarReq Then +' Dim index As Int = clv_prodsVariabes.GetItemFromView(Sender) +' Dim pnl0 As B4XView = clv_prodsVariabes.GetPanel(index) +' Dim pnl As B4XView = pnl0.GetView(0) +'' Dim laCant As B4XView = pnl.GetView(5) +' Dim laCant As B4XView = pnl.GetView(2).GetView(4) +'' Log($"precio|stock:${laCant.tag}"$) +'' Log($"Indice: ${index}, cant:${laCant.Text+1}, precioU: ${laCant.tag}"$) +' Dim esteTag As List = Regex.Split("\|", laCant.Tag) +'' Log(esteTag) +' If laCant.Text + 1 <= esteTag.get(1) Then +' laCant.Text = $"$1.0{laCant.Text+1}"$ +' cuentaProds +' End If +' +'' Log(Regex.Split("\|", laCant.tag)(0)) +' Private precio As String = Regex.Split("\|", laCant.tag)(0) +'' Private inv As String = Regex.Split("\|", laCant.tag)(1) +' Private prodId As String = Regex.Split("\|", laCant.tag)(2) +' Private tmpMap As Map = CreateMap("precio":precio, "cant":laCant.Text, "almacen":estaPromo) +'' Log(tmpMap) +' promosMap.Put(prodId, tmpMap) +'' LogColor(promosMap, Colors.Magenta) +' End If +'' Log($"Total Prods: ${totalProds}, Total Compra: $$1.2{totalCompra}"$) +'' l_total.Text = $"Total Compra: $$1.2{totalCompra}"$ +'' l_totProds.text = $"Total Productos: ${totalProds}"$ +'End Sub +' +' +'Sub b_prodMenos2_Click +' Dim index As Int = clv_prodsVariabes2.GetItemFromView(Sender) +' Dim pnl0 As B4XView = clv_prodsVariabes2.GetPanel(index) +' Dim pnl As B4XView = pnl0.GetView(0) +'' Dim laCant As B4XView = pnl.GetView(5) +' Dim laCant As B4XView = pnl.GetView(2).GetView(4) +'' Log($"precio|stock:${laCant.tag}"$) +' laCant.Text = $"$1.0{laCant.Text-1}"$ +' If laCant.Text < 0 Then laCant.Text = 0 +' +'' Log(Regex.Split("\|", laCant.tag)(0)) +' Private precio As String = Regex.Split("\|", laCant.tag)(0) +'' Private inv As String = Regex.Split("\|", laCant.tag)(1) +' Private prodId As String = Regex.Split("\|", laCant.tag)(2) +' Private tmpMap As Map = CreateMap("precio":precio, "cant":laCant.Text, "almacen":estaPromo) +'' Log(tmpMap) +' promosMap.Put(prodId, tmpMap) +' If laCant.Text = 0 Then promosMap.Remove(prodId) +'' LogColor(promosMap, Colors.Magenta) +' cuentaProds +'' l_total.Text = $"Total Compra: $$1.2{totalCompra}"$ +'' l_totProds.text = $"Total Productos: ${totalProds}"$ +'End Sub +' +'Sub b_prodMas2_Click +'' Log(prodsVarReq & "|" & prodsVarReq2 & "|" & tpf & "|" & prodsVar2) +' If prodsVar2 < prodsVarReq2 Then +' Dim index As Int = clv_prodsVariabes2.GetItemFromView(Sender) +' Dim pnl0 As B4XView = clv_prodsVariabes2.GetPanel(index) +' Dim pnl As B4XView = pnl0.GetView(0) +'' Dim laCant As B4XView = pnl.GetView(5) +' Dim laCant As B4XView = pnl.GetView(2).GetView(4) +'' Log($"precio|stock:${laCant.tag}"$) +'' Log($"Indice: ${index}, cant:${laCant.Text+1}, precioU: ${laCant.tag}"$) +' Dim esteTag As List = Regex.Split("\|", laCant.Tag) +'' Log(esteTag) +' If laCant.Text + 1 <= esteTag.get(1) Then +' laCant.Text = $"$1.0{laCant.Text+1}"$ +' cuentaProds +' End If +' +'' Log(Regex.Split("\|", laCant.tag)(0)) +' Private precio As String = Regex.Split("\|", laCant.tag)(0) +'' Private inv As String = Regex.Split("\|", laCant.tag)(1) +' Private prodId As String = Regex.Split("\|", laCant.tag)(2) +' Private tmpMap As Map = CreateMap("precio":precio, "cant":laCant.Text, "almacen":estaPromo) +'' Log(tmpMap) +' promosMap.Put(prodId, tmpMap) +'' LogColor(promosMap, Colors.Magenta) +' End If +'' Log($"Total Prods: ${totalProds}, Total Compra: $$1.2{totalCompra}"$) +'' l_total.Text = $"Total Compra: $$1.2{totalCompra}"$ +'' l_totProds.text = $"Total Productos: ${totalProds}"$ +'End Sub +' +' +'Private Sub et_pCant_TextChanged (Old As String, New As String) +'' LogColor("txt changed",Colors.Magenta) +' cuentaProds +'End Sub +' +'Sub cuentaProds +'' Log("=====================================================") +'' Log("Inicia cuentaProds") +' Private thisLog As Boolean = False +'' LogColor($"ProdsFijos=${tpf}, totalProds=${totalProds}, totalCompra=${totalCompra}"$, Colors.Red) +' prodsIds2.Clear +' prodsCants2.Clear +' prodsPrecios2.Clear +' lv_prodsFijos.Clear +' prodsVar1 = 0 +' prodsVar2 = 0 +' agregaFijosALista(Subs.traePromo(estaPromo, esteCliente), True) +'' Log(prodsIds) +' Private tcpf As Float = 0 'Total de compra de productos fijos. +' For pf = 0 To prodsIds.Size - 1 +' If thisLog Then Log($"${tcpf} + ${prodsCants.Get(pf)} * ${prodsPrecios.Get(pf)} = ${(prodsPrecios.Get(pf) * prodsCants.Get(pf))}"$) +' tcpf = tcpf + (prodsPrecios.Get(pf) * prodsCants.Get(pf)) +' Next +'' Log("Total compra prodsFijos = " & tcpf) +' totalCompra = tcpf +' totalProds = tpf 'Cantidad total de productos fijos. +' 'Variables1 +' For i = 0 To clv_prodsVariabes.GetSize - 1 +' Private p0 As B4XView = clv_prodsVariabes.GetPanel(i) +' Private p As B4XView = p0.GetView(0) +' Private cant1 As B4XView = p.GetView(2).GetView(4) +' If cant1.Text = "" Then cant1.Text = 0 +' totalProds = totalProds + cant1.Text +' prodsVar1 = prodsVar1 + cant1.Text +' Private esteTag As List = Regex.Split("\|", cant1.Tag) +' If cant1.Text > esteTag.Get(1) Then cant1.Text = esteTag.Get(1) +' If cant1.Text > 0 Then +'' Log(esteTag.Get(2) & "|" & cant1.Text) +' totalCompra = totalCompra + (esteTag.get(0) * cant1.text) +' If thisLog Then Log($"Cant: ${cant1.Text}, Suma: ${totalCompra}"$) +' prodsIds2.Add(esteTag.Get(2)) +' prodsCants2.Add(cant1.Text) +' prodsPrecios2.Add(esteTag.get(0)) +' End If +' l_total.Text = $"Total: $$1.2{totalCompra}"$ +' l_totProds.text = $"Productos: ${totalProds}"$ +' Next +' 'Variables2 +' For i = 0 To clv_prodsVariabes2.GetSize - 1 +' Private p0 As B4XView = clv_prodsVariabes2.GetPanel(i) +' Private p As B4XView = p0.GetView(0) +' Private cant2 As B4XView = p.GetView(2).GetView(4) +' totalProds = totalProds + cant2.Text +' prodsVar2 = prodsVar2 + cant2.Text +' Private esteTag As List = Regex.Split("\|", cant2.Tag) +' If cant2.Text > esteTag.Get(1) Then cant2.Text = esteTag.Get(1) +' If cant2.Text > 0 Then +'' Log(esteTag.Get(2) & "|" & cant2.Text) +' totalCompra = totalCompra + (esteTag.get(0) * cant2.text) +' If thisLog Then Log($"Cant: ${cant2.Text}, Suma: ${totalCompra}"$) +' prodsIds2.Add(esteTag.Get(2)) +' prodsCants2.Add(cant2.Text) +' prodsPrecios2.Add(esteTag.get(0)) +' End If +' l_total.Text = $"Total: $$1.2{totalCompra}"$ +' l_totProds.text = $"Productos: ${totalProds}"$ +' Next +' +' If thisLog Then Log($"Total Prods: ${totalProds}, Total: $$1.2{totalCompra}"$) +' l_total.Text = $"Total: $$1.2{totalCompra}"$ +' l_totProds.text = $"Productos: ${totalProds}"$ +' If totalProds < prodsVarReq + prodsVarReq2 + tpf Or totalProds > prodsVarReq + prodsVarReq2 + tpf Then +'' Log("INCOMPLETA") +' b_terminar1.Visible = False +' b_continuar.Visible = False +' Else +'' Log("COMPLETA") +' b_terminar1.Visible = True +' b_continuar.Visible = True +' End If +' If thisLog Then LogColor($"${prodsIds}${CRLF}${prodsCants}${CRLF}${prodsPrecios}"$, Colors.blue) +' If thisLog Then LogColor($"${prodsIds2}${CRLF}${prodsCants2}${CRLF}${prodsPrecios2}"$, Colors.Magenta) +'' LogColor($"Total Prods: ${totalProds}, Total: $$1.2{totalCompra}"$, Colors.Blue) +'End Sub +' +'Private Sub et_pCant_FocusChanged (HasFocus As Boolean) +' LogColor("focus changed", Colors.Magenta) +' cuentaProds +'End Sub +' +'Private Sub b_promoMenos_Click +' If et_promoCant.Text > 1 Then +' et_promoCant.Text = et_promoCant.Text.As(Int) - 1 +' End If +' l_prodsFijos.Text = $"Productos fijos (${tpf2 * et_promoCant.Text.As(Int)})"$ +' l_prodsVariables.Text = $"Productos variables requeridos: ${prodsVarReq_ * et_promoCant.Text.As(Int)}"$ +' l_prodsVariables2.Text = $"Productos variables2 requeridos: ${prodsVarReq2_ * et_promoCant.Text.As(Int)}"$ +' tpf = tpf2 * et_promoCant.Text.As(Int) +' prodsVarReq = prodsVarReq_ * et_promoCant.Text.As(Int) +' prodsVarReq2 = prodsVarReq2_ * et_promoCant.Text.As(Int) +' Log($"Max promos=${et_promoCant.Text.As(Int)}, Prods fijos=${tpf}, "$) +' cuentaProds +'End Sub +' +'Private Sub b_promoMas_Click +' If et_promoCant.Text < maxCantPromos Then +' et_promoCant.Text = et_promoCant.Text.As(Int) + 1 +' l_prodsFijos.Text = $"Productos fijos (${tpf2 * et_promoCant.Text.As(Int)})"$ +' l_prodsVariables.Text = $"Productos variables requeridos: ${prodsVarReq_ * et_promoCant.Text.As(Int)}"$ +' l_prodsVariables2.Text = $"Productos variables2 requeridos: ${prodsVarReq2_ * et_promoCant.Text.As(Int)}"$ +' tpf = tpf2 * et_promoCant.Text.As(Int) +' prodsVarReq = prodsVarReq_ * et_promoCant.Text.As(Int) +' prodsVarReq2 = prodsVarReq2_ * et_promoCant.Text.As(Int) +' Log($"Max promos=${et_promoCant.Text.As(Int)}, Prods fijos=${tpf}, "$) +' End If +' If et_promoCant.text > maxCantPromos Then et_promoCant.Text = maxCantPromos +' cuentaProds +'End Sub +' +'Private Sub b_terminar1_Click +' cuentaProds +' Log("====================================================================") +' For t = 0 To prodsIds.Size - 1 'Guardamos los productos fijos de la promocion en pedido. +' Private pn As String = Subs.traeProdNombre(prodsIds.Get(t)) +' If prodsCants.Get(t) > 0 Then Subs.guardaProductoSinGestion(estaPromo, prodsPrecios.Get(t), prodsCants.Get(t), pn, prodsIds.Get(t), Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, Subs.traeRuta(Subs.traeCliente), 0, B4XPages.MainPage.tipo_venta,0,0) +' Next +' For t = 0 To prodsIds2.Size - 1 'Guardamos los productos variables de la promocion en pedido. +' Private pn As String = Subs.traeProdNombre(prodsIds2.Get(t)) +' Subs.guardaProductoSinGestion(estaPromo, prodsPrecios2.Get(t), prodsCants2.Get(t), pn, prodsIds2.Get(t), Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, Subs.traeRuta(Subs.traeCliente), 0, B4XPages.MainPage.tipo_venta,0,0) +' Next +'' Log(B4XPages.MainPage.productos.prodsMap) +'' For o=0 To prodsIds.Size - 1 'Ponemos los productos fijos en el mapa de la compra. +'' Private tmpMap As Map = CreateMap("precio":prodsPrecios.Get(o), "cant":prodsCants.Get(o), "almacen":estaPromo) +''' Log(tmpMap) +'' If prodsCants.Get(o) > 0 Then B4XPages.MainPage.productos.prodsMap.Put(estaPromo&"|"&prodsIds.Get(o), tmpMap) +'' Next +'' For o=0 To prodsIds2.Size - 1 'Ponemos los productos variables en el mapa de la compra. +'' Private tmpMap As Map = CreateMap("precio":prodsPrecios2.Get(o), "cant":prodsCants2.Get(o), "almacen":estaPromo) +''' Log(tmpMap) +'' B4XPages.MainPage.productos.prodsMap.Put(estaPromo&"|"&prodsIds2.Get(o), tmpMap) +'' Next +'' LogColor(B4XPages.MainPage.productos.prodsMap, Colors.red) +' lv_prodsFijos.Clear +' B4XPages.MainPage.bTerminarClicked = True +' B4XPages.ShowPage("productos") +' B4XPages.MainPage.productos.b_terminar1_Click +'End Sub +' +'Private Sub b_continuar_Click +' cuentaProds +' Log("====================================================================") +' For t = 0 To prodsIds.Size - 1 'Guardamos los productos fijos de la promocion en pedido. +' Private pn As String = Subs.traeProdNombre(prodsIds.Get(t)) +' Subs.guardaProductoSinGestion(estaPromo, prodsPrecios.Get(t), prodsCants.Get(t), pn, prodsIds.Get(t), Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, Subs.traeRuta(Subs.traeCliente), 0, B4XPages.MainPage.tipo_venta,0,0) +' Next +' For t = 0 To prodsIds2.Size - 1 'Guardamos los productos variables de la promocion en pedido. +' Private pn As String = Subs.traeProdNombre(prodsIds2.Get(t)) +' Subs.guardaProductoSinGestion(estaPromo, prodsPrecios2.Get(t), prodsCants2.Get(t), pn, prodsIds2.Get(t), Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, Subs.traeRuta(Subs.traeCliente), 0, B4XPages.MainPage.tipo_venta,0,0) +' Next +'' Log(B4XPages.MainPage.productos.prodsMap) +'' For o=0 To prodsIds.Size - 1 'Ponemos los productos fijos en el mapa de la compra. +'' Private tmpMap As Map = CreateMap("precio":prodsPrecios.Get(o), "cant":prodsCants.Get(o), "almacen":estaPromo) +''' Log(tmpMap) +'' If prodsCants.Get(o) > 0 Then B4XPages.MainPage.productos.prodsMap.Put(estaPromo&"|"&prodsIds.Get(o), tmpMap) +'' Next +'' For o=0 To prodsIds2.Size - 1 'Ponemos los productos variables en el mapa de la compra. +'' Private tmpMap As Map = CreateMap("precio":prodsPrecios2.Get(o), "cant":prodsCants2.Get(o), "almacen":estaPromo) +''' Log(tmpMap) +'' B4XPages.MainPage.productos.prodsMap.Put(estaPromo&"|"&prodsIds2.Get(o), tmpMap) +'' Next +'' LogColor(B4XPages.MainPage.productos.prodsMap, Colors.red) +' lv_prodsFijos.Clear +'' Activity_KeyPress(KeyCodes.KEYCODE_BACK) +'' CallSubDelayed2(productos, "Activity_KeyPress", KeyCodes.KEYCODE_BACK) +' Private prodspage As C_Productos +' If prodspage.IsInitialized Then +' prodspage.lv_catalogos.Visible = True +' prodspage.lv_promos.Visible = False +' prodspage.clv_productos.AsView.Visible = False +' End If +' B4XPages.MainPage.bTerminarClicked = True +' B4XPages.ShowPage("productos") +'End Sub +' +''Sub Activity_KeyPress (key As Int) As Boolean 'ignore +'' ' BACK key pressed +'' Log("Keypress") +'' If key=KeyCodes.KEYCODE_BACK Then +'' Log("BACK") +'' Return False +'' End If +'' Return False +'' ' Returning False signals the system to handle the key +''End Sub + +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI + Private l_promoDesc As Label + Private lv_prodsFijos As ListView + Private clv_prodsVariabes, clv_prodsVariabes2 As CustomListView + Private l_prodsFijos As Label + Private l_prodsVariables, l_prodsVariables2 As Label + Private i_prod As ImageView + Private l_prodX As Label + Private p_prods As Panel + Private b_prodMenos, b_prodMenos2 As Button + Private et_pCant As EditText + Private b_prodMas, b_prodMas2 As Button + Private l_pCant As Label + Dim totalProds As Int = 0 + Dim prodsVar1 As Int = 0 + Dim prodsVar2 As Int = 0 + Dim prodsVarReq As Int = 0 + Dim prodsVarReq_ As Int = 0 + Dim prodsVarReq2 As Int = 0 + Dim prodsVarReq2_ As Int = 0 + Dim totalCompra As Float = 0 + Dim prodsFijosTot As Float = 0 + Dim tpf As Int = 0 + Dim tpf2 As Int = 0 + Dim maxCantPromos As Int = 1 + Private l_totProds As Label + Private l_total As Label + Private b_terminar1 As Button + Private p_promociones As Panel + Dim prodsIds, prodsCants, prodsPrecios, prodsIds2, prodsCants2, prodsPrecios2 As List + Dim estaPromo, esteCliente As String + Private b_promoMas As Button + Private b_promoMenos As Button + Private et_promoCant As EditText + Private l_promosCant As Label + Private b_continuar As Button + Private p_prodsVariables, p_prodsVariables2 As Panel + Dim laPromo = "", elCliente = "" As String + Dim prodsPedidoActual As String + Dim montoPedidoActual As String + Dim promosMap As Map + Dim su As StringUtils +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + Root.LoadLayout("promociones") + + p_promociones.Height= Root.Height + p_promociones.Width= Root.Width + + promosMap.Initialize + p_promociones.Top=0 + p_promociones.Left=0 + b_terminar1.Left = Root.Width - (b_terminar1.Width + 10) + b_continuar.Left = Root.Width - b_terminar1.Width - (b_continuar.Width + 20) +End Sub + +Sub B4XPage_Appear +' LogColor(B4XPages.MainPage.productos.prodsMap, Colors.blue) + prodsIds.Initialize + prodsCants.Initialize + prodsPrecios.Initialize + prodsIds2.Initialize + prodsCants2.Initialize + prodsPrecios2.Initialize + Dim m As Map = Subs.traeTotalesClienteActual + prodsPedidoActual = m.Get("productos") + montoPedidoActual = m.Get("monto") +' Log($"laPromo=${laPromo}, el cliente=${elCliente}"$) + If laPromo <> "" Then muestraPromo(laPromo, elCliente) +End Sub +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Sub muestraPromo(promo As String, cliente As String) + Private thisLog As Boolean = False +' If thisLog Then Log(promo) + estaPromo = promo + esteCliente = cliente + Private mp As Map = Subs.traePromo(promo, cliente) + Private prodsPromo As Map = mp.Get("productos") 'Los productos de la promoción. + Private invDispPromo As Map = Subs.traemosInventarioDisponibleParaPromo(promo) +' If thisLog Then Log($"invDispPromo=${invDispPromo}"$) + If thisLog Then Log("Max promos por inv de prods FIJOS: " & Subs.revisaMaxPromosProdsFijosPorInventario(mp)) + If thisLog Then Log("Max promos por inv de prods VARIABLES: " & Subs.revisaMaxPromosProdsVariablesPorInventario(mp)) + maxCantPromos = Subs.revisaMaxPromosProdsVariablesPorInventario(mp) + et_promoCant.Text = 1 + l_promosCant.text = "Max promos: " & maxCantPromos + Private cs As CSBuilder + cs.Initialize + If thisLog Then Log(mp) + If thisLog Then Log(prodsPromo) + Private listaPV As List = mp.Get("prodsVariables") + Private listaPreciosPV As List = mp.Get("prodsVariablesPrecios") + Private listaPV2 As List = mp.Get("prodsVariables2") + Private listaPreciosPV2 As List = mp.Get("prodsVariablesPrecios2") +' Log("============ " & CRLF & listaPV) + 'Ponemos la promo y descripción. +' Dim desc As String = $"Promoción: ${promo}${CRLF}${mp.Get("descripcion")}"$ +' Dim desc As String = cs.append("Promocion: ").Color(Colors.RGB(100,149,237)).Append(promo).pop.append(CRLF).Append(mp.Get("descripcion")).Popall + l_promoDesc.Text = cs.Color(Colors.RGB(100,149,237)).append("Promocion: ").pop.append(CRLF).Append(promo).append(CRLF).Append(mp.Get("descripcion")).Popall + prodsFijosTot = 0 + 'Ponemos el texto en las etiquetas de la cantidad de productos. +' Dim pf As List = mp.Get("prodsFijos") + Dim pv As List = mp.Get("prodsVariables") + Dim pv2 As List = mp.Get("prodsVariables2") + If thisLog Then Log(mp) + tpf = 0 + For Each pfp As Int In mp.Get("prodsFijosPiezas").As(List) + tpf = tpf + pfp + Next + tpf2 = tpf +' tpf = tpf * maxCantPromos + l_prodsFijos.Text = $"Productos fijos (${tpf})"$ + prodsVarReq = mp.Get("prodsVariablesRequeridos") + prodsVarReq_ = prodsVarReq + prodsVarReq2 = mp.Get("prodsVariables2Requeridos") + prodsVarReq2_ = prodsVarReq2 +' Log("========= " & prodsVarReq2) + l_prodsVariables.Text = $"Productos variables requeridos: ${prodsVarReq}"$ + l_prodsVariables2.Text = $"Productos variables2 requeridos: ${prodsVarReq2}"$ + If prodsVarReq = 0 Then + p_prodsVariables.Visible = False + Else + p_prodsVariables.Visible = True + End If + 'Llenamos el listview con los productos fijos. + Dim label1 As Label + label1 = lv_prodsFijos.SingleLineLayout.Label + label1.TextSize = 13 + label1.TextColor = Colors.black + lv_prodsFijos.SingleLineLayout.ItemHeight = 30dip + lv_prodsFijos.Clear +' If pf.Size < 1 Then pf.Add("Sin productos fijos.") + lv_prodsFijos.Clear + agregaFijosALista(mp, True) + If thisLog Then Log("Total prods fijos = " & prodsFijosTot) +' If thisLog Then Log("======="&prodsMap) + l_totProds.text = $"Productos: ${tpf}"$ + l_total.Text = $"Total: $$1.2{prodsFijosTot}"$ +' Dim ins As InputStream +' Dim bmp As Bitmap +' Dim jpeg() As Byte + + 'Llenamos el listview con los productos variables. + If thisLog Then Log($"PV1: ${pv.Size}, ${pv}"$) + If thisLog Then Log($"PV2: ${pv2.Size}, ${pv2}"$) + If thisLog Then Log("invDisp=" & invDispPromo) + clv_prodsVariabes.Clear + clv_prodsVariabes2.Clear + For Each p As String In pv + If invDispPromo.ContainsKey(p) Then 'Si no esta en la lista de productos con inventario no lo mostramos. + Private indicePV = listaPV.IndexOf(p) +' Log(p & "|" & indicePV & "|" & listaPreciosPV.Get(indicePV)) + Private estePrecio = listaPreciosPV.Get(indicePV) +' c2.Position=i +' jpeg = c2.GetBlob("CAT_GP_IMG") +' ins.InitializeFromBytesArray(jpeg, 0, jpeg.Length) +' bmp.Initialize2(ins) + Private thisProd As Map = prodsPromo.Get(p) + If thisLog Then Log(thisProd) + clv_prodsVariabes.Add(CreateListItem(Subs.traeProdNombre(p)&CRLF&"Hay " & invDispPromo.Get(p) & " $" & estePrecio, estePrecio, invDispPromo.Get(p), clv_prodsVariabes.AsView.Width, 50dip, Null, p), p) + End If + Next + For Each p As String In pv2 + If invDispPromo.ContainsKey(p) Then 'Si no esta en la lista de productos con inventario no lo mostramos. +' Log(p) +' Log($"${invDispPromo}$"$) +' Log($"${listaPV2}"$) +' Log("listaPrecios:"&listaPreciosPV2) + Private indicePV2 = listaPV2.IndexOf(p) +' Log($"${indicePV2}"$) +' Log(p & "|" & indicePV & "|" & listaPreciosPV2.Get(indicePV2)) + Private estePrecio = listaPreciosPV2.Get(indicePV2) +' c2.Position=i +' jpeg = c2.GetBlob("CAT_GP_IMG") +' ins.InitializeFromBytesArray(jpeg, 0, jpeg.Length) +' bmp.Initialize2(ins) + Private thisProd As Map = prodsPromo.Get(p) + If thisLog Then Log(thisProd) + clv_prodsVariabes2.Add(CreateListItem2(Subs.traeProdNombre(p)&CRLF&"Hay " & invDispPromo.Get(p) & " $" & estePrecio, estePrecio, invDispPromo.Get(p), clv_prodsVariabes2.AsView.Width, 50dip, Null, p), p) + End If + Next + If pv2.Size = 0 Then +' Log("PV2 = 0") + l_prodsVariables2.Visible = False + p_prodsVariables2.Visible = False + + p_prodsVariables.Height = 410dip + clv_prodsVariabes.GetBase.Height = p_prodsVariables.Height - 20 +' p_prodsVariables.Height = 380dip +' clv_prodsVariabes.GetBase.Height = 380dip 'Cambiamos el tamaño y posición de la lista de productos + '' clv_prodsVariabes.GetBase.Width = + clv_prodsVariabes.Base_Resize(clv_prodsVariabes.GetBase.Width, p_prodsVariables.Height - 20) 'Cambiamos el tamaño del panel interno de la lista para que ajuste al nuevo tamaño. + Else + l_prodsVariables2.Visible = True + p_prodsVariables2.Visible = True + p_prodsVariables.Height = 210dip + clv_prodsVariabes.GetBase.Height = p_prodsVariables.Height - 20 + End If + b_terminar1.Visible = False + b_continuar.Visible = False + cuentaProds +End Sub + +'Agregamos los productos fijos a una lista para despues meterlos en el pedido. +Sub agregaFijosALista(mp As Map, addListItem As Boolean) + Private thisLog As Boolean = False + Private cont As Int = 0 + prodsFijosTot = 0 + Dim pf As List = mp.Get("prodsFijos") + If pf.Size < 1 Then pf.Add("Sin productos fijos.") +' Private m As Map +' prodsMap.Put(estaPromo, CreateMap("cant":1, "precio":0)) +' prodsIds.Add(estaPromo) + prodsIds.clear + prodsCants.clear + prodsPrecios.clear + prodsIds.Add(estaPromo) + prodsCants.Add(et_promoCant.text.As(Int)) + prodsPrecios.Add(0) + For Each p As String In pf +' Log($"cont=${cont}, mp=${mp}"$) + If mp.Get("prodsFijosPiezas").As(List).Size > 0 Then + Private tpi As String = mp.Get("prodsFijosPiezas").As(List).Get(cont) + Else + Private tpi As String = 0 + End If + If mp.Get("prodsFijosPrecios").As(List).Size > 0 Then + Private tpr As String = mp.Get("prodsFijosPrecios").As(List).Get(cont) + Else + Private tpr As String = 0 + End If + prodsFijosTot = prodsFijosTot + (tpi * tpr) + If thisLog Then Log("|"&tpi&"|"&p) + Private ntpi As Int = tpi * et_promoCant.text + If addListItem And tpi > 0 Then lv_prodsFijos.AddSingleLine(ntpi & " " & Subs.traeProdNombre(p) & " - $" & tpr) + cont = cont+1 +' m=CreateMap("cant":tpi, "precio":tpr) +' prodsMap.Put(p, m) + prodsIds.Add(p) + prodsCants.Add(tpi.As(Int)*et_promoCant.text.As(Int)) + prodsPrecios.Add(tpr) '*et_promoCant.text.As(Int) + Next +End Sub + +Sub CreateListItem(Text As String, precioU As String, inv As Int, Width As Int, Height As Int, img As Bitmap, prodId As String) As Panel 'ignore + Dim p As B4XView = xui.CreatePanel("") + p.SetLayoutAnimated(0, 0, 0, Width, Height) + p.LoadLayout("prodItem1") + l_prodX.TextSize = 15 + l_prodX.Text = Text + l_prodX.TextSize = 15 +' p_prods.Height = Height + 70 +' l_prodX.Height = Height + p_prods.height = su.MeasureMultilineTextHeight(l_prodX, l_prodX.Text) + 20 'Calculamos la altura del panel de acuerdo al texto contenido. + If p_prods.Height < Height Then p_prods.Height = Height + l_prodX.Height = p_prods.Height + l_pCant.Tag = precioU&"|"&inv&"|"&prodId + et_pCant.Tag = precioU&"|"&inv&"|"&prodId + et_pCant.BringToFront +' i_prod.Bitmap = img + p.Height = p_prods.Height + Return p +End Sub + +Sub CreateListItem2(Text As String, precioU As String, inv As Int, Width As Int, Height As Int, img As Bitmap, prodId As String) As Panel 'ignore + Dim p As B4XView = xui.CreatePanel("") + p.SetLayoutAnimated(0, 0, 0, Width, Height) + p.LoadLayout("prodItem2") + l_prodX.TextSize = 15 + l_prodX.Text = Text + l_prodX.TextSize = 15 +' p_prods.Height = Height +' l_prodX.Height = Height + p_prods.height = su.MeasureMultilineTextHeight(l_prodX, l_prodX.Text) + 20 'Calculamos la altura del panel de acuerdo al texto contenido. + If p_prods.Height < Height Then p_prods.Height = Height + l_prodX.Height = p_prods.Height +' l_pCant.Text = 0 + l_pCant.Tag = precioU&"|"&inv&"|"&prodId + et_pCant.Tag = precioU&"|"&inv&"|"&prodId + et_pCant.BringToFront +' i_prod.Bitmap = img + p.Height = p_prods.Height + Return p +End Sub + +Sub b_prodMenos_Click + Dim index As Int = clv_prodsVariabes.GetItemFromView(Sender) + Dim pnl0 As B4XView = clv_prodsVariabes.GetPanel(index) + Dim pnl As B4XView = pnl0.GetView(0) +' Dim laCant As B4XView = pnl.GetView(5) + Dim laCant As B4XView = pnl.GetView(2).GetView(4) +' Log($"precio|stock:${laCant.tag}"$) + laCant.Text = $"$1.0{laCant.Text-1}"$ + If laCant.Text < 0 Then laCant.Text = 0 + +' Log(Regex.Split("\|", laCant.tag)(0)) + Private precio As String = Regex.Split("\|", laCant.tag)(0) +' Private inv As String = Regex.Split("\|", laCant.tag)(1) + Private prodId As String = Regex.Split("\|", laCant.tag)(2) + Private tmpMap As Map = CreateMap("precio":precio, "cant":laCant.Text, "almacen":estaPromo) +' Log(tmpMap) + promosMap.Put(prodId, tmpMap) + If laCant.Text = 0 Then promosMap.Remove(prodId) +' LogColor(promosMap, Colors.Magenta) + cuentaProds +' l_total.Text = $"Total Compra: $$1.2{totalCompra}"$ +' l_totProds.text = $"Total Productos: ${totalProds}"$ +End Sub + +Sub b_prodMas_Click + If prodsVar1 < prodsVarReq Then + Dim index As Int = clv_prodsVariabes.GetItemFromView(Sender) + Dim pnl0 As B4XView = clv_prodsVariabes.GetPanel(index) + Dim pnl As B4XView = pnl0.GetView(0) +' Dim laCant As B4XView = pnl.GetView(5) + Dim laCant As B4XView = pnl.GetView(2).GetView(4) +' Log($"precio|stock:${laCant.tag}"$) +' Log($"Indice: ${index}, cant:${laCant.Text+1}, precioU: ${laCant.tag}"$) + Dim esteTag As List = Regex.Split("\|", laCant.Tag) +' Log(esteTag) + If laCant.Text + 1 <= esteTag.get(1) Then + laCant.Text = $"$1.0{laCant.Text+1}"$ + cuentaProds + End If + +' Log(Regex.Split("\|", laCant.tag)(0)) + Private precio As String = Regex.Split("\|", laCant.tag)(0) +' Private inv As String = Regex.Split("\|", laCant.tag)(1) + Private prodId As String = Regex.Split("\|", laCant.tag)(2) + Private tmpMap As Map = CreateMap("precio":precio, "cant":laCant.Text, "almacen":estaPromo) +' Log(tmpMap) + promosMap.Put(prodId, tmpMap) +' LogColor(promosMap, Colors.Magenta) + End If +' Log($"Total Prods: ${totalProds}, Total Compra: $$1.2{totalCompra}"$) +' l_total.Text = $"Total Compra: $$1.2{totalCompra}"$ +' l_totProds.text = $"Total Productos: ${totalProds}"$ +End Sub + + +Sub b_prodMenos2_Click + Dim index As Int = clv_prodsVariabes2.GetItemFromView(Sender) + Dim pnl0 As B4XView = clv_prodsVariabes2.GetPanel(index) + Dim pnl As B4XView = pnl0.GetView(0) +' Dim laCant As B4XView = pnl.GetView(5) + Dim laCant As B4XView = pnl.GetView(2).GetView(4) +' Log($"precio|stock:${laCant.tag}"$) + laCant.Text = $"$1.0{laCant.Text-1}"$ + If laCant.Text < 0 Then laCant.Text = 0 + +' Log(Regex.Split("\|", laCant.tag)(0)) + Private precio As String = Regex.Split("\|", laCant.tag)(0) +' Private inv As String = Regex.Split("\|", laCant.tag)(1) + Private prodId As String = Regex.Split("\|", laCant.tag)(2) + Private tmpMap As Map = CreateMap("precio":precio, "cant":laCant.Text, "almacen":estaPromo) +' Log(tmpMap) + promosMap.Put(prodId, tmpMap) + If laCant.Text = 0 Then promosMap.Remove(prodId) +' LogColor(promosMap, Colors.Magenta) + cuentaProds +' l_total.Text = $"Total Compra: $$1.2{totalCompra}"$ +' l_totProds.text = $"Total Productos: ${totalProds}"$ +End Sub + +Sub b_prodMas2_Click +' Log(prodsVarReq & "|" & prodsVarReq2 & "|" & tpf & "|" & prodsVar2) + If prodsVar2 < prodsVarReq2 Then + Dim index As Int = clv_prodsVariabes2.GetItemFromView(Sender) + Dim pnl0 As B4XView = clv_prodsVariabes2.GetPanel(index) + Dim pnl As B4XView = pnl0.GetView(0) +' Dim laCant As B4XView = pnl.GetView(5) + Dim laCant As B4XView = pnl.GetView(2).GetView(4) +' Log($"precio|stock:${laCant.tag}"$) +' Log($"Indice: ${index}, cant:${laCant.Text+1}, precioU: ${laCant.tag}"$) + Dim esteTag As List = Regex.Split("\|", laCant.Tag) +' Log(esteTag) + If laCant.Text + 1 <= esteTag.get(1) Then + laCant.Text = $"$1.0{laCant.Text+1}"$ + cuentaProds + End If + +' Log(Regex.Split("\|", laCant.tag)(0)) + Private precio As String = Regex.Split("\|", laCant.tag)(0) +' Private inv As String = Regex.Split("\|", laCant.tag)(1) + Private prodId As String = Regex.Split("\|", laCant.tag)(2) + Private tmpMap As Map = CreateMap("precio":precio, "cant":laCant.Text, "almacen":estaPromo) +' Log(tmpMap) + promosMap.Put(prodId, tmpMap) +' LogColor(promosMap, Colors.Magenta) + End If +' Log($"Total Prods: ${totalProds}, Total Compra: $$1.2{totalCompra}"$) +' l_total.Text = $"Total Compra: $$1.2{totalCompra}"$ +' l_totProds.text = $"Total Productos: ${totalProds}"$ +End Sub + + +Private Sub et_pCant_TextChanged (Old As String, New As String) +' LogColor("txt changed",Colors.Magenta) + cuentaProds +End Sub + +Sub cuentaProds +' Log("=====================================================") +' Log("Inicia cuentaProds") + Private thisLog As Boolean = False +' LogColor($"ProdsFijos=${tpf}, totalProds=${totalProds}, totalCompra=${totalCompra}"$, Colors.Red) + prodsIds2.Clear + prodsCants2.Clear + prodsPrecios2.Clear + lv_prodsFijos.Clear + prodsVar1 = 0 + prodsVar2 = 0 + agregaFijosALista(Subs.traePromo(estaPromo, esteCliente), True) +' Log(prodsIds) + Private tcpf As Float = 0 'Total de compra de productos fijos. + For pf = 0 To prodsIds.Size - 1 + If thisLog Then Log($"${tcpf} + ${prodsCants.Get(pf)} * ${prodsPrecios.Get(pf)} = ${(prodsPrecios.Get(pf) * prodsCants.Get(pf))}"$) + tcpf = tcpf + (prodsPrecios.Get(pf) * prodsCants.Get(pf)) + Next +' Log("Total compra prodsFijos = " & tcpf) + totalCompra = tcpf + totalProds = tpf 'Cantidad total de productos fijos. + 'Variables1 + For i = 0 To clv_prodsVariabes.GetSize - 1 + Private p0 As B4XView = clv_prodsVariabes.GetPanel(i) + Private p As B4XView = p0.GetView(0) + Private cant1 As B4XView = p.GetView(2).GetView(4) + If cant1.Text = "" Then cant1.Text = 0 + totalProds = totalProds + cant1.Text + prodsVar1 = prodsVar1 + cant1.Text + Private esteTag As List = Regex.Split("\|", cant1.Tag) + If cant1.Text > esteTag.Get(1) Then cant1.Text = esteTag.Get(1) + If cant1.Text > 0 Then +' Log(esteTag.Get(2) & "|" & cant1.Text) + totalCompra = totalCompra + (esteTag.get(0) * cant1.text) + If thisLog Then Log($"Cant: ${cant1.Text}, Suma: ${totalCompra}"$) + prodsIds2.Add(esteTag.Get(2)) + prodsCants2.Add(cant1.Text) + prodsPrecios2.Add(esteTag.get(0)) + End If + l_total.Text = $"Total: $$1.2{totalCompra}"$ + l_totProds.text = $"Productos: ${totalProds}"$ + Next + 'Variables2 + For i = 0 To clv_prodsVariabes2.GetSize - 1 + Private p0 As B4XView = clv_prodsVariabes2.GetPanel(i) + Private p As B4XView = p0.GetView(0) + Private cant2 As B4XView = p.GetView(2).GetView(4) + totalProds = totalProds + cant2.Text + prodsVar2 = prodsVar2 + cant2.Text + Private esteTag As List = Regex.Split("\|", cant2.Tag) + If cant2.Text > esteTag.Get(1) Then cant2.Text = esteTag.Get(1) + If cant2.Text > 0 Then +' Log(esteTag.Get(2) & "|" & cant2.Text) + totalCompra = totalCompra + (esteTag.get(0) * cant2.text) + If thisLog Then Log($"Cant: ${cant2.Text}, Suma: ${totalCompra}"$) + prodsIds2.Add(esteTag.Get(2)) + prodsCants2.Add(cant2.Text) + prodsPrecios2.Add(esteTag.get(0)) + End If + l_total.Text = $"Total: $$1.2{totalCompra}"$ + l_totProds.text = $"Productos: ${totalProds}"$ + Next + + If thisLog Then Log($"Total Prods: ${totalProds}, Total: $$1.2{totalCompra}"$) + l_total.Text = $"Total: $$1.2{totalCompra}"$ + l_totProds.text = $"Productos: ${totalProds}"$ + If totalProds < prodsVarReq + prodsVarReq2 + tpf Or totalProds > prodsVarReq + prodsVarReq2 + tpf Then +' Log("INCOMPLETA") + b_terminar1.Visible = False + b_continuar.Visible = False + Else +' Log("COMPLETA") + b_terminar1.Visible = True + b_continuar.Visible = True + End If + If thisLog Then LogColor($"${prodsIds}${CRLF}${prodsCants}${CRLF}${prodsPrecios}"$, Colors.blue) + If thisLog Then LogColor($"${prodsIds2}${CRLF}${prodsCants2}${CRLF}${prodsPrecios2}"$, Colors.Magenta) +' LogColor($"Total Prods: ${totalProds}, Total: $$1.2{totalCompra}"$, Colors.Blue) +End Sub + +Private Sub et_pCant_FocusChanged (HasFocus As Boolean) + LogColor("focus changed", Colors.Magenta) + cuentaProds +End Sub + +Private Sub b_promoMenos_Click + If et_promoCant.Text > 1 Then + et_promoCant.Text = et_promoCant.Text.As(Int) - 1 + End If + l_prodsFijos.Text = $"Productos fijos (${tpf2 * et_promoCant.Text.As(Int)})"$ + l_prodsVariables.Text = $"Productos variables requeridos: ${prodsVarReq_ * et_promoCant.Text.As(Int)}"$ + l_prodsVariables2.Text = $"Productos variables2 requeridos: ${prodsVarReq2_ * et_promoCant.Text.As(Int)}"$ + tpf = tpf2 * et_promoCant.Text.As(Int) + prodsVarReq = prodsVarReq_ * et_promoCant.Text.As(Int) + prodsVarReq2 = prodsVarReq2_ * et_promoCant.Text.As(Int) + Log($"Max promos=${et_promoCant.Text.As(Int)}, Prods fijos=${tpf}, "$) + cuentaProds +End Sub + +Private Sub b_promoMas_Click + If et_promoCant.Text < maxCantPromos Then + et_promoCant.Text = et_promoCant.Text.As(Int) + 1 + l_prodsFijos.Text = $"Productos fijos (${tpf2 * et_promoCant.Text.As(Int)})"$ + l_prodsVariables.Text = $"Productos variables requeridos: ${prodsVarReq_ * et_promoCant.Text.As(Int)}"$ + l_prodsVariables2.Text = $"Productos variables2 requeridos: ${prodsVarReq2_ * et_promoCant.Text.As(Int)}"$ + tpf = tpf2 * et_promoCant.Text.As(Int) + prodsVarReq = prodsVarReq_ * et_promoCant.Text.As(Int) + prodsVarReq2 = prodsVarReq2_ * et_promoCant.Text.As(Int) + Log($"Max promos=${et_promoCant.Text.As(Int)}, Prods fijos=${tpf}, "$) + End If + If et_promoCant.text > maxCantPromos Then et_promoCant.Text = maxCantPromos + cuentaProds +End Sub + +Private Sub b_terminar1_Click + cuentaProds + Log("====================================================================") + For t = 0 To prodsIds.Size - 1 'Guardamos los productos fijos de la promocion en pedido. + Private pn As String = Subs.traeProdNombre(prodsIds.Get(t)) + If prodsCants.Get(t) > 0 Then Subs.guardaProductoSinGestion(estaPromo, prodsPrecios.Get(t), prodsCants.Get(t), pn, prodsIds.Get(t), Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, Subs.traeRuta(Subs.traeCliente), 0, B4XPages.MainPage.tipo_venta,0,0) + Next + For t = 0 To prodsIds2.Size - 1 'Guardamos los productos variables de la promocion en pedido. + Private pn As String = Subs.traeProdNombre(prodsIds2.Get(t)) + Subs.guardaProductoSinGestion(estaPromo, prodsPrecios2.Get(t), prodsCants2.Get(t), pn, prodsIds2.Get(t), Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, Subs.traeRuta(Subs.traeCliente), 0, B4XPages.MainPage.tipo_venta,0,0) + Next +' Log(B4XPages.MainPage.productos.prodsMap) +' For o=0 To prodsIds.Size - 1 'Ponemos los productos fijos en el mapa de la compra. +' Private tmpMap As Map = CreateMap("precio":prodsPrecios.Get(o), "cant":prodsCants.Get(o), "almacen":estaPromo) + '' Log(tmpMap) +' If prodsCants.Get(o) > 0 Then B4XPages.MainPage.productos.prodsMap.Put(estaPromo&"|"&prodsIds.Get(o), tmpMap) +' Next +' For o=0 To prodsIds2.Size - 1 'Ponemos los productos variables en el mapa de la compra. +' Private tmpMap As Map = CreateMap("precio":prodsPrecios2.Get(o), "cant":prodsCants2.Get(o), "almacen":estaPromo) + '' Log(tmpMap) +' B4XPages.MainPage.productos.prodsMap.Put(estaPromo&"|"&prodsIds2.Get(o), tmpMap) +' Next +' LogColor(B4XPages.MainPage.productos.prodsMap, Colors.red) + lv_prodsFijos.Clear + B4XPages.MainPage.bTerminarClicked = True + B4XPages.ShowPage("productos") + B4XPages.MainPage.productos.b_terminar1_Click +End Sub + +Private Sub b_continuar_Click + cuentaProds + Log("====================================================================") + For t = 0 To prodsIds.Size - 1 'Guardamos los productos fijos de la promocion en pedido. + Private pn As String = Subs.traeProdNombre(prodsIds.Get(t)) + Subs.guardaProductoSinGestion(estaPromo, prodsPrecios.Get(t), prodsCants.Get(t), pn, prodsIds.Get(t), Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, Subs.traeRuta(Subs.traeCliente), 0, B4XPages.MainPage.tipo_venta,0,0) + Next + For t = 0 To prodsIds2.Size - 1 'Guardamos los productos variables de la promocion en pedido. + Private pn As String = Subs.traeProdNombre(prodsIds2.Get(t)) + Subs.guardaProductoSinGestion(estaPromo, prodsPrecios2.Get(t), prodsCants2.Get(t), pn, prodsIds2.Get(t), Subs.traeCliente, Subs.traeFecha, Subs.traeUsuarioDeBD, Subs.traeRuta(Subs.traeCliente), 0, B4XPages.MainPage.tipo_venta,0,0) + Next +' Log(B4XPages.MainPage.productos.prodsMap) +' For o=0 To prodsIds.Size - 1 'Ponemos los productos fijos en el mapa de la compra. +' Private tmpMap As Map = CreateMap("precio":prodsPrecios.Get(o), "cant":prodsCants.Get(o), "almacen":estaPromo) + '' Log(tmpMap) +' If prodsCants.Get(o) > 0 Then B4XPages.MainPage.productos.prodsMap.Put(estaPromo&"|"&prodsIds.Get(o), tmpMap) +' Next +' For o=0 To prodsIds2.Size - 1 'Ponemos los productos variables en el mapa de la compra. +' Private tmpMap As Map = CreateMap("precio":prodsPrecios2.Get(o), "cant":prodsCants2.Get(o), "almacen":estaPromo) + '' Log(tmpMap) +' B4XPages.MainPage.productos.prodsMap.Put(estaPromo&"|"&prodsIds2.Get(o), tmpMap) +' Next +' LogColor(B4XPages.MainPage.productos.prodsMap, Colors.red) + lv_prodsFijos.Clear +' Activity_KeyPress(KeyCodes.KEYCODE_BACK) +' CallSubDelayed2(productos, "Activity_KeyPress", KeyCodes.KEYCODE_BACK) + Private prodspage As C_Productos + If prodspage.IsInitialized Then + prodspage.lv_catalogos.Visible = True + prodspage.lv_promos.Visible = False + prodspage.clv_productos.AsView.Visible = False + End If + B4XPages.MainPage.bTerminarClicked = True + B4XPages.ShowPage("productos") +End Sub + +'Sub Activity_KeyPress (key As Int) As Boolean 'ignore +' ' BACK key pressed +' Log("Keypress") +' If key=KeyCodes.KEYCODE_BACK Then +' Log("BACK") +' Return False +' End If +' Return False +' ' Returning False signals the system to handle the key +'End Sub \ No newline at end of file diff --git a/B4A/C_RespaldoDiario.bas b/B4A/C_RespaldoDiario.bas new file mode 100644 index 0000000..92ad7e8 --- /dev/null +++ b/B4A/C_RespaldoDiario.bas @@ -0,0 +1,168 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=12.2 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore + Dim skmt, rkmt As SQL +' Dim rp As RuntimePermissions + Dim safePath As String + Dim fechaHoy As String + Dim skmtAttached As Boolean = False +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object +' Log("************************** " & safePath) + Dim rp As RuntimePermissions + Dim Dirp As String = File.DirInternal + Dim Dir As String +' Dim Dir2 As String + Try + File.MakeDir(Dirp,"/kmts") + Dir = "/kmts" +' Log("creado en kmts " & Dirp & Dir) + Catch + Dir = "" +' Log("creado en raiz") + End Try +' safePath = rp.GetSafeDirDefaultExternal("./") + safePath = Dirp & Dir + 'Si no existe el directorio "kmts" en el raiz de la tarjeta de memoria, nos cambiamos al directorio seguro (sdcard/Android/data/kelloggs...) + If Not(File.IsDirectory(Dirp, Dir)) Then safePath = rp.GetSafeDirDefaultExternal("kmts") + Private name() As String = Regex.split(" ", Application.LabelName) + rkmt.Initialize(safePath,$"${name(0)}.rkmt.km"$, True) + skmt.Initialize(File.DirInternal,"kmt.db", False) + rkmt.ExecNonQuery($"create table if not exists pedidos (pe_folio NUMERIC, pe_desc NUMERIC, pe_costo_sin TEXT, pe_ruta TEXT, pe_cedis TEXT, pe_costo_tot NUMERIC, pe_costou NUMERIC, pe_cant NUMERIC, pe_pronombre TEXT, pe_proid TEXT, pe_cliente TEXT, pe_fecha TEXT, pe_usuario TEXT)"$) + agregaColumna2(rkmt,"pedidos","pe_cantc","text") + agregaColumna2(rkmt,"pedidos","pe_bcajas","text") + Try 'Intentamos usar "pragma_table_info" para revisar si existe la columna en la tabla + Private c As Cursor = rkmt.ExecQuery($"SELECT COUNT(*) AS fCol FROM pragma_table_info('pedidos') WHERE name='pe_envio_ok'"$) + c.Position = 0 + If c.GetString("fCol") = 0 Then 'Si no esta la columna la agregamos + rkmt.ExecNonQuery($"ALTER TABLE pedidos ADD COLUMN pe_envio_ok INT"$) + Log($"Columna "pe_envio_ok INT", agregada a "pedidos}"."$) + End If + Catch 'Si no funciona "pragma_table_info" lo hacemos con try/catch + Try + rkmt.ExecNonQuery($"ALTER TABLE pedidos ADD COLUMN pe_envio_ok INT"$) + Log($"Columna "pe_envio_ok INT", agregada a "pedidos".."$) + Catch + Log(LastException) + End Try + End Try + rkmt.ExecNonQuery($"create table if not exists inventarios (cat_gp_iniciativa TEXT, cat_gp_tipoprod TEXT, cat_gp_dev TEXT, cat_gp_almacen NUMERIC, cat_gp_id TEXT, cat_gp_nombre TEXT, cat_gp_imp1 TEXT, cat_gp_imp2 TEXT, cat_gp_precio TEXT, cat_gp_clasif TEXT, cat_gp_sts TEXT, cat_gp_tipo TEXT, cat_gp_subtipo TEXT, cat_gp_tipoprod2 TEXT, fecha TEXT)"$) + rkmt.ExecNonQuery($"create table if not exists paquetes (cat_dp_precio_simptos TEXT, cat_dp_precio TEXT, cat_dp_almacen TEXT, cat_dp_id TEXT, cat_dp_idprod TEXT, cat_dp_tipo TEXT, cat_dp_pzas TEXT, cat_dp_usuario TEXT, cat_dp_fecha TEXT, cat_dp_regalo TEXT, cat_dp_clasif TEXT, fecha TEXT)"$) + DateTime.DateFormat = "MM/dd/yyyy" + fechaHoy = DateTime.Date(DateTime.Now) + revisaSkmtAttached + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root +End Sub + +'Revisa si esta montada "kmt.db" como "skmt" y si no, se monta. +Sub revisaSkmtAttached + skmtAttached = False + Dim rs As ResultSet = rkmt.ExecQuery("SELECT * FROM pragma_database_list") + Do While rs.NextRow 'Revisamos si esta montada "kmt.db" como "skmt" y si no, la montamos. + If rs.GetString("name") = "skmt1" Then skmtAttached = True + Loop + If Not(skmtAttached) Then + rkmt.ExecNonQuery($"attach database '${File.Combine(File.DirInternal, "kmt.db")}' as skmt1;"$) + skmtAttached = True + End If +End Sub + +'Copia la tabla PEDIDO a rkmt.db en la tarjeta del celular. +Sub respaldaPedido + Private inicio As String = DateTime.Now + Log("copiando pedidos ...") + rkmt.BeginTransaction + rkmt.ExecNonQuery($"delete from pedidos where substr(pe_fecha, 1, 10) = '${fechaHoy}'"$) + rkmt.ExecNonQuery($"insert into pedidos (pe_folio, pe_desc, pe_costo_sin, pe_ruta, pe_cedis, pe_costo_tot, pe_costou, pe_cant, pe_pronombre, pe_proid, pe_cliente, pe_fecha, pe_usuario, pe_envio_ok,pe_cantc,pe_bcajas) select * from skmt1.pedido where substr(pe_fecha, 1, 10) = '${fechaHoy}'"$) + rkmt.TransactionSuccessful 'Si no se pone TransactionSuccessful no se escribe NADA!! + rkmt.EndTransaction +' Log(((DateTime.Now - inicio)/1000) & " segs") +End Sub + + +'Copia la tabla CAT_GUNAPRODS a rkmt.db en la tarjeta del celular. +Sub respaldaInventarios +' Log($"Borrando de fecha ${fechaHoy}"$) + Private inicio As String = DateTime.Now +' Log("copiando inventarios ...") +' rkmt.ExecNonQuery($"delete from inventarios where substr(fecha, 1, 10) = '${fechaHoy}'"$) + rkmt.BeginTransaction + rkmt.ExecNonQuery($"delete from inventarios where fecha = '${fechaHoy}'"$) + rkmt.ExecNonQuery($"insert into inventarios (cat_gp_iniciativa, cat_gp_tipoprod, cat_gp_dev, cat_gp_almacen, cat_gp_id, cat_gp_nombre, cat_gp_imp1, cat_gp_imp2, cat_gp_precio, cat_gp_clasif, cat_gp_sts, cat_gp_tipo, cat_gp_subtipo, fecha) select cat_gp_iniciativa, cat_gp_tipoprod, cat_gp_dev, cat_gp_almacen, cat_gp_id, cat_gp_nombre, cat_gp_imp1, cat_gp_imp2, cat_gp_precio, cat_gp_clasif, cat_gp_sts, cat_gp_tipo, cat_gp_subtipo, '${fechaHoy}' as fecha from skmt1.cat_gunaprod"$) + rkmt.TransactionSuccessful 'Si no se pone TransactionSuccessful no se escribe NADA!! + rkmt.EndTransaction +' Log(((DateTime.Now - inicio)/1000) & " segs") +End Sub + +'Copia la tabla CAT_DETALLE_PAQ a rkmt.db en la tarjeta del celular. +Sub respaldaPaquetes + Private inicio As String = DateTime.Now +' Log("copiando paquetes ...") + rkmt.BeginTransaction +' rkmt.ExecNonQuery($"delete from paquetes where substr(fecha, 1, 10) = '${fechaHoy}'"$) + rkmt.ExecNonQuery($"delete from paquetes where fecha = '${fechaHoy}'"$) + rkmt.ExecNonQuery($"insert into paquetes (cat_dp_precio_simptos, cat_dp_precio, cat_dp_almacen, cat_dp_id, cat_dp_idprod, cat_dp_tipo, cat_dp_pzas, cat_dp_usuario, cat_dp_fecha, cat_dp_regalo, cat_dp_clasif, fecha) select cat_dp_precio_simptos, cat_dp_precio, cat_dp_almacen, cat_dp_id, cat_dp_idprod, cat_dp_tipo, cat_dp_pzas, cat_dp_usuario, cat_dp_fecha, cat_dp_regalo, cat_dp_clasif, '${fechaHoy}' as fecha from skmt1.cat_detalles_paq"$) + rkmt.TransactionSuccessful 'Si no se pone TransactionSuccessful no se escribe NADA!! + rkmt.EndTransaction +' Log(((DateTime.Now - inicio)/1000) & " segs") +End Sub + +Sub vacuum + Log("Vacuum") + rkmt.ExecNonQuery("vacuum;") +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +'Agrega una columna a la tabla especificada. +'Hay que indicar el "tipo" de la columna (TEXT, INTEGER, ETC) +'Ej. agregaColumna("TABLA", "COLUMNA", "TIPO") +Sub agregaColumna(tabla As String, columna As String, tipo As String) 'ignore + Try 'Intentamos usar "pragma_table_info" para revisar si existe la columna en la tabla + Private c As Cursor = B4XPages.MainPage.skmt.ExecQuery($"SELECT COUNT(*) AS fCol FROM pragma_table_info('${tabla}') WHERE name='${columna}'"$) + c.Position = 0 + If c.GetString("fCol") = 0 Then 'Si no esta la columna la agregamos + B4XPages.MainPage.skmt.ExecNonQuery($"ALTER TABLE ${tabla} ADD COLUMN ${columna} ${tipo}"$) + Log($"Columna "${columna} ${tipo}", agregada a "${tabla}"."$) + End If + Catch 'Si no funciona "pragma_table_info" lo hacemos con try/catch + Try + B4XPages.MainPage.skmt.ExecNonQuery($"ALTER TABLE ${tabla} ADD COLUMN ${columna} ${tipo}"$) + Log($"Columna "${columna} ${tipo}", agregada a "${tabla}".."$) + Catch + Log(LastException) + End Try + End Try +End Sub + +Sub agregaColumna2(db As SQL, tabla As String, columna As String, tipo As String) 'ignore + Try 'Intentamos usar "pragma_table_info" para revisar si existe la columna en la tabla + Private c As Cursor = db.ExecQuery($"SELECT COUNT(*) AS fCol FROM pragma_table_info('${tabla}') WHERE name='${columna}'"$) + c.Position = 0 + If c.GetString("fCol") = 0 Then 'Si no esta la columna la agregamos + db.ExecNonQuery($"ALTER TABLE ${tabla} ADD COLUMN ${columna} ${tipo}"$) + Log($"Columna "${columna} ${tipo}", agregada a "${tabla}"."$) + End If + Catch 'Si no funciona "pragma_table_info" lo hacemos con try/catch + Try + db.ExecNonQuery($"ALTER TABLE ${tabla} ADD COLUMN ${columna} ${tipo}"$) + Log($"Columna "${columna} ${tipo}", agregada a "${tabla}".."$) + Catch + Log(LastException) + End Try + End Try +End Sub diff --git a/B4A/C_Subs.bas b/B4A/C_Subs.bas new file mode 100644 index 0000000..781fdf1 --- /dev/null +++ b/B4A/C_Subs.bas @@ -0,0 +1,608 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=12.2 +@EndOfDesignText@ +Sub Class_Globals + 'These global variables will be declared once when the application starts. + 'These variables can be accessed from all modules. +' Public GZip As GZipStrings 'Usa la libreria CompressStrings +' Private su As StringUtils 'Usa la libreria StringUtils + Dim reqManager As DBRequestManager + Private EventName As String 'ignore + Private CallBack As Object 'ignore + Dim phn As Phone + Dim devModel As String + Dim db, kmt, errorLog As SQL 'Requiere la libreria "SQL" 'ignore + Dim ssid As String 'ignore + Dim reqsList As List + Dim reqError As Boolean = False + Private subsLogs As Boolean = False +End Sub + +'You can add more parameters here. +Public Sub Initialize (vCallback As Object, vEventName As String) As Object + reqsList.Initialize + EventName = vEventName + CallBack = vCallback + db = dbInit + reqManager = reqManagerInit + Return Me +End Sub + +'Inicializa la BD con "kmt.db" en File.DirInternal, si el archivo no existe, lo copia desde File.DirAssets. +'Dispara el evento "dbOk" cuando termina. +Sub dbInit As SQL + If File.Exists(File.DirInternal, "kmt.db") = False Then File.Copy(File.DirAssets, "kmt.db", File.DirInternal, "kmt.db") + db.Initialize(File.DirInternal,"kmt.db", True) + dbOk(True) +' Log(db.IsInitialized) + Return db +End Sub + +Sub dbOk(Success As Boolean) + If SubExists(CallBack, EventName & "_dbOk") Then + CallSub2(CallBack, EventName & "_dbOk", Success) + End If +End Sub + +'Inicializamos el DBReqServer. +Sub reqManagerInit As DBRequestManager + Private rm As DBRequestManager + rm.Initialize(Me, traeDBReqServerDeBD(db)) + Log($"Inicializamos reqManager con ${traeDBReqServerDeBD(db)}"$) + Return rm +End Sub + +'Reinicializamos el DBReqServer de C_Subs. +Sub reqManagerReInit + Log("reqManager ReInit") + reqManager = reqManagerInit +End Sub + +Sub envioTest + reqsList.Initialize ' Ponemos la lista de DBRequests en cero. + Private cmd As DBCommand + cmd.Initialize + cmd.Name = "select_fecha" + For i = 0 To 50 +' Sleep(200) + reqManager.ExecuteQuery(cmd, 0, $"select_fecha_${i}"$) + reqsList.Add($"select_fecha_${i}"$) + Next +End Sub + +'Dispara el evento "_envioOk" del caller. +Sub envioOk(Success As Boolean) +' Log($"_ENVIOOK_"$) + If SubExists(CallBack, EventName & "_envioOk") Then + CallSub2(CallBack, EventName & "_envioOk", Success) + End If +End Sub + +Sub JobDone(Job As HttpJob) + LogColor("C_SUBS JOBDONE - " & Job.Success, Colors.Red) + If Job.Success = False Then + Log($"Error en el request ${Job.Tag}"$) + LogColor("** " & Job.Tag & " Error: " & Job.ErrorMessage, Colors.Red) + If reqsList.IndexOf(Job.Tag) > -1 Then reqsList.RemoveAt(reqsList.IndexOf(Job.Tag)) + reqError = True + Else + If Job.JobName = "DBRequest" Then + Dim resultado As DBResult = reqManager.HandleJob(Job) + If reqsList.IndexOf(resultado.Tag) > -1 Then reqsList.RemoveAt(reqsList.IndexOf(resultado.Tag)) + If resultado.Tag = "select_fecha" Then + For Each records() As Object In resultado.Rows + For Each k As String In resultado.Columns.Keys + Log(resultado.Tag & ": " & k & ": " & records(resultado.Columns.Get(k))) + Next + Next + End If + End If + End If + Log(reqsList.Size) + If reqsList.Size = 0 Then 'Ya no hay DBReqs pendientes. + Log(reqError) + If Not(reqError) Then + envioOk(True) + Else + envioOk(False) + End If + reqError = False + Log("-= FIN =-") + End If + Job.Release +End Sub + +'Pone el valor de phn.Model en la variable global "devModel" +Sub getPhnId As String 'ignore + 'Requiere la libreria "Phone" + devModel = phn.Model + If devModel.Length <= 3 Then 'Si phn.Model esta en blanco ... + Dim t As String = phn.GetSettings("android_id") 'Intentamos con "android_id" + devModel = t + End If + If devModel.Length >= 3 Then 'Si tenemos valor para phn.Model + File.WriteString(File.DirInternal, "phnId.txt", devModel) 'Sobreescribimos archivo phnId.txt with deviceId +' Log("Tenemos phnId: "&devModel&" "&File.DirInternal&"/phn.txt sobreescrito") + Else If devModel.Length < 3 Then ' Si no tenemos valor, lo leemos de phnId.txt + Dim s As String = File.ReadString(File.DirInternal, "phnId.txt") + devModel = s +' Log("Leemos id de "&File.DirInternal&"/phnId.txt") +' Log(devModel) + End If + Return devModel +End Sub + +'Convierte una fecha al formato yyMMddHHmmss +Sub fechaKMT(fecha As String) As String 'ignore +' Log(fecha) + Dim OrigFormat As String = DateTime.DateFormat 'save orig date format + DateTime.DateFormat="yyMMddHHmmss" + Dim nuevaFecha As String=DateTime.Date(fecha) + DateTime.DateFormat=OrigFormat 'return to orig date format +' Log(nuevaFecha) + Return nuevaFecha +End Sub + +'Escribimos las coordenadas y fecha a un archivo de texto +Sub guardaInfoEnArchivo(coords As String) 'ignore + ' Cambiamos el formato de la hora + Dim OrigFormat As String=DateTime.DateFormat 'save orig date format + DateTime.DateFormat="MMM-dd HH:mm:ss" + Dim lastUpdate As String=DateTime.Date(DateTime.Now) + DateTime.DateFormat=OrigFormat 'return to orig date format + + Dim ubic As String = coords&","&lastUpdate + Dim out As OutputStream = File.OpenOutput(File.DirInternal, "gps.txt", True) + Dim s As String = ubic & CRLF + Dim t() As Byte = s.GetBytes("UTF-8") + out.WriteBytes(t, 0, t.Length) + out.Close +End Sub + +'Escribimos las coordenadas (latitud, longitud, fecha) y fecha a una BD +Sub guardaInfoEnBD(coords As String) 'ignore + Log("Guardamos ubicacion en BD - "&coords) + Try + Dim latlon() As String = Regex.Split("\|", coords) + If latlon.Length < 2 Then latlon = Regex.Split(",", coords) 'Si son menos de 2, entonces estan separadas por comas y no por "|" + If subsLogs Then Log("LatLon="&latlon) + kmt.ExecNonQuery2("INSERT INTO RUTA_GPS(FECHA, LAT, LON) VALUES (?,?,?)", Array As Object (latlon(2),latlon(0),latlon(1))) + Catch + LogColor(LastException, Colors.red) + End Try +End Sub + +'Limpiamos la tabla RUTA_GPS de la BD +Sub deleteGPS_DB 'ignore + kmt.ExecNonQuery("delete from RUTA_GPS") + kmt.ExecNonQuery("vacuum;") + ToastMessageShow("Borramos BD Coords GPS", False) +End Sub + +'Limpiamos la tabla errorLog de la BD +Sub deleteErrorLog_DB 'ignore + errorLog.ExecNonQuery("delete from errores") + errorLog.ExecNonQuery("vacuum;") + ToastMessageShow("BD Errores Borrada", False) +End Sub + +'Mandamos "coords" en un mensaje a "Sprvsr" +'Sub mandamosLoc(coords As String) 'ignore +'' Log("Iniciamos mandamosLoc "&coords) +'' Log("locRequest="&Tracker.locRequest) +' guardaInfoEnBD(coords)'Escribimos coordenadas y fecha a una bd +' Dim t As String +' If Tracker.locRequest="Activa" Then +' If PushService.au = 1 Then +' t = "au" ' es una actualizacion +' Else +' t = "u" ' es una peticion +' End If +' Dim params As Map = CreateMap("topic":"Sprvsr", "coords":coords, "t":t, "b":PushService.battery, "mt":Main.montoActual) +' CallSub2(PushService, "mandaMensaje",params) +' Tracker.locRequest="Enviada" +' CallSubDelayed(Tracker,"CreateLocationRequest") +' End If +'End Sub + +'Regresa la fecha y hora de hoy a las 00:00 en el formato "yyMMddHHMMSS" +Sub fechaInicioHoy As String 'ignore + Dim OrigFormat As String = DateTime.DateFormat 'save orig date format + DateTime.DateFormat="yyMMdd" + Private h As String = DateTime.Date(DateTime.Now)&"000000" + DateTime.DateFormat=OrigFormat 'return to orig date format + Log("Hoy="&h) + Return h +End Sub + +'Guardamos "texto" a la bitacora +Sub log2DB(texto As String) 'ignore + LogColor(fechaKMT(DateTime.Now)&" - log2BD: '"&texto&"'", Colors.LightGray) + kmt.ExecNonQuery2("INSERT INTO bitacora(fecha, texto) VALUES (?,?)", Array As Object (fechaKMT(DateTime.now), texto)) +End Sub + +'Regresa verdadero si ya pasaron XX minutos de la fecha dada +Sub masDeXXMins(hora As Int, mins As Int) As Boolean 'ignore + If (hora + mins * DateTime.TicksPerMinute) < DateTime.Now Then + Return True + Else + Return False + End If +End Sub + +'Regresa verdadero si ya pasaron XX minutos de la fechaKMT dada +Sub masDeXXMinsKMT(hora As String, mins As Int) As Boolean 'ignore + Try + ' LogColor($"Hora=${fechaKMT(fechaKMT2Ticks(hora) + mins * DateTime.TicksPerMinute)}, Mins=${mins}, Actual=${fechaKMT(DateTime.Now)}"$,Colors.red) + If fechaKMT2Ticks(hora) + mins * DateTime.TicksPerMinute < DateTime.Now Then + ' Log("+++ +++ "&fechaKMT(fechaKMT2Ticks(hora) + mins * DateTime.TicksPerMinute) & " < " & fechaKMT(DateTime.Now)) + Return True + Else + ' Log("+++ +++ "&fechaKMT(fechaKMT2Ticks(hora) + mins * DateTime.TicksPerMinute) & " > " & fechaKMT(DateTime.Now)) + Return False + End If + Catch + Log(LastException) + End Try +End Sub + +'Limpiamos la tabla "bitacora" de la BD +Sub borraLogDB 'ignore + LogColor("Borramos BD de log", Colors.Magenta) + kmt.ExecNonQuery("delete from bitacora") + kmt.ExecNonQuery("vacuum;") +End Sub + +'Monitoreamos los servicios para ver si estan activos (No pausados), y si no, los reniciamos +'Sub Monitor 'ignore +' Private monitorStatus As Boolean = True +' LogColor("Corriendo Subs.Monitor", Colors.RGB(161,150,0)) +' If IsPaused(Tracker) Then +' log2DB("Reiniciando 'Tracker Pausado' desde Subs.Monitor") +' StartService(Tracker) +' monitorStatus = False +' Else +' CallSubDelayed(Tracker, "revisaFLP") +' End If +' If IsPaused(PushService) Then +' log2DB("Reiniciando 'PushService Pausado' desde Subs.Monitor") +' StartService(PushService) +' monitorStatus = False +' Else +' revisaPushService +' End If +' If monitorStatus Then LogColor(" +++ +++ Servicios Activos", Colors.Green) +'End Sub + +'Convierte una fecha en formato YYMMDDHHMMSS a Ticks +Sub fechaKMT2Ticks(fKMT As String) As Long 'ignore + Try + If fKMT.Length = 12 Then + Private parteFecha As String = fKMT.SubString2(0,6) + Private parteHora As String = fKMT.SubString(6) + Private OrigFormat As String = DateTime.DateFormat 'save original date format + DateTime.DateFormat="yymmdd" + DateTime.TimeFormat="HHmmss" + Private ticks As Long = DateTime.DateTimeParse(parteFecha,parteHora) + DateTime.DateFormat=OrigFormat 'return to original date format + Return ticks + Else + Log("Formato de fecha incorrecto, debe de ser 'YYMMDDHHMMSS', no '"&fKMT&"' largo="&fKMT.Length) + Return 0 + End If + Catch + Log(LastException) + LogColor($"Fecha dada: ${fKMT}, Parte Fecha: ${parteFecha}, Parte Hora: ${parteHora}"$, Colors.Red) + Return 0 + End Try +End Sub + +Sub InstallAPK(dir As String, apk As String) 'ignore + If File.Exists(dir, apk) Then + Dim i As Intent + i.Initialize(i.ACTION_VIEW, "file://" & File.Combine(dir, apk)) + i.SetType("application/vnd.android.package-archive") + StartActivity(i) + End If +End Sub + +'Copia la base de datos del almacenamiento interno al externo en el directorio kmts. +Sub copiaDB(result As Boolean) 'ignore + ToastMessageShow("copiaDB", False) + If result Then + Dim p As String + If File.ExternalWritable Then + p = File.DirInternal +' Log("Externo") + Else + p = File.DirInternal +' Log("Interno") + End If + Dim theDir As String + Try + File.MakeDir(File.DirInternal,"kmts") + theDir = "/kmts" + Catch + theDir = "" + End Try + Try + File.Copy(File.DirInternal,"kmt.db",File.DirInternal&theDir,"cedex_kmt.db") + File.Copy(File.DirInternal,"errorLog.db",File.DirInternal&theDir,"cedex_errorLog.db") + ToastMessageShow("BD copiada!", False) + Catch + ToastMessageShow("No se pudo hacer la copia: "&LastException, True) + End Try + Log("rootExternal="&p) + Log("File.DirInternal="&File.DirInternal) + Log("File.DirInternal="&File.DirInternal) + Else + ToastMessageShow("Sin permisos", False) + End If +End Sub + +'Hace visible y trae al frente el panel con los parametros "Top" y "Left" dados. +Sub panelVisible(panel As Panel, top As Int, left As Int) 'ignore + panel.BringToFront + panel.Visible = True + panel.Top = top + panel.Left = left +End Sub + +'Centra una etiqueta dentro de un elemento superior. +Sub centraEtiqueta(elemento As Label, anchoElementoSuperior As Int) 'ignore + elemento.Left = Round(anchoElementoSuperior/2)-(elemento.Width/2) +End Sub + +'Centra un panel horizontalmente dentro de un elemento superior. +Sub centraPanel(elemento As Panel, anchoElementoSuperior As Int) 'ignore + elemento.Left = Round(anchoElementoSuperior/2)-(elemento.Width/2) +End Sub + +'Centra un panel verticalmente dentro de un elemento superior. +Sub centraPanelV(elemento As Panel, altoElementoSuperior As Int) 'ignore + elemento.Top = Round(altoElementoSuperior/2)-(elemento.Height/2) +End Sub + +'Centra una barra de progreso dentro de un elemento superior. +Sub centraProgressBar(elemento As ProgressBar, anchoElementoSuperior As Int) 'ignore + elemento.Left = Round(anchoElementoSuperior/2)-(elemento.Width/2) +End Sub + +'Regresa el usuario de la tabla USUARIOA si es que existe, si no existe, regresa "SinUsuario". +Sub buscaDBUsuario As String 'ignore + Private c As Cursor + Private usuario As String = "SinUsuario" + c=kmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + If c.RowCount > 0 Then usuario = c.GetString("USUARIO") + Return usuario +End Sub + +'Regresa la fecha en el formato "MM/dd/yyyy" +Sub traeFecha As String 'ignore + DateTime.DateFormat = "MM/dd/yyyy" + Private sDate As String = DateTime.Date(DateTime.Now) + Private sTime As String = DateTime.Time(DateTime.Now) + Return sDate & sTime +End Sub + +'Guarda el nombre y version de la app en CAT_VARIABLES. +Sub guardaAppInfo(skmt As SQL) 'ignore + skmt.ExecNonQuery("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'EMPRESA' or CAT_VA_DESCRIPCION = 'APP_NAME' or CAT_VA_DESCRIPCION = 'APP_VERSION'") + skmt.ExecNonQuery($"insert into CAT_VARIABLES (CAT_VA_DESCRIPCION, CAT_VA_VALOR) values ('APP_NAME', '${Application.LabelName}')"$) + skmt.ExecNonQuery($"insert into CAT_VARIABLES (CAT_VA_DESCRIPCION, CAT_VA_VALOR) values ('APP_VERSION', '${Application.VersionName}')"$) +End Sub + +'Muestra en el Log los campos y valores que regresan en el JobDone. +Sub logJobDoneResultados(resultado As DBResult) 'ignore + For Each records() As Object In resultado.Rows + LogColor($"====== ${resultado.Tag} - REGISTROS = ${resultado.Rows.Size}"$, Colors.RGB(215,37,0)) + For Each k As String In resultado.Columns.Keys + LogColor(k & " = " & records(resultado.Columns.Get(k)), Colors.RGB(215,37,0)) + Next + Next +End Sub + +'Regresa la base de datos especificada ya inicializada. +Sub inicializaBD(ruta As String, BDName As String) As SQL 'ignore + Dim skmt As SQL + If File.Exists(ruta, BDName) = False Then + File.Copy(File.DirAssets, BDName, ruta, BDName) + LogColor($"Copiamos ${BDName} de ${File.DirAssets} a ${ruta}"$,Colors.Green) + End If + skmt.Initialize(ruta, BDName, True) + Return skmt +End Sub + +'Agrega una columna a la tabla especificada. +'Hay que indicar el "tipo" de la columna (TEXT, INTEGER, ETC) +'Ej. agregaColumna("TABLA", "COLUMNA", "TIPO") +Sub agregaColumna(tabla As String, columna As String, tipo As String) 'ignore + Try 'Intentamos usar "pragma_table_info" para revisar si existe la columna en la tabla + Private c As Cursor = db.ExecQuery($"SELECT COUNT(*) AS fCol FROM pragma_table_info('${tabla}') WHERE name='${columna}'"$) + c.Position = 0 + If c.GetString("fCol") = 0 Then 'Si no esta la columna la agregamos + db.ExecNonQuery($"ALTER TABLE ${tabla} ADD COLUMN ${columna} ${tipo}"$) + Log($"Columna "${columna} ${tipo}", agregada a "${tabla}"."$) + End If + Catch 'Si no funciona "pragma_table_info" lo hacemos con try/catch + Try + db.ExecNonQuery($"ALTER TABLE ${tabla} ADD COLUMN ${columna} ${tipo}"$) + Log($"Columna "${columna} ${tipo}", agregada a "${tabla}".."$) + Catch + Log(LastException) + End Try + End Try +End Sub + +'Regresa el DBReqServer desde CAT_VARIABLES o "N/A" si no existe. +Sub traeDBReqServerDeBD(dbx As SQL) As String 'ignore + Dim srvr As String = "N/A" + Dim rs As ResultSet = dbx.ExecQuery("select CAT_VA_VALOR from cat_variables where CAT_VA_DESCRIPCION = 'SERVER'") + If rs.RowCount > 0 Then + rs.NextRow + srvr = rs.GetString("CAT_VA_VALOR") + End If + Return srvr +End Sub + +'Regresa el valor de intervalo desde CAT_VARIABLES o "30" si no existe. +Sub traeIntervaloDeBD As String 'ignore + Dim intrvl As String = "30" + Dim rs As ResultSet = db.ExecQuery("select valor from cat_variables where nombre = 'intervalo'") + If rs.RowCount > 0 Then + rs.NextRow + intrvl = rs.GetString("valor") + End If + Return intrvl +End Sub + +'Regresa el valor timeout desde CAT_VARIABLES o "9000" si no existe. +Sub traeTimeoutDeBD As String 'ignore + Dim tmout As String = "9000" + Dim rs As ResultSet = db.ExecQuery("select valor from cat_variables where nombre = 'timeout'") + If rs.RowCount > 0 Then + rs.NextRow + tmout = rs.GetString("valor") + End If + Return tmout +End Sub + +'Crea una notificación con el "body" dado y regresa el objeto. +Sub CreateNotification (Body As String) As Notification 'ignore + Dim notification As Notification + notification.Initialize2(notification.IMPORTANCE_LOW) + notification.Icon = "icon" + notification.SetInfo("Tester", Body, Main) + Return notification +End Sub + +'Genera una notificacion con importancia alta +Sub notiHigh(title As String, body As String, id As String, activity As Object) 'ignore + activity = Main + Private notif As Notification + notif.Initialize2(notif.IMPORTANCE_HIGH) + notif.Icon = "icon" + notif.Vibrate = False + notif.Sound = False + notif.AutoCancel = True +' If logger Then Log("notiHigh: "&title) + notif.SetInfo(title, body, activity) +' Log("notiHigh SetInfo") + notif.Notify(id) +End Sub + +'Regresa el objeto de una notificacion con importancia baja +Sub notiLowReturn(title As String, Body As String, id As Int) As Notification 'ignore + Private notification As Notification + notification.Initialize2(notification.IMPORTANCE_LOW) +' Log("notiLowReturn: "&title) + notification.Icon = "icon" + notification.Sound = False + notification.Vibrate = False + notification.SetInfo(title, Body, Main) + notification.Notify(id) +' Log("notiLowReturn SetInfo") + Return notification +End Sub + +'Regresa el almacen actual de la base de datos. +Sub traeAlmacen As String 'ignore + Private c As Cursor + Private a As String + c = db.ExecQuery("select ID_ALMACEN from CAT_ALMACEN") + c.Position = 0 + a = C.GetString("ID_ALMACEN") + c.Close + Return a +End Sub + +'Regresa la ruta actual de la base de datos. +Sub traeRuta As String 'ignore + Private c As Cursor + Private r As String + c = db.ExecQuery("select CAT_CL_RUTA from kmt_info where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + r = "0" + If c.RowCount > 0 Then + c.Position=0 + r = c.GetString("CAT_CL_RUTA") + End If + c.Close + Return r +End Sub + +''Mandamos los pedidos pendientes (pc_envio_ok <> 1). +'Sub mandaPendientes 'ignore +' Private logger As Boolean = False +' 'PEDIDO_CLIENTE (Pendientes) +' Private c As Cursor = db.ExecQuery("SELECT PC_CLIENTE, PC_FECHA, PC_USER, PC_NOART, PC_MONTO,PC_LON, PC_LAT, PC_COSTO_SIN, PC_RUTA, PC_ALMACEN, PC_FACTURA FROM PEDIDO_CLIENTE where pc_envio_ok <> 1") +' If logger Then Log($"Pedido_Cliente PENDIENTE: ${c.RowCount}"$) +' Private almacen As String = traeAlmacen +' Private ruta As String = traeRuta +' If c.RowCount>0 Then +' For i = 0 To c.RowCount - 1 +' c.Position = i +'' Dim cmd As DBCommand +'' cmd.Initialize +'' cmd.Name = "DELETE_PEDIDO_MARDS_PC" +'' cmd.Parameters = Array As Object(almacen, ruta, c.GetString("PC_CLIENTE") ) +'' reqManager.ExecuteCommand(cmd , "DEL_PC") +' +' Dim cmd As DBCommand +' cmd.Initialize +' cmd.Name = "insert_pedidos_IZCA" +' If logger Then Log($"${c.GetString("PC_CLIENTE")}, ${almacen}"$) +' cmd.Parameters = Array As Object(C.GetString("PC_CLIENTE"), C.GetString("PC_FECHA"), C.GetString("PC_USER"), C.GetString("PC_NOART"), C.GetString("PC_MONTO"), C.GetString("PC_LON"), C.GetString("PC_LAT"), almacen, ruta, C.GetString("PC_COSTO_SIN"), C.GetString("PC_FACTURA")) +' reqManager.ExecuteCommand(cmd , $"ins_pedidosPendientes_head_${c.GetString("PC_CLIENTE")}"$) +' Next +' End If +' +' 'PEDIDO (Pendientes) +' c=Starter.skmt.ExecQuery("SELECT PC_ENVIO_OK, PE_CEDIS, PE_COSTO_TOT, PE_COSTOU, PE_CANT, PE_PRONOMBRE, PE_PROID, PE_CLIENTE, PE_FECHA, PE_USUARIO, PE_COSTO_SIN, PE_RUTA, PE_DESC, PE_FOLIO FROM pedido_cliente left join PEDIDO where pc_cliente = pe_cliente and pc_envio_ok <> 1") +' If logger Then Log($"Pedido PENDIENTE: ${c.RowCount}"$) +' If c.RowCount>0 Then +' For i = 0 To c.RowCount - 1 +' c.Position = i +' Dim cmd As DBCommand +' +'' cmd.Initialize +'' cmd.Name = "DELETE_PEDIDO_MARDS_PE" +'' cmd.Parameters = Array As Object(almacen, ruta,c.GetString("PE_CLIENTE") ) +'' reqManager.ExecuteCommand(cmd , "DEL_PE") +' +' cmd.Initialize +' cmd.Name = "insert_pedido2_IZCA" +' cmd.Parameters = Array As Object(c.GetString("PE_CEDIS"), almacen, c.GetString("PE_COSTO_TOT"), c.GetString("PE_COSTOU"), c.GetString("PE_CANT"), c.GetString("PE_PRONOMBRE"), c.GetString("PE_PROID"), c.GetString("PE_CLIENTE"), c.GetString("PE_FECHA"), c.GetString("PE_USUARIO"), c.GetString("PE_RUTA"), C.GetString("PE_COSTO_SIN"), c.GetString("PE_DESC"), c.GetString("PE_FOLIO")) +' reqManager.ExecuteCommand(cmd , $"ins_pedidosPendientes_prods_${c.GetString("PE_CLIENTE")}"$) +' Next +' End If +' +' 'ABONOS +' Dim ab As Cursor = db.ExecQuery($"SELECT * from ABONOS where a_enviado is null"$) +' If logger Then Log(ab.RowCount) +' If ab.RowCount > 0 Then +' For i = 0 To ab.RowCount - 1 +' ab.Position = i +' Dim cmd As DBCommand +' cmd.Initialize +' cmd.Name = "insert_abono_IZCA" +' cmd.Parameters = Array As Object( ab.GetString("a_usuario"), ab.GetString("a_ruta"), ab.GetString("a_cliente"), ab.GetString("a_abono"), ab.GetString("a_fecha") ) +' reqManager.ExecuteCommand(cmd , $"ins_abonosPendientes_${ab.GetString("a_cliente")}"$) +' If logger Then Log($"ins_abonosPendientes_${ab.GetString("a_cliente")}"$) +' Next +' End If +' ab.Close +'End Sub + +'Revisa si la aplicación tiene permiso para acceder a las notificaciones. +Sub CheckNotificationAccess As Boolean 'ignore + Dim ph As Phone + Dim nstr, pstr As String + Dim r As Reflector + pstr = r.GetStaticField("anywheresoftware.b4a.BA", "packageName") + nstr = ph.GetSettings("enabled_notification_listeners") + Return nstr.Contains(pstr) +End Sub \ No newline at end of file diff --git a/B4A/C_TicketsDia.bas b/B4A/C_TicketsDia.bas new file mode 100644 index 0000000..1ccb039 --- /dev/null +++ b/B4A/C_TicketsDia.bas @@ -0,0 +1,165 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore + Private p_ticketsdia As Panel + + Dim c As Cursor + Dim S As Cursor + Dim ruta As String + Dim ListView1 As ListView + Dim b_noventa As Button + Dim nombre_boton As String + Dim STIME As String +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + ruta = File.DirInternal + Root.LoadLayout("ticketsdia") + If File.Exists(ruta, "kmt.db") = False Then + File.Copy(File.DirAssets, "kmt.db", ruta, "kmt.db") + End If + c = B4XPages.MainPage.skmt.ExecQuery("select PC_CLIENTE,PC_MONTO,PC_NOART FROM PEDIDO_CLIENTE ORDER BY PC_FECHA asc") + + + ListView1.Clear + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim label1 As Label + label1 = ListView1.TwoLinesLayout.Label + label1.TextSize = 10 + label1.TextColor = Colors.Black + Dim label2 As Label + label2 = ListView1.TwoLinesLayout.SecondLabel + label2.TextSize = 13 + label2.TextColor = Colors.Blue + ListView1.AddTwoLines(c.GetString("PC_CLIENTE"),"Cantidad #"& c.GetString("PC_NOART")& " SubTotal $"& c.GetString("PC_MONTO")) + Next + End If +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Sub B4XPage_Appear + nombre_boton = "NOVENTA" + c=B4XPages.MainPage.skmt.ExecQuery("select PC_CLIENTE,PC_MONTO,PC_NOART,(select CAT_CL_NOMBRE from kmt_info where cat_cl_codigo = pc_cliente UNION select CAT_CL_NOMBRE from kmt_info2 where cat_cl_codigo = pc_cliente ) as NOMBRE FROM PEDIDO_CLIENTE ORDER BY PC_FECHA asc") + Dim noArticulos As Int = 0 + + ListView1.Clear + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim x As Cursor = B4XPages.MainPage.skmt.ExecQuery($"select IFNULL(sum(IFNULL(PE_CANT,0)),0) as PC_NOART from PEDIDO where PE_CLIENTE = '${c.GetString("PC_CLIENTE")}' AND PE_PROID NOT IN (SELECT CAT_PA_ID FROM PROMOS_COMP)"$) + If x.RowCount > 0 Then + x.Position = 0 +' Log(x.GetString("PC_NOART")) + noArticulos = x.GetString("PC_NOART") + End If + Dim label1 As Label + label1 = ListView1.TwoLinesLayout.Label + label1.TextSize = 10 + label1.TextColor = Colors.Black + Dim label2 As Label + label2 = ListView1.TwoLinesLayout.SecondLabel + label2.TextSize = 13 + label2.TextColor = Colors.Blue + ListView1.AddTwoLines(c.GetString("PC_CLIENTE"),c.GetString("NOMBRE") &" Cantidad #"& noArticulos & " SubTotal $"& c.GetString("PC_MONTO")) + Next + End If + c.Close +End Sub + +Sub Regresar_Click + B4XPages.ShowPage("cliente") +End Sub +Sub Activity_KeyPress (key As Int) As Boolean + ' BACK key pressed + If key=KeyCodes.KEYCODE_BACK Then + ' I want to capture the key here so I return True + B4XPages.ShowPage("principal") + 'Return True + End If + ' Returning False signals the system to handle the key + Return False +End Sub +Sub ListView1_ItemLongClick (Position As Int, Value As Object) + B4XPages.MainPage.skmt.ExecNonQuery("delete from CUENTAA") + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO CUENTAA VALUES (?)", Array As Object(Value)) + DateTime.TimeFormat = "HHmmss" + STIME=DateTime.Time(DateTime.Now) + Starter.pre_viejo = Subs.traeTotalClientepreventaparacredito + s=B4XPages.MainPage.skmt.ExecQuery("SELECT COUNT(*) AS CUANTOS FROM HIST_STAY_STORE WHERE HSS_IN = 0 AND HSS_CODIGO In (select cuenta from cuentaa)") + s.Position = 0 + If s.GetString("CUANTOS") = 1 Then + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE HIST_STAY_STORE set HSS_IN = ? where HSS_IN = 0 AND HSS_CODIGO In (select cuenta from cuentaa)", Array As Object(STIME)) + Else + B4XPages.MainPage.skmt.ExecNonQuery2("INSERT INTO HIST_STAY_STORE(HSS_CODIGO, HSS_IN , HSS_OUT , HSS_TOT) VALUES (?,0,0,0)", Array As Object (Value)) + B4XPages.MainPage.skmt.ExecNonQuery2("UPDATE HIST_STAY_STORE set HSS_IN = ? where HSS_IN = 0 AND HSS_CODIGO In (select cuenta from cuentaa)", Array As Object(STIME)) + End If + DateTime.TimeFormat = "HH:mm:ss" + Subs.guardaClienteHoraInicio(Value) + B4XPages.MainPage.cliente.venimosDeTicketsDia = True + B4XPages.ShowPage("cliente") +End Sub + +Sub b_noventa_Click + If nombre_boton = "NOVENTA" Then + nombre_boton = "VENTA" + b_noventa.Text ="VENTA" + c=B4XPages.MainPage.skmt.ExecQuery("select NV_CLIENTE,NV_MOTIVO,NV_COMM, (select CAT_CL_NOMBRE from kmt_info where cat_cl_codigo = NV_CLIENTE ) as NOMBRE FROM NOVENTA ORDER BY NV_CLIENTE asc") + ListView1.Clear + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim label1 As Label + label1 = ListView1.TwoLinesLayout.Label + label1.TextSize = 15 + label1.TextColor = Colors.Black + Dim label2 As Label + label2 = ListView1.TwoLinesLayout.SecondLabel + label2.TextSize = 10 + label2.TextColor = Colors.Blue + ListView1.AddTwoLines(c.GetString("NV_CLIENTE"),c.GetString("NOMBRE") &" Motivo #"& c.GetString("NV_MOTIVO")& " Comentario $"& c.GetString("NV_COMM")) + Next + End If + Else + nombre_boton = "NOVENTA" + b_noventa.Text ="NO VENTA" + c=B4XPages.MainPage.skmt.ExecQuery("select PC_CLIENTE,PC_MONTO,PC_NOART,(select CAT_CL_NOMBRE from kmt_info where cat_cl_codigo = pc_cliente ) as NOMBRE FROM PEDIDO_CLIENTE ORDER BY PC_FECHA asc") + ListView1.Clear + + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim label1 As Label + label1 = ListView1.TwoLinesLayout.Label + label1.TextSize = 15 + label1.TextColor = Colors.Black + Dim label2 As Label + label2 = ListView1.TwoLinesLayout.SecondLabel + label2.TextSize = 10 + label2.TextColor = Colors.Blue + ListView1.AddTwoLines(c.GetString("PC_CLIENTE"),c.GetString("NOMBRE") &" Cantidad #"& c.GetString("PC_NOART")& " SubTotal $"& c.GetString("PC_MONTO")) + Next + End If + c.Close + End If +End Sub + +Private Sub p_ticketsdia_Click + +End Sub \ No newline at end of file diff --git a/B4A/C_UpdateAvailable.bas b/B4A/C_UpdateAvailable.bas new file mode 100644 index 0000000..8bd6e51 --- /dev/null +++ b/B4A/C_UpdateAvailable.bas @@ -0,0 +1,73 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11.5 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + Root.Color = Colors.Transparent +End Sub + +Sub B4XPage_Appear + Try + Do While Not(CanRequestPackageInstalls) + MsgboxAsync($"Por favor permita que ${Application.PackageName} instale actualizaciones"$, "Instalar actualización") + Wait For Msgbox_Result(Result As Int) + Dim in As Intent + in.Initialize("android.settings.MANAGE_UNKNOWN_APP_SOURCES", "package:" & Application.PackageName) + StartActivity(in) + Loop + Catch + Log("updateAvailable() Error - " & LastException.Message) + End Try + If appUpdater.newApp.update Then + ofreceActualizacion + Else + sinActualizacion + End If +End Sub + +'//////////////////////////////////////////////////////////////////////////////////////////// +'//// Esta es una actividad usada por el servicio appUpdater para mostrar notificaciones +'//// cuando hay alguna actualizacion de apk. +'//////////////////////////////////////////////////////////////////////////////////////////// + + +public Sub CanRequestPackageInstalls As Boolean + ' // https://www.b4x.com/android/forum/threads/version-safe-apk-installation.87667/#content + Dim ctxt As JavaObject + ctxt.InitializeContext + Dim PackageManager As JavaObject = ctxt.RunMethod("getPackageManager", Null) + Return PackageManager.RunMethod("canRequestPackageInstalls", Null) +End Sub + +Sub ofreceActualizacion + If Msgbox2(appUpdater.newApp.newMsg,"Actualización disponible","Si","","No",Null) = DialogResponse.Positive Then 'ignore +' StartService(DownloadService) + CallSubDelayed(appUpdater, "download_newApk") + End If + B4XPages.MainPage.ocultaProgreso + StartActivity(Main) +' Activity.Finish + B4XPages.ShowPage("Login") +End Sub + +Sub sinActualizacion + Msgbox(appUpdater.newApp.okMsg, "Aplicación al corriente") 'ignore +' StartActivity(Main) + B4XPages.MainPage.ocultaProgreso + B4XPages.ShowPage("Login") +End Sub \ No newline at end of file diff --git a/B4A/C_tabulador.bas b/B4A/C_tabulador.bas new file mode 100644 index 0000000..d752b11 --- /dev/null +++ b/B4A/C_tabulador.bas @@ -0,0 +1,134 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=12.2 +@EndOfDesignText@ +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore + Private et_mil As EditText + Private et_quinientos As EditText + Private et_docientos As EditText + Private et_cien As EditText + Private et_cincuenta As EditText + Private et_veinte As EditText + Private et_m_veinte As EditText + Private et_m_diez As EditText + Private et_m_cinco As EditText + Private et_m_dos As EditText + Private et_m_peso As EditText + Private et_m_centavo As EditText + Private b_calcular As Button + Private b_guardar As Button + Private l_total As Label + Dim sum_billetes As Int + Dim sum_monedas As Float + Dim total As Float + Dim c As Cursor + Dim d As Cursor +End Sub + +'You can add more parameters here. +Public Sub Initialize As Object + Return Me +End Sub + +'This event will be called once, before the page becomes visible. +Private Sub B4XPage_Created (Root1 As B4XView) + Root = Root1 + 'load the layout to Root + Root.LoadLayout("tabulador") +End Sub + +Sub B4XPage_Appear + d = Starter.skmt.ExecQuery("SELECT VEINTE, DIEZ, CINCO, DOS, PESO, CENTAVO, TOTAL FROM TABULADOR_MONEDAS") + c = Starter.skmt.ExecQuery("SELECT MIL, QUINIENTOS, DOCIENTOS, CIEN, CINCUENTA, VEINTE FROM TABULADOR_BILLETES") + c.Position = 0 + d.Position = 0 + If c.RowCount > 0 And d.RowCount > 0 Then + Log("TABULADR CON RESUKTADO") + et_mil.Text = c.GetString("MIL") + et_quinientos.Text = c.GetString("QUINIENTOS") + et_docientos.Text = c.GetString("DOCIENTOS") + et_cien.Text = c.GetString("CIEN") + et_cincuenta.Text = c.GetString("CINCUENTA") + et_veinte.Text = c.GetString("VEINTE") + et_m_veinte.Text = d.GetString("VEINTE") + et_m_diez.Text = d.GetString("DIEZ") + et_m_cinco.Text = d.GetString("CINCO") + et_m_dos.Text = d.GetString("DOS") + et_m_peso.Text = d.GetString("PESO") + et_m_centavo.Text = d.GetString("CENTAVO") + l_total.Text = d.GetString("TOTAL") + else If c.RowCount = 0 And d.RowCount = 0 Then + Log("TABULADR SIN RESUKTADO") + et_mil.Text = "" + et_quinientos.Text = "" + et_docientos.Text = "" + et_cien.Text = "" + et_cincuenta.Text = "" + et_veinte.Text = "" + et_m_veinte.Text = "" + et_m_diez.Text = "" + et_m_cinco.Text = "" + et_m_dos.Text = "" + et_m_peso.Text = "" + et_m_centavo.Text = "" + l_total.Text = "" + End If + c.Close + d.Close +End Sub + +Private Sub b_guardar_Click + b_calcular_Click + Starter.skmt.ExecNonQuery("DELETE FROM TABULADOR_MONEDAS") + Starter.skmt.ExecNonQuery("DELETE FROM TABULADOR_BILLETES") + Starter.skmt.ExecNonQuery2("INSERT INTO TABULADOR_BILLETES (MIL, QUINIENTOS, DOCIENTOS, CIEN, CINCUENTA, VEINTE) VALUES (?,?,?,?,?,?)", Array As Object(et_mil.Text,et_quinientos.Text,et_docientos.Text,et_cien.Text,et_cincuenta.Text,et_veinte.Text)) + Starter.skmt.ExecNonQuery2("INSERT INTO TABULADOR_MONEDAS (VEINTE, DIEZ, CINCO, DOS, PESO, CENTAVO, TOTAL) VALUES (?,?,?,?,?,?,?)", Array As Object(et_m_veinte.Text,et_m_diez.Text,et_m_cinco.Text,et_m_dos.Text,et_m_peso.Text,et_m_centavo.Text,l_total.Text)) + B4XPages.ShowPage("Principal") +End Sub + +Private Sub b_calcular_Click + If et_mil.Text = "" Then + et_mil.Text = 0 + End If + If et_quinientos.Text = "" Then + et_quinientos.Text = 0 + End If + If et_docientos.Text = "" Then + et_docientos.Text = 0 + End If + If et_cien.Text = "" Then + et_cien.Text = 0 + End If + If et_cincuenta.Text = "" Then + et_cincuenta.Text = 0 + End If + If et_veinte.Text = "" Then + et_veinte.Text = 0 + End If + If et_m_veinte.Text = "" Then + et_m_veinte.Text = 0 + End If + If et_m_diez.Text = "" Then + et_m_diez.Text = 0 + End If + If et_m_cinco.Text = "" Then + et_m_cinco.Text = 0 + End If + If et_m_dos.Text = "" Then + et_m_dos.Text = 0 + End If + If et_m_peso.Text = "" Then + et_m_peso.Text = 0 + End If + If et_m_centavo.Text = "" Then + et_m_centavo.Text = 0 + End If + sum_billetes = (et_mil.Text * 1000) + (et_quinientos.Text * 500) + (et_docientos.Text * 200) + ( et_cien.Text * 100 ) + ( et_cincuenta.Text * 50 ) + ( et_veinte.Text * 20 ) + sum_monedas = (et_m_veinte.Text * 20) + ( et_m_diez.Text * 10 ) + ( et_m_cinco.Text * 5 ) + ( et_m_dos.Text * 2 ) + ( et_m_peso.Text * 1 ) + ( et_m_centavo.Text * 0.50 ) + total = sum_billetes + sum_monedas + l_total.Text = Round2(total, 2) +End Sub \ No newline at end of file diff --git a/B4A/DBRequestManager.bas b/B4A/DBRequestManager.bas new file mode 100644 index 0000000..eb19e28 --- /dev/null +++ b/B4A/DBRequestManager.bas @@ -0,0 +1,274 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=6.8 +@EndOfDesignText@ +''Class module +Sub Class_Globals + Private mTarget As Object + Type DBResult (Tag As Object, Columns As Map, Rows As List) + Type DBCommand (Name As String, Parameters() As Object) + Private link As String + Private bc As ByteConverter + Private T_NULL = 0, T_STRING = 1, T_SHORT = 2, T_INT = 3, T_LONG = 4, T_FLOAT = 5 _ + ,T_DOUBLE = 6, T_BOOLEAN = 7, T_BLOB = 8 As Byte + Private VERSION As Float = 0.9 + Private tempArray(1) As Object + Dim jobTagAnterior As String = "" 'Mod por CHV - 211109 + Dim reqsList As List +End Sub + +'Target - The module that handles JobDone (usually Me). +'ConnectorLink - URL of the Java server. +Public Sub Initialize (Target As Object, ConnectorLink As String) + mTarget = Target + link = ConnectorLink + reqsList.Initialize +End Sub + +'Sends a query request. +'Command - Query name and parameters. +'Limit - Maximum rows to return or 0 for no limit. +'Tag - An object that will be returned in the result. +Public Sub ExecuteQuery(Command As DBCommand, Limit As Int, Tag As Object) + Dim j As HttpJob + Dim ms As OutputStream + Dim out2 As OutputStream = StartJob(j,ms, Tag) + If reqsList.IsInitialized Then reqsList.Add(Tag) + + WriteObject(Command.Name, out2) + WriteInt(Limit, out2) + WriteList(Command.Parameters, out2) + out2.Close + j.PostBytes(link & "?method=query", ms.ToBytesArray) +End Sub + +'Executes a batch of (non-select) commands. +'ListOfCommands - List of the commands that will be executes. +'Tag - An object that will be returned in the result. +Public Sub ExecuteBatch(ListOfCommands As List, Tag As Object) + Dim j As HttpJob + Dim ms As OutputStream + Dim out2 As OutputStream = StartJob(j,ms, Tag) + WriteInt(ListOfCommands.Size, out2) + For Each Command As DBCommand In ListOfCommands + WriteObject(Command.Name, out2) + WriteList(Command.Parameters, out2) + Next + out2.Close + j.PostBytes(link & "?method=batch", ms.ToBytesArray) +End Sub + +'Similar to ExecuteBatch. Sends a single command. +Public Sub ExecuteCommand(Command As DBCommand, Tag As Object) + If reqsList.IsInitialized Then reqsList.Add(Tag) + ExecuteBatch(Array As DBCommand(Command), Tag) +End Sub + +Private Sub StartJob(j As HttpJob, MemoryStream As OutputStream, Tag As Object) As OutputStream + j.Initialize("DBRequest", mTarget) + j.Tag = Tag + MemoryStream.InitializeToBytesArray(0) + Dim compress As CompressedStreams + Dim out As OutputStream = compress.WrapOutputStream(MemoryStream, "gzip") + WriteObject(VERSION, out) + Return out +End Sub + +Private Sub WriteList(Parameters As List, out As OutputStream) + Dim data() As Byte + If Parameters = Null Or Parameters.IsInitialized = False Then + Dim Parameters As List + Parameters.Initialize + End If + data = bc.IntsToBytes(Array As Int(Parameters.Size)) + out.WriteBytes(data, 0, data.Length) + For Each o As Object In Parameters + WriteObject(o, out) + Next +End Sub + +Private Sub WriteObject(o As Object, out As OutputStream) + Dim data() As Byte + tempArray(0) = o + If tempArray(0) = Null Then + out.WriteBytes(Array As Byte(T_NULL), 0, 1) + Else If tempArray(0) Is Short Then + out.WriteBytes(Array As Byte(T_SHORT), 0, 1) + data = bc.ShortsToBytes(Array As Short(o)) + Else If tempArray(0) Is Int Then + out.WriteBytes(Array As Byte(T_INT), 0, 1) + data = bc.IntsToBytes(Array As Int(o)) + Else If tempArray(0) Is Float Then + out.WriteBytes(Array As Byte(T_FLOAT), 0, 1) + data = bc.FloatsToBytes(Array As Float(o)) + Else If tempArray(0) Is Double Then + out.WriteBytes(Array As Byte(T_DOUBLE), 0, 1) + data = bc.DoublesToBytes(Array As Double(o)) + Else If tempArray(0) Is Long Then + out.WriteBytes(Array As Byte(T_LONG), 0, 1) + data = bc.LongsToBytes(Array As Long(o)) + Else If tempArray(0) Is Boolean Then + out.WriteBytes(Array As Byte(T_BOOLEAN), 0, 1) + Dim b As Boolean = 0 + Dim data(1) As Byte + If b Then data(0) = 1 Else data(0) = 0 + Else If GetType(tempArray(0)) = "[B" Then + data = o + out.WriteBytes(Array As Byte(T_BLOB), 0, 1) + WriteInt(data.Length, out) + Else 'If o Is String Then (treat all other values as string) + out.WriteBytes(Array As Byte(T_STRING), 0, 1) + data = bc.StringToBytes(o, "UTF8") + WriteInt(data.Length, out) + End If + If data.Length > 0 Then out.WriteBytes(data, 0, data.Length) +End Sub + +Private Sub ReadObject(In As InputStream) As Object + Dim data(1) As Byte + In.ReadBytes(data, 0, 1) + Select data(0) + Case T_NULL + Return Null + Case T_SHORT + Dim data(2) As Byte + Return bc.ShortsFromBytes(ReadBytesFully(In, data, data.Length))(0) + Case T_INT + Dim data(4) As Byte + Return bc.IntsFromBytes(ReadBytesFully(In, data, data.Length))(0) + Case T_LONG + Dim data(8) As Byte + Return bc.LongsFromBytes(ReadBytesFully(In, data, data.Length))(0) + Case T_FLOAT + Dim data(4) As Byte + Return bc.FloatsFromBytes(ReadBytesFully(In, data, data.Length))(0) + Case T_DOUBLE + Dim data(8) As Byte + Return bc.DoublesFromBytes(ReadBytesFully(In, data, data.Length))(0) + Case T_BOOLEAN + Dim b As Byte = ReadByte(In) + Return b = 1 + Case T_BLOB + Dim len As Int = ReadInt(In) + Dim data(len) As Byte + Return ReadBytesFully(In, data, data.Length) + Case Else + Dim len As Int = ReadInt(In) + Dim data(len) As Byte + ReadBytesFully(In, data, data.Length) + Return BytesToString(data, 0, data.Length, "UTF8") + End Select +End Sub + +Private Sub ReadBytesFully(In As InputStream, Data() As Byte, Len As Int) As Byte() + Dim count = 0, read As Int + Do While count < Len And read > -1 + read = In.ReadBytes(Data, count, Len - count) + count = count + read + Loop + Return Data +End Sub + +Private Sub WriteInt(i As Int, out As OutputStream) + Dim data() As Byte + data = bc.IntsToBytes(Array As Int(i)) + out.WriteBytes(data, 0, data.Length) +End Sub + +Private Sub ReadInt(In As InputStream) As Int + Dim data(4) As Byte + Return bc.IntsFromBytes(ReadBytesFully(In, data, data.Length))(0) +End Sub + +Private Sub ReadByte(In As InputStream) As Byte + Dim data(1) As Byte + In.ReadBytes(data, 0, 1) + Return data(0) +End Sub + +'Handles the Job result and returns a DBResult. +Public Sub HandleJob(Job As HttpJob) As DBResult + Dim start As Long = DateTime.Now 'ignore + Dim In As InputStream = Job.GetInputStream + Dim cs As CompressedStreams + In = cs.WrapInputStream(In, "gzip") + Dim serverVersion As Float = ReadObject(In) 'ignore + Dim method As String = ReadObject(In) + Dim table As DBResult + table.Initialize + table.Columns.Initialize + table.rows.Initialize + table.Tag = Job.Tag + If jobTagAnterior <> Job.Tag Then LogColor("HandleJob: '"&Job.Tag&"'", Colors.RGB(171,70,0)) 'Mod por CHV - 211109 + jobTagAnterior = Job.Tag 'Mod por CHV - 211109 + If method = "query" Then + Dim numberOfColumns As Int = ReadInt(In) + For i = 0 To numberOfColumns - 1 + table.Columns.Put(ReadObject(In), i) + Next + Do While ReadByte(In) = 1 + Dim rowObjects(numberOfColumns) As Object + table.rows.Add(rowObjects) + For col = 0 To numberOfColumns - 1 + Dim o As Object = ReadObject(In) + rowObjects(col) = o + Next + Loop + Else If method = "batch" Then + table.Columns.Put("AffectedRows", 0) + Dim rows As Int = ReadInt(In) + For i = 0 To rows - 1 + table.rows.Add(Array As Object(ReadInt(In))) + Next + End If + In.Close +' Log("HandleJob: " & (DateTime.Now - start))'Comentado por CHV - 211112 + Return table +End Sub +'Reads a file and returns the file as a bytes array. +Public Sub FileToBytes(Dir As String, FileName As String) As Byte() + Dim out As OutputStream + out.InitializeToBytesArray(0) + Dim In As InputStream = File.OpenInput(Dir, FileName) + File.Copy2(In, out) + out.Close + Return out.ToBytesArray +End Sub +'Converts an image to a bytes array (for BLOB fields). +Public Sub ImageToBytes(Image As Bitmap) As Byte() + Dim out As OutputStream + out.InitializeToBytesArray(0) + Image.WriteToStream(out, 100, "JPEG") + out.Close + Return out.ToBytesArray +End Sub +'Converts a bytes array to an image (for BLOB fields). +Public Sub BytesToImage(bytes() As Byte) As Bitmap + Dim In As InputStream + In.InitializeFromBytesArray(bytes, 0, bytes.Length) + Dim bmp As Bitmap + bmp.Initialize2(In) + Return bmp +End Sub +'Prints the table to the logs. +Public Sub PrintTable(Table As DBResult) + Log("Tag: " & Table.Tag & ", Columns: " & Table.Columns.Size & ", Rows: " & Table.Rows.Size) + Dim sb As StringBuilder + sb.Initialize + For Each col In Table.Columns.Keys + sb.Append(col).Append(TAB) + Next + Log(sb.ToString) + For Each row() As Object In Table.Rows + Dim sb As StringBuilder + sb.Initialize + For Each record As Object In row + sb.Append(record).Append(TAB) + Next + ToastMessageShow(sb.ToString, True) + Next +End Sub + + \ No newline at end of file diff --git a/B4A/EscPosPrinter.bas b/B4A/EscPosPrinter.bas new file mode 100644 index 0000000..f0a9536 --- /dev/null +++ b/B4A/EscPosPrinter.bas @@ -0,0 +1,1158 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=9.3 +@EndOfDesignText@ +#IgnoreWarnings: 9 +' 9 = unused variable + +Sub Class_Globals + ' 1.0 Initial version + ' 2.0 Added FeedPaper, changed many WriteString(.." & Chr(number)) instances to WriteBytes(params) + ' This is to avoid Unicode code page transformations on some numbers > 32 + ' Added PrintAndFeedPaper, setRelativePrintPosn, + ' Added user defined characters, DefineCustomCharacter, DeleteCustomCharacter and setUseCustomCharacters + ' Addedhelper methods CreateCustomCharacter, CreateLine, CreateBox and CreateCircle + Private Version As Double = 2.0 ' Printer class version + + Type AnImage(Width As Int, Height As Int, Data() As Byte) + + Private EventName As String 'ignore + Private CallBack As Object 'ignore + + Private Serial1 As Serial + Private Astream As AsyncStreams + Private Connected As Boolean + Private ConnectedError As String + + Dim ESC As String = Chr(27) + Dim FS As String = Chr(28) + Dim GS As String = Chr(29) + + 'Bold and underline don't work well in reversed text + Dim UNREVERSE As String = GS & "B" & Chr(0) + Dim REVERSE As String = GS & "B" & Chr(1) + + ' Character orientation. Print upside down from right margin + Dim UNINVERT As String = ESC & "{0" + Dim INVERT As String = ESC & "{1" + + ' Character rotation clockwise. Not much use without also reversing the printed character sequence + Dim UNROTATE As String = ESC & "V0" + Dim ROTATE As String = ESC & "V1" + + ' Horizontal tab + Dim HT As String = Chr(9) + + ' Character underline + Dim ULINE0 As String = ESC & "-0" + Dim ULINE1 As String = ESC & "-1" + Dim ULINE2 As String = ESC & "-2" + + ' Character emphasis + Dim BOLD As String = ESC & "E1" + Dim NOBOLD As String = ESC & "E0" + + ' Character height and width + Dim SINGLE As String = GS & "!" & Chr(0x00) + Dim HIGH As String = GS & "!" & Chr(0x01) + Dim WIDE As String = GS & "!" & Chr(0x10) + Dim HIGHWIDE As String = GS & "!" & Chr(0x11) + + ' Default settings + Private LEFTJUSTIFY As String = ESC & "a0" + Private LINEDEFAULT As String = ESC & "2" + Private LINSET0 As String = ESC & "$" & Chr(0x0) & Chr(0x0) + Private LMARGIN0 As String = GS & "L" & Chr(0x0) & Chr(0x0) + Private WIDTH0 As String = GS & "W" & Chr(0xff) & Chr(0xff) + Private CHARSPACING0 As String = ESC & " " & Chr(0) + Private CHARFONT0 As String = ESC & "M" & Chr(0) + Dim DEFAULTS As String = CHARSPACING0 & CHARFONT0 & LMARGIN0 & WIDTH0 & LINSET0 & LINEDEFAULT & LEFTJUSTIFY _ + & UNINVERT & UNROTATE & UNREVERSE & NOBOLD & ULINE0 + +End Sub + +'********** +'PUBLIC API +'********** + +'Initialize the object with the parent and event name +Public Sub Initialize(vCallback As Object, vEventName As String) + EventName = vEventName + CallBack = vCallback + Serial1.Initialize("Serial1") + Connected = False + ConnectedError = "" +End Sub + +' Returns any error raised by the last attempt to connect a printer +Public Sub ConnectedErrorMsg As String + Return ConnectedError +End Sub + +' Returns whether a printer is connected or not +Public Sub IsConnected As Boolean + Return Connected +End Sub + +' Returns whether Bluetooth is on or off +Public Sub IsBluetoothOn As Boolean + Return Serial1.IsEnabled +End Sub + +' Ask the user to connect to a printer and return whether she tried or not +' If True then a subsequent Connected event will indicate success or failure +Public Sub Connect As Boolean + 'leos +' Serial1.Connect("88:6B:0F:3E:53:9E") +' Return True + Try + If Starter.MAC_IMPRESORA = "0" Then + Dim PairedDevices As Map + PairedDevices = Serial1.GetPairedDevices + Dim l As List + l.Initialize + Log("aqui 1") + For i = 0 To PairedDevices.Size - 1 + l.Add(PairedDevices.GetKeyAt(i)) + Log("aqui 2") + DisConnect + Next + Dim Res As Int + Res = InputList(l, "Choose a printer", -1) 'show list with paired devices 'ignore + If Res <> DialogResponse.CANCEL Then + Serial1.Connect(PairedDevices.Get(l.Get(Res))) 'convert the name to mac address + 'Msgbox(PairedDevices.Get(l.Get(Res)),"mac") + Starter.mac_impresora = PairedDevices.Get(l.Get(Res)) + Return True + DisConnect + Log("aqui 3") + End If + Log("aqui 4") + Return False + Else + Serial1.Connect(Starter.mac_impresora) + ' Starter.mac_impresora = colonia.MAC_IMPRESORA + Return True + DisConnect + Log("aqui 5") + End If + Catch + Log(LastException) + Return False + End Try +End Sub + + +' Disconnect the printer +Public Sub DisConnect + Serial1.Disconnect + Connected = False +End Sub + +' Reset the printer to the power on state +Public Sub Reset + WriteString(ESC & "@") +End Sub + +'-------------- +' Text Commands +'-------------- + +' Print any outstanding characters then feed the paper the specified number of units of 0.125mm +' This is similar to changing LineSpacing before sending CRLF but this has a one off effect +' A full character height is always fed even if units = 0. Units defines the excess over this minimum +Public Sub PrintAndFeedPaper(units As Int) + WriteString(ESC & "J") + Dim params(1) As Byte + params(0) = units + WriteBytes(params) +End Sub + +' Set the distance between characters +Public Sub setCharacterSpacing(spacing As Int) + WriteString(ESC & " ") + Dim params(1) As Byte + params(0) = spacing + WriteBytes(params) +End Sub + +' Set the left inset of the next line to be printed +' Automatically resets to 0 for the following line +' inset is specified in units of 0.125mm +Public Sub setLeftInset(inset As Int) + Dim dh As Int = inset / 256 + Dim dl As Int = inset - dh + WriteString(ESC & "$" & Chr(dl) & Chr(dh)) + Dim params(2) As Byte + params(0) = dl + params(1) = dh + WriteBytes(params) +End Sub + +' Set the left margin of the print area, must be the first item on a new line +' margin is specified in units of 0.125mm +' This affects barcodes as well as text +Public Sub setLeftMargin(margin As Int) + Dim dh As Int = margin / 256 + Dim dl As Int = margin - dh + WriteString(GS & "L") + Dim params(2) As Byte + params(0) = dl + params(1) = dh + WriteBytes(params) +End Sub + +' Set the width of the print area, must be the first item on a new line +' margin is specified in units of 0.125mm +' This affects barcodes as well as text +' This appears to function more like a right margin than a print area width when used with LeftMargin +Public Sub setPrintWidth(width As Int) + Dim dh As Int = width / 256 + Dim dl As Int = width - dh + WriteString(GS & "W") + Dim params(2) As Byte + params(0) = dl + params(1) = dh + WriteBytes(params) +End Sub + +' Set the distance between lines in increments of 0.125mm +' If spacing is < 0 then the default of 30 is set +Public Sub setLineSpacing(spacing As Int) + If spacing < 0 Then + WriteString(ESC & "2") + Else + WriteString(ESC & "3") + Dim params(1) As Byte + params(0) = spacing + WriteBytes(params) + End If +End Sub + +' Set the line content justification, must be the first item on a new line +' 0 left, 1 centre, 2 right +Public Sub setJustify(justify As Int) + WriteString(ESC & "a" & Chr(justify + 48)) +End Sub + +' Set the codepage of the printer +' You need to look at the printer documentation to establish which codepages are supported +Public Sub setCodePage(codepage As Int) + WriteString(ESC & "t") + Dim params(1) As Byte + params(0) = codepage + WriteBytes(params) +End Sub + +' Select the size of the font for printing text. 0 = Font A (12 x 24), 1 = Font B (9 x 17) +' For font B you may want to set the line spacing to a lower value than the default of 30 +' This affects only the size of printed characters. The code page determines the actual character set +' On my printer setting UseCustomCharacters = while Font B is selected crashes the printer and turns it off +Public Sub setCharacterFont(font As Int) + WriteString(ESC & "M" & Chr(Bit.And(1,font))) +End Sub + +' Set the positions of the horizontal tabs +' Each tab is specified as a number of character widths from the beginning of the line +' There may be up to 32 tab positions specified each of size up to 255 characters +' The printer default is that no tabs are defined +Public Sub setTabPositions(tabs() As Int) + WriteString(ESC & "D") + Dim data(tabs.Length+1) As Byte + For i = 0 To tabs.Length - 1 + data(i) = tabs(i) + Next + data(tabs.Length) = 0 + WriteBytes(data) +End Sub + +' Set print position relative to the current position using horizontal units of 0.125mm +' relposn can be negative +' Unless I have misundertood this doesn't work as documented on my printer +' It only seems take effect at the beginning of a line as a one off effect +Public Sub setRelativePrintPosn(relposn As Int) + Dim dh As Int = relposn / 256 + Dim dl As Int = relposn - dh + WriteString(ESC & "\") + Dim params(2) As Byte + params(0) = dl + params(1) = dh + WriteBytes(params) +End Sub + +' Send the contents of an array of bytes to the printer +' Remember that if the printer is expecting text the bytes will be printed as characters in the current code page +Public Sub WriteBytes(data() As Byte) + If Connected Then + Astream.Write(data) + End If +End Sub + +' Send the string to the printer in IBM437 encoding which is the original PC DOS codepage +' This is usually the default codepage for a printer and is CodePage = 0 +' Beware of using WriteString with Chr() to send numeric values as they may be affected by Unicode to codepage translations +' Most character level operations are pre-defined as UPPERCASE string variables for easy concatenation with other string data +Public Sub WriteString(data As String) + WriteString2(data, "IBM437") +End Sub + +' Send the string to the printer in the specified encoding +' You also need to set the printer to a matching encoding using the CodePage property +' Beware of using WriteString2 with Chr() to send numeric values as they may be affected by codepage substitutions +' Most character level operations are pre-defined as UPPERCASE string variables for easy concatenatipon with other string data +Public Sub WriteString2(data As String, encoding As String) + Try + If Connected Then + Astream.Write(data.GetBytes(encoding)) + End If + Catch + Log("Printer error : " & LastException.Message) + AStream_Error + End Try +End Sub + +'----------------------------------------- +' User defined character commands commands +'----------------------------------------- + +' Delete the specified user defined character mode +' This command deletes the pattern defined for the specified code in the font selected by ESC ! +' If the code is subsequently printed in custom character mode the present code page character is printed instead +Public Sub DeleteCustomCharacter(charcode As Int) + WriteString(ESC & "?") + Dim params(1) As Byte + params(0) = charcode + WriteBytes(params) +End Sub + +' Enable the user defined character mode if custom is True, revert to normal if custom is False +' If a custom character has not been defined for a given character code then the default character for the present font is printed +' FontA and FontB have separate definitions for custom characters +' On my printer setting UseCustomCharacters = while Font B is selected crashes the printer and turns it off +' Therefore the cuatom character routines have not been tested on ont B +Public Sub setUseCustomCharacters(custom As Boolean) + If custom Then + WriteString(ESC & "%1") + Else + WriteString(ESC & "%0") + End If +End Sub + +' Define a user defined character +' The allowable character code range is the 95 characters) from ASCII code 32 (0x20) to 126 (0x7E) +' Characters can be defined in either font A (12*24) or font B (9*17) as selected by present setting of CharacterFont +' The programmer must ensure that the correct font size definition is used for the present setting of CharacterFont +' The user-defined character definition is cleared when Reset is invoked or the printer is turned off +' The vertical and horizontal printed resolution is approximaely 180dpi +' Characters are always defined by sets of three bytes in the vertical direction and up to 9 or 12 sets horizontally +' Each byte defines a vertical line of 8 dots. The MSB of each byte is the highest image pixel, the LSB is the lowest +' Byte(0+n) defines the topmost third of the vertical line, Byte(1+n) is below and Byte(2+n) is the lowest +' Set a bit to 1 to print a dot or 0 to not print a dot +' If the lines to the right of the character are blank then there set of three bytes can be omiited from the byte array +' When the user-defined characters are defined in font B (9*17) only the most significant bit of the 3rd byte of data is used +' charcode defines the character code for the character being defined +' bitdata is a Byte array containing the character definitiopn as described above. +' If the length of bitdata is not a multiple of 3 the definition is ignored and a value of -1 returned +Public Sub DefineCustomCharacter(charcode As Int, bitdata() As Byte) As Int + Dim excess As Int = bitdata.Length Mod 3 + If excess <> 0 Then Return -1 + Dim size As Int = bitdata.Length / 3 + WriteString(ESC & "&") + Dim params(4) As Byte + params(0) = 3 + params(1) = charcode + params(2) = charcode + params(3) = size + WriteBytes(params) + WriteBytes(bitdata) + Return 0 +End Sub + +' The third triangle point is hacked into spare bits keeping the generated Int human readable i hex for other shapes +' The shape array contains the character shapes and characterfont is 0 for a 12*24 character andd 1 for a 9*17 character +' Returns a Byte(36) for characterfont = 0 and a Byte(27) for characterfont = 1 +' The returned array can be directly passed to DefineCustomCharacter +' To define a custom character requires specifying up to 288 data points +' This is a lot of data and in most cases it is mainly white space +' This method takes a character definition that defines only the shapes in the character that are to be printed black +' It will be easier use the outputs from CreateLine, CreateTriangle, CreateBox and CreateCircle rather then building the actual Int values +' Each shape is defined by a single Int value containing four parameters in hex format plugs some single bit flags +' Taking the representation of the Int as eight hex characters numbered from the MS end as 0x01234567 +' 0 contains the shape to draw. 0 = Line, 1 = Box, 2 = Circle, 3 = Triangle +' 1 contains a value between 0 and 0xF. This is either an X coordinate or for a circle the radius +' 2 and 3 contain a value between 0 and 0x1F. This is either a Y coordinate or for a circle the quadrants to draw +' 4 contains a value between 0 and 0xF. This is 0 for an empty shope or 1 for a filled shape +' 5 contains a value between 0 and 0xF. This is an X coordinate +' 5 and 6 contain a value between 0 and 0x1F. This is a Y coordinate +' The coordinate 0,0 is at the top left of the character +' Line +' One point of the vector is contained in the top part of the Int and the other in the bottom half +' To define a single point place its coordinates as both sr=start and end of a line +' Box +' The two X,Y coordinates specify the top left and bottom right corners of the box +' Circle +' The left X parameter is now the radius of the circle, the left Y is the quadrants to be drawn +' The right X and Y parameters are the centre of the circle' +' The quadrants to draw are bit ORed together, UpperRight = 0x1, LowerRight = 0x2, LowerLeft = 0x4, Upper Left = 0x8 +' Triangle +' The left X and Y parameters are now one point of the triangle, the right X and Y parameters another point +' The third triangle point is hacked into spare bits keeping the generated Int human readable in hex for the other shapes +' The bit allocations of a shape are as follows. f = fill as 0 or 1, s = shape as 0 to 7, xn as 0 to 15, yn as 0 to 31 +' Shape 0 = line, 1 = box, 2 = triangle, 3 = circle, 4 to 7 = unused +' fsss xxxx -yyy yyyy xxxx xxxx yyyy yyyy +' 0000 220 0000 2222 1111 2221 1111 +' x0 y2 y0 x2 x1 y2 y1 +' The shape array contains the character shapes and characterfont is 0 for a 12*24 character andd 1 for a 9*17 character +' Returns a Byte(36) for characterfont = 0 and a Byte(27) for characterfont = 1 +' The returned array can be directly passed to DefineCustomCharacter +Public Sub CreateCustomCharacter(shapes() As Int, characterfont As Int) As Byte() + Dim masks(8) As Byte + masks(0) = 0x80 + masks(1) = 0x40 + masks(2) = 0x20 + masks(3) = 0x10 + masks(4) = 0x08 + masks(5) = 0x04 + masks(6) = 0x02 + masks(7) = 0x01 + ' rather than try to catch errors whenever we access this array we Dim it to the maximum possible values of X and Y + ' then copy the top left of it to the final character definition array of the correct size + Dim points(16,32) As Byte + ' initialise the character to all white + For x = 0 To 15 + For y = 0 To 31 + points(x,y) = 0 + Next + Next + Dim size As Int = 12 + If characterfont = 1 Then size = 9 + Dim charbyes(size * 3) As Byte + For c = 0 To charbyes.Length - 1 + charbyes(c) = 0 + Next + ' set the points array from the shapes provided + For i = 0 To shapes.Length -1 + Dim fill As Int = Bit.UnsignedShiftRight(Bit.And(0x80000000, shapes(i)), 31) + Dim shape As Int = Bit.UnsignedShiftRight(Bit.And(0x70000000, shapes(i)), 28) + Dim x0 As Int = Bit.UnsignedShiftRight(Bit.And(0x0f000000, shapes(i)), 24) + Dim y0 As Int = Bit.UnsignedShiftRight(Bit.And(0x001f0000, shapes(i)), 16) + Dim x1 As Int = Bit.UnsignedShiftRight(Bit.And(0x00000f00, shapes(i)), 8) + Dim y1 As Int = Bit.And(0x0000001f, shapes(i)) + Dim x2 As Int = Bit.UnsignedShiftRight(Bit.And(0x0000f000, shapes(i)), 12) + Dim y2 As Int = Bit.UnsignedShiftRight(Bit.And(0x00e00000, shapes(i)), 18) + Bit.UnsignedShiftRight(Bit.And(0x000000e0, shapes(i)), 5) + ' The bit allocations of a shape are as follows. f = fill as 0 or 1, s = shape as 0 to 7, xn as 0 to 15, yn as 0 to 31 + ' Shape 0 = line, 1 = box, 2 = triangle, 3 = circle, 4 to 7 = unused + ' fsss xxxx -yyy yyyy xxxx xxxx yyyy yyyy + ' 0000 220 0000 2222 1111 2221 1111 + ' x0 y2 y0 x2 x1 y2 y1 + Dim logmsg As String = ": Fill=" & fill & " : Points " & x0 & "," & y0 & " " & x1 & "," & y1 & " " & x2 & "," & y2 + If shape = 3 Then + Log("Triangle " & logmsg) + PlotTriangle(x0, y0, x1, y1, x2, y2, points, fill) + else If shape = 2 Then + Log("Circle " & logmsg) + PlotCircle(x0, y0, x1, y1, points, fill) + Else If shape = 1 Then + Log("Box " & logmsg) + PlotBox(x0, y0, x1, y1, points, fill) + Else + Log("Line " & logmsg) + PlotLine(x0, y0, x1, y1, points) + End If + ' map the points array onto the character definition array + For x = 0 To size -1 ' 9 or 12 horizontal bytes + For y = 0 To 2 ' 3 vertical bytes + Dim bits As Byte = 0 + For b = 0 To 7 ' 8 vertical bits + If points(x, y*8+b) <> 0 Then + bits = Bit.Or(bits, masks(b)) + End If + Next + charbyes(x*3+y) = bits + Next + Next + Next + Return charbyes +End Sub + +' This is a higher level method that builds the Int values to pass to CreateCustomCharacter in the shapes array +' Create the value to draw a line in a custom character +' The line starts at X0,Y0 and ends at X1,Y1 +Public Sub CreateLine(x0 As Int, y0 As Int, x1 As Int, y1 As Int) As Int + Dim line As Int = 0 + line = line + Bit.ShiftLeft(Bit.And(0xf,x0), 24) + line = line + Bit.ShiftLeft(Bit.And(0x1f,y0), 16) + line = line + Bit.ShiftLeft(Bit.And(0xf,x1), 8) + line = line + Bit.And(0x1f,y1) + Return line +End Sub + +' This is a higher level method that builds the Int values to pass to CreateCustomCharacter in the shapes array +' Create the value to draw a circle in a custom character +' The circle is centred on X1,Y1 and the quadrants to draw are bit ORed together +' UpperRight = 0x1, LowerRight = 0x2, LowerLeft = 0x4, Upper Left = 0x8 +Public Sub CreateCircle(radius As Int, quadrants As Int, x1 As Int, y1 As Int, fill As Boolean) As Int + Dim circle As Int = 0x20000000 + If fill Then circle = circle + 0x80000000 + circle = circle + Bit.ShiftLeft(radius, 24) + circle = circle + Bit.ShiftLeft(quadrants, 16) + circle = circle + Bit.ShiftLeft(x1, 8) + circle = circle + y1 + Return circle +End Sub + + +' This is a higher level method that builds the Int values to pass to CreateCustomCharacter in the shapes array +' Create the value to draw a triangle in a custom character +' The triangles corners are at X0,Y0 X1,Y1 and X2,Y2 +Public Sub CreateTriangle(x0 As Int, y0 As Int, x1 As Int, y1 As Int, x2 As Int, y2 As Int, fill As Boolean) As Int + Dim triangle As Int = 0x30000000 + If fill Then triangle = triangle + 0x80000000 + triangle = triangle + Bit.ShiftLeft(Bit.And(0xf,x0), 24) + triangle = triangle + Bit.ShiftLeft(Bit.And(0x1f,y0), 16) + triangle = triangle + Bit.ShiftLeft(Bit.And(0xf,x1), 8) + triangle = triangle + Bit.And(0x1f,y1) + triangle = triangle + Bit.ShiftLeft(Bit.And(0xf,x2), 12) ' extra X + triangle = triangle + Bit.ShiftLeft(Bit.And(0x7,y2), 5) ' extra Y lsbits * 3 + triangle = triangle + Bit.ShiftLeft(Bit.And(0x18,y2), 18) ' extra Y msbits * 2 + Return triangle +End Sub + +' This is a higher level method that builds the Int values to pass to CreateCustomCharacter in the shapes array +' Create the value to draw a box in a custom character +' The box top left start is X0,Y0 and bottom right is X1,Y1 +Public Sub CreateBox(x0 As Int, y0 As Int, x1 As Int, y1 As Int, fill As Boolean) As Int + Dim box As Int = 0x10000000 + If fill Then box = box + 0x80000000 + box = box + Bit.ShiftLeft(Bit.And(0xf,x0), 24) + box = box + Bit.ShiftLeft(Bit.And(0x1f,y0), 16) + box = box + Bit.ShiftLeft(Bit.And(0xf,x1), 8) + box = box + Bit.And(0x1f,y1) + Return box +End Sub + +'----------------------------------------- +' Private custom character drawing methods +'----------------------------------------- + +Private Sub PlotTriangle(x0 As Int, y0 As Int, x1 As Int, y1 As Int, x2 As Int, y2 As Int, points(,) As Byte, Fill As Int) + ' This is a pretty crude algorithm, but it is simple, works and it isn't invoked often + PlotLine(x0, y0, x1, y1, points) + PlotLine(x1, y1, x2, y2, points) + PlotLine(x2, y2, x0, y0, points) + If Fill > 0 Then + FillTriangle(x0, y0, x1, y1, x2, y2, points) + End If +End Sub + +Private Sub FillTriangle(x0 As Int, y0 As Int, x1 As Int, y1 As Int, x2 As Int, y2 As Int, points(,) As Byte) + ' first sort the three vertices by y-coordinate ascending so v0 Is the topmost vertice */ + Dim tx, ty As Int + If y0 > y1 Then + tx = x0 : ty = y0 + x0 = x1 : y0 = y1 + x1 = tx : y1 = ty + End If + If y0 > y2 Then + tx = x0 : ty = y0 + x0 = x2 : y0 = y2 + x2 = tx : y2 = ty + End If + If y1 > y2 Then + tx = x1 : ty = y1 + x1 = x2 : y1 = y2 + x2 = tx : y2 = ty + End If + + Dim dx0, dx1, dx2 As Double + Dim x3, x4, y3, y4 As Double + Dim inc As Int + + If y1 - y0 > 0 Then dx0=(x1-x0)/(y1-y0) Else dx0=0 + If y2 - y0 > 0 Then dx1=(x2-x0)/(y2-y0) Else dx1=0 + If y2 - y1 > 0 Then dx2=(x2-x1)/(y2-y1) Else dx2=0 + x3 = x0 : x4 = x0 + y3 = y0 : y4 = y0 + If dx0 > dx1 Then + While + Do While y3 <= y1 + If x3 > x4 Then inc = -1 Else inc = 1 + For x = x3 To x4 Step inc + points(x, y3) = 1 + Next + y3 = y3 + 1 : y4 = y4 + 1 : x3 = x3 + dx1 : x4 = x4 + dx0 + Loop + x4=x1 + y4=y1 + Do While y3 <= y2 + If x3 > x4 Then inc = -1 Else inc = 1 + For x = x3 To x4 Step inc + points(x ,y3) = 1 + Next + y3 = y3 + 1 : y4 = y4 + 1 : x3 = x3 + dx1 : x4 = x4 + dx2 + Loop + Else + While + Do While y3 <= y1 + If x3 > x4 Then inc = -1 Else inc = 1 + For x = x3 To x4 Step inc + points(x, y3) = 1 + Next + y3 = y3 + 1 : y4 = y4 + 1 : x3 = x3 + dx0 : x4 = x4 +dx1 + Loop + x3=x1 + y3=y1 + Do While y3<=y2 + If x3 > x4 Then inc = -1 Else inc = 1 + For x = x3 To x4 Step inc + points(x, y3) = 1 + Next + y3 = y3 + 1 : y4 = y4 + 1 : x3 = x3 + dx2 : x4 = x4 + dx1 + Loop + End If +End Sub + +Private Sub PlotBox(x0 As Int, y0 As Int, x1 As Int, y1 As Int, points(,) As Byte, Fill As Int) + ' This is a pretty crude algorithm, but it is simple, works and itsn't invoked often + PlotLine(x0, y0, x0, y1, points) + PlotLine(x0, y0, x1, y0, points) + PlotLine(x1, y0, x1, y1, points) + PlotLine(x0, y1, x1, y1, points) + If Fill > 0 Then + For x = x0 To x1 + PlotLine(x, y0, x, y1, points) + Next + End If +End Sub + + +Private Sub PlotCircle(radius As Int, quadrants As Int, x1 As Int, y1 As Int, points(,) As Byte, fill As Int) + ' This is a pretty crude algorithm, but it is simple, works and itsn't invoked often + Dim mask As Int = 1 + For q = 3 To 0 Step -1 + If Bit.And(quadrants, mask) <> 0 Then + For i = q*90 To q*90+90 Step 1 + Dim x,y As Double + x = x1 - SinD(i)*radius + y = y1 - CosD(i)*radius + If fill > 0 Then + PlotLine(x1, y1, x, y, points) + Else + points(Round(x), Round(y)) = 1 + End If + Next + End If + mask = Bit.ShiftLeft(mask, 1) + Next +End Sub + +' Bresenham's line algorithm - see Wikipedia +Private Sub PlotLine(x0 As Int, y0 As Int, x1 As Int, y1 As Int, points(,) As Byte ) + If Abs(y1 - y0) < Abs(x1 - x0) Then + If x0 > x1 Then + PlotLineLow(x1, y1, x0, y0, points) + Else + PlotLineLow(x0, y0, x1, y1, points) + End If + Else + If y0 > y1 Then + PlotLineHigh(x1, y1, x0, y0, points) + Else + PlotLineHigh(x0, y0, x1, y1, points) + End If + End If +End Sub + +Private Sub PlotLineHigh(x0 As Int, y0 As Int, x1 As Int, y1 As Int, points(,) As Byte ) + Dim dx As Int = x1 - x0 + Dim dy As Int = y1 - y0 + Dim xi As Int = 1 + If dx < 0 Then + xi = -1 + dx = -dx + End If + Dim D As Int = 2*dx - dy + Dim x As Int = x0 + For y = y0 To y1 + points(x,y) = 1 + If D > 0 Then + x = x + xi + D = D - 2*dy + End If + D = D + 2*dx + Next +End Sub + +Private Sub PlotLineLow(x0 As Int, y0 As Int, x1 As Int,y1 As Int, points(,) As Byte ) + Dim dx As Int = x1 - x0 + Dim dy As Int = y1 - y0 + Dim yi As Int = 1 + If dy < 0 Then + yi = -1 + dy = -dy + End If + Dim D As Int = 2*dy - dx + Dim y As Int = y0 + For x = x0 To x1 + points(x,y) = 1 + If D > 0 Then + y = y + yi + D = D - 2*dx + End If + D = D + 2*dy + Next +End Sub + + +'------------------- +' Image commands +'------------------- +' There are two different image printing options with different pixel formats. +' PrintImage prints an entire image at once with a maximum size of 576x512 +' PrintImage2 prints a slice of an image with a height of 8 or 24 and a maximum width of 576 +' One or other may look better on your particular printer + +' Printer support method for pre-processing images to print +' Convert the bitmap supplied to an array of pixel values representing the luminance value of each original pixel +Sub ImageToBWIMage(bmp As Bitmap) As AnImage + Dim BC As BitmapCreator 'ignore + Dim W As Int = bmp.Width + Dim H As Int = bmp.Height + Dim pixels(W * H) As Byte + + For y = 0 To H - 1 + For x = 0 To W - 1 + Dim j As Int = bmp.GetPixel(x, y) + ' convert color to approximate luminance value + Dim col As ARGBColor + BC.ColorToARGB(j, col ) + Dim lum As Int = col.r * 0.2 + col.b*0.1 + col.g*0.7 + If lum> 255 Then lum = 255 + ' save the pixel luminance + pixels(y*W + x) = lum + Next + Next + Dim ret As AnImage + ret.Width = bmp.Width + ret.Height = bmp.Height + ret.Data = pixels + Return ret +End Sub + +' Printer support method for pre-processing images to print +' Convert the array of luminance values to an array of 0s and 1s according to the threshold value +Sub ThresholdImage(img As AnImage, threshold As Int) As AnImage 'ignore + Dim pixels(img.Data.Length) As Byte + For i = 0 To pixels.Length - 1 + Dim lum As Int = Bit.And(img.Data(i), 0xff) ' bytes are signed values + If lum < threshold Then + lum = 1 + Else + lum = 0 + End If + pixels(i) = lum + Next + Dim ret As AnImage + ret.Width = img.Width + ret.Height = img.Height + ret.Data = pixels + Return ret +End Sub + +' Printer support method for pre-processing images to print +' Convert the array of luminance values to a dithered array of 0s and 1s according to the threshold value +' The dithering algorithm is the simplest one-dimensional error diffusion algorithm +' Normally threshold should be 128 but some images may look better with a little more or less. +' This algorithm tends to produce vertical lines. DitherImage2D will probably look far better +Sub DitherImage1D(img As AnImage, threshold As Int) As AnImage 'ignore + Dim pixels(img.Data.Length) As Byte + Dim error As Int + For y = 0 To img.Height - 1 + error = 0 ' reset on each new line + For x = 0 To img.Width - 1 + Dim lum As Int = Bit.And(img.Data(y*img.Width + x), 0xff) ' bytes are signed values + lum = lum + error + If lum < threshold Then + error = lum + lum = 1 + Else + error = lum - 255 + lum = 0 + End If + pixels(y*img.Width + x) = lum + Next + Next + Dim ret As AnImage + ret.Width = img.Width + ret.Height = img.Height + ret.Data = pixels + Return ret +End Sub + + +' Printer support method for pre-processing images to print +' Convert the array of luminance values to a dithered array of 0s and 1s according to the threshold value +' The dithering algorithm is the simplest two-dimensional error diffusion algorithm +' Normally threshold should be 128 but some images may look better with a little more or less. +' Anything more sophisticated might be overkill considering the image quality of most thermal printers +Sub DitherImage2D(img As AnImage, threshold As Int) As AnImage + Dim pixels(img.Data.Length) As Byte + Dim xerror As Int + Dim yerrors(img.Width) As Int + For i = 0 To yerrors.Length -1 + yerrors(0) = 0 + Next + For y = 0 To img.Height - 1 + xerror = 0 ' reset on each new line + For x = 0 To img.Width - 1 + Dim lum As Int = Bit.And(img.Data(y*img.Width + x), 0xff) ' bytes are signed values + lum = lum + xerror + yerrors(x) + If lum < threshold Then + xerror = lum/2 + yerrors(x) = xerror + lum = 1 + Else + xerror = (lum - 255)/2 + yerrors(x) = xerror + lum = 0 + End If + pixels(y*img.Width + x) = lum + Next + Next + Dim ret As AnImage + ret.Width = img.Width + ret.Height = img.Height + ret.Data = pixels + Return ret +End Sub + + +' GS v0 printing +'--------------- + +' Prints the given image at the specified height and width using the "GS v" command +' Image data is supplied as bytes each containing 8 bits of horizontal image data +' The top left of the image is Byte(0) and the bottom right is Byte(width*height-1) +' MSB of the byte is the leftmost image pixel, the LSB is the rightmost +' Maximum width is 72 bytes (576 bits), Maximum height is 512 bytes +' The printed pixels are square +' Returns status 0 : OK, -1 : too wide, -2 : too high, -3 : array too small +' The printer can take a long time to process the data and start printing +Public Sub PrintImage(img As AnImage) As Int + ' max width = 72 ' 72mm/576 bits wide + ' max height = 512 ' 64mm/512 bits high + If img.width > 72 Then Return -1 + If img.height > 512 Then Return -2 + If img.data.Length < img.width * img.height Then Return -3 + Dim xh As Int = img.width / 256 + Dim xl As Int = img.width - xh * 256 + Dim yh As Int = img.height / 256 + Dim yl As Int = img.height - yh * 256 + Dim params(5) As Byte + params(0) = 0 ' + params(1) = xl + params(2) = xh + params(3) = yl + params(4) = yh + WriteString(GS & "v0") + WriteBytes(params) + WriteBytes(img.data) + WriteString(CRLF) + Return 0 +End Sub + +' Printer support method for pre-processing images to print by PrintImage +' Takes an array of image pixels and packs it for use with PrintImage +' Each byte in the imagedata array is a single pixel valued zero or non-zero for white and black +' The returned array is 8 x smaller and packs 8 horizontal black or white pixels into each byte +' If the horizontal size of the image is not a multiple of 8 it will be truncated so that it is. +Public Sub PackImage(imagedata As AnImage) As AnImage + Dim xbytes As Int = imagedata.width/8 + Dim pixels(xbytes * imagedata.height) As Byte + Dim masks(8) As Byte + masks(0) = 0x80 + masks(1) = 0x40 + masks(2) = 0x20 + masks(3) = 0x10 + masks(4) = 0x08 + masks(5) = 0x04 + masks(6) = 0x02 + masks(7) = 0x01 + Dim index As Int = 0 + For y = 0 To imagedata.Height - 1 + For x = 0 To xbytes - 1 + Dim xbyte As Byte = 0 + For b = 0 To 7 + ' get a pixel + Dim pix As Byte = imagedata.Data(index) + If pix <> 0 Then + xbyte = xbyte + masks(b) + End If + index = index + 1 + Next + pixels(y*xbytes + x) = xbyte + Next + Next + Dim ret As AnImage + ret.Width = xbytes + ret.Height = imagedata.Height + ret.Data = pixels + Return ret +End Sub + + +' ESC * printing +'--------------- + +' Prints the given image slice at the specified height and width using the "ESC *" command +' Image data is supplied as bytes each containing 8 bits of vertical image data +' Pixels are not square, the width:height ratio varies with density and line height +' Returns status 0 = OK, -1 = too wide, -2 = too high, -3 = wrong array length +' Line spacing needs to be set to 0 if printing consecutive slices +' The printed pixels are not square, the ratio varies with the highdensity and dots24 parameter settings +' The highdensity parameter chooses high or low horizontal bit density when printed +' The dots24 parameter chooses 8 or 24 bit data slice height when printed +' Not(highdensity) +' Maximum width is 288 bits. Horizontal dpi is approximately 90 +' MSB of each byte is the highest image pixel, the LSB is the lowest +' highdensity +' Maximum width is 576 bits. Horizontal dpi is approximately 180 +' Not(dots24) +' Vertical printed height is 8 bits at approximately 60dpi +' One byte in the data Array represents one vertical line when printed +' Array size is the same as the width +' MSB of each byte is the highest image pixel, the LSB is the lowest +' dots24 +' Vertical printed height is 24 bits at approximately 180dpi +' Three consecutive bytes in the data array represent one vertical 24bit line when printed +' Array size is 3 times the width +' Byte(n+0) is the highest, byte (n+2) us the lowest +' MSB of each byte is the highest image pixel, the LSB is the lowest +Public Sub PrintImage2(width As Int, data() As Byte, highdensity As Boolean, dotds24 As Boolean) As Int + Dim d As String = Chr(0) + If Not(highdensity) And Not(dotds24 ) Then + d = Chr(0) + If width > 288 Then Return -1 + If data.Length <> width Then Return -3 + Else If highdensity And Not(dotds24) Then + d = Chr(1) + If width > 576 Then Return -1 + If data.Length <> width Then Return -3 + Else If Not(highdensity) And dotds24 Then + d = Chr(32) + If width > 288 Then Return -1 + If data.Length <> width*3 Then Return -3 + Else ' highdensity And dotds24 + d = Chr(33) + If width > 576 Then Return -1 + If data.Length <> width*3 Then Return -3 + End If + Dim xh As Int = width / 256 + Dim xl As Int = width - xh * 256 + Dim params(2) As Byte + params(0) = xl + params(1) = xh + WriteString(ESC & "*" & d) + WriteBytes(params) + WriteBytes(data) + WriteString(CRLF) + Return 0 +End Sub + +' Printer support method for pre-processing images to print by PrintImage2 +' Takes an array of image pixels and packs one slice of it for use with PrintImage2 +' Each byte in the imagedata array is a single pixel valued zero or non-zero for white and black +' The returned array packs 8 vertical black or white pixels into each byte +' If dots24 is True then the slice is 24 pixels high otherwise it is 8 pixels high +Public Sub PackImageSlice(img As AnImage, slice As Int, dots24 As Boolean) As Byte() + Dim bytes As Int = img.width + If dots24 Then + Dim pixels(bytes * 3) As Byte + Dim slicestart As Int = slice * bytes * 8 * 3 + Else + Dim pixels(bytes) As Byte + Dim slicestart As Int = slice * bytes * 8 + End If + + Dim masks(8) As Byte + masks(0) = 0x80 + masks(1) = 0x40 + masks(2) = 0x20 + masks(3) = 0x10 + masks(4) = 0x08 + masks(5) = 0x04 + masks(6) = 0x02 + masks(7) = 0x01 + ' You could compress this into a single code block but I left it as two to make it more obvious what's happening + If dots24 Then + For x = 0 To bytes - 1 + For s = 0 To 2 + Dim xbyte As Byte = 0 + For b = 0 To 7 + ' get a pixel + Dim pix As Byte = img.Data(slicestart + ((b + s*8) * bytes) + x) + If pix <> 0 Then + xbyte = xbyte + masks(b) + End If + Next + pixels(x*3+s) = xbyte + Next + Next + Else + For x = 0 To bytes - 1 + Dim xbyte As Byte = 0 + For b = 0 To 7 + ' get a pixel + Dim pix As Byte = img.Data(slicestart + (b * bytes) + x) + If pix <> 0 Then + xbyte = xbyte + masks(b) + End If + Next + pixels(x) = xbyte + Next + End If + Return pixels +End Sub + +'---------------- +'Barcode commands +'---------------- + +' Set the height of a 2D bar code as number of dots vertically, 1 to 255 +' Automatically resets to the default after printing the barcode +Public Sub setBarCodeHeight(height As Int) + WriteString(GS & "h") + Dim params(1) As Byte + params(0) = height + WriteBytes(params) +End Sub + +' Set the left inset of a 2D barcode, 0 to 255 +' This does not reset on receipt of RESET +Public Sub setBarCodeLeft(left As Int) + WriteString(GS & "x") + Dim params(1) As Byte + params(0) = left + WriteBytes(params) +End Sub + +' Set the width of each bar in a 2D barcode. width value is 2 to 6, default is 3 +' 2 = 0.250, 3 - 0.375, 4 = 0.560, 5 = 0.625, 6 = 0.75 +' Resets to default after printing the barcode +Public Sub setBarCodeWidth(width As Int) + WriteString(GS & "w") + Dim params(1) As Byte + params(0) = width + WriteBytes(params) +End Sub + +'Selects the printing position of HRI (Human Readable Interpretation) characters when printing a 2D bar code. +'0 Not printed, 1 Above the bar code, 2 Below the bar code, 3 Both above And below the bar code +' Automatically resets to the default of 0 after printing the barcode +' The docs say this can be Chr(0, 1 2 or 3) or "0" "1" "2" or "3" but the numeric characters don't work +Public Sub setHriPosn(posn As Int) + WriteString(GS & "H") + Dim params(1) As Byte + params(0) = posn + WriteBytes(params) +End Sub + +'Selects the font for HRI (Human Readable Interpretation) characters when printing a 2D bar code. +'0 Font A (12 x 24), 1 Font B (9 x 17) +' Automatically resets to the default of 0 after printing the barcode +' The docs say this can be Chr(0 or 1) or "0" or "1" but the numeric characters don't work +Public Sub setHriFont(font As Int) + WriteString(GS & "f" & Chr(font)) +End Sub + +' If given invalid data no barcode is printed, only strange characters +' CODABAR needs any of A,B,C or D at the start and end of the barcode. Some decoders may not like them anywhere else +' Bartype Code Number of characters Permitted values +' A | UPC-A | 11 or 12 characters | 0 to 9 | The 12th printed character is always the check digit +' B | UPC-E | 6 characters | 0 to 9 | The 12th printed character is always the check digit +' C | EAN13 | 12 or 13 characters | 0 to 9 | The 12th printed character is always the check digit +' D | EAN8 | 7 or 8 characters | 0 to 9 | The 8th printed character is always the check digit +' E | CODE39 | 1 or more characters | 0 to 9, A to Z, Space $ % + - . / +' F | ITF | 1 or more characters | 0 to 9 | even number of characters only +' G | CODABAR| 3 to 255 characters | 0 to 9, A to D, $ + - . / : | needs any of A,B,C or D at the start and end +' H | CODE93 | 1 to 255 characters | Same as CODE39 +' I | CODE128| 2 to 255 characters | entire 7 bit ASCII set +Public Sub WriteBarCode(bartype As String, data As String) + Dim databytes() As Byte = data.GetBytes("ASCII") + Dim dlow As Int = databytes.Length + Log("Barcode " & bartype & ", Size " & dlow & ", " & data) + WriteString(GS & "k" & bartype.ToUpperCase.CharAt(0)) + Dim params(1) As Byte + params(0) = dlow + WriteBytes(params) + WriteBytes(databytes) +End Sub + +' On my printer QR codes don't seem to be able to be decoded and on high ECs look obviously wrong :( +' size is 1 to 40, 0 is auto-size. Successive versions increase module size by 4 each side +' size = 1 is 21x21, 2 = 25x25 ... size 40 = 177x177 +' EC is error correction level, "L"(7%) or "M"(15%) or "Q"(25%) or "H"(30%) +' scale is 1 to 8, 1 is smallest, 8 is largest +Public Sub WriteQRCode(size As Int, EC As String, scale As Int, data As String) + Dim databytes() As Byte = data.GetBytes("ISO-8859-1") + Dim dhigh As Int = databytes.Length / 256 + Dim dlow As Int = databytes.Length - dhigh*256 + Log("QR Code : Size " & size & ", EC " & EC & ", Scale " & scale & ", Size " & dlow & " " & dhigh & " : Data = " & data) + Dim params(3) As Byte + params(0) = scale + params(1) = dlow + params(2) = dhigh + WriteString(ESC & "Z" & Chr(size) & EC.ToUpperCase.CharAt(0)) + WriteBytes(params) + WriteBytes(databytes) +End Sub + + +'**************** +' PRIVATE METHODS +'**************** + +'----------------------- +' Internal Serial Events +'----------------------- + +Private Sub Serial1_Connected (Success As Boolean) + If Success Then + Astream.Initialize(Serial1.InputStream, Serial1.OutputStream, "astream") + Connected = True + ConnectedError = "" + Serial1.Listen + Else + Connected = False + ConnectedError = LastException.Message + End If + If SubExists(CallBack, EventName & "_Connected") Then + CallSub2(CallBack, EventName & "_Connected", Success) + End If +End Sub + +'---------------------------- +' Internal AsyncStream Events +'---------------------------- + +Private Sub AStream_NewData (Buffer() As Byte) + If SubExists(CallBack, EventName & "_NewData") Then + CallSub2(CallBack, EventName & "_NewData", Buffer) + End If + Log("Data " & Buffer(0)) +End Sub + +Private Sub AStream_Error + If SubExists(CallBack, EventName & "_Error") Then + CallSub(CallBack, EventName & "_Error") + End If +End Sub + +Private Sub AStream_Terminated + Connected = False + If SubExists(CallBack, EventName & "_Terminated") Then + CallSub(CallBack, EventName & "_Terminated") + End If +End Sub diff --git a/B4A/FileHandler.bas b/B4A/FileHandler.bas new file mode 100644 index 0000000..4bf86e7 --- /dev/null +++ b/B4A/FileHandler.bas @@ -0,0 +1,163 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=11 +@EndOfDesignText@ +'Requiere la librería "ContentResolver" +' +'Copiar este codigo al boton_Click que se quiere que importe la base de datos. +' +' Private Sub b_importarBD_Click +' Private FH As FileHandler +' FH.Initialize +' Wait For (FH.Load) Complete (Result As LoadResult) 'Abre un fileManager para seleccionar la base de datos a importar. +' File.Copy(Result.Dir, Result.FileName, File.DirInternal, "kmt.db") 'Copia la base de datos seleccionada al directorio interno. +' Starter.skmt.Initialize(Starter.ruta,"kmt.db", True) 'Reiniciliza la base de datos con la recien importada. +' ToastMessageShow("¡BD importada!", False) +' End Sub + +Sub Class_Globals + #if B4A + Private ion As Object + Private OldIntent As Intent + #end if + Type LoadResult (Success As Boolean, Dir As String, FileName As String, RealName As String, Size As Long, Modified As Long, MimeType As String) + +End Sub + +Public Sub Initialize + +End Sub + +#if B4A +Public Sub SaveAs (Source As InputStream, MimeType As String, Title As String) As ResumableSub + Dim intent As Intent + intent.Initialize("android.intent.action.CREATE_DOCUMENT", "") + intent.AddCategory("android.intent.category.OPENABLE") + intent.PutExtra("android.intent.extra.TITLE", Title) + intent.SetType(MimeType) + StartActivityForResult(intent) + Wait For ion_Event (MethodName As String, Args() As Object) + If -1 = Args(0) Then 'resultCode = RESULT_OK + Dim result As Intent = Args(1) + Dim jo As JavaObject = result + Dim ctxt As JavaObject + Dim out As OutputStream = ctxt.InitializeContext.RunMethodJO("getContentResolver", Null).RunMethod("openOutputStream", Array(jo.RunMethod("getData", Null))) + File.Copy2(Source, out) + out.Close + Return True + End If + Return False +End Sub + +Public Sub Load As ResumableSub + Dim cc As ContentChooser + cc.Initialize("cc") + cc.Show("application/octet-stream", "Choose text file") + Wait For CC_Result (Success As Boolean, Dir As String, FileName As String) + Log($"***************************${CRLF}${Dir}${CRLF} ${FileName}"$) + Dim res As LoadResult = CreateLoadResult(Success, Dir, FileName) + Log($"***************************${CRLF}${res.FileName}${CRLF} ${res}"$) + If res.Success Then ExtractInformationFromURI(res.FileName, res) + Return res +End Sub + +Private Sub StartActivityForResult(i As Intent) + Dim jo As JavaObject = GetBA + ion = jo.CreateEvent("anywheresoftware.b4a.IOnActivityResult", "ion", Null) + jo.RunMethod("startActivityForResult", Array(ion, i)) +End Sub + +Private Sub GetBA As Object + Return Me.As(JavaObject).RunMethod("getBA", Null) +End Sub + +Private Sub ExtractInformationFromURI (Uri As String, res As LoadResult) + Try + + Dim resolver As ContentResolver + resolver.Initialize("") + Dim u As Uri + u.Parse(Uri) + Dim rs As ResultSet = resolver.Query(u, Null, "", Null, "") + If rs.NextRow Then + Dim columns As B4XSet = B4XCollections.CreateSet + For i = 0 To rs.ColumnCount - 1 + columns.Add(rs.GetColumnName(i)) + Next + If columns.Contains("_display_name") Then res.RealName = rs.GetString("_display_name") + If columns.Contains("_size") Then res.Size = rs.GetLong("_size") + If columns.Contains("last_modified") Then res.Modified = rs.GetLong("last_modified") + If columns.Contains("mime_type") Then res.MimeType = rs.GetString("mime_type") + End If + rs.Close + + Catch + Log("error extracting information from file provider") + Log(LastException) + End Try +End Sub + +Public Sub CheckForReceivedFiles As LoadResult + Dim Activity As Activity = B4XPages.GetNativeParent(B4XPages.MainPage) + If IsRelevantIntent(Activity.GetStartingIntent) Then + Dim in As Intent = Activity.GetStartingIntent + Dim uri As String + If in.HasExtra("android.intent.extra.STREAM") Then + uri = in.As(JavaObject).RunMethod("getParcelableExtra", Array("android.intent.extra.STREAM")) + Else + uri = in.GetData + End If + Dim res As LoadResult = CreateLoadResult(True, "ContentDir", uri) + ExtractInformationFromURI(res.FileName, res) + Return res + End If + Return CreateLoadResult(False, "", "") +End Sub + +Private Sub IsRelevantIntent(in As Intent) As Boolean + If in.IsInitialized And in <> OldIntent And in.Action = in.ACTION_VIEW Then + OldIntent = in + Return True + End If + Return False +End Sub + +#else if B4i +Public Sub SaveAs(ParentPage As Object, AnchorView As Object, Text As String) As ResumableSub + Dim avc As ActivityViewController + avc.Initialize("avc", Array(Text)) + avc.Show(B4XPages.GetNativeParent(ParentPage), AnchorView) + Wait For avc_Complete (Success As Boolean, ActivityType As String) + Return Success +End Sub + +Public Sub Load (ParentPage As Object, AnchorView As Object) As ResumableSub + Dim DocumentPicker As DocumentPickerViewController + DocumentPicker.InitializeImport("picker", Array("public.text")) + DocumentPicker.Show(B4XPages.GetNativeParent(ParentPage), AnchorView) + Wait For Picker_Complete (Success As Boolean, URLs As List) + If Success And URLs.Size > 0 Then + Return UrlToLoadResult(URLs.Get(0)) + End If + Return CreateLoadResult(False, "", "") +End Sub + +Public Sub UrlToLoadResult(url As String) As LoadResult + Dim res As LoadResult = CreateLoadResult(IIf(File.Exists(url, ""), True, False), url, "") + res.RealName = res.Dir.SubString(res.Dir.LastIndexOf("/") + 1) + res.Size = File.Size(res.Dir, "") + Return res +End Sub +#end if + +Private Sub CreateLoadResult (Success As Boolean, Dir As String, FileName As String) As LoadResult + Dim t1 As LoadResult + t1.Initialize + t1.Success = Success + t1.Dir = Dir + t1.FileName = FileName + Return t1 +End Sub + diff --git a/B4A/Files/abordo.png b/B4A/Files/abordo.png new file mode 100644 index 0000000000000000000000000000000000000000..a6b5911c4a2df64a1e105c0d68d867fc405137d8 GIT binary patch literal 2146 zcmbVN`9IT-A75^Y9JyOLniS?J5*A`(?uHi4wOr+xoBG;Zxi^xACP|trEccsoq#;N4 z$@#&YBe@fcQu+G+3*YDC@w^_7*DtT1o~d>=W`Y7T0w54b5NU3TI`YjU+VgQ9Db2J0 z?U6}`!Ec4x7fhxYx_z=%~rg$^m}36mt}PyrS!B zTVrBkN)Oj2{+%Hu;z`5;BO{~s_V$S`!q(Q7u&}VZyL(|_A&o{0#yzZ~66ECM78btD z&d##gdkn@{ch?|;!B}74dJsj_(9p;wQ{TPq`Y|076ckiZ-uR-h>Opw)Kdpp^@#KmE z{6jq6&dx44Ae!}wkeQkJf{f24;kz3MtyP5e(HLA*TJ8iRp{y#owm!4#eKC8{50{X? zFcuo0mCg7VNz6MuJhY4O{NLlSFqDn`QT@LG;#aS91A%zRw7=SpNiea z3X2;%2=C$D9`EYGSOOmO4!IC zlVM)fwx7~L`kVvz?kqZ%!2(ls&A^ra=){kmi4+os7_O#G@#bx(i=VjM1LovQ*x=Y@ zcNg^kkl`S*yBoy!JU^sV?CTDRMe?Yu^l=@EB0^77^qdzEwHvOgAkoC4kIsLL8BEd+ zsm2;9xwcf&A-``D9BIUH!%*h4RY;^kyHwKli5Gqp&98%bJcZBqc*w9=s$#V^wz0)& zTo4(7`ccFmsOw#s&I-Yng`f-?C4f+D<#}vnlIB&K3c2qAGMJIpGj>dJDf3MRDST*B zv&z+gwI(@V!|vFS(~8P)8RnQ{WVW~e`TbYG?meY7w%GM#d)nfAGl>=>41$~BI#1}a$Ot6(qQxmG zkw%S`cbsxad1FD9<5$on>7?8fG}X1Z;2Q4p4gdgfx|6N+Nl+`s9g{t> zA+r7PzURgysw!9$MnmG<)wJah!hdlwu@4kv>UQP}vD{9}pN%m?L z8CSAamd&|(cTYM%@Z^@@tXX{j<+sTs?U}5!C5!2`guo@FTZmuUyWEqxpfhP9mQLX?28b~ zxNCF45yi60lp3*9efw~#L}!9Xrr@Z1*8)kKfS4a&R*AoM(>&swX!s7|Fx8HX5475 zkr{|=Q^fI2s-My;Th6V#-%OvVg%;K26E5B}Deh-c3xVn<14r%IzfAzAT7|grLB4kf z7;X+UHo1o{&^0a@rX`T4Y(?f+%2N9P8=*jFr&O5o^7>`v@cgPxFtGcOK)*dOj&!ih zA!gT<*XA~;;84X-r-t?~<^A!W(v+6jUl%-wTdU0=HBt&iS#Ef zkmbtW=lA>XkchH9ry+IUP8s4=pl`aF2O(C5yt@_^To(g7t~Eh8>E?ov*9xg-KObj# z14B~Hb&=;c)gW`wR{bXO-)IAM{&6pgG9(^0sPybnu4qbBn^a0??70`C#B)OydY&p& zu65-s-x!Pjvnu&vE<&ExYcc_|m>L#f0pK{c`u%Xu1Msy|-MX$jccap>n8bI%W-UUtWaVsVJx;;xH z?MW>s?=TAN0=raCx@-xbppLj2agS76%p3&&cD!$R>T}~n2JiG7r;ll~Wk=|kynFMc z6$be!pMsJ2kNuNdHn8&>9zGU^yr~gFoX}#QX_Ie7iki+GgR_~YrPwx1xMCoNqk7iw zy2S3s9Rw5LVmi*`SR2nGnniMRVhc_SvTKBZN-pBS-eOHg-2nli_(gukxlOt$oBCWu zLz@mMrJy@GXaP%NVE?_O9YgQ}^luW}W@REelKRSyLTozK&Ebr>Amx!%{n?e2scnxMSM`o% zcr*|{UDI%(c77&PKYp05p(LAy%XEf*T!>ucBS9c_a1y& zFeNaQ#z>D?Pp5~l@C6?oy~8sZU}IxI;&C5S^*RX4g3j(P>{qMnPinP$E4E$LLaawd zxnek%yAhe62RbqWgdrq^ANpD6_~aynggAY^(YRg~;@v0DbNvqNboym@YHBGwJq<@$ z?d@$S@9ezE?CmWRJ#%Duc*B^R3lx$242WOzK{1WrMjcw z-v5w}lckIWi}Lw_qDo3|mHN%`gnbxlHnWuTVAa-E_dYWdfCP^HQ;1ED$MadV-M-B| z?^qsqIKpekS=WQ}^2EeiLaAF}ZRSx95_bDVsrP40^RXUWeHWs5EgHQPk}^fGlYhI? z7ZShfA-TfX#^p-oQ5`+#S+9lSo8#jTvz$LL94Eq1h#qt#kt9MPaAUF7$5v}~!Lru$ zkBjl^|Gm>9vFC}z*(-*zl%(`RoYGSo*q8FFDMYE@IB%cY_Ge7}ISA*k00RI&q3etP SUq&PV0000Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf^Y=+aK~#8N?41Q* zRae%9UtA%$J1vFMLTQl-b)k;CL#Na6e_T7#&P?6C6!!ojxVy$(2np`QpX>V9J~uDD z&u_end>mc+6%NII zjAMVe7e{~B3kQGQ6@@=-hrAy)M%Kg#q>nWrWwZ%NLrh2=VM5mUNbGy11rGhP3r_y2 z56-^!C`$kR3{I^245!vjLD`N4u%)kq_dqgm_5ff#1Gvnv@_gj{c^2AF<2lMtRp;xK z2R7bX;Idc3<+Q4wAU{WbuZ<7f-f~_$`MvxEFF&E`z496hAIf#T(6zmJXvhCNgf$&z z)+VW6sV3ov4sk)^le2!0gq{e9#SzcO7ou-_sdb5&xS?SC3fSeU@EqxOw z-<^PczkeFL2L@vAzyKr;AWT$7e-m=4d}`l|ChQ(w4||5kP*K=BJPe7$gONNUK!KM! zk`f514n@|eFl3AhN9yQEB#n+h(x^z}Oyu`W zAcW)jzA?0%w4QrM5pF`flR7w4LJic?>bVsY)(F?nz zf|-@|NwaAJpn92@1=hn;9y4!PDcz@l{hLrW|8FSx-IGWk-j3F%9u5(>1233RG?12! z(BzB^K-!ofB#k3jRGK`dQbrO!TDYW<{2R4*1TEx)BFveD zHJk9}jtWNZ7(zKA6#0|Fv2St&l1JB}qLfkyWy+`sq!9d+k)cXCe7`80pCO-vGMG_FQ32GMK zmnCr?l|mOag?~>IK&t*Gu!-f%9TTSD(-eSAeviB+Ra9j$Q~3F*e1E!FJSvxe+sEe% z`8lH0@lBCDrU87oI&GBhNlUOK5>b2WrFLA>zsKM$e6=ka)y{1xS#Lm-s6P&N6q zc4s!Da?Rhc?~i@4`^6X(G3Giy`UbR&0;48smutL=;dGx>QU`CO5>pw)o!bMnW9 zE9H(2M)v4HWYWb==ksau8oqY#SWOAzcurIj?8lzhg1rwFk%@U4u>XID%;r<6wP}BsXu=TX@goJ_k}Rzi^X82OlL*U zWTjVDNFIyDq4mgR<=)3QFGo5-Ml?X?h&o6c5sG9&lEj!Su?h@j^{8yA=u{4s%h&i- zKrjo&(z?>>Wzh{yAH~>^ZfhdnvsXal>-|cT+bTe-W5yv7N_j&gk;_}Za%hRO21jB) ztz14Ej2wPf8b4Dyes&EDQ4PSh;cO82J9iN_iBIJ`3;5bXo_`^~BcH$X0Ao&ZXOsHz z{exSh=&$2Yx^5wy#mAIu>WA<`Al^J~Lin9S0JPa`sI06+MMVXU{jwYKCbgzZ7>&di zg9#n2)95fHvchjAa0%n;A#r?tT9~@nOAEG(7I6y*XHDq!WX;^wi!OI(*R zDwLpvBXKA-JXA?KWs-*mF&+z06<%CJQSyrfu0LbNL42N{ojiiCp*2bw7fkC(D8~mN zgVrjIabwCT={2o-9p5YONfmcgL{Q{8_1Qc>v7#cem>E33ES_Hu&o7sdi5n~pN*do& zFq!a=2~^g7Cm-+R?JhPZyBJ@JO*p%Egsfx~u>Q^eQS<*;W_)&pKrJE@dYnM8d7H=@28W@bCA)zRw z@`eN=hZQ)TN+tveth{@8e>b5@pp{E|nHBk0jd1Ait#I<4TTuL2SCmib248&Viz}{U zwY*C@RLirty;9|jb|{_r?|QTYbHU>;O`gh5i2Q{m)AxlR(>x(Zx25&f%kJCr@Q`2 zdsr6!12|cz3Q9bDt5ZA;mWIm?j~epP%El!H$zoBiEN|o=uieSQWC4ns>vQq0yqACa zFJbt5521kPhfpMs{BlWW0n5(9=TA!yrk6!+HM15t)R4nj%4X$jTztjRT{!UmXsjDj z4?6}&Abnh8B#f+&y=?tONdzaIu;q*oLpH5YIxD0Ml;@3NJVpzcGlG?Ncn~dLV6`#{ zm{=*P-U>N~g))ub#maxaSfNg10SQp=M zQQ38}E$Uh=YwYbx-Zd?ie5<|#Nyy}Pi^a?sO{>nvC~HhOe|w0s*wWdQN%vUXSaE?f#{?sP5*w2V5lH0YZ7&eS zG0h2NeQf9-hAq5*^oz;Bp)Dk+3=XGTjit(1B%GwpD&wgZl#oCfl9jTPzA!ic=97s4 zs)tO(H?Xk(TMX&<9zr@cQXc0>z;t_AaJ(;LSIPuB+yY%u z1gv;55(!VS)ux5oFYe@s5bT-Q9Ep6K!4_RQKe9&!tKQ0l=h^b}HixlO_P_w-4h}*- z-N}4fLK#jFOCba4(leUy3lsMJEe7RZ5wfKZ0PCLs);t7PTu+qG>x#12HYi`zR;glf zJ5(;A^`guKMO41{){Dv-e_ORIOFJo<<8G~1dF(AHTiB7`(;lS@+o5DZYo+4(EtSl% zZ3%OGIG5Z4*Wyla&g+26sjYDK(}pjp>pRZIQ@T*V-H*F#6fg5S+O!@?2OP!C6ey^1GENt;)Sx=8oVa!wKMcUJzczsV^IL(rJ%E+HY3+K!x1uLJEAEDSd3QKhP^-Er znU~(JWLE#Ez~fIZ<{+MCv}58O-pz`nHAMde=BhOcd1EhnGT%QmkUEc1K8x}Ybl zi|&SHNq6c_SmL`XS!o%~OWUAwQA?CBq~^CkC1qW}_bzPBhT}f?X5WRf589&ePccY+ z$%Gxe9-9fFP?UG>;v5MdS z<9iRGl$*GnViDCL?73KE@=)9yiTn6i9$LlC$=-rfe;SU=7b3BV(42bCgfndI^C!k& z?Vw039}q?tDuS&zTXR}Qe;kxGiWZLd(?>A&VWpA*c5%`6Ob$TKuj}H}JB-0*(Y;*W zmzIteZ)GpImfZzsY!|o}cZD~e@!hgJ;fe188!cGn!nP=#+Y-)YT?xzWaKv?igU{Py zJHk4@J#2H^!8)fcJc~MARPF_x;F^DHwVd;Asg`3dU0!~cYk{a8oD18)zKCvaY%>Dc zM9IChGp%4J*cQ<8&TS3zELum(GMf<2X-ybgsP}ndJHR*p7I>$3gza-$?{}J`_@9lH z%PO5z32cZ`cs`kUO?6PVgF@VZ*jnt~1Nx z`0t0HBy}BQLn|#F3(i3lS#~yB$Vz%GHjhk~@G1~hJnxnGP@>E4|M9(tP+CYQT~8Go zN{}G5NyIKQk%iFH5?#>cIkFiAuMNVE7wTZos4&&LnEWWMom2u^II)1~V-&JELODa@qwz-VFxSE-iam@{5}T7?=ZGn_5gge7OuG7urHydS=tR&T07h7 zyWm)RH~)4QJWIO4wTPfCWQC8t4W78pg!K-B+70#vJ(L^^3GAXf;i8pt$K9@A^)9=e z0N-;_+2`GLj%;)J-Bq&A>BjTpchOb#5i~C$_bk+4bsg-yVC02#n)3y zd4JJu1h^wDWPLUojR|W@eokA)l5OFQZ3ow!mT=5y0q@szc?o3UZ$gm7SW>K{Ts!IL zkr?sdkLc3!+HT-Am8o<&6YHv8*9>|aMZC881Tk}R7`74Ol@Al>Up)d_{&JRCnKl>I zEpeg^UXNV?DCMo38EIivocR4ezV{GH>nN5`wVnc?f{m0;15hV z@pemi7u-XL=rS(rp{$)_`MI($BLJ+(BHQBbgpwWKTRVr*(z+yWH~o1%PfBb3alkJ8x3T69N0_8{O$;b>G8=P(j%B>FATmqmJ{!IvP zh{NIYsFqRKQ~yZe@ClhtRhW{A^!|)L#?(XFq!=~btB8dxGh3urZ!cZUl!;+T8bd2b z5Tzo>m|5nCKw7{cBn=5f?zk|V`fUr~6UKK79;7w6R{>M8tP9Fk(#ou*wOQRA-W7My z<)q^7r1j%-OZj@rzUqEhSKQ0^s~0K=VkNDjnK0Vp2`nMTp5{P8Ga#igkX0YpR|hy4 z0UQkhj)%Z=+;mals7^<|mG7`76h>*EnN<(IPY*iKJn_skFAEK1WXA`7?D=9E4*RnA_U6!!Q3U@6_$hg^CES0%|}94?P#Oi4Y* z*xW2r$=q~X_`m$!>9U|SJr>7be*y;{VF6c-XGuY;86^bGzx+pLloXDvkKAEVNFPdf zijTMR`5h7m{yY#T|J8(*lCj;2Uhu5yMcD3vZ*@0#S9YNVyaleMjI-jpDGTR}qf1GP zW}{`Z(KWTk-K%6VSpbngeBH=hj*bW6;S2=U)z@AYTw!|1% zw>5-yO*2^H7#GeboU<7V&g}v3{JY?bWlXz-ZZct&n6hGiJ;t>4Ai)cv~P9iFZ=^0Kptq z2NlczM(U2KVmGs_g~Kw36goka{ux#NUX=4M#WE7<<&(DWho!vXAtY5acQ#ZyENXy3 z^>Rwjr!19m^CA;OS-o}wr6@m^h|(#q(&g!l9Zv^h&nuA%zRb}wY!IM2Rn%+|N(wt` zq^wei!cMxWYo63*z~ujm1^!V-w&*<>AJOuy>#g7ux6`^<#^1Wq4eJhfJb_%%yQ)X? zZrE24#?_4B*3)uqX6&`K1H9YY0m-zYskC&NjexucKoPCdk#OJyE#0X=LolwX4usKK z@_ce5fs7a+sUfhtDX^UudW$w*X<6J{xum6Yo2kyEvbpV0x!_j1tX&kW)&+EdW9bSn zYRlVJu+Qgv<~D|TP9vQCGzRWjybkm4gyq9F$oX*~w#ihu{)CL)NZ$AeWQ?RI!fP+R zr_wlP5KK`zt>?ONAvpBYj!1pJ8Fr89317lOR)ABi2QJvzE=z~EB9ryOXD#JjD=~B_ z@5pABKiv4ojSu0OL_u> zGlpB%O+n})crtY0jO#-X`@pt{ZYEt(>)P94+jJ{jJKE6YV+GEvOW;_s_l2^evtl0> z@aPsEWraT)1RUdKKS7B*X#~c#l(?_rwjQDm@Z5?7N}lU}{svJ>G~9cmVB1m$<*OPh z7qn!4M_RtFj1Rl1p$x}@mT)d?1$QiCM9Q_G8Qk-l!o@h!xqz|b9J;HtmYx~y;rhBg zO5bXVf?o!!xwF!%nkWq;%R?H;tdT*ganvS01Y^%nJ7EQ5M;QV+J}w#w{iAW_%OA0E zKFk{6P#{Vlsq_sfKgnLo2aF&2NM_)C9}Zsm8~cz8ZSmQ7iP@^jm6fS3Eh%n?157lO`uz*uX2O@<^q-ESY+JwA+ zG(g!`gl{RW-pU7+g|jW~&baLklrQOwO1fg!SPeeUsy^_pp=-MOZZ*bdUqSeGw}2y| zIb6w&;LRdz1+2t}XyF7f0Zo7tom1JXR9N-+ddhz;{>O5Ta<0{JCc!+!2BnBV<}z+g zCS+UNz`Cj}D&u(@E0(YotaDqyHiy@OmeMn?C9tp!u&5pX-VhaY>!WgZ0|g`Iw})?b zTiCvAfztOIB7HKwlBxyA=`wGX@wr+vIVzOk(LH@S9EX401Uvb+%`cj;pRbjod76f@Y3pe#0fDULPf?# zWKC?TrkEvq~>%=}246oCDIXo%vsZ&d^0 z-WB)5y{tFPi@U)b-wlqnJ=O3+)7KGp(tg6GzD4WHYl2*?-w>_}nHZ{EAT-pq-IL5>a znxb+hft+3+&e;T#pt`?okJJCGhpeBNu!o_;UY3!-m`!g*V#I>+0XV=iJ1~&X(`s&G z*>0a4hLjOe$bKpu$3OoGeEBO`C(O$7nFT`Cabttqca(Q-{DW8b20w&4Y1!DcX?a^L zaC`Gn8TStIhWEwMz9tk&9Px5E5++8|?F>iW5LuAaM(ein9$@2rjD;Rh5SGSuhJAH!*w^tjo4dfZt1Z0Jiso^ zX3%AI!tD{)qKpN<3+eBTRDs_4_GK;>B7(o%7A;SEI6GMh0Jkb$|`2E5L2XQ zly1*~KR1MRN>??&jSNDN$Wgpf1>0C|-DRD(*z}>N;2Yl=Jx82R)O=hc|%~)?g z0X#%2z=|r?!XcHB6%Gv-L$Bt{@JO5<7=mOrtQ+Z?X3=V@iQ*GF(e3>QTj^}p8HOo74_wZh9Wz(tIN>O! zXD=;W1+Z;7j{STH@}G=RnaB!QP@Bg#!Pa4sYDT{-6_NpASqrCT^^Xk4HpyD{lL)vz zxr1@vqrkeyfz|iHy8JGbFTYcDwy1&hrFXL;+^hbk4Z`=}{obr-GK@f2lqJ(3^U&IP zXaziHSV@aw7*mOh7Qu=cq5u@DA%H4Kd0%t;G>KcP{$3?RFs`AhU1d2xv2sPaTgsis zzl-ZEoi<`AkI`ZtBbZ0R31%qD`5SHY0@RqLxU5C>fXs$)?P&zt*2eHHx{YySdzfdo zpqj%jQ}q_KB!qNZXE#D=Yy{5C2}Q}wI<$_h8Ao=7XKEK5`&&b#ylg`9uxOb$ej?1?R?$YnLSatus7T*?}d-Co@@1;a4^=BjurPBv3{M@;JahlgK(~X z6yEIwFSCu-%AckTD(*FvSWAgF_wiivsY0pfv|RgWwQ}S&gyJAybAXLSA#V$$SC+TZ zJDVE@JKv*RNQvi8u(1%31b&J01RSI9yn^zk*N1IKJ(RAbRa_`T7ai1eI0$fao1=6_ zG_3O*!Yk9_Xc=7#o5RM~(mJOx>~osn@SmfR`IA7^i6$#Jb`K1|E?KF;vXz8aS-edj z7KHrqj4Np&cRtES_y76;iL+@9kE!8h>CXe`p1Mm^kBuy0E0H=Tq}~7rOW`^nHW^;! zh2aIU%iyZajG#LqoiS>l-hLQ`bN+!P!`flzfDjy?9EJUKFJ)|RJAsoqpfc@D2HGXd zSk|}ztnJ6=C-JAvdlb(2?y$$*sa6h1?B`i^AG~WGfOAD3SmJsrx6`@iPPjLBhIe;+ zAf2vfKCK(A8W!c;Fq)S*rD`g{0cCos=mFHbzl_)RY zC(?R3#bqYEv}PW0Cn>Lhc`Yn)K9$RuGnJriZ3=6AQ<&+JT4uC>V`dxJW;a&Q+2`?Z z1W(*mk!>#HMzNS*w?pZBEl}|5NbF`zznf()oox9GJF>*yns@yVmcn&D>?OP~4z+g7Tf&QTR&1lp znx|!C<8|^cgV+ML!&ZVNiH7z`?->gsjRlhbave3jOkB_GaiJ=9*vP+~_!nc0<+N%G zdolLA74GG?!L~#ez4j!O4>JaQm=N9%TRb7$)C=xiw-G*>GRDgxZkbe0x|hEFbghgk z)-{w_K%-kIF0k)pkb=-fxCBmz04H!#Zi1?w=W`CeR%BPbniL`R%4Z0Cg#qx@S5$I6VxUaqy2(1dhE?|{`&rdlg8fffsG;PEu1{%I)Eo(x0g^C2jr>mj{l zvUW{!pvWZPWX5|kBVVRG?IeInFR>y{V=TA!F}j!cz`eFNyvuHbcg0=sEWeKy@d20@ z_lAY;r)y(ZU{@FT(&-xIG}gxKsw%DO;XD`sx6E!)*5W#9AFYVQorl>-9A=}y#zD<+ zIl{Q?B%d#!Ybx4LH?xoxU0hXhPsNf`V)3LSMXaCd96G_zI~mRQhbbTpzw-*pD-D3Z zVG|c$V$0mR@a>@m+|U%xdCg#*)d=Pp4U`3xn9)AJ6)I;nNAWieQ9dt5^{RU2wT5R} zJDh!;ZYRrGQfg!n#(k55v7Pl`7aymMV;x{ay??BU9#b7;ycmw8{`Hag?pQYVCpEv6 zG!{F{S>qh=m9dq-0S;c3>wDP6J@9&At8l1so=Wl6&mKVPEc`iA;FC8V)Td6ut2#;8n69m#f z#2~Sr>fQVnEY;Z}zwa>LC->#{1OXNZWk})xU$6VFt0CXPD0mLg^2&KjBj=wfBynyY zzkeOA-SP%7$Ht(7z?tV0&Uwx0vNl86^d=}@7=tr2!%#M}4txtFj_e4_dyP=|OL|1o zdrAP0PiTmJ!|Ec5^+2tXp>>pu2uCJ2!Ty&*k@%Pig}?3#n6pvhus~M1Ic(C`t^%Ix ze(-8s@58JHSKWl~goCE=*iO2iEl@rx1i8GBDPzO1ldasI(LqRKJeWKt9LYmNkWB~+ zN73bAd}#mtPSx}2St2u99#9t0yrMg>l(_;itJ>?^~rgj<#Q(k;Np2(={lPQPO&Tp8Sjae zJI;zN^HI-IB~%$-e};|I30llUA=+dC`OWhCWPo1YYw(>{Rt>w#R!zfg`#vpB;C{o3Pk7pwzP!xVTo-B`@)8B%wxmJI8nK$U$(%pf6Byr z6AnuHjQ(|y`dkopv$5VaUK{vN8WM~=)}1r-pk#lK^<&%7TS#D|uNlP~!x_B+AoNNP zjJTm@x}*D7W8H{`YRqr%leB`b)JM)FNlF`z)ZwxhLy+p4&LNB`;{uVui(5JEc9c%< z4DTwobXy-s<+2_qU(yx6HGSxo(h9D99L^2B;n>;{ZW(AVkRC$DCbWJsmRCL4E|vJ8 zSO>a!QmN%{;yxKxtZS%a%~)|7!Ivhh9HLOZG90Johv4uxCKP?n%JmN2ua8VP{FMo( z=b2ExJOZxG^_07ZWX4tL;c(`LGY+h>i2O}rAwAbBCX~6d$9Y|k%jASGxcHq8y2fs~ zwgRD8?*lx)ES~4?2w2xd!?K7_&TRtc>=r1U)(}p{kG}X;u+FEooEZ)4oJJ~Ebj)dk zk}sQL6Jx-gkCtSQzmR5+y=JHI951X!5f4^ zUWMy>oR)54NmH=rLmVDc2m9G#Z5|nbZ9iy$EzbmKY1!%L=Ml`j!F zMN$b^Q3OJNFQSYI%1}UoxN8O#>l*6Nn?cC_9e*?3tc`Tfx4*!6h}S50a2*s3ZG<#d ztkkFJqCdx5KChN&$>apaMKUKdEtY_8;&0C5?>R*f&hj_0;Su-HDdT?z-+4tPjhsNA z&+ptvYj}W`@d!PUBlJ4xI-6+`rL#%7$VIe@2~CxIS~;U0%D$j`I-?azziEK78Ek|I zVdeZfI6EVPlKahYgs&A455F9W^yg*nDc#h`TIWsSs8DQuxgNF-2u9&JNk|opq-Xi} zaqVE+zT}1(N4)9~svj!TiAos+iw~g29*Wrrxo}Ya<~R2=iK}dCDY9wfOE;i@W$N>tRishy27=(4=l@{ zU_~HU7nMQ9xq@;XqziST9-Op1($lG|uJmHk8aVP9#}ze%kCo6ycT*}P3U9@!ui7E! zmB!fgXjS7gG(gMyIY!dehcPY=#oi$S*v)ITjSZ5d+}JZR7>T1JkTRw&(ni;#8n7ZZ zL{|S`6ulUZJXX*Xf8p;T2scn&az;f<$1XU6mb{#$@Pd-z*LH>dxkRjO;=KC zB7nHYC)n_vqK<^XksXXPI|6ZdT_8$6Y6Qp3R`4up1IvO&D4SCUmO1rdpTRotbwgNY z^ZG4p3Fp*iIKO$hSf`&No zg-K05$e%>G*ywDaMcX|(3W>5O#bC(_5TG_`Il{(hKU;d~B`zeS`}x{^ycO-IryzNA zj_^7jq4mrf$GDk~cfU+fX(hI>p*!>k7W-bhxu*$UNfUK0B^i9~Y$VK?0tH>yiWu0X zN7djrT}i3Q?-Hkqdn%0(t)@Fa5Z3fiR3t{gzN8t-=hQ>RtomxIo6I@2&S(Jhw0dyK z6u7zd)f`mktfsJh))0q&uZtF?f0zSB@(t8SY>u_Z_NB7m%^ce!5}@>$26CUP_+dDZ0tqT48Nf zYc07`z))JrDC9p)JsXLv7ebLbAP9T- zzHPj2>-l+Ws2o}b8C%=V_hpZ#>-I`>wG-41zUJtA{Qar7z?sbREDOO20g+Y`XKB5q z$5{0apZ9yNwA5@L8N1YCRIkLTswbEY#G!idBsW0$ns5})3x{JiW8*ok;F{3{wwVoJ zpWgtEB~4HZ<1*pEt$vS0j<}60awJf5ylBVKG?E|2YRaHB#oh2{kYOHGYdKkNkf}5 zq?2KYKvn5d7|#^`uo-r+GD=GIeY6Myr6iy|DFAML9*#8+qde{&U~OL|&&oSk5ce{e ze@x|b@$T(Fw@T{`RNeT7;OQk5?JCOO!k?60*ASSqd0)o*j`1Ax17M2{#b!crYHTyc zzYVZ~aAf@|0wr{tj`b!$<3rS@EL)!nLh6W4IQoxKC|&qAj%}HPyd4X0^w1WZC|rl) zv?VCn@Fh-8`!fpuG6Kot?!(UKZ$lz2U+N>g#?QA#>WeXmV@$M}F;l^h>83qFuj4m7 zpOp5nB=go90{f{Dc%(N|u8p{yhl4!A4xBxfPBJ zQ+aMA=Z$Pdki%;$6T!C+lOEa?Fgq$W15srWuhjqsf9=&hEaHmF_RA=NnZ9V5mG{fD zux3yTw)zcGK$k0>R!>@{{Vz8~>cINQ9n=V?UuudJ>1^PI^v#l)FHh0^ycg!Rw1BJc zRcR%#j&A4D`)LiSH9g?j+d><#mdbNXW`)q=d-?< zcv1|CrV}ngA`{LtheV?2rH0t|qcFr1n(WbykTIYWc8@$+($b-CZDu&B2{_#q~$DIy#hE7rlR!ok7+^sAZ2hQj{K;u+J9mLt%B^KAxU{t z>9Ve;kWdGn{k$HhW8jcpV(Ceh#^b!-bHycdS{Vnb`!aMPxAMJWg--;)Tg=;&QS@x; z!@V*Z=2=m&(>1lttB>-z(I}bD#|s<6v$!#=j2A1XMZz+*9xA_XgtMR2RqID(UyO9t zGnwkPZ*(yBj|)~yp=732KHby;UXM*f>7F0mMi4D3J&m#!*9b%Y!mE3z(ALHFg?_h3 z61F-IW7CAzNRghbQT36-z*#m9N&P_tQW^gwJQ;?w<8MLs07?F1;ss@Fw~SVA^}{M- znPo*UxYze(94N_@?t*3UQ*dp*1IVtL-9pPFs~J>WqXyyiz!}NFMY@9W?vI4MzyycD zCyj%2%V);m^pr4c8cz!~G#K02Dz9KgNT80h)jl+|1(v;ZKaS_E)ZBPE{1roblNndb z-7-o#zQk*ir?vQ-f0U_N(itZ6aOFww8JybuKKA~!EAsnCpx`OSOw!BxlR9eByJS3z zXBl|6&<)*3D|nFZp;&N{!Ed^vIx6Kv==Tg-Bj89^CzIX4l!1tBP(6$w{t zQ#j@}RXwQ{gwZy)4nd5jYs%PmW(>Tst#J4?y6QjUZ{+WkouwpohV-zjOBC zb^d+*u$C;NbXc5{r-s+D{MyW@;jg^9heU%?k;=3t441UvT78< z7IcK=>v|~uJOs8GQSik!gmXbX<+_TC>Rr?lr{9l6(hvCi*x03y48tB807>636aJH* z4?xySk=RL3Y_}|j`XTF+BMY|jW144i4G#XYt9;lGsHG#)VyC?S3)LwgJJjaW1(KOC zM}{;~Nqp4gTRtz_NoUek@GR<$Q|o)+Y`lyGJ`Ak94_G8gckhEQz9(JNyWrl==Vj(g zehi$s&EVMI5Z+^KImO~gAxivZ2%cUn=&Pxd5%3*~hNqx8kkcI%OFCi4OD1e!fgc&& z6x-PF6w)QirFGges6HG?vAj}jhsC{A47aWg z98;UY{$&$*XSRTEb`v;fGKQo}>RMQz5JutT7bcX>;&&|XfYJ||B8d&1wwX;mqz#iE zQ@W@B*A_|7hoE3Yv`VY7SsKRQu&!Cp-~_MNwK(_-Yj;Q%50!*TcGoFC$x7fNbXr1Q zI9%%QjP_CX_Bdp|5Kg~57&~bG)5o&%$-aJc$7DU2WZ9A}#L|Bh2>Xog!1kw6wz4N| zYwm!3*}cFD+0m#sVSJQv;InXV=4*0UScV0AIg*N2B>|W6cM|wJ3PkdpT6u7QG2X!l z-bT~yjnQHkX~_#&d2(q*(%3pDbOv^?@z~ZAW%1AO+@D3|s(azx)(?df!f|k7BW$8u zl*R&=+$vemuoWK6-&S#u1@FRX>7o+=CGM;3p*BsCeHt|;9d^R(VOgEXz`WOgi0miA z)lkQ#A4_j^G>RT(WuFs?3W>$UlaSx1h7NeGi)1o6r7{HYIce++ujv((a#JaN!zmWB zO0KUP5Jtv`GaH~%hBD?ifO)<)ekg8g>C{m87Bb$8ZG*B8>mifBQ?{wwGbj)_V;ZX+ zw30{39+Sby8Weyd!=h9NR_33cWk{H!g;Ub9Su8l~E~V@5fc^Ao)wnsX(B5pkinTkm zL`-ajt&-2f!dBQBlQ7D}jfr=S~ac(m;<;^^cP|k``F`{*56x_2K!9BG(PXDtm(kAh@4rYBD7OHk8 zPNk$@B8hMoNmw*A1e?aS!qI6zqzhlFuAw*-Hjk$&&58@f#b=a|a^&iT2Fp>(V%Sgy% zNJ9$z2n+fs|E@%r=x79==XZ(~kX)Sk_2^piyR#d?wUcq_j=SO7au3{_?uBdJ18}YC ztJW;KmOTc~7M}A$TJjD3vE?UG$Qr=wFj&$qYCUrak2Juc`F|oLr_}XR7O>2&cB8!_ z!&G!-^$;qqrE&DyG>e$A4LirQMfO-Wh~kc z%5pCpy%L^C4XO#ktQc6LIyMZE$? z?IGleIGkplmJSs~eqb4W^QE#p=@C}wN8q3}^vJ#q;{Kg9!9{@1aVP%+$&40} zbm;g5KB;U{!K$X0$#N!bPX}7VoTiLXIsv=sI&Oay*wPQ~bx&(r+Yg@APrtACKYnI))-PW75V-IvrnGrRsc9 z%e-oPc=@Sbmr7bL07{E4w;q0US!uBA2x@S5q}W=sO+=S4I%bt3y#SozQ*N2+nDeBBL=X7uH4Dv|!$k zVyqYi8?B{hdL#Izw#12lM5*y-nVT#z66BRNTJ zcqyG%(i!6_k?hefT0xeuxAqXar7T!;1j2HQ9Tv8d0-*wuAFt+4o+-qN2Td%aFf~yk z`MF4Bu*}ZPZw6OFV|dbN`S;1#A+Nna$m?&XJ8roac~fhE&?d8vjLYn{9VCniKnCmS z;qhTOGB`}t)wKV6gmo@kT}QcYvi*YB=};*+uf)M$P`g7V4v?(8vO^BfP<80hwK_28 zci1(&m70)!MFu47Qc`!LqWq8V8ijXYM78 zt=8X03wR%#jI-1#h%@36vGpqog6|5%BtBLuHHgjvSE(OlQZ>QzW!4AM8^ONyQ8+eJ z8)=Ex^OkVARz1Q-;Zeq`ESz<8m)G?J))PLNPRG|^1D}^3-Hi_tMm8pU24UO8I>@1W zQ!p-A#eyjVBe46I{7oJk%x0?^-m{f!TYp=46-y=4fGY9Y9s)8UB+yQm2QIg4C8s$n zq7%w%aiH*xNvx3J*vrNtYd|!z2ZZA2hb>@R--g$|CF5Os0XYrmj??>~1(YR8*J5sI zO%SRS9%p5&F$T6Bp*XWR2<7vmVV~bfO>?u)t&eiLqoq@WV3`>P`>Y69r$@puy*@m% znxNnpA;=yVhQ#MWkvY5}GA7kS>i8h!(K_bzqh(~hO?WX9$KDzXROYjMSl7h@vf5Xu zYg_xH)(}cPDJfxvk=i4Yq^tYZV$Fy~$fvs{OG?DrNt$!%fH^q68FGi$Q)4!{zX^kL z*}W*6dk1_n1hL^^m>1s#-#WUYJD$MV*xS`WynA;Ccyj7$mP)J^-A8RO{t8qAzcp3v zW_@^5+rYc$Hn_KSXFPWgTq_3=x&d&leh#iRPrLg&;bDz#$yv}gsQV}2c_ z%4uP+%!q_{K~tRmC<4cSAFeHf8W^J1s!Glp$yKYS{1M1~th*bYqUB%oSGp5tA!E1F zcBw+U0te5&mIupGiuIU7+k^w=GuZO8r&-ZLaGVux7qv?H)}h$T+r5tkA!krsl_3lB z?uKo{18}aD-q1VYm8oc(AA@)Gy(pCgyj%Lx3f;@tq>gff?7ZOCf)GN;i!bAWl6%Fd z;4Vipt41aZ=QV^ctv$TEyTP-mFQMzlSnhecln-elWWIHeP&~g4jQ1$-#wTbQ?}KCY z0~F7dR?;c?ZPq81( zlsDp7au*xNJ5aIW7Faj8geRTlAz;XAf1_)9B~>GYq43GFFgD2E;!rq>!f{rXKuryY z>#L@ayfrF)A}ykW?x{d%pC{AbBGvGPbzwN{A4FrncmU7IoMmn8rtHlxJ9=e}q1VQ+ zDd9yEwhn9#XL5on7nwK#o9eEq^-*gGoz_Zt*rH0Og2!2j{hy3P!80b5jW%KDh!)tv zA0oX@G9H*SA{=QW16BF~??TCZ-3LxqT*pdUomE|EH3;0wr)eD@hh<%NICi!9wlFRv znQcEae0ZwL3Pri_i*2r6$xhBQoY9u0)|Bt43g z(tAx$Ma7I)Sx19aGG!aRB*`|XCdOwsf^BtO6i*L7H&I--t2S5v{kh zk|e5*FE*M!n`-c+Ar&c0>5+K6=A+gSdVNmSmCiC`E3pX6`iJAlqzL4X2tfAeXe5pe zL>en!%8&q+o>10$xxTyyXTH8o#ZA^_z2RJWH?WqX#gQIG`*K>BEs}<5Int%z|%_> z9^1dZA6xq~;2#~NAlx^E0sk*(C1o40>wM@TOd8vu8bV1asUTd{6`tjHs*O-(Uq%Jt z(hh7uo5QoF5uAxp@MaS{X#}hCqDm*1w&#Yd#yGFMuC!!30eVQ{B}vXzl^r}k2JWrV zs8}2d+pH*5POXcIX#`W{IOXH%K`>8^glk4KoSw?}&Zg`7Wn&!uL#W#OLWXM6`TM0I zl1U{p?=)*H%T6rg_$J8y_!qop7PW1+%ro@}h>YW9CX;xB@<@2lg2$Q@*&ukJ^8Dvh0Z`maLieo*qy1=>g4gz?m24UQ7bk!NB%l2q1Z-sM5OUBdD+V!pK=+gGvki9z$ z%Ir!?mO{}jbrsPPOPR~GHij48v@qDW2g5c$8fDY!qWqi2Dz&1MuBdfp0IV}2;3Aae zGsD$jzISE=xIb@z<9`T33V*w7t(Q3}nqEr)k_hESK9@MLE)I^akDW5PA|+MPKh+AB1If4|w<9LRY4KRp4Kf#L@|b zyswx1jjf~iP`Db5MhYX!d|jV#Q6Y#3=+%rte9-E=$Q&2J@=2xLT4)6!dOnF|gV-O6rW-6C(t^+(204 z>!_3%lBdQtvmsn_qiOkqV4oER*SrR>%&Mn4X*_fJIdfxB`F;p;WC|baYr{TogJ)d3L$&1v%dt&nS&XCm z$>8?r59(t(flQtdjw}|aq^RFYVIHl{;`?A<)(3XRe-$fxv6a1B?Gs^N{s1ag-2>-N z86a*>00pk93w=>lK`8fi@Tr`dvK6$%h6OS3rFT%)&$F2pj4_{YO@F$-{oz^vJjK{g z58yfaE_iwwfu|SN^~LGeIwECg1X9ICr#qT7I1Hy2{EOwJy0Wh8Q6q$_ZdI_^m)-{J z5{e)SgbrFp*K%rEC)na{fjO=t>}zNpcUPs9lydO*JYQ9@fh`Ku=Jv|GUuBI6zlbra zb7K_B7Db|j)=r52u-jx%B1BPN`l{WhVi;H8uF)x4H&MuJsK$UJs8Y}d*X!cl@f zKkJSHo~&d6OBxo2tN|t*9v6fJ7HZzuaBL))C;mnEa`mHHXUwYJC|O7gxb^`)*N269 zAIvLy!Mddjd^rSAvP820-Mp}dE{I-gJ|}O_0g!Igeu7ufgcX7=5v`wh=Y4PyIOoct zbbANEx0W&4`bQOzS`0`Rl+abH$}RP6cL7QG5-q|sPFr3ye0u?jss!kgj zH>{i}`G3T^=Ofh2gDjq$tjm&#umxkIkT)_$#e-R|u(ewHs2T&r z=Dx75yqhq}r0n|vT0qzG`(az(i+()gMcLcED!6w^CN853e~zRVR9;slT0q%D!k6Eg z?uewsxR>AgkOs^;T0L4o_nK$5m~Gv|>N%|whR|#vlzsqJ2MsOedC;A&^P&5WHr|i2 zkGf;mkWi$IW(&(}lRlJg&*G0&#lPN1jSx!DC}FcNp*y;$laj#bh!Z&Pgn3zO*k}!1 zOS{9x@^vgCsLN$b?MCn=UHy(3NtUIO2}?aVuVYRDnHK{4ra+Xx8<)yjR}+@>i1AQE}MlyHh5GQ^SwbU)ov*@{7OA07Bf zOYC~ggyZjz;CF0M%f}=&hUyjd(h@plRp+H0Jj>c0`A?aUJ*gu$v6U#8XhJSeavee3 zJ1hnV2LxcpKz_w+*_=hQfEB9<;?};vrbhr-q7)|(_JwB~p)6`B1xB80bBL3j%xWQ-`CGx3ZMSKkFo z{B5u-Y6tfsx}xzc!<8N3pek1IzF~P?IaydwzTJ$KF{y+n;+|G5LlaBs+!28C1$04Y z)PZ+qJvgT`PW(Cwr@yKP`_ynaXVV(eLYB^mR_PS6unFAXMC0t6w15n=c8;%ujgtbA zJ({j5>vzVu*4WATP}YI&9bO;qjZ+Dpwv)61&r<=fyX?wAs1o0}_zkk4RE9;$g6 z$%pw5!;wEZRHbDo7#o4CAwf#AV{YE05Nv$b#1^KP%8KS((-p1_EKJ6Nj`;iGTY4W0 ztTzjh5N^K>$gHcm7RN=>v*ypu!WQm?SUU##g+Xu^hNv}tl0jR|lHkQwE~vO4lB-1G z$;5l$Aw>4L@dQD0D=#G9hNmwoqxa}#^d7xjYo7+D^hSbOxEzD*fdOitgky_eRRwpw z4~a@$E{SCv$asn|&xj~B$2aTwa1{Nikpj&x=hEAi#0vW55*R7xl1|lf2&7dyyD*Xs zk*qwCwU;bcX<%ugEQi8iJ=Q?$t@dw8AmuHtWR*L4C8i}>#G5K=49A>MxWD4}&2NLV zUxm;WjZ`Tyq*F#Oi4Xm%oEDBFe=(_S-g)DiBX?wTWU-Nw1Z2syhBA(rHX#f-w20BRo7#?A_JxxczF>4D zQfc|5D?WiIDLdp^=k{b_^`HybjWOBXw1)RHsHZhrLRU1t7aW@i%%1i@PNWt?NIsFH zbSV!7D_27SC1?4`T|;XbI%4>khpawLQJINSjC1tD-u zVM8##If}myRS;Td*0~^r0-)&Z8}#meO5ldd+|v5=^k{5o5oI=w3}Yk?mprDls&9^_ zS3wH>=FeVviKB#<0HNmNvbM0a?6ic+GM4Q};Xj68+rTiS$>8&(a3s(L%^nq^<{s{$ z5(uZ~vu?1*_Jn)+-E{BnrgiEA$BKtwi+fmQN%JlzfO{FYr8l7~%8Tz0s_9zDPCgE? za#cRQEU;C*Ut;yD#-kL3@}B&?Qfk}grkza<@u#QI6EM56Ff#+b)9 zYoi5X0qq{m)xU&;XIRtW(&`H76Ua~Tj(y`d$a}FFcG4%7$;e{)q!%Rk0z%cuN*h~ztQtbu{WeV|aKG6S&SiwJN{)B}NZFTmsa8!8 zdKUJ8b0Nc!g?DO094lMExs~o|DjQeX7C^FqGXxRuMh4tPYW4mRzUFu%t-Na?w@TAN zix(e+^66oW`Rb_YY<9+gzS&J{hHxs4!IXN)|Aq8(u)eeWQilf85{9dl`3WPUmC?y~ zj`1Q5(^;9&CTZ}*!@tA{-aNw^4v$MKC^ng9vzg^}7|FkU49A~ki@?}HAWUM6Q}|L{ zl_N${S0uecS7OFpkj*+}uRzagLb&!`cvn5h!jx%ggmJ^2@NDnER#9ffh#SIFQC5&T zz_@QeFCgXGAFNzZWdZ#cR|-l};N|nZGVs2wFI=0Xv*igmRzF3T_bIjF!M#?-@{Hm0 z%Lp93e4C!RsEpoojtHULN;-vogCmi`3ND$T6JKFWEQ7n(`A|z1`A_As{m6Wp5RQ`6 zlZ<(u55TGS+tnIE`}`L0@)q$uRPSl!f?H9sh!%ErLtuwMM&P8(rCj}utHk#wSiZ79 zhQG}JL%F0*WktcZRMKBiv!hTpE1WSREwZG}uK~jHsr2aP)P?zzC?wKN-$_H0IXVJK zLkJ=bPtNc<*v;pXe`vyiCut3{;xr2=E{5;Yf7g%#Yfx8Fpm4tBheekW2oG}lR@SpN41Gi>jCS(4a^pvEj;NL$zZtE2d2R zz0QYM*5!EJC@IWF*3)4M!bHY9iO-vG_S25Fc1N9YjrsRh1d!fJY*#{gJ8bhi(K5D& zb8#EkcLl?f!a9%_%JQWcFG|v1RUZ^c-*quBN3!bPy)_b!g)%T-S3y`YpN|Qatg^2O z!s6+SD`)fk=G8~RZ)go!cA1O;)!zBz15q$2m~aLod6EeQGGXOcPtY2c0HurwCC~09 z9Q>6v9A+&w!dY>2odwAJSs%9KVQTSbK4Us>{f_rXnwO53b7SPHT z(8-w4CyAP90o^Mepw;RIUrIBrXG~%~UT~S|pvHAnQYAtr&$C681-#X*quh!GB!J#s zcfq~oK~>3RMLX6%MJOJpWO412$_;d`BAf=`>17CxPDbGAW%QnN#Pf3{55hLa%*O^q zV(&y+M7r^t9;X%Xs0jP|9%`0{8z*y)O$XUP|xY7L=G_O>o=5A*!iu+DD_ zM{EbUV+r@d4sgzIM+?=Q<pp|jmA^XRBm-T^jc_!timF8}Iw9AMCXh;F7# zTa(TgwaFxJr4vRV+{ajf7El0mu6}{B=7SXBTlXwAfB=ekf4xjOqh&MzPcK7obiyWn z)E+fxWU11l_&$_w#ppuKy|upGq3+!m+G`Y6zvZ7YNI~u04d3 zHLr4E7h0coYCl2i!lrO75*M{K5Z4~=d2FQT-v%>X)QXj~Qd? zAzMQkQ#vNArTI5;O~euwG>30bZ`jxNgLTDYu&wH)mJ^Be1LWrnrV~!z`sb>J4bPt= z-R`>Y^1CD*?+tL! zb2_^84QzcOTBW4SWMi7o`{i@1X2Mj-8P`q8vE!}`C8Jm<{f333#9i=8}Q<5HEuM0uw2T`7@oEb(78VK_Ye#e}qNMroBg^kp{@l8}h z;a#JHuzg^FS`>Ve*KXIqVEEFjVnfyWCW95_u=^x$sg|T!jS*LM39u$y{BXHs`i%p{ z+h!tbTr)L;Abm^>w#Y`F^owO}T*mM~Y$lLrKkuNnDD!Q&52cGbt961F*++iuowQO6 z%$Gd`CvTBOw}W7Lj%fR+D+tx}GfLc08Ho3f83};$d_f&}QW-~VBZTW7V_d0CJG&GJ z^&nm@gx*d4FDmt#i$S<`2tj-n>9547@i&>+AP}x&f#Ea7}^SKDvXu+;FgpSx-s>Hu9Y70B9qXzNH+bEjBx37;oe0zb4?`5V#9D|Mi5SY9rzzZ=(mI-^DJ7#X@q}HIGodBQ1r(D zHL+WkI>|Dpw26%M$3&^6dlDD!Vndt%^)KmRSXBRvo3WwWT>+O@%vlwC0;lR|xdaF+ z^186v48Faqd#iX* zlK0A5LD^B)yR$7XAitKDO)^_sQ!Bp>1JHx~$D$S4qBZhMBUXM1`O+E~+pfe~uy zmpNgRy2jV_klH|{{q|A1q2XGlF;=Fn1Ly*-WE>cOXSHPclE_Xt{i-d5)qh{a=VIFt z!q%`ZXi)`XQ+Vcdf@kh6R0p``wIc|vDY~l*nkivnJHDnBY}1;k?a)NFX>?_0w*lsN zU<^puX4kEjB!JSZCJ4<_!%;CU7$vg8Von$;ri8*Xtp!f}EkbR(me2B(JT%&t<%E(k z;r^FGvGSP^SikzQ8Y`3?p6v8CRE{n2Og-8n;IgVAD%SFgAMyd^@B9oIjA0J&3nUiL`)KhbzN3|s znGxSvlq=xTJ(Yd^WHPpN;P`fTg>B7Kur7NMPTtB;gm0rPLwfeAL+IN);Ns$IE(W0j zkr1BvXICUK-rB?XxoBXh8e2NEVNumpzK(}#oLz*kGxCN6B6&gx_6-Zh=CSn%A)&g; z5L)K7QL-**LjdWH5=0dn(khBv64orbm9Osz`@FWW&TT=Mn$YSsLix=4@Gb5DH{a)& z*GeUIs+iFbWweHV)fPfo=2Y@kpaM`pw9br#cUEIqKW%^{$)!t6DAN#Sf0ZPe!a0#H z>BL~Q;Y`lB7Jx-U4grzZ*&heGoxJ95lvVkotnoD*#}lw`)NN|d_(P+#nK3e<^%%|W z#<4*vY17F!TQTN)0=_l(p(M65+-rLSYadX9vsm3-iv`!;2VVwV2*1UXI8f54ODBxV z6Z7r!UYVr5k1=3=Blx!64)=y$aITiIKP}U>f6bp~9U;5Q?x-PndhsLOpqgAm$XWyl!N1o`x8_D&2z-e9)uKX1+OqRmxz zM=R&HRI&8??4 zgsEImU(>>vTDzl;>2**_2qia-xTKcZjFo3Z!84;iie4pvykyJFT7U7wIpq}wnzVZSvg}bY$R8VnoGLTC zgRxEeFT>!QPv}-WpvDD@7k7qhRZrDHqn0YIxJRuQbjh$pf%JH4vtT6inTq$s-Bgoy zH3-$tw)+@l=d^$;vjZganw#;YcWocF2-v;)QFvDOQvhOflGj`eLi<{t z-}Zi}`20b&5C5J~Vc6e4Pz~)A&U?4&DqqKgt#hgMIP&^MBA+hu&ha70p}U;;w>y9( zjjlR`0$#P|GbZG7nmQ<%V_Uuy1S_ zL$)yNV7#A47&FOC>YtwhPNXXK1U+T@oRX*41*>KVYliUPh$h&;FOfavlg70~=7>5t z$S>K&FU=g-4Ez7qfS@r>Th<%pOS;0bwkOIL-LBT5VO3wXm!Pbs_wH${fp**kM_x3% z1u8HD`jOxQj?7}+mGAocBDKy1uahfu6u zbv!6g&TkL%+_tEk(*~8Z>6*@OqiJqy*k-kaeP%N_82{O)HikozH^nwrJ*uun0%dD> z=hG{rW%bQ!4%xS`wh-E;MyW-=l1|?`KLRJeGO1Pgw&|?1i(-)XfAx_ykshKLrlACH zShQN$zK5RUzHufjf4VM^xkelg$iBZ0x!}$c(&&P-YC??(=2GRS3Z-rtnLo>*k$<$x z{nStBibi11)3k!awEQS)2?ty8{XeQtA2?JE#LN6pzhuR{Uf%e=goRd6x{(Q>N5*u- z?UeC9SvheiQdvb80hGnO?tLM!Z+j4~H3VSueekS#tXkf+bVDg0q4Vop2xS0XX0dz= zoq(VRLl2AsP3Kyk1K8F z!|UVlt9NUqP<6Q7ZY7VWs)@V?hn;0_&fbo6x=uO6VzA-G2*!ja6usXCo{jg`4B?V4 zN=|w}e#z>3zr>|fQ`QLM`9O-a81P$(JL;EMN11!-mu+72YFX)?iX@k)NToBZl4Mn@ zRt*r^W@%fe`E@>!6*FiBrwfo_FjJLNLt&m00yC|k$ig^r=L8z0(GkcV9D{>nB9TcT zWd>Q&s7UPKbv^UP5yvym&X5zM6?4hAbFJL8b`0vm|ob@)>vR8EznpA)!sEW_&rq2EQlQ6a4ST7$5X zabnIdO-LCTNNZSErTml~on*(YB!an@Rx$ULK7j3z@;an*My9@;5!NcTayGHp6@+rg zJ_u%(ih6i9gCE=p>9l}3BZ3(R2C0R+GFdxoQYco_rSg8&r$z`p>$?F7GBy~gSwaDk zuqg;dGFUHD(vAnflido|9o=Bvz|WIa7puPo@Oum4W|?D3*LlU$*uuh*4JdO5g(Guh zJ*27O~wd%Jp&o%6T*_2Jz!ti<0gbPKv?#<31{D= z`_AwzcVw6{SXot;FnMGsQds8OUSP*=y5X!E+BH3@kFU#yk->QZoidsYX zA?x&)O_2X1vO(Zd25KvdgqtL?A}fuy_X~jewU^+*FD_ylr)-w(&1ja05@`iMZfQGv)G8LsYc*whl0{RC2` zs>yQ#VNM-*cCmn0_JeB~UCGrC0&DxiyQ*dgZ~T~$5Xx(I4ad$`LR5kv=|#&Q9*V8~ zOt9H(a5|mWv@=G3xSb`8VcOE23P#F!6OIjvK+95kLU_}=$I zkv4&iEWMqifx*~6p&pWH5v7wRXL2OAKN?0O@d+U;(Z&bqjrw$?2nlkUp4h>97d3sY~JS2-eC6U|r6Fs0qRY;ZWO9GZqvGWg||{ z{$LG4nK^SP1dfFEsFc|@(v!OCAz)2ELdaNZ?Y97aUm=w9!R8l%?Sql{%P7^eTsSHe zxoqHe$ewo=3+#5gvWC~=uv?BI_t|Ld85xL_NhX{g7>?ARG-HF<9-jE#HzBM6!ju0n z!Ah6Z^LZ%tO9~8@Z_em?$RArr#n!SNcghb!v8g{_``f|1;-|z2YKKp|XOj5PuI%3# zHLp#!yiWe(a1;#)z*?Huy|T1re5isjZ9ouGh6Td>;q5GdyI@&eGlVWlUm&na+$Rw3 z=Lt)OErC#FOXCmT+8xCUAB8Qh7qCud+t7_$LkMKU&F?#e(x7ajMcgs~X@97%X5Swe z6RtW!b`rwM%1UJouNQ=t$|B@H&U2A?<|PwK28JR17ldI&EBKaQzafh63xvmCHKF1i z*6Xi=aQrWf{}`$jz0?vpqoR>TuP5ty*-p)btrMb=^XRR-;zyMQEO*lfb!u~F==?iT zEM`%XMsuj;@!uN~t)aXSg!ak`{OBH=6yg=-(-E2J0`y6JlQA>s$ym=?CjC2SOvA1Ezt_2T%W9^4(xVAn7+`V!*+-I$$r| z6&dcy8y13Hyw0A4mC8L)VStaZp^p)R#06|5UCJ-1-Jvq6@$)3!l=xFVT4c7{U~#a} zcdfy${tejB(v=#=xc|9ORJ`8>XV%>T_tIOh8-#ukuQr5w==|XMC4=>np-mH?s{+wH zjSx-^rUGGkGZLp?m&NQX%da9;nhQyTD4XP_5yI@rL28Cn!b{=E7(@=%f6CyGywUjC zJk{fbUIvPMAePZpi8D#7k;lp*bKz3Q#;8h@B|W4=0#v4{oZrU4x8fn#m-k@s-c4oD zcCX_7ja^Z(s0%!cA0VU;!LqJBkk?x4e39+TWZ$@>p{irXLjb+`JfU2PJ^uS4bgiW| zB!oxay;b!rXAKQd5bkCx>D;~q78Z(HWA8l|LbsGuEf4=TT>_y$?v#&ru<`Zso^$y$ z>>boV?aP-ohOz%Mbgw?`iqds=62ePZ)cZZRgcpL)KV!xZ;DsQxz8#4(|1_ceJ=(J` z=;8dtggx|jG8l3Qglaa;pdf5xxo7aU_{*QdB|A5X*QrW_5K4il-GQujRXF=U9*dOz zL2BG1dn|+WF@b95(%cb2*foSP!~4=Y-V5hSx}foQ!nfpp!gv=P>${?IN!Ka}Wt;1^ zz`m*p+XrQ4OcX&RjN*bGB!ubp;o8;ZhKI05)dbJNSItN;G7PyT>};q{Thup@m`Aa?a*!!WfQ%xh^0 zm)&s_!Wtm7y%T}6|1zQYEfXA{h2q$sL$H&fM)tTcH9uGuNoNmbOh`9Xyvc;0^r0Ja zLRrFU2vsEFV~N|!SujB6#QNAZI8ybNWzq`DF1u=tL5pNn z`C^qNqzP1fkUyVtPp;r0pL?D%fAu_)M%7ibJTmA;$#!6#`FF#ynh-9(`@epOqP7s) z-wj7GAv{f4KMq3WJ5kszJ)+~u&Cn2JNN?$|P_^(qk49|mpn5by35q}|0y#7Y-GXHq ze5a2gl`Y}Ukr7Cj(SMShF5^dHR!MZq%LIt7sCnsK)ew4?^kERsmUDGywU*Gi_+G|{ z_W&sj?2DuqlmHg7U}Y#mh9pFJF>r0=d*b@t@DLg;5G6ipIe>fLBjGba} zh6NDBAhjn&(YrtAwJ%p8xlEdnI8aR+q`TtN(5%(rFKBhh0~wu{&zEMHN*LJ%$z#IV zT5B!#7M8Oo?k;V2UfIU(CWIG-(D8m4N(kU7#)Xw1&`5n&2kDd9(9*rn93H7UXSR!% zfg}FW8{Qo?0#C0R-BCVQx#}@(z<$}&)ey?e8R==x`r~lACTF$ij}W>ALunaR8Tsc_ z{O5<1b2W$ppv+Sf0Qnu((q{cYN=VUd~(GOo?0kCZS5UK|(6q!_d@^6nI zv40?vXhIJTVM|RIrI#mtL;w=$u2?_2g)QVgu&%jVO=*%1UF?f{!Mx&5l&)Z*t-V)4 z=v*ml2MM8c$`sa9ld~nIp}UarMsiEWi@j<2?uU2HJ^vFBmalpg*ggZ!%(?&jrR?X zM$S7O*r?tHNb)5%9ycMZ!5w`s1f~BDqDvZ#lDApMzcj(j_)yX!=8kNNed2BdqbJ^G>{jfK$|4Gdw;Xz7D;A6Q+$3USZH67kq^@1KB5`dJ6VQLeMjFEvVHwxz5 z#dz>eSl9K0Wht%Q@;=oN7O&`}R?pkwdK1FV{IC{q%XGBDW-1o+QL^c$WoIW?Ry__6 zEh;v4y5S)-N^_{!B}2Gl5U^p8f>7Lh+0Q^Wo=lkhAWhOS$PyO;L(+*@q(4S^C#t)q zR)-`L@0}q-eHD3nE*n!L! z>nI;q#s>4oHc&7Y$quul*n0mqgz;c6>Tb2KfFtf6*jL>TSG)|?-^w7qJM2pyLnW=F zH?b*W!DzT;<-`dFqE*?nks1Z_q6cAH%9wG}?ZDCzaIa!KSS62uSS7E3s9@B)DDgChqq@zF; zh}mUklgK!btZ2*0YJWK7g9)|6A`=v~S^P2_;`3GF)Q3M++0|qsMlRzQ>HYT3A!M@W z#PV)%ExLqhYqea|dm#w@Al3-s+{Q|_IgP4io!zin_F46nY%}XAS!cwYqYFXk2k~3* zj8*w=DBSNv!S)XmDqf=)7s?iFsV_@!Gs}2vgqjXmAXe~&5bUB++dVV_So1l`99kjM zerj7dSvM|3X8$O);#(&0=8vtX=D`&)Hk6HC_Wz?kEniQ@HFv=$9WzVsHh}OER4%)R zF(0kp!AQEF;qV@b)~2i-q&3{#9F`>y@bxk?rUyUo>FW=nZk4@}48haO;4}4dt$0{L zSiy6_)&V&1TI+Kme4;+Q=5z(2#bu-IyRs14<%9Wo9+?^?y{$BhYT~fB6#HHsrp5*{ zh6F;UBqp-F-E+Iab^}0o$(HacLFl)HM&RjXc|R1+w<0tMsWKTaoJPy{a}!cn&RL_v zkUBx@8O@D>%9+dK|J zqekhgAgn!!eh5{kjC?jfQuVpok7LiI-fB{Y^weez3q|G+*s9OJ6ZYj@2qDXO@m)6| zGyqR8>jxBLLhIj6D5uWSC6y#l$6gIZ0>Mik9*p!!EN_3u*XU5Bk*UJJ4P#lTK5=cZ z9=5a25n6^m1n^J@yvt>mQ2kEEIvTXlMXZMh78pbO@3quW0=JssL=U9aUy#cf5=h_9BG$!ny1= z4MIXD!xuM6`g#LV_7m|M5&q#)! zsS`HzgM0Hcuu^J`{G(w z`m~YS=P_+S04-qv(gvE4Gdv23jKTMfki9G#14oin8L6dA*cXpIFGk?dkO*ucbh5bf zfOMsfB*k=B3VzRckg!>oc7=7(EdX0dfzU?x)U*6PxR!TTlenGnkHWH2Ago6S1GI5M z$s?269QHM`{_tT1p?mqm>b`fwZG`Xox}*Np78jDfx6??5pQ#fzJ);&Y+h`5l>z)A? z_d5qd*=Fw4N54ab&#sLXT3y1424R)EQk$bfHmYPHOZcJ2gyq9||LB^pk^5{NmAF@a&nd%E%-Wqb%D$Lh3UnoEQ;}jbj)W$_x9OR0o3eke+>; z7j01wSmL{|^&^C9dcY%v#X|Tlgfz2hgzy-xpqe)t0{fVmRj-`FoYz*1M z{(3{`Pl3bs|oU&$Nu{v-1;D2viq(;$bxdk^@MYK7kFjgIJIOc^uiEUfq1h#KIE4f$3WS`)*Dz8uwR>&+F0mbK%hqXR5kolQ3g37M))_!K6%C^02 zcpaoYZ$gI575;4`U1i4o%kHR#&^FI_ci#U62>q7O2*AsMFl_|GJL%-41r!LgM+YL6 zhAnMiFmgxKh0p6GgpOh)j%|TmVlqcXqJS?>myE&#LexHMX_Ethg)ETeT~HQ(E91cK z@W%BagmhKb-i6BLgo>>vlxxxxuAQBLA{MA@gPj{gpzeWtCEZu0-c=%Oq7||h@xL2F zNrSI)kFJ%i+@9obdICp3?1b%X4U5=HCeZW9r8RQqrpx+j8bPyWzQljL0*3~&=8`I_ z$R~;umm;6=?H*AF*@J>rUX;^swS+JJZWZ^t*T^c0yXgYnaTCIe0C*`7%8VHqdzXDZ zGuhb50(pTjV{j<4heg6`DI}DqHOz{F(wAt^jD=zHT6Zlm{u|O7X)fiPgs|C zf`yVUZ13XUur6i+t?3TS3K^!50er>_lAUY!El^t=7e>IB*y=xq&<|owOPvhC(@8&c zVI=)<#?_Eh;G+fft$u{D^y6@>dIZ)v_hA!bF-e)8BCX?dK`31{2Tnrh5PRj39Ha#1 z3XBuVp=M_A1J$ST?t$5VMs9x-!;L7FVO^%HIlj?iJoB(g$YSNlm>jGil%-5Xe`!c7cMk*hTVY?>8BW6I zTXc_t(YEFeElYEJSGZ!k!_Jn}lhBTCXoOlb=-I*oT}d!yXC|dyRqCTjdRG6-A(T!d zZ0bkXo4;Y*!?3S@2w46kHp{ggAEnLR91w=%AOA+pn2`Z>=|EA_3ca=Om=XWetjr<( zP@#|(Hs`NTt5x3VBO{PGik6Vp7_s-lw&V^%cpDrm313`Scw!0WO$g6{PY>XwKzR6P zkqScDE-iDEW(CuR1herAS95l4IlEypr>sWmv#bcxAwwTEi3+4`Z7xW;6cfh)u?#W8Jp@h(}P#ZUNC$|9(g##IlHQ@e32(Oeo>hC?h zkc?c^E2<5IaO30Zx4PMAIMzQ(i}(z7Phu=ME*zQTgOM^M3j2TYG|WDk)hQslU{erk zshMkacq&n$Tw6M${NLxcAbosGwav4PQK~G_KMn)p`>Ju^$`$l>*x1?@-U{Dh@oxUN z-BCS!=L1+iCAdZiPyUA9&PbD5z%8qh)KCQ>%wy=6O4cg3FNW#N#yKcpODx&dk_Shs zokvq91R;y2a@UKD6+Y^y=8T%-JHof7E4;C{!?&QjvWPOX!nH~(Bs;;h%HVxUOVuHR z2;H*H_l9SX^-DH* zquC;k4?)84dW;V`p~7>P;K^XU17?BHBb#Z}@^GA03!*&Y<`P1y`54lkWrd(6&ZS!< z!zG9R+!R>WSM`jVSKg*V5A(bZfDB9Agz$m@UJ8W8e~ebEkTeMCUDDG`9~y>zW1^AF zkf40U=P(^x{uPc4i&9;vi37utH#7iA6SP_N+ZntUe|}pPgzbSf1aRT)z&y5)i*Hv2 z=33RI3c|Y;gx<6kw1go*VoSK@J#iC4T0yLNm@Zu(1)*mvpIiSl3jfkXty0OI5Q>D6 z^^yK`Bb0kjlNN!{CYxjN{u#wlZ4RIHgjzM>uIlh9FDpXEBW#Un0cCsat!#}?|C=F1 z{Qa=6&>B_=J<4adC73L`n-E?Qz)OL!^e?o8giv;A5(pCso*%*_8oBb=H)#n!8Heqo zo2hMo_w&WF{aM-w#)L!ZCXrhG1=kmZzi_ao4{S?&pd!8-Dpx)T6a~SXz>6Y@pW^yL zQssXOq24vsBrsOHr&M*P4W))Ls$jg3zJ>8ZGKTY7N#a0kc?!10_f%QJC+M280hs!r zn#i3vC|LDK=MN4?*}+Y49O zfo=S5%wf63Ndhm%dvrz17SRf>>ci(4F4VAS_k8f|i*7kr7Z{B9L#H2%H7M4(zEM*n}RWr&jr9fBLvPVVJfLp#oGZW z`8R%Eu&iKV?hjGx1|?p!EWKYrs0ZEV{J{LYB={g3xdAjKI_DdO;`v z`XRJV6$=<}SrDFi!x+MB8ah3M2i_SE)A4`5h~1+as01{5GEmPKrj3?21S6f+u_g$8 zE2IUzlZDrn5Iz9pN5HeA72TTKVU4@@e;z_7<3VhA9KMyjHUv`k+>o(CEP4{@FGV1C zP#Dt2%0vkU>wg)`$jt_~%vp0tBE;Gs(lIKtGEm7+b5~&9%MU?vVjg7KCXS3i+E2rP z`S({tDC5DEi#tJOQCQOJCWJZ&E2ohMLg@H9R6$t&mg%w}R2jL&+muv@RS+Kj;}b9) z{4?F65p|UX%n=ubN*^N|zi6rN_1)3>ZfbwmwKuMp)@{9_6I~g$sM&Sl+H{NBEXEe! z^QuFrAGR=(5g6A}4#tC^^^>>|>mEcouZerzqpalpkpG(o$bT^id&Wzimms9Q&=nOp zLG$HSCahA;Wvk^uW2&rSCI3B}j&;v8N803Y9Aeo@s)d5T*JFdwTlIk3mfWsZ)mvEB zK9-GVagR%a&<~(7gaqvpmns=*9^tE!QF=q8VF@$g^XvR!3CoP=YMG};Rl|272<_7u zCr&22M3;+JkTIek!2e|kt!o~Ej}{pMo`UdhxHkxt zPvZF7?bZCzZFC8f#xe%KF9PMRy>vxszZedhuf)VPPgV9(s|%$G)3NKxa3oI*LJz7gEks)gfNY*W76!Y^nB%&` zz2eTR4xzsH)JR5PTuYg00ex!-An#-KeXyVm)C?NSjJuHioC#ZK1+zwnAn6ek zP9=V-X1B<|x>^-q+r#11+**eNgFlCHw zq=3uk3sMBakwGdIzNADi;Bz%WXrD*Omb8OsO-lkr2org6m-d21dIK3J{;xw=Av0uT z>KZK~Bpt~5`(a=I0PHL71(rXI9A5Jsqry&{JB&L#4EBFh1;Pmi*nnM z{)@iK<0)df?ikJ1ctRv(XDvzAtP*t*Kmku>O^E9T%c9Qz^AOr3)!~#Nlzm-02-8PI zDhPAOoC{(0#CkBL@`1Ra0%7t%LO6o{Y88Z1ST#ZDm~%HFYy56p|` zcCFxR|K}kjeCr-3fOJV$_5n8cg?+<)s94&Q_xmAlWH5G(ip0S|f!H&Vh4sTeu+bOQ zI%Q-9ZY>W%VpIaDm{s^gbOuS^d^KgLs&}C zE(gL4nTt&bGlz#&LzpwF4&70C!AM#`x}LHXw&Y5bR0p#EcJAcJYS?O$nm<}4nb7T* zovo_K52GGPk$!_w(YI6EG${}-CIc|f6=TDTNjCxDKT-AK;|uD6i>mm;_G$t3rt!_y zrYu|OlA`1&K{RVinreI4yl}dFIF-E&8P5f(&bGA#@#OIOIPpQ7>hjY!u=<9#wuA8( zg3u459yp^#yS0X}hD|_gTB>xtV|1j^7B(2CV%xTDyJOocHFzdhvf!UYBDOSrmY2Z47XY6N(p<>_pG0jp)6QZPR}cf5Q^?j+G)8?e?pfbkWK zZ`BZ$+z}GoAn_3Qhs}mS8_t{6mkW!(EHUziw>mJImY%g_oQ*&pejqxDULU;7P=pw5 zVQCjGFhIcus?Y&*H-a^kIEv26tfWYFNpS4Ltub8X0wIAtuO#A3%}qG6B~0Zq4?mjJ z=u7z4vBln?QGBfMtpOev;-)-0{bdGWoWD7QZRN_=2|HRGn96_l|#=`k?WH6QFEN4Qzz9xR4F^ z+HQJirtw?OyQ-qXS_*ZlOHzLEp~pO%3ow5DD-KZ zh$PNh=P{T+y$ufgHXM7_E+Aqb(@m0KhV|^~4?41hpM6n1{kaRQ6~y`z;U@X9rLuR& zQ)pvC>hamro90$s_504Uk|eE4=%4+Kpp7N1c}JBxCuKAx)Dh+idJHv9ER32KSGmr^ zM#1j$fMeUX))R?w;HrpF(OR9jDLa#!WhHuY(NA3>chLcB97Y!(roz*BpzU>W?&k|r zPmUF>VFJD=5lEo@iW$R=b+Uw7+8;gQm`(+4tLd))%B>QPo+!ox5Ed^Mj!UVx$-~f>3&X{&fvpSkqUjQnyA>fLVkJA7nSamO`4*2ME_KtL{-a zl^vD;^!7$A7<%o;V-6qUjlKkE zOJ8P1*NFh7nRnX0)t=}x95)T&O{|E&?(6!JAWwEHC?<`P6x|n;-gJ`W-w=5Dx8(OT zNnmybyh7c;G#P-#L_4|px7a(#8ECJhxz#Y2XJ1sX0S|1&x{-j-_9yBm65`L?wG`XQ zSQsD+_^FYdL<{n~sN*`dj85b4eP3CL-uKs6IGXE1SnWfs;F>D^i+?8k##T2bi1#moNvI*29q1njmYk@}tX5gScDKbyz?CCnl%9PwZWczS1AFwSw@OG|*${R6vuSJO*vp~azhhSCS2X{{s zF&UE~MSy+C40~=vf#?(T_G{#p-0(R)U^3knE{ti6t2*Lpl%UvTJmW_H%r`zvnS{&L zzcPWkPhg6U)n7~tr;b^*M#Q^D zxbW;b^zrcY52fnx3wPX380FFdIeX+hvy8OKv8A8V=E)aEh6j)mMD7N3RI;MobVvx9 zsw}Yqj!eKNBo%v5^c^5d((b+110bz^@;xg58$wkm_T^JvLm^`Ef5{6;U!1W3f;44!G-<7WJAL zlBBw%x1!zWT4Qs^j#(9ECMW(h=5zo^m10?t`xakUnLm|fc#01jOnD&tlS)NyIn zyi|6!Y-m*^GA2VNvITu93cTRTbk!kY?L#roUc`Uf2s&BUeEtltS-x9_G!j_;iErP6 z)*5JTrN#u*VY{T4XiT}i#+mGxD_5DiN70bn>O^@ z2?sZmxi9Xl*RUn7utj2Rr*GTk7I?0nvyQm8+o9s?@>3YH0Nxo6K~a8dE5(mrp`h^? z|8lDkEp<}PK4LW_(~Wjqaoqk!ET?2_P(y&>6ZRL_wC)%KaoQfPOmmCkSJ70KO_c3x z6#RynPC5Y9dXMN)4VXZ zIfqhRM#TDbQ@xDj+(cAAc5DB^cYd%2HyLeDndc%8P=y(85D!YlM_PnB=o0l;Aaqeq z0UZFYM7Spm4M-ITCrLlS8HHqWp`(k7Rbbvz525Q0qWTND}rtF)?=WI5jpf z&zb0_u5JS51j4bmp8OEqA{eMrX_3`7F=%ZuiEa!cxpsGaC*L3W*>D&p3V|Ee<0gSY zJ&R@7zv3H!^Q7fr9qMCyQSou@3928Z^Fo=HWRZ5Kc}pRYrEEvBz->o#`!k?oK`D`@ zC}rM~EgWW`0jNfPUmL@cDw@5KfsYas$pIAC;C(a6`6D+QTY`q2H1>j6DC|QpSK^rYnZ+H(TwXl70`gP)lY{GHe7@)**q$ zbL(#@KHpJ4veQnv8h{IZ5Gv9!G-=b~r(T7U%3&hxm2O3i2CS|Y?d%SX?L78gU}Srb z7MI~;>M21bhsSL!0BB?*v7>7RBgh!aRGwM?aQu+MrN%nT>ApEKK34EL<5Tx$c$Hw$&ZGwOalxEU%81b* z>aR~;AoiffGcgrtCU^Y~3Gh3r)>}3yzG%f?4RM)e29y!!CEqa6>{k%=ow6vFJa7f==O7QLJ=eIYvp^M=)Q=L@){=Z7klvLBa6o+#0WvCJ{@>ONZ@{O9Cp#ebxCvG)M$*?(Go=?z?~t2lRUONmq)I?3245$ITfuX<^x*VnF9VRCk$ z`%NIY?~rf{v6LW^Cy9h#$gAjNug7QWYyZGg^p6k#0axgwHArK!^)3?T=NnStYZZKN z%+aq+#rnYh*XGF7z?iZLdD%^x4D~Ox&&|OnsL9ulMPviAK3Zy-zzUcL)con^d9O5l z3wur;HF!l}3fOenyfhw* zUC-N!=fKE=_j=D<5@80i`7m3@_x=&}H};(wASB3|4LN1NTkh;`sIA^m*4l`|d8clU zTnknFxS1_bvZf4erma{5k28WQ*psNk*c7myqi#u#E}KVp;~-#c`6 z`vQAr0&d+c?zI|({a(nNquyDO@_+@kfA(f2$db0*__d}VW+s;f^6KuzDM%%a4i1>g zVG9Q>EnW$hVx$WCo1VhYsx$wa{==he3ab3;A+?t^&~!83W<>|4Do?C#{cjgnOr@n%wEGBnu*_XZMrq~VR=(y}ZgbPnTuFhl;v$S>RU2zHFn}MA zYE+ic<aMYOYWcQRUZAGsLqs8_KC7A-AE;qgZ?`c0zmbwttSsBB^aS<`Ei}7*5r(utw6Mby~bb4 zUmUQB6q1QOH442rar50I!avdnNMu2qe?}SmU1c}ybr{;@vcP!{ z5nggoxpVMT?aw{PO6Zv<tF{>?K=W)o&^F5`d!gElUwF<@W-T!ik!{Nz77JWT_M(q zt0{RGipxPCaW9{543t7cH<_|1mW^;DfrL>tG%Is+Cs?T6f}O$ytC7TBmBPsJaRVQl zQjpn}xFs0BW7dj8P~kP^x|rw?-z5+?gD?C*9IE9=$XoWU1e<1y`)m3EUBs`7aRI9VWM&R+4#eA3}&-0UcU_1gAJB1HkyE8nQ9gqKN z;rxG)D$to@uUY}we&_$%{?vE=_%=5Jg)&cI%#7)&1g*Xw!Fbw6_%6d~@lB|e?4|wS zs%hMU*F_r1?2aO5rNgoBQQg-!DO9V5QYIfh!jXIwne7srRId&Te?)n6{i+5r1hIvK zR}U?r;)~MU#T(9lFCR?#$0t9aZ|hXJfa;BhsW28H4|d)2j>d=3$rd$jR#dk)QX0;D zOd^om6a{a*@UYRBum?+=wj)~&c3DhVjPb)KX^lq>xwDvxS3$vxmkXK7LDyBc9WT_Z z-q)c(K8_``@G%~~KRzEg!0|)Cfke6}Hbq|~Cd5@tMq{{D0-D8VUvL=O_0Ltu!&QBl zJ4=V=SiOn+4NZDa!dvJE&fIfP<>5qy%)Q?DQ4X_=&L+Si*bv7u2i;|bm`tR)XFgDFLx^TnJm4kb=2IW5p+EXD zKj4*!IJ^vHdfaWIa}f5EjUvaLKY^L5r*|2!duf@VCMaL2L(90rZV>5gv^J~1IL-Fm;;D)Sz= zn+@4Xq&Gbfu}Gu7fWJ8f)jOndOWQp2Lt)DqivcX##e9UBoQ&{+?4BAo32EIndslRYD>(oWFWM3hAl8P|0)|d80a~^&hIMGeU{S;6H^ehr9<~My#{g-L56c zKv!RAW}Z?Pe+cLvjTk$@Fm@BQPLsQQQMyaU^*U$`O|K7T3unojVI=cn6zr4YWc2z+ zV0PfLY9J0!4uqLruNPG5I<+T;oJyzylNnLo| z(sT;6)GJ&q(0;czM$m)%P!t!~IykNB4Tb%-8dv{C4?(f1rU3}KYfoe6FP})XT&=Az z`ALn9W`9}ua;5heWIaH1HFap8HuF+Tm17T5LD65FflPB(MJjUt%J9>^?w^_@9{3Rn zBxo;HCexnDRrZ0i)~f0;o}W^WcY;S#>Gv(9D^&3%lxQjU^SG2~{ePo^?dU7M3@Q^~ zlqS7hkk||kf4FZ?{gEs_qyk0@X6(h^#lr)!V3QLBS>d1W^cQ>A+~ksN!8Nh#XWccn zzOS|wzkvvPukkgk$R%(;%7aHC?wQRA2eEbd?FeuGG`QE{iN7O@NYDM4WBvbFnnwG& zGcu<#i|u9|N!y&iE+8qp^(c84Jh%$q%=W`vO?>oBSyTP~L!2dHYQfF-yGNfFOHe4y z(u$iyK{ok!A8TKjS6CV7SPxd&X5`B*|lGac8Hod$FJJQ^$^1C{B`2I(l^9n(Ds3Q z`4|F3IVN=e;Y2)wKw~HdhKj#(E!+t{68cqcT3XV$LFL**)xplQaV-JAAN{d`gCZ~# z?q>CRG1*d()Tq&Df9}8W#`mDcCWC6);|`6w*jv>hGskW}k1K;FVYt4kKAZ~E(H*0{_*c2{{fP!LyHrDSbMr+*G|IJ>64Py+B7kL@Hun_up7_$^%OsmUdzVrv!yB} zwqC7!dQZ^6D~MYIBZ>bl6Awh_zv=@QKRq0vEyWU;;8kHS&xPEkip5C#q!In@JpP+$xt5GfW8cHP+zS1lCWI&vkJt zPmyq^G}$Vw8Q3lktVu@`^4jeVxJ}6<@nJ&S8LRNG8wX>zze;&z3+^V-+L|E|%0Z0n zqU_Y46(-Y(szWnlHV{EZA5xV#NvhvZS{9xqm^Tv#_)aa|6z}F9jpeiS0P!?Lg*EySZfgq7z5X$R(@J^nChzZ$ z!9Mm&xPAjH41Q?w9~Ot-sux#zb0TVs^~k(Kep66+&2>p!K}q8E%I@FpU$z!huj0Y3 zhR9C1WTECA)ZSP7T(O2H5OY<#S+lS)Ke<|{H2fzBERL>D|3?`BmCG!hr+n}XG5)E? zPkFB!NcC`hWuQV;W9=eX!0XJcfenSKacRYAJ?Z)2~T5||!CrE#C=(jBMt5;p{p zPgcEA;ALxkRvPtspOo1V2cN8nwjw*}!|pQIhwfVe0vegu7=c*!xDX?;R&Ls>(Zh1g z$q(Vsf$@m+X-3jphG~fX?PdHw+8zbi`K@zf>!OT4*j5q#ZH@(KfE&mmx))36Anh)& z>h#VILo$@|q+FOE(;SLhf}l{wz=*md8u0!U+>*JqQYFM+Myu);lI?m4ObU?6u&@+P zHc;`CFW`7hgYvK1(FLQ7u2U2)K>W{1Xt;qFR^fu|qIjT?Ps4!>OXK zl}qvaqvbg#nGi8JJ1a(P`EJto1F)9 zSd%`>#U}%^qzGD9-TyF`dLF@I>kovC)iV4SSCNU$*cxF z6Pn7K=sOW4nc*w2mgLwP(+NB*IT4;Oy2E$Z)Ranl`sJI*JiDT&u%>GPj_ej^|R(q=l-M)ue@b4@b9hSQMm}@7Vu)&%J!spDt`z z*Jn(0j>Ff45yH+XmL}U;bn3;a?M@5WL2rJo{N@>j{5U)b4!>Hmkz8MXbm=zgXGns) zk(zD4yj2f!c}b8PRUny;EC{?jNI%MO#muQKkd=6rdgW zPwlZsh6RLZmHww8>HjQ%R(i`)kz#F@X3#_`13fa}- z(wxKLMvM{qkq6U-*~L2w8lhP2K_X6waN-A|!Xkxeei0sn<&3%Tu&U&q4&@8x$qwZ; zFE%-i5n`G36>plPBp@0K!&c)+*ep?;=#3~$#;#ccJ3W~G@nfEUEgR}4acRC?vKF-X zW8aZ0#;@o=4!}o2{Qv)x%Sbbq8HFz!(EQ8QKv#i)Nc@p-IC%c~DMr*WR2e)HMgq*O zdwBV%fPJo1RObp7gZq(Z)^&j$bG(iuCo8n^^ZEfJLXeLi2}qb7lg=oI;`JfoN^n(j8` z=&WcPpDZXgHo(F$qW}jw5k9n^`T+S&lrVce^(PBMe9L%81ns}ISB(%Ihn}1liSuI> zP1}T(f6H;w{^K9d?CBmurtFka(&lgOtKSy@mR+~yZUMkhZfwU>@4e@B(^|2Y5@gDxs5zA zj&dTwTPGeU1r`wnTp)k!7A^@<4EX;bWm$>VtPsnZEV zotQn%(cb~vuVfWo5owo`U`#T!NYeY8(_!PXjhn!CqJWL+Lf-e+s+V_Sq!}8Za~Wv5 zbgcM`0`(p;wF8SZnWrpo{6`HOw@`6MVRarN1gMwK@ay8`P6`##5ql((+ZKj6)gVPBLO;#>9(7YJ!!nAVZWBc6-Tv=?78S@+GUO zK%<)_ls4pJYy#qNP7IB5l#91>RtYz#h_<5A$30{0N-dMx{-L-b<;x)9d6xg2kX=1_ zHCcX(cqS@^?}7~cKYQM|b#~VZ{Y({dGO?qgJMO*fm{z=6!Wmjy#se;lOVxT0JW^`f zp{;kU#SKF&W&hD=6SGC&-ZEH?$_VyWzWolGGEnL;Vt#ggT-VC2x2Maem-Ix7j(qc zy7&^lR&&3PJbY!1{v5>Ki<8x%(tOGmgO`*&dE0lG#PL))eyr*K*RXuMUVdrQ@I|dR zBX+w>)x!9fJ?bB$T0yiib6Y{d>$XZwx`W!bLO(~D6lS}aBswP5n*apN&sw;tw<rw5lmY^60&n}#adE+7{D94V0kN%pqgYX%@{Xm@mu?ppbE$- zSt?HYog}@@$ngC*=ag%{v3kd6gJFD$L}dorT((AxZ~WjX-pc~{JcZ8UwCMR9+gl-h z;Hj`!z^~U5rPD)dH8#mmQ{O5|zpyiI?!qiwJ>v>pejiWuay8f>iB~)o(fBy zy4Wr19m;nKma+e0j(?Gq!Lt*lCbL8FU*$|7Q#A?Utt}QEfuX`}tjFl5f;r^}Ct)_8 z_2`3DQVL(7fy5cXBJOIadBO+cdO@MPv&|Ps%-BfD69nor%kA<82g-TvWBu-MW4EHN zHM}X^bJNUu!UJeUI1|X63?f^=245AvM|;AZ1WGtMPDWB8pzlrsT^mANB&adddVd+} zS^{YFmy{-)x z^HU%QTlMw2)Cp~r<%AvC4sv-8IUQ>InFwhUjcH`aLIb2~VNKL!bOT8{5$_k%32}QF z^xX8Y@_8sr`Ib<7QBVD^f$ZBWG-;TN^p2=FH$C9bFq9bunf{3Qrm!$79L7&w>4hzm zk_QwGj0+T0CEb9u$7B`4Pko7$zyZI-h=E$UP5Gf4?%-7B<>Kq>OG;em8Q|Nr)ILW^xEw zJ_P=BR0X~m&cnyFmr_;eydkHFsHgU)q_LRtG7RGCZeT_>Z-d*h+%@uK)kCaDH(kPR zkPw5LdLQm*0R4ZBfb=672Cvh(5xjCu*TFiKljVya_|#$jku zM>RkaHLUsNFHwu{NTLv*)cI7E=rNlP$iI6abrv!&_B!xpVlDPUPAtztPTbwsRad9< zhJunhjTpDA2jGRrUUfgdnsB+{ByHSts=*=259tH5^ZwE;*{%lTY%WM#+t03y`53d( zrdUcS@baTp?wOGwCC8St;QczyVKsCq=~n7vpx-IPlRgg~o75hA>i!j$^^S4<-7hs; zTJ4N-%F5*QD4rG{FM9nAeU*aDUZ*}wDw&IuP(Y{OTLdM@)5jNj1@414c;>_DWzXq) zL~ZV5)TCFB_nC}ouUXo8Tn!iUYHAijZ{mM+ssFyN!)_(#-xt7fQuk?D;b0F$<^kcu=RTMQH-N zJZZrg24n&czw9YD37%xS+^xYJocFcJX_M6D8xaVJ`RB?0`IE4Evx7F&Xe>;Sx?frk zMdrNCK-FI*1XH!DkZE}o#eWBsokj0lVstt=^|qDeXm*xrGBC_i@&{$0O@dx)im)&M z+N{K4`yz%-_H7xr-y1hcI{YE-6JU&fV+*51v;iuJ?`<&ehBQ8R)HtaXzxZXofpohv zSAvpxuP+Bi1IB^(X3#Wf;+@jE#iyj^CKdcqLc4$s8pYrh58hjD<&>G#k5WZvtScyS z*xG_OXSrzgYq=D?m;dHkxfEk}9%%n=MvY`&9y-|fZe0{#-HJb6j#LWTQ%BA%k^HY= z0G)_svF-Wbm3JM|hek5NyCvKVZ9l;66f|!a12UiPsS9}^2E97Y?p;V9#o@9t>GAXM zXdokE`D++iV9FUAdSoow0KL9Ax_Jg=n)b#7bBoQ6b9Fd7TjU4|YZLg!ke zKhP+~?b}dsY-@B)>mQ5oEUJQ0NvQ0>=7o;2&EB`4slblK|AE{8elTH0 zAx$8??z92696nu~mF($7IC2FG_r#h%B{-ln&`?9182K21GMMd&DDiWxLsXqfE;@x0 zs|M(5HaGL+n!v9f(N9LFOsCd|bG}ct(qjwRx{(rGg?0z(O3RW`;|TjYl*>m;i96wb zcIS*|Y*zB)aMPJcysBo|btQm03QB|Xn7|^imn49Zk($nvDlo## zc<8kn(8&e0im%tvVjz)HXPH8!c4AqUS(zEn1$ODINrpj$*VvjKaX6kk4fB<@nn zeBl2PH`X#tKJ_-;xbRu0rF=q945-$8rK8O;f}b8X$*#Hx zOp4WJsSyJnQLgG<+3iT8MrOMi{bWyceVjU@nk%;V(!R@$JiPY8T`r{t)kY^f$L{{< z;k2LsLW&6I50T?6d+qh^?0bAN5iw(xogUM_B#o{f{&26n75bSR580u+BH{BQjHB>= zj#oj^MAsYR`tSw@#q+`Q#1n{pZr@nYZ@BohECb4{IAchNL;)HtgtgbveH$_!V0q9z`D7Zds z^wF}*_sFjv1&b-SDEhL6LHxl4GvZk*Rv)v(K&rX=xJUz-;GDTw#2yUukdBpQc z5ihd1Nyw)W|9fCVKs}aaMM+OxfDx;Ugv9jCSyK>Dl#4wLE?{s}V!VAsO-(oaW}CFn zebr0c2<%5py25Q6v>z-MhY#a#MCrPGqyBJHp!Of;OwKA>cXX^u{reRhP5(nciE+nl zlQRfDJa%tCr=mY5#Rl}bh1up0NhsPgNT;nlvY8&}_U8(wMX2b#X$*1o2~I$VYqz

pV;E;n;yZJ7-TWMP_hFF&pI0jD9Xe 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 literal 0 HcmV?d00001 diff --git a/B4A/Files/amigos.jpg b/B4A/Files/amigos.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2ed86493f91e2da14bd4c8e6b2f03a744cde3161 GIT binary patch literal 352308 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

7r0R~|E_h~^~Gy{HNLO|O?l9X_bVU;dnb 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

_B6*y?CT=ej8mh7l+}}gQYqzwqWK{zuj`Tf zuF)M2(yVfqHmG^;->lZ3*rU=og_SSY%eSW^#@e*jXEl{it-}ViWhwzy^X;=-nn=F4 zyR`6D)5R=}3+wFT@7F@#3-xH*!nA7^;S z%hqb=jnljUeY=VU^%@>J&DB8l|y1pI)LEsk&e5 zIw51W^4@nJ(V)Xi_ECw*Y`?|Z9WBIP_|lM~U1u6=`>sQ0&q=^fPNtPP=7@I1wSbb3 z-T8yiXQM%-CAZ7(E%oW4Udhhu-yIme%CFzVW-T_e1s*N8Np?m4Y~kL0fIalxAxAVT zexJ zy1~AZ@G{-p#<0rk67Q$icW69TR^aHik{@cuV>MZi`)}^h;sd{|rKg{BcX{SQhg)8D z_^HoxFLF=Y8)S0`o@?o$zyUv3DTM$y((X|@zDZ%eroAL4kin#JN5 zeo6n0R)|*WjPye<;>- zFaB3@j~3v^CMKh+OmbOv%e$UWwgK#vrFTA9JwdzxY~I%SHJfT@&)TF=z*XBFJOuZ? z9`q~<)SL`DKHEXU(me{in{Q7y`m0*zxx#q*f!{6pEHi1wIz*3B0DUce*?RWs(^#>D zO6-}eAc@8zv=dP$U(~fN*e*&GsQ#sTMD5z;esZlu!G;a8w7=Jwj1Yfv6`; zh7<@9GKcH{vlLD&ANF$+`a0BX`=}=rgrDj7MsCcc(tt*MmrnR`V*cfeC zUI`rhy;q^#Os-qKYyW)WX&3Bm0HEU$rqxXA(p^B*RX z)dk?a;2PAGFNJG2u2WAq$_s5=rpmG|)ihT%$2@ed_3O)6if@y$B>U?Co}s2*OZ6!x z2pdn#WeF&EfTiw?310Cb@ zbntI6SGGoO_a!*&klS0-f#w0*^LG{i+YL?X4;5b0cC(cBAwZ(KTYge%qgjbN&s*Kj z9~1TQ6gdwZfbtg7V+MkpyE*A!gk6u3v+n=ua)DjuETi`EBTL!GeG_f06&-`{^@p~C zt;966uqKP#RMAg)^Zo@@?4)mv{$0f5w+aKD9b$n#n;^EXOU{yK4|#WwTIT_WD@yEX z{SE;`)%da^SX$5Y1o5yYxo<(j&S1bo%IzOS*faPqZRyTTuaC}I?2a0hr~JrxH-xz{ z8{=2bWYcr|Ui-pb4ugLeaCH|yzqq;k??ZajA--Z24GhkIWw$F=VZt=%Qz-X+PTq+a zTa&z=eBUidO&B;=0CT15w2V*4KMl%_3{%A0`0@(eaWAxBn8c(84lC$GQbqU2GRdbM zBUPvuTJNkJ(Ki!z9p)YH1&#pdme*cx_xmXcND!bb`AUvoZph}QjS;GBU&}9jvZes+ zgS~4~;lHgZadT^)==J#43>tY!>)Xy9Ql2$eIoofWeg%#jCi3 z$zR~>cVk?=u3kzt84&o?FJ4QZNni8@pjfsov>LTAqT3~^Pc=S;qK^`GvuX<~zN0C6 z%_>{pdzgN5lg;cZx#HJ)S)~V=(^~$Hp`8g4f^|^`1p1e@Oqvj%`OV8LqTj!Nx*eTY zsSi)eO)O4Ub&~k-r%su>GuiM235zUc9@4{wv+IEnGkCPOUhzzstt z;|@EmBuEz`aw-`WHLupm9?+qz5s0nz*^FE%M#%jg6l96fFepvdj%hV*kwUjix6q^7 z1K&7?FXvKRYjs;aukqf&5r)2#i=NYaAY>70@)3SQ(^b- z=u&!8m>yUlFk&YETJN5wvM39!L4kL|bLQx4yn*F!?s=)T!BcDCP?t^n8-$B@&0jqk ziuN_0VEwjs;t`W$JsCl}sH~E7Nfg$=J)UY4Hep+%`UO>&9QGT=b-wBR?J!Z)aI(+O z9F}h8)A~)kQQuis3&a&TH*{qI-z2ez*6yM&S-iBizQ~t<5{}PgS-z{58tuZN@bxvO zsaP&g4sojlO-zP?<1q>^(L7CK+X%wt?n`fN?zoqu{M8JZPa8h| zwd(;5TKBu1Jm_f^K|8c20O-L?^Oqu8J8znHmhZzT2G#FU&;`yiiek|ZqOSJwm?SNx zM2@8tnF+q<9J@BTeslm-;NG;IL_HlctKUh$Tr&#ar7{{k})HZvLuyAeu)XNNus`Mzhj9pNu?I)u`;Y`mmq zK8=<0oAuLGG$Z0gXi)I1>Yl--rp7|kmvjBjvceTpguY27>#Fl#;QhDp+)k>qB37R3 zD8ZZMhOmPC?;1zMWN+mZ%swDrzwZ*?zg!qNxSI*f6~Wbu;i}0qW&Khb?>9rr2lD+T ziy#LDo;~@;C0vFM4R5Vh55=;JkIIyvc|Ht$Cj|A`YZ=|}0y;xJDpcCNmPC<~jl-Pl z9-FH1IPUe>cj;=1cm|#X`Ky3anmj^Iix2Qm+YbNbFj&Sqb({4yr>?c$8|NX_b2W*A zILII}b{0UwzK4A<PZ$XvucfAt zfYAi88&;5KdC1{j8NrJ}e#SO>HhOV+{>NSdL+7jV@foo#85?SONCeP^pD=~-r%Zk( zLiCu>HeoK;7;f*WT4kv`rsu@LfM^cqZv$DF3M6EX@vDN;vlYB2wz?6zK-i*IgTxTi z9B(*^CtJX*D6hhkU)%%y(5@ooNSr9CnX+oB6Sw7LwDzw40aE@WNN8poRaHO3Hi0dm770lSYJZak@0rN&lNlb@|MxJ-a93;iB5>V`#U zCdOYF>OHZYElVhVD8`g;Pq+u$4zqyG3Ix;1=c7S)!qv9?fgZDy4#2=auwCyp4iRq* z9Xs#i>L1UqcECUU*c_hqI$P@VX~m3nLhp3CJJ*?;RUV=uG9i%FKJ~Q?aRS-1!}-MB zNIgagg}}CaU=pc0f8(|>ZfPR3_ItK659AwQ9lH3P%Hk=Qf3u65fc^-NY7l?oeCp2Q z!wW+VseW`DtFyG>H{JzO?$}V0NIz?u1+U#At-qpOGb_*bs3qL4{bOR^^L6IV#AF6m zZKwBwKm4oGw@8(v|1p(l=gqb{JSpB{8y@mI;t#)>EQ}k=h@^FD@0QsbVUcf+mJ-9| z4MkH0tdRO-L?>e1>gM^H`F_oX1*(ruvZNKIL)+xEyd(@})Tt*5GOU0JAd0VnTgSz9 z%KPG_^4_eIOTvs@wtG{R#e+@6q$LZmH!j{BK51aX-HMo4T|;LU#heQf(iVcCEJB#Y zQiOLpl?a&24lv=@=QjIbsc!)ANrt5SS?cfO2$^xQn%-1NlnYYqmKJ}3`p5)YeoF`C0gkwD&R`Zhh`fj^l9Ndd zsj1OJ zO(%J_OKeJ_RNZKdq&6-eUZkYw|1v4t$3HdPPi<224UpUyCYst0AaraH%X_WVy$%j| z&V^_&q;y^z%^uT}pwKq34g%**QfSEHR*x3z`h#+=uyw#|-zl17ph`Ch(}R7kEN;@pMyAHabbt`AAP>6R1Y-jU zL?XrF7J_3|(S-%S#@x~w+K>JT19C$lPwCX}n&}QP>EWr|AV9U-^NvG(mjA!Hjes!8 z1qyLwJXy&+OJ^Hxf7DTt*9dR%Ts8mh2M^4465z2hMskG#Ge;Zm+gk4Z8>*oX2tpp+Ya$d8Z{NMg0&4q$Lbcl0beweufL|s_6aV&A2s;#UKaP5X`@`N3QQ8 zZ4*6A$ID}yWfyODk$q|ESm>0FUEpxWCKe!4fs*`F&*}ytWcVcwrVjRt6!a%!@Pga5 zAU9Yzm=#vYJG1@srj-Jxv9G%yiaY5!X0SnRlH~HL;J?FoBWtI07VG$@LHd3uD&e!?w0g=V4 z6XET91Pi5inkID@lmGMD%9098J}hY{hfGPi4gIMqEK`4(o#r`TA$C)MQf-_m*7P9$ zeqGC)6$e%1&=#mPgMZ~s++ftt%l`)z>FbRDF!9qa$Yg_>1&m`Y(%_{h&`%KQ*V1FJ zuW&!)CumMfc}iG~e7J$G0?v}^OEt%DndZg!uGg6V14&HJTfUe{Rz^UvZliDo!-A<9*!`DuhBIIoI;6=DbEOhZr6_=9=%Q3d^;tq z_=R2fAE<>k*en!NC3TAbW~>G?O`)=a1H(-{fc_w+m?;pHTu4i)4JW^7^JCivXuF>r zLN9mI`v_m&l9(bnbpNlwg6Irkn*W|wy#=|U)IT_F)EO35YF^xFY35lJ)>#Hz<#=zh zZ$7I(?Q_ogajGpX*btwQlQ2EZmh7H#uyz9N^KK&GW0T1~=l1rxq*Z`PKYHJ{xMYSu zRJt=yJxzMc_<7{@vWAnQUT?4e?$(+Gu5rxej1>^fg?6jB^_lFrDdFA|=dD}tacBG5 z?4GtCaDm;FiKIU7|E8R*xM8RJI(``jVCvBL+izDfTh_i4()YRea4F+iUlg_16HNx6 zK4m}EuX&woUfZv4^-q2C33Ml_8k1alcgW;8uhCx+<}O6|X?W?oI8Y93 zSzH-ky_4GdnW57*Eq;j<_?RX4HRu5ob)gn-AWCVvVgFvTD|3O&Pdh_`W6_si=F@PU zP{}8Mw$pEv7R^5yJ1>Q`K9?%jj}V0knx}MKov9x~EMo zs`W#t>v$Ko{mfghdZt3umoqm%1w=uAjy$v$adW=x;O73|8Z3aDBnzG>MHlFnNb~$| z54})ZacLnH?P_GDB}*il9Y6bpnazS%veE*nGmo1Es~4rINk{jSxR1LW9o?T|T5v@H z&NZ@YH;z=9iokLz6-sS^^UM!L8h^NRr|(H|-{%$0fX*4;nv|{`qWhwZpI;qf-LQ;n zEpe?di`=XHHO1yw%uR$6N(7X)30AXg(Vze%%h7g!vt7*@N|tfdo?9Du(2G@bam zz#fbEor>CCu8xoBJ{1)KFo*dn+NIe*xN2uy>I2NR{kiq zW|vQ?-+=nDxtAGc`uJh_~sLJ{@=U#z>CpsP~Gm}ozAj$>Xf==-=jzBj3H`c@cQ zsgj3Zal>eIevTLrP^@+;`UZL)-9z~59FKYkjUNbAGttQT#(H15*?u^wA~c@$7xGvU z{@SsluFymupa&_rs+&g*n&zVZuALOw>6X;wqriSSpB-BwHO0<4{;dj?U zmB#80p9zob{-Y3$Ge140+$P<1*slCg(w^m)3>Rq5VGN$Rcjjpf9v`zggR(>{8~1Hz zi6^CwL6+PAdqiaT2;u)h`5!NcJebT>DbL92x;1+eG0R3?T<(yTpZb;b@xW4GErc%1 z+$|_mh_R#OOQ;QOL+4CeAG|)GWP!_uQY{sXPV8H_tALY%l)zmX`ufP^Am>vc!E#DG z!GPWcgZrRLkd9hPhMW(w9`ZvhjYSK`@5E`qBn_y+;ejmUoqUdQ0HP`fFpcynA0@1Y z1*W`KhGZV9NPp@}|0R6E1ObtXh0b%YTJ$e^LchPx^6uUL9$*D0l(4aHy-H!qOJgCH z%qY20=vf+R&GYCo)1=`HT9F|#cgM$E{R7o3;r@9q2mDv_3$HpF@%U`WbYq0W{}1h0 zy>ClK2p$+3^qSE_kHi}^VYTZgpDtnsOYY4E=+R_luhO+ZLdgUT%RT9dX81g^ScU_% zp^$WjL&!*N2(cbBQvK*tpI1QG`9t_gU~lBW9TVbW&a{`kG>_HR$kr$8>qiHYBJCTl zFl5TsrXG$q(unP=KgyOG-E4>Qlk=3JS&x6Rkz5tm|7Wigtf(>RCLe>_4~S|A$$x3W zW%81b@WwDbN}r^)&qO}{-gu}Ip+(SP7}ME~Qyb+&ygyDv!Yck$^XWoSPQ#m54X%7( zc%~tTEd;WsX@bZuL}Y_|IoW;~J5p3i-I#c!4R% z)H-8FzvasP(W&I($=h0+YudPNd3_N7Nj8pv7IzHFQu}DoAFr0Z%h{>60R=>%s+31s z3z5X1!6gG|WftrFx9Djg3Q89!KOX{A_oC@eI@lqQ+Aq$q)MEKfKb z{e}lu20ci_`>)2_^*)tq-zo((R}4tA23>kHtWWxy-n^qSFa=@{(u96!d!xjm_VKBn zdHJ^IQgpX(NU38hpPwpsZH*E5gP#E<>4;BIdE8o+a=`#0`G&eneqebc|AEmGgrn3l zlp+f-UXfKtuf~7~2R*LiWQ>PzBJMIZzKJ9Bu4$o1norOR`0Y2a0AA#d`C^S4hF|Y?lAfD~wP90u0n~BkAi1o>2IH?Rhb~qHlpAkR%mAzGeb2$&N zzrM7znaWIeJU)4@RT^o`}_(4NOPzZ)x*eTf81$$kLT_zl`6V zO%7UT{v8unetK?}e<77P1fw8V%tT_W4S0<-sNf~C)+}4z@sl|#hT?}f2~sPDo$;o? z(;L+>+m|EFK$WZ=^a!USQ)~nqNR1dx=88H=QQ<6E0XirZHj&3+5v6< zhqK_`xur+hA*#!7=g(IJ4Q;roSV`&gOeW1+7oXlI8ORBO6g=EvY?Zb1u@7Z2jxX#8X}jw4K#oK2Z}4zW!u{C&MxA8L*rradXzr-vaxR*Go=B8^_U=?)R<}%U zU8@Z5@z$1af;yQ!6gbyH28eZ0YHi^+vR`^!ZjUyVIbALz*RL;j!TR*RELJhET5iy6 z;+>&S#2VTMJvFmsxy z+&0Ei?n|APjwKY5jMl~EWePQ(Ea2;8Lq;{9S~ZERh7~2-}>PP){(B>WysM^wvUZ0r&Xce!l2VbZZkG5aj!JOHuV=bAmTBIcHsB>md^m z91!*_*iG(Pae&1d^hWHiPSp6D=#SO%s&w(I7VIoDcgzgL5D0KG-Wzo@4VXw<3{swW zKaiYDHTOg8wMynb0!=RDN!YQAFSP9STUqMm{)M<)t`kt6DEHq4QdaNTu=7BVnz*h# zQ{0tJi|YjV*tWI%?k5A35tOnyeXtKo&0QYGMgrz|BW6iIN7)U9XEXYv8mL>kwqoT5 zAugeR(fjwJj4>s;w76(f5VNhhnB!rzp!iW=9)%yegpk0z&Iirtja&+y{FsLf2xR%2 z2yZMQDOy^#F?myf^ex9vz7d}3<^`7mMS%D6Ic2gqjqKbuid&XP|ADlhs0C=Jjn#{; zlYMu(ia=jIm-r*f-ATSK#&ZXQr|>5=6OoRhOsxOzZa&z}oh$ezHguLHMjrX#Zz94o zsg{U=s9Ed%$zrH!X0 zQ5JtFTMMh4s~Cc1ZhkNvbVB?-r6XaOA zfC@f_eD_+s+jeZ|UJKkZj=-u0p|1h^mHjim8>i?+6~iUQn~m3Ir=)M@#tDA=U;5Gj zY&)=KTE$t?@$v0%cE46mTP-+w4VL`0N_SAVth|COx0Y0Kj>5D$@7j6-v8T;R+2>Ns z+iDNd$91x6BR{MmXuUxd5-p^Ryw5pk!f)N6ZdH{f*3FN2(6W#WCP|GDZ%p&x0|zZw zX{8nym%Pqr@#=`hd4`X#BNQt4Iu``S|fpVaY{o^(XdtoYI{JaP*7?jnKCD zUb%f+blWkIOQ#{5WX2|nNQsTxS>y^2up0T3Wi-@suNbM-LU#HGdVwl3X+L-|X&CPU z>ZKsVkl$cv=esvLSRO_`%4{p4`;^*2!p?R>t$-B}S%)r2dbF7A)hsP7HtD~+{1-Sk zY1V*+!sZYh{-pXt|GlDdyRQoT$}AxsSU4yu6p((~Oh)I!H&P+ZPd$l6vNKwSd>DTm z%F1^z`b3=%j}$B&(YmXW0 z_l5*|7|r$4+J(JvCsQJ9A&n(lEd`vW?e{gfJ45MY^+I-pzOgh|ws^Hg^l&ixuero5 z;Whsr%18`CL;Z<985aF~loG6wtrK&&)4eYNXv{fHbTYAA{&~l0*zaEt2Ggo2!R%Y3 zJ-83y(4Oeva%*ncWU81Reuw3+&wHm$^}T>Oz-+~{+*WTKsDe6q$UUJZJ39b zYDa-nU^ViP;CuJMT)BX$E`O}04*$;32-d6IppAc1_oEaZAK}LIa`ba;u}XGBv_k%B zW1QqBJ52s3%L0^%sBZd)Yynm76=mU5j98U86UbWB#LWP^ElqqBl4RML+$FG-ys*G7 zyl|9(5B#fgI@GgE~!0c>BL#-SH z-a$8#*qNUkVEnx%WKv=2S7w6 z)JCbb>d~L(ZWg%COo>e$1a0@%!_7auYcheVt^L>2n0vVPw=?(h3O6yB-W2W zx{7YWs1(E4VCn~`EQ)%ShGU9gSsP^f!(Xn+#GD99pTe|F8)urgZ;{rnPMX!wRl1LT zt4EM4qKkt+5ZED{n&7~3wSETEiDIakJ;0$lR|AJNbW2nho=Fq-nr4Q*uTdAj>2oLr zv^SePVktXYk#gn5p(y9*$z5F+71FiX2wd+@zRuIB^7#H+*Wv(b{W(LP7p+o($zjjk zRsy@{vmE7fdm8Fx_@Sg&B!H7k@sp5UgfK-Y)(tuIn62Op?z**u`c~PBPJK!$XH*Gr)bQS>92Ygp z^uJGHqQ1IlY?mApiv>y7uz9S!JmAwfwzooJnSn<(kIq7|jnW0HhmKy_?PTKW=_e6S zw~e3FOB7@Rewn<2SRPTWtIMt9d;<&Fm5&bIY@~_4S$LTh)AOa6%|Cg=$%^PqE6w@Q zEYKtsx@^Tfhk`cVoDY526Ib;2_U&W_IA+l(pba7$^7xpsRom8_h~|K>PCA1awrx7m zm(=fb^$$rSAp8E<*@Snl|s7KwQZN^csGO-K6vXcF7Xro?De%s(+U zv~s%4v1X*qt$XO&>}Dq4Kl{bt=;u2uG7MgZ^!ocheYqc7+y{Q3U5QVU7wGT`<3%zs z{G7!#3n^)0euU7<0DrAMZ?3fY_uq~ne^%`pr6}AJz{leLf%q?!bVN)a= znKOrBT-aaB&Ck5=c!QSnvLL0F<2Ta^*!>FNmkX`wlvu?9=H(+Os|$Vd&4*vjo|`;9 zp?+7N*ZtOSA(?l(bD-fp-+!{zn?9xR8u{-XHO39>!Ob2(9@%%c<>sd2eD;J1$Yj48fAic-8?gIE!a?-q!<<>T!BFR#ppGY z-v;mV3-T@o_&Meog`XlgWp;MSF7^+#$ncj_@%xgUxv?6;{AV_zZ!ePXVIy{iSwYh5 z1(#n;@P`PdwQTMiYcXk~0~X1eatqI_jl!c$sN)$vMrKNTVxr_SgP2;$U8OypT2&XS zLL>j4#IZ5zo;5g5HQheiClL~jjswh>&Ol=mfDPo()fpf9KlL5I^Tfj_tc$nY>Zowb zsn36n+ZJ?Uc~)Ay_gD9u1%B@Ug9VA0;}ktP{AWyiX`cyRmn`e+tDBj3Bw7a{l=R>WG>xS1Ub-@nQZ@fa|{AE)+N@wMESido-k?@4i zWsh^TH@*i4ov^a5d%I1afAq8R9$E1qUH6M=_e0MMFE*V&!?$jsUS#}5u~k76gGYRQ z11Y{jUvdOVJ!InY*1<+%3~u+Ox5+&w%icCwxD;9*VP4`etiBSH_>n89Vt6jCqz{EcHn@cx7c&&%32l zzicp4Fr^|@B_{sBl-U3$ZkM5s2~A?gTW+(yF-@Yc47@ZGcXdL8IB$Eg4a?j_Qg9FJ z-rA0gJ`?#XswE!XgP+R;X;CE`(RcQMIR^Ee=JPOD`A*dD=;n4HymXuOT6n-Lg()E5 zkS@G~{qCPJo*V7Rmu_@Mv0r7g-=A!ztZY{+p;84H#$wjf?g%SEymh1fd zgg_`EP=*-2MD;I)no{YOMw2d-V*(l2=t|KTxpFc>pN)i$L!#hjs9+QCHva>l3ql-$ z?J(w}&+v<<`uXW3RX#_JoGL|&W%qjh3e&M+w4S7 z-<_pJhaX`QpALYE!CWfLV}y0$9tm*mrHmnLdg^Am`q}89jI~Fdovqhj2)2y-O$Gz% z9bW4O#)EU#Z2`5;=S9)A)s|#&`jIj;j`UM{S)5nsXe5aZk!fVujx2qFd^<7SRTnB7qlz1ayQML# z1*d9iqGqF89!Kv?c)7#l_n42@G z5-_Z&IXbrhyokwJO(QSq44GHRJivzO1RyqnyhgJ#k>1+I=MpYVEh%vT|KWv~&q+v)q=i(Iig?W3&Aogg&I!n{ zr7rAtS|Lfjsd~g_su5JiotEG|swK;$%8dMQLjC_4hbg!FrR&?D^JhezxB=5>BEQYFDms)7c$#7 z5VM_N5mGNc<+S8e+>=v#a2XAa_Yabj1&}(2`;-#(F!OjDDj4)s7iXz5)Le3n_*fhL zl{ohJ?d9RyZ=?1aHE(5n5)o=s;F0z#boUU22~H;AV|%U%f&J{_x|Vl0*B!>k&+=k5 zqBSzX8!^%PbSm-?bC_TgCigib88!ZFpfiA8KptKPf<0j7(_ z2fO)@2L^IIh2Z^KAmV0s#b4hg#K(1Pg?*3uftx&x(W{zD$>^RSi2~Swve`$I<|lrw zAzCFI&Mf9FmeIFAQJBSTONfu_|C9}nyTKKbJ@3Xech^QN#s{Hd8_7`*6G zsOa2n$R)N;w#^Y#@1ZsOMz_$GZbfz{H>Fs{e^>pD7H6R!*aaVmWl)LL7ga-Gr>z65 zmVur{mg$8%(XM)brA1rTjJWltcR>{uGAb_N$!;+BEySv6Gzlr764RwuzY8Z)%#Q}l zy1S8e-Qa^kAH<}vq<`*l)XoS2ARw?^u3HajMQQfoS-_56q7|$9WekDn1w4-fyRyPD zSb>2rrmbCFk_S}gqrW_!9uwQtbmRQxNwhj>z^=mRg*@UfM07(30D0nVTP8!rW5jiY z3{aM1tY^PD^?m%bcadsjtH{ADEwEC1U;;9ne>?OrVgQoGbUMz)cy8jtlkX;WI48Uf zF8bu3`|yv~r9BaQYvrAZtgu)GmrD(_2@%HS_yEa)o|-Rr=I^(6FDAG)yz%4nmXc&U zu!6ZZ7jnBh$fk@%zr1&PqFeD-f=b@=qqnSxrprwAVKjfF3GH^91X?@;_57-NF0v?% z-&>b=VPaAtWBcW~M@83?Mf_LauD6+14LuY|x4O0qXYojE)tXgp`6jb8Cmq**U%hO> zFlrY~sygjwEYi_!OL*7!*1;~F2M&IF5BhBAe#`X5KOWwXDGr0B>cQ0> z9(h{n4xU2aL}MEbvJIAegeZ^K#Tz5&HOJ+;&Okaa&f?weA?dA|_-9b%Wo-^ku7$#W z_TE5$jo&-Or{2~gx32Pjs#jGLDx}(Mj|vYz@TjL_)-D`9j0^${RGO>PCm1oFbNd79 zOk_|=sTO6_N9WL~3+?)tZOfhvZTLMCi62ac%QtbrN661}UDCuzhsomYWsPwrlC z9V$0Gxci*f^J`i#v+e1xQoG5UD{b&ij9LFcAKxybtj+QgO6v-@0GPQN9U0acd{G+aC(d5H%et;|BG~GpT2=kqyF{ z7v&Z1C90D2;~(hsz3YC!Jm+~h^5Wb!U*mXW`W=(abW6uB<2?XrEW)r!Dz9vl{PDoB zA#qFjo~Oitn2f-5F6KUFHuLTGe&UhR>KZ~Dj6d~FpqGsT;#_)8*SiJM;XmSLD6y`+jEHEPG#i+-Tkgk zlwfSsN98YLhE@>HZGG~!p&?q)q*;Y^@Mr%lzD{jiFM${?{FUFxEO{YIO2}jt>%U4U z0YNTJ1h8?iHwtO*wyZL&xqfhS2r|9X5mbaM;YZFBEyex7Hmo?Lo>F@tnlJP`(-7oi ziIC6+#7e`UBr1P*y#p**l&-rJJ=VEs!vpffFZe<8m;Yo+3Ah`EK~e=wn3zM#bgG@;GjgpuXsO!;OAOO7OvmU=9_=&b3y|y!DpZ94V=c0^vD0;4*sQmITH3ad z{{)h@C)qUIoIB=pxNU-w;of4i$TPYPDa5>}>h{FIC6=0C!LMLdD8dr;g+4~m`ekHZ$!_6=q1mi@*t z6q|CEm?yUM3Qy{$0$3#v?`Y+nXUkY}d%M>*Px{&}{!MS|>Yq`dujtZPn>+L084~STl;p?)j$|tBSTW(hs>#7%ow>@u83~;FNI%%54auejgZeXQmYhv4L{FK> zFa8HmRugiC_iTueX!<)Y6O$4F|fUOTHi6mgH_NJRkx}CP!=2*ax~V7vTD;E zFjJlsrTRF;chBxo^O~lQEA)A_WaPo6^P(VS?Ool7f%krAF0_K&%Tb1EBTZf*a;}vo zTwF%ZqMKM90B8L%#8>80l4Ai|?833O=XCVh!UZL>u)=TfWVYl#jl#TCOv6jod80=L2a?J8{H0RBjEGJOspH?!aKP$LG zbS!Vq&#}w`9rcK^C>0a8zf*N=d;l8?`RJ-CuMi-HMV*?M82J+o)4IMm0Psapp_W{7 zEjK%bgSwY-?E#p(7XGU?kjCT9gtTzn$G6=cQ3nt{q2mx>F z-p6F&iVH@@L4oTrgnyvhl2vtFM%Eu=O}an}`#to-!5p`)hnMj%x*i}2sIWNsJhE9g zzEUNwK((`VvA!>V>Wyv560iIRl7q;Oloy_eU5iN&;2HJb+gt9F zf~WsHv*~AP=)OTm9uAocv2o_I0jM~{0-jL9drf3}fuCEnMGS>|&-{BL-L9Coqc*T# z+noYFcni`CUXUoYR5l^$H5i4n)Z_T`KLhE$^?zq@&b{aJct&N6ILeQDMklRc(4Fab z$vchmRB2HVHDly}l?i&2s@YqWk#0Df9!insz$7-w2e@@B1!zY$g4a7u3SEdmohK_p z#fL28j~{8l6}+KSW~UkkFo#|FoPL`8RKLI4>Hd2ys04qrFQtBLV$^fxP(3_aGLxXG z9}1#A5s{w2vA#l88k!Ki+zt@N@ z&L^I=C7S03-pW)Evg&>ygmnb7?g{~?C02A~+T5E#5y+#5t)N3Fk@}|@c+h6cYcDlP zGHyK5*Lz4TwJ_;PwHfa-W+jf~{ceI&)IM(!-YKJUwcNh9PAuZo&!yG6`2_fnXi=G{ zz<(guhSR{f$i4Y_&C!`ahU@q<&Mi$-nSLnj8K%rFd1NjU(w8Oka@Zq*J!S__1;=2y ztjbWhP3YR2r{%2PX6}&yKr--L+VoPuZSnsm160VD8Atw(^XO9wI(cOSgtsaK!GIc; zWv68uy*4>3Cv~FfHSkE;BwPYE6F;s{GAlkWljsK$L;EBnH~S*8_f>X%nUK~}pu_Rs=y5qyBhhDbtt3=f zp|_&x2g!@hL>^pSzA{&KEsN>7_G3%Afkh8cE9(RqUVtJdjSj3&fLBW%f4x+Zb-Ut%%xcP8O4g|kwWI*MR z>kMn@H)S5d`>~5#r}T)(LqXEPrX`gvW){z-Q?9m$(ga%E8B2?XlKG2d>AV0PfUC>3 z1cC5cJ#@i9hX_Q9X$)TIi$7k{6kIBRf>T%Z?L}2SaQSypCc&N8dH>#Q3J4=9h&Ma6 zu!KP_>}JPnAsop-&0z72=!3A)BFU8Mqh<}(ZwLs-_0R2q?8^;yrQ;5x_DXGO3Eoz zJmE#DpumznXP}t%r@zDyDK}}5Aa47~o*G~_u3}2l4m)X;1d(ycPmK~tQ`xwK@cpvh zYiD_W=GmIXzu~dUT&F&Qe9+PrjMXX|o?*y1hG8JO=(~$Dq*t>Sa8v(4sp09S(!?em zPvmM%ZA*W+vmh0<<#5@3GBjr{ByrJ!G^(EK$~+Sw@;2ggXtWe4@YMr?v%$n`c#eb={H0C*~$H zIW&Rp8&B!s!T$plhW_Awv5*cj*VtQN_k+lOx5cseV3nH8cZ$sbfjCNxV}JDl6X*!- z{015drmP{wBO>GF)^l)Y+h;&_j3sKwmZ2wy1AzM~gYvSsi)K*f{#PJ+aP{an2N*9% zS0VM`oCn``;?iyxhd;$^ITXJ-=R5Xx&MmNt+DUT{(M94$Vk46BP>f5bU-vjs=s~|- z^abdzI_UjStcgqcteR)P;u}V$_pf2 z^%>n`?eJTR1g1#uYymRUuQrHy~B4+HW+^W)iAp1lOETMk3xMLOfqyI7rZWc{y5Y7M+(FVB=Dx zwhZW`Iem`b{uaH*L@}zK7vFC)8*-Q}H8%hCJ0Ng~{fh%|0fC=~PZA|V;?Z&~%9^H{ ziR%s*F{`9y^}mn)T{HJq5yfdKdXi<8blzGABkTrGB$jwiVOmxGfu2+y zyx)Q+Dh0HsL6g2jg+J($Y}SW{BXdu~_MqR?XBhIEYq{az`%k7X4Vliq!}0bT%Qk0k z{?!iuGX+3uBIqi0DZ~uQiK&masTa4hOS%sWEkG^0{)5drK(*a=^z_G)xNj_-EUt2b zjuBaAbDV@$m0FF=U>^e?&M|&mohfG3@(QPX@|x_+XCa8a`86L(tpz|A9JOJ+jxZ$@ zh5Isv!E~)Z_umh(P>*Qd2>8?TVQ-xfHAl8T-&Wz{ujuZ>(zj~>hx3_u1+i<4PlH@y z^vqK2UFq$zZk@7GaeB|-yKchl?Uy~t2}j6|tQNPKOgxR`))#n|xJEd#88z#UI?`gA zWwlJa!tjxGJ)&V5rx&G(T6)vHD_aqe>KxmBFmN-3nj}LjvY0?<4ex3Z>+g{6b+-T$ zq)Mfg8!*3kT4sa%HU4vDv<*}#6cIH|xamy(y}!0f+p(~!UcrEx&fhs`kKWJYYf4sg z%j%9!K6=Iq>V1Vd%}`wq;$Gj&J?-%B{G*ah0K@mb)jB$`6H;{LvvI-MFGuiS*K$%? z-k3G`+35F#Z6>?@d9A6*s{xKxZSgEdY0BoIO3=cgaQdI)k4%WaG$Vo@PqSNB^**^W z9{tC=MeN-FG+)U%Y4yxE5g6BjN6L>DpF6DW+c}eP*XirSkFbEpd8hw@44dph=}Y6c zA1R5|&7BqCAz9d&pSVzQ^GhCec~-zcPF!pe71Nw;e4zfT_uxU7>^XfK6>Jj;J4&hc zgLAQvk>`)|tHgq4o;Rs}{qtXqy(ZmR{mdW!nH}0=M!HIB4~#vfqNW}+f(BE(rl;#> zp}uY#PjWjt#@>F&D>kT;=YSPUXUVRp;aS4&urrhOJ=<2`rf~Fq%-N7^VR)84*~r4h zO*e#DsWu+nuTgnXKqs9j@j`+`W!SJ4a2LgLV{k|BaUW&;Neo(_-#-wnNoJBM&A3Xz zz0?j$sa^yUNvrt2TMmvds3bYYv$+bT^jJhp@ySW0azoy3lq=U^a&qeost)r)S-Ig$ zjXCtXsx$vUl`|cGLq1_T#6DT20lV3NDenD5QnAcJsqB9POj||)4RDNizB<@wQeaw) zG+O+xL^pUpXYHxWI}Sv`AJxnAPI@cnX{-0lQqL<2Ulyv6`jlD+DZLry#H0-ATDRui zJnwCMup`FyN>1Wv)_-Js-T5Z#Cmc}BzkpZa;?K;p1G`rnOLVKTcK@zl`lAisvOE)B z#mZLE|BYpXPQRAacFS0<`LDEJ2k|trDoj8~>oYxO-H;8wvCeB@iO}Gwag8%Qw&PKGI|LvQ!wwGlG$h^C)3P)UzEPmAj)}>2J!` zOS+$U2$`Tw9d@qV^LGZ{>$!lvHSY01ywsZAF!QM=(#UU;4coM9WM=mF>|!`!z_{fP zWHzVmjdW%u0rK~0vH|}LO{sQwBXspXk#=BEX}1Ozy*v_wC0x4)S=%)@Ca}(!75iU_ zVd@&_Dha&v9bxX5{sUcjvAuX;`XdB5K4TG^du6Imraj%!!sigyYg#LIrPB~G86bz_ zySz@!J(V?wMSYZ0;wpZqRzyZ9M6*h7qJDvaxfi+|V*8z30ii&$M+(Php?sKU={z^M zS?V~DSqz#~ZS1Z2%64)$gB-z&ZQU z-kXd!6t;k zz!s1jJ^|5>0VtD~OhIgb0~Xuv4n*zn-|wqaXbPsa!Q6(SJ4rWM1140%o^Fc%1BJw5 z^up;yvVkXocP3z&M2REpjHhOCjya}=`CdxK-8+O26|svXaJ$bI1Jj^Vl-U7>-f^55 zdHKlVn9!*w{zrPNw*7?mZ*QT)&~fw2x2D*(=NnBr_uOTk=d!sJe!i4+Qg)d4f4S14 z@UUR&BFe&r+FT=Fc%oTVJHCr8A#@#Ezd2N7=RUg;FZc1X)sHePV5uPC#z+=7eCKb+ zd)v0{pN)O=XS_4(v*Z2osY%twPwz#t?KoXso7~L@u!Xl3kMtOutuy>hY7Dh`csu;W zz16qy#H+m#M@L%jwmJ%m!a=vB!?0FL_n*hR##jynI@iG^oA^Tk&eD%u%v{Ke4Vem@ zy~#q=uxrhoheN*qdDHjJh@5ogHaU+g;$1NbYq<7itn=5zj(?!Bq4rbDgwwjRAs<>i zL)U^{xqCe;G3QA2-mrVRAm@9T-t#_T50bQ5bkoksQ+=+B{5$G4i}%iv#PYZMogdw3 zI=BD$p2PLAdaJfd^RGN~HL?>cz@D7M-qo*XD(*a?HyoESJ&)`epZf3Y9z44O`8%ln z7Y)bWpKwq0e)9Q^KD&8h>phoCUhx)-Q_NHSv#y6crxwG`{1kB1BZfHnucz5m)?IoJ zxaHWzR0Y9{CQgB@KWd~od)}LI--JIb7D&Ia*r5Fvmeg_Wlf0iXY>SNy*uPf)ftW&V zZQ2R(NAedd{PJ7p%T7Nz+xLDVm3Dq&EOtVlrE@1ral3i$%n$NerVp+2&DQ2zUUm>N z;CLS+n$UmJX!YGouK%eR2{_E2O8vxlQgJ_S&bZAA8hMW4J%@{DomHSqiVaB(QC|Nz ze`IQX*D+mH->WF>qVxxM`j?7RRbdfXrcVM(FO(aA1iK7FJd*`88frhT|9Q)`d-0;@ ziQ_+At($n-j4m!bAZy-vhq1GP+>U3B(BF%FU!O|NkE{~|gPA}?49K7n zFD+2dk89}$4o|Q{02-QQwCeclY4sB%7u8|#zu#9mcAl;keNRw)^?WL&n@>4JjG_S5 z5(&0`nDR=fBNLY+9jooKjk(e?GDlkPm>+BOJ-WlR9IggaFXqnk>}uV53O_&HVKZf~ zLXZy>uk9VK*W#)!GPUukiqCGkcNg2u08p=xaySLqtY)ohmD{Db#MYqm z+7mKB$=JME$Ned!$2zWdNg6ECuSZO}R$e}SGczM$5~@W_Yh`-%7?~u;mh=h^5dM#& zvyN-(ec$+CzyN`f3K9c{Qi_DiMvYKP1q2Bd2`Q285H>3>bWV=llDUKlWnh**VX7?)$#3_qDXX4otAQSe7Q05O6GY?e_#=3pKJ%cCzP# zNCpzUYDqO{)OnK`zSkD7Knkv2(}cWyA1PnKS)Q2eEWd~_K$E%@08vY07~ZX)DPI^4 zD&}vUkUrB2QlNJc?fmaBy}c~Ru$9;ts)0#Gq;`qwVnPi`!+}(ko$WA)gV%p1QeQ(2 z2$Llarns@iKAwmZw-;-GdM^!Kn}4vw?!@KOLU}$*!N@8{wueO`rF_YN4rDEt=`a!V z4eT?K=?7gHp(6`;>ck_zwQWW!R`CqQ5Y`7%#KZf}NxW*~RZz>>&A}K6-RAy&zGR_F z5#*192!cyjx3st*g1+_9ieiSX`{Kc?C(=Uf(04}Fg3fhPBSZ94esHCru$B5t$vr~N zz)+Ban$Bn2$T%io8@5luWu9JR*tVk!v;%Q-iXjiW#i6f)^d%w!04f;efLhuel(2b5 zS$;MnSb@2R1c9IisA4~kfOZkH*B$h4O(8qE9?os(9dJa2;&S>$RKbs*&>cL&Y@z-zD&=#vfWN%cx zlw?*xnUKg4U;JU^DO)F?aC%}AYYqYdHT-xO{*YrTDT-JMxJRT8S~xm}7rDc7(3y^_ z6z7T5BG?zChd8Q4!N!SCxCG zOsVxwbFQzzW~=!oDzCXK#mH)F<#kJXN|IK|6Nlz$%Xca{a6o+NiZMd);5S6vvsFrP z%@<4Y3#H$>P{bzjRlw76w8{xjA)r`tPEha#ppDa}_UQ-bCg;KU$zKrv{&8 z|6Z?gPMmMUFAQCq%TW&ZAu!1BzKQK!yzXVw~^fX+%h#HiLHO9HGYtN<#;LL?VO8at8)-Nd&Fure`=jUCg^U z$h9yJlH~D#AZ(i1D>Kp0VDkpna}9cUEdxKT#Hg6^PO^^N?*pCFV)uJdp_{C)zJRg> zI&t@s7yLyc(KdT~vm|`+wKy05o%-xLEQta=h6)xZ+o-tm&pjkadt0C|pe0*XZn z;PENmaQ5dUZRAt3t<#N(Y-7KyZ-nZlvQw$%1P`=86MRlNzi#7qW=w6YI`0|#-I-Eg zpk`Xjp#_$DY6EC7US1mN4q{5dzH3DgF*_z<0!Fi+TNZNRlGIKU)XB3sRcLo9P0p|K zbjX(fWi=TEy`loDuV^0s5C;~UBA|>Gn`hJOhxY3!?YxQ%*E|EfJn(NvlewT$t0Rqp zITYYFm%+GspE>6QJ{4H{m@pY>{Q1-FnjZr|#Rtr6COszO2fs>qT0G@!m+sHP%8=ru zTETv`k%AvZja*jSbmCZ{c{ERsH&W=LiAF1oG@VFhf^&gRFM&96+PU;l=O0h(e^v0W z`8><5U)mH(u$>(8X?y>QS8tv7cX4(C zhtmC76%4WFKhW3dOj9pJ>@7=@msS_GRTOm+Fhzh%DhMKwL=jvJ9F+=^Q+elmX{wR+ zY57PQso3~G&`Z#@7&pHlkd|HIu`53_(^vXor->jFj08Lng-nV<=Fwqfsa?cD=Tio@ zX|OX+zt5U0Y`2B5bl3DjY&$61M-OAFbxd{c0P+QEsp&9t90Z39&9K^xw!a=YFv~)yrzs^S0H8z z_An?`O9LlEbBRAdC>Mm}ETHI70Gu;ZfW3`~qL^B-9iI<369J7oXAhd!?5E}unr(mV z33;b+w;|_LL|pSAz#(CXu?YjTzao`YHr%!i+IAOi|M(Ad-@j$}iV`{|WkW;G$nN|l z3>)oLQtrw4=J+=QvqSY+dN00(3P+Lz4qP`PwwF<3#rptEef!cy$L~`iKWFqP1BzSm zcOO1h4F5PAUHdZFxF_sYHO1QM*E1F^ol^0o`;mtTp@~c{&FRS_3&KCD)kVz5Nv%V7O&e~Ft|FaP7(VIO9+J+S9oJLPZPR^HDU3_LOFoL(@ZVcewRNlK4u z4dwGM2urtNJ$(J8-#Uq$r2mXR@;+rB+m^q3Zf+(*BU;;f?ywUyO8xA6;bQ z@XFtkn>4n0J`vyZg_Ims0F(98I6ra99(*iy*Iym_mDbNXkGe>tUl@GlEc}XDr^{~J zNA-xJD(p>@CT=`iIYW2N9-u_p&>mT0S-^SDQE$S{~Q>ydZ=V9-;bsIwWq>Q}Z} zJwAD1-;71;QK*p-hM8Kb<@ZN%rcuNrE{_p+8ro<=!w zWZfD%!Jc~;Xw<^+7R9SY&z@?&IC+n2JYhylYIL+2;%n}FiNq_qpcDuU zX|Obo921YBJ2kv4z843an5#GC^+G}9bpjG0CD8nL)|p&@o^3l0LlbHk;={u!<0(X< zcSt55mi})N7&m$YdlwESF{d@nYm+TL^;3+9F!E72e^j}y7otz5jq=cNJmBP)v;-rd#c@9TrGbRNyD-9JUI{zhhvMs=a zwzTvNMBO^wV)^T_0+vj%h*L3>z15*X{MVc4as91!Ox4WBYNX>yG5VYn5Ad+DO?}uN zIt}C4&DKyflOkU~*2sgLp2y7js#C&4?MLZL;s>QIG8G2Awa${MKK1Ewa3D_D-m$pw z+PBLO%oGNdc7I+FWc0;G5nwjk9oOUH*V@LL2%GQm4H3uO^!wGxgn6s>tw>v$s0Ha_ z^KBOVwQ^pCJAPZddXt$-3h;kTDkmSCXFp8C{?cWxb~KMpwEKj-*Tc-@aO!_1e7>b5 zBY{f~6ME611zXuEPl|3DahVXJ@5{If*I#~i{5Y~DVMhZ9OzPy)hhXhTa_L+&^0wN3 z(DuWSp}C-@YV$5$4c$9g!K+8#o;~88n)uAn%G_eFTQq;~?XJc7@SHOji5UTYXpwCQ zR#Svl0eEAr9{g=k2I#AyjFS%<-i=iI%Uj-mqR<8D|Ayt#mTifNIeK&~i)l5XYs~Mu z&)SU}ZiK6qqzE+D#OE?zQ87)NQw)n|tw>D%=6r8a^mh`g?Xz_;fs+hi2=hsd@8`B_ zjMoJkX1m_70(VzWD5KBK@y>;lPx3?0-7@v$2SNvyuPPca2=6Y;6Mosf0*c^p-(br6 z{QEesYmZ%+mGiDH-wO2_JLBsue(0J|rsa&B{Pqnj$L^_DS}(~~`wYJ#ukz}fM``0@ z-LG;^N@5mm@_q#Y;+X^W3fi*T-3USO8ix3c?sAfd@+OL%_PflqYRcW70iu7EK>*_+}OZ??}_rlZ;pSASPI;lhroB!~dXt}0##l zIBJ{s(^z!dv8E%vg)a9e=B%*R6K!Ho??{anhWM{GC!t!(f~L3)F~r>nYM|h1yvmQ> z4*{xXwVd#OKC~pWu^eKNu0B(NXx}G4+M2$H|5{jPGzL1_OuKl}J9XM~FGkz}691!? z!k=8waCP7+7-(|*ppl;qUFI$@>%>tyQpaadX@3EK?hYPkM$pvV-JM7QVgEdneV{d^~mv+!e=-n_l_ zVXOJ9!OCwFi%evvU(VQPV~3BVL?fxIc0Xn)_c~CN_GZ3QsQW-A;djGs zLOvFH2Vc5VB16Bkg6lGw`bhuM!-9E*CuU-d)lB(odLxf3*jhZG=1GJF`sdj?4Z*TK zo7pfC-<)Dt&jY)9L~rJndsWF2L#A`T|8$F4Ikft)Li}GQk$We*iV-d9!mq z=CCQjSsdgO>a^TQvXy=QUXA2cn^KRYR?>FSJ2WPegQB3n5Ou1t!eE*(YVU(^Y`{H_ z$u6$B7UM-;gDov`7X8BNJ^3 zQb?~CyihZfI|08Da>?h|AC=4DKmP|puHN+ovcdSv`T@kmBk zS#^^cx;}pC9Lg=k!;_~V*&Ba$AR*TcQ=U=?K0Aqg0k&AT`bL4G0y*i z#-Z~w(alfsjJ7D?uAFik&v{j~e&yMS>0d8-&#mwBn`g%te~TpZyNn;FzEXQ|KPL6J zw=rHl^wrzL$M}iP%Z3TB-(L<6-xvi_ivYQGyq52Uq(ogmeI`dyEzMy=wuEV^xC5Vh zX$?L8q*4E&Tz*E2R0bw)Ef57#Ci0~0vL&1WaFIi_jQxjqbG$IJrnUyzQ-43m=#5Dv z%5}B@!gW3znS57b*b_(q;PUas`6ovhlJ<(4=!&}vJvVsu`ygK0qz}Q>d3C=YpZ4ce zp8oLLU4vC_wLP{Z&-A?ur3*Vs_Jt+)m2;$Q5&nI&8*|+EGdvwcxu9ZQ9%lfz6stwi zbln_#DzOQ5o}P2^6Z6zAz6ro5(L-l{n{<5m@&0AFOsUPvjq{vMc^4ZqeIFw6{ZAL9 zD-7jW61y)g3;&81xDQPm6OW#q)H>&XLfXB^i3?SyG6nXZuXoh5{HL$>sq`c2qc=y$ z)n7BvfU#>B7MidDr6@~o>)nLGpN~Vc!Kb^djuwtvhnD>?cFiXsk{1-Y(FQoa|25|{ zGld7!ep8m`I6fMg9X7KfGDMJ&9Lkeq3z-l=5H%Ik)sPSpK@@zw#qgC)?zS zf1-&NMjX>0TC@oZ(Njyl4|qpX57up^iqI3y6~>>xTuO00)(KI!5ySiYYE*%aLMuAU zqmqVe!l(w5zi1!CH7lkO%LUPl;m>>3Nl@fs86-R<#Y7{vIwXP}U!WA!>BUkI z>=7<>xxg{cY^O7cp)o7yoq6hI-=vhSb-SpUsI%!Ih@t6VTNGVCX4`_in-hWuiH;aUHZKu}&XQ+4+ropYR=amk(V%LOhvRl`LcYv}WV8pz(L$-M#))*F7I(24*L^Gqu@QPA zb0?ue#`!QUyy$LjjYrOWiMgqLkMJTW5zMy(9vZpKJupuZpd^T|KOt?l4sgpB`{$ZN%vC(6YJIz@nYe}gV{ zNMwMx`T+FaekiH<+SxnhZQ?DL`N^Oo5suSKsYAYMI|h)HXf7yaVW@bwa8lb$eX67R z)xyM@8d_|a0YC}~*jawjF4;ontOxY%^&?v|Z__mdu7MR7`~9olzK^JDE7y2nb~ zua~{D3%o3gPMN+mGX1wwBeHRV*np!Y#ZE^rTNYC7K`K z=buyPV(RFDxfTLW8n!=94ACfG*8|yVO(KM~W+Q;iz>CH+DLF}6y{-eK@;!d%xSrw~ z2(uomAbi-Aar0tDRBab93B^HSi{`qF+B(JFTE#*z-3flGyi%I;9E>y#trU88m@4uQR#I+qT-q5v$7VcL7AUy9L2J83PB>t`u!|^ zdIn@*P^O_e=w%u#8Ku|_iexx~l{{sRYTe`#228W7wC4j%*l(h*tRxkI;8r3qYo-o| zf|qZNTHzozRNycB^NF8>Jf~fz+U@Jsb99f)A3xUevvQs421{vFn7}6&&FzIv=Oz~c zxkjB$7~r{-y*r^jX{?;6T!UNCAe6!flk@;xo&boWdUByS4}SEgZ1&4lIA_Ax0XXG@ zmReGr3qpk6l1lj8I?IL79FA0whzc@qu`l3Nb%d`H2cy5_GcjLjUEG0;3{Ai9ZE3Lt zMQU|PG?pe-;E+T%S0RcbK$(dJK)Ma5nQ z+93C+yh;hnEEikX;vzQFbudz3z#%Of;`c}xub~%lL@gv&W!gs(5gKv!5xyPblJD^D zpfC~#>z-HxCP|yA=7S?>JEazjH@S0q9~23W)>Eoe>k=Z`90R>}TWf`>`VuY96vC%f zdUK+VPo$&}Q?_Ch!4Gw`r|1|R9Ns3EIC-?&iGB+z0NA43P|4X$N1VPtd6=E1a>~A5 zRF%V~30s?R*&#Pr1bR7jGvE2(Yp)0_XD{DgYiYwPsU&U=$bp}q20=s3sslr@eD%S5 z?0wr^{?HvwiPen>HTdemY9y$OB&r`a9@qKmGbJbak8GQ4W0RTLjgryfO^?9-&=$}h zvb%H=I(mNf`qj~`Ih#(2ot2^1ROVMZ-X)2PI7Nbq`E)as`&T^t%31KHDT_~YKlqy@-r+T!8jN^I&VQ=FXo{L{-NQEUULK^CQ*%v zJ;k;A)FP)Z$vj4W+U%e%l#!{D)|xQ9`Oa>%|0=yhu#>-?VRaYgbx45S%d}z`L<5ZA zRvYW9uDGZl{J2r%CREW#4Gn_BVeNGjLn5O&x?~^yZPD;b&fB)!R8DE`V@q>=S z;8LFjkt85Z?SJCrtN$-fZsmE^FLw8HN=@$iKnekNXMi69Vq_yCsni8XA=nFqLJA(< z_gbJVh^ih17GBhzV~|y9jY7a|vM2XYbIVz}X=e%S+AAPfBmqu8D2me+Z)NzId1+{M z1fa@UNC{d7KVemSB!#2YW@c@+5KQDvVfHJO~@3}_&Mae>*%$KrU=<zU3w!zt3wcM*vNpZUv$tq{=#_!>jsWGQ) zx|B|Db~@7tT6#@(-G3YWKn5IooP1a1?hKO$i_$kQ=Z5~ULw7p~Osi2i8fY?oqiYvU zH1Iv7$(fW5R&=#TEMp6N`Uy_7h&&-8)txTQ(YYL}& z60w@W-iaOvs;?HdH&3=g>>&x}E52KjuPiSK!M(_xHztFjKdo`22jF56%Vjw0>mslp z_t-B0ARmCTGp0kIrQguM>>rzE;3O;rg9?}Sok1X({h&RK_2+fp=?vb?RfLJlewvXH zBuegtAT{dQ6V$uL{`^%kUeX(%bcKr*;|iA3V0Ex^Z!$1`;1r_B8EqSv1`5+^Zelh} z_@pHsY&n`*lAd;2&R?mZFdoKQzyjuB6W;sYH75m4XKYt~YJBWnKye5K;?Laqa;CA% zZpQlETKVLK4U`i8y2BIWNm#!LP0ET;d&+S-@JgUq zgm%f1$K}^I|2kv``gdv$n%r&_16aU>W%jp{2#r4XZ99vVRPBcsTrdbuu_dLRmp7bm zB$s#By2{mv%u+%`Vn+ChG7|wMeLl^aEIt6*MN}0V=5ObSX}yDTt<&TUcSP~2U$-~^ z)y$jySl{W{yxNt=tnL7Dl1)jTI}B%pe1Hfw=8mpEe~9_je*Q0@`;J5K z%$Tk9N$g3T6uv{k!R+;Kt>5`XKk;OaS6f){A2#&-oOB)S_z3n&!kT0T^6 zIkQyGt}n?mf~5fHNTFQaiuSMM#w6RDBeDwrKxu#=|Y6Ol)gF0r=uq zFMW`}1HN##!)G%;?^HOL-8qYY=`zdBwwSFC;@JKdbvdaj_zdZ*WYph(7I-e`v`)Tw zOck}?chaTk-m;9E7#SE#5Sn@a13CW=z4TXk9>rqUySOTLsiwy1B+sf znIn_13g9Bn{c6&rw9uH39Wk!cZK1qw)u)&KeSEO-L(uRZ$N4gcmp(>GAwC7nN&?Pq zcEn~6AbUv4xRLUNQ-40LRZXqYy(K7qbOdavJ?2F>G8?$R2j-42YprpO2t&+7gY^Cler?U}0O*TNnz z5AO}HJ61djhr0R~u!}gT%WAX|bggv56KG=yQwSYf8-QdPB_{tZ048P>J2+%5;kh@% zZRF^aSIg!ea56BD6hUvf1;&?U!%}y({#}><4&Sk4jGpGT=u*(%A^GK`2K$5(dWpty zH3CNyKrcKAekzpFPL}PAJ3R}OWnH-(u6Ks|K`_7>a|m<4pzqE`d|z>SF2z6SaGFa(I#vj329?1804K zwrz1aA`hGAA9-hIo?c&Zl=NVW?Vp9Bh?F%otL)R?bA*jCN<@m71MT@-V*wZ#)$oq` z&WxZItv)heZkEisWC*GTKj%hL_sBLDnl}P;=XABlgJmXKdYIW2_lR~o(hSzstO&wX zPbTK*q}+&0PrtYF(`8{V=!%-_50$0xr9&@-q(~5OP&$!i(Rj@ccfMt&q&#o}5hRZ% zz63x0HS0G=VLc!T^-F6HF=YlUd^!TGUY${GBAN>5C#oq_&_01NlJN|q4!sTTW+R3; zKpbTc=Q7gnygdGryBIdRUofr3Q2-GISTe_4!_8_X){3ZLb}h&nWG9!Y3vtMzec0sK zP1G_melCW}5^i&qUQOomPg;*T^(EtEbiO3?uqgOxgUSH>}ca z4Ff9^J93(2ZPs+ES0%kLOxua`>n}g*fPSf z)xy8HFEFl*`x z>?$c|nwPXII_oPswQVjUtRhh2Ht<`}cHtD7GR(OqMqVkGb*e-rB5tfRg+((U(+Qs;2r1glF-dvvLtGP-4{Yf&TiF1TVNz@h#a#|g1O#2m%OvU_JG3d0{$G!9}XtRsIrE7nG@ z4KA6^Yo%yy39C{b01^}#Sq3wV1)!kKnV8T&c}I8rNE2!jTGN#OOMNU6SeJ9`rJ*`K z{m*deB`V}eYPQY*63z~iRpIr~gq(cGc$M;_|Jn-wq4T&>)(F2Io_+uMQtkfg=NpBg z8ao}524t1@yq!@O9m*~l!llZl`7(dF>mv2!Zm)&63biS##|xw!I2TF_7_J!}-ghlt z^fjk>x1R?buhg#?KAQ65hJir2JB^K}`0)K2ZWh5`y=Ne1EZU1yjjyXPnv_aged#N^ zA0~07SJjnWOP-=dEB;=8?B;#tNj87NcgfhPOoPG)zxxt5m|SJ8eG2e{0A#PZyru<% zn--}3L(O4a85b+PaJgC&J`hlQnJO$38Jq zDx9QaWofB!S(>Q!j`cZ9M&u!UnEfDYNYVOl4 z>ly23mX_nysh=LLomGAL#rDDULmSCNn@2xm4WA?#a$&!H`=-PyJ~9jIY>u(L0g$oa zYXDO&-2dr?=Ao{4a<#kr5qjN+v72WRoO}y7Kb)u_iy34RMKL0d-!B+}Rs08vzYYd4 z^MAudcEGhNO15ro$smM#S_?P{A-Q?)fn`BKU4C7_@=ztp;Env&+j5dztqcSdNGz=m z-CCspv_bEMe>nv-WrLHffZK(h=C;`*cH8IS&JsfoexA80F}t@BycAugC_}+S*Oi%Z z;(jS5ZsY50T*L5(q5In<#o+3wxmD}0#$#}@iYyX0Cdg~jV^h+O?1shLBDZVe(HBCB zt+%%l0yDl_J=$g-u2FqS{uRE{V<42^`{EXZ<4qgckFuXYPx7I+ZG%)RE0%Op^HLE>5^PRO1Uf&aqD0q2^N_LZ`%95sW>_Dav}EjN=c5t!j?*7>5o2!099$5 z!n)-{%VOu?;3DHC=3#|9$yJ<6(Or^kRTa^Co3zqD&1}GxI5Z%?xcd?oN+Ta;XB78s z4oyFuhU1Q$r2IkEL%Lk2CgMgKanF{&-|Dr_e-?P9?&z$swQ?s&Bw-RuT^KmFKZWO| z_Wugnjs%H2YWNQX)4yf`LweyB%-L`W*M*!|Td9f>x<vI=t58vKfmp#B87nb~m zzm#=txPP=7uMZ!D*gg-Is;ObD9e3CBe!juZpFB%m>6_(?4hsW1!KKDeLYQX3*$BiI zoghSAHEd2ca9XWRHaPMh*()l3cV9{E28#+W!W5|a;iXNWtLvL=6`58cjgr;Vi zb>l&|L~U~Q2-6-SN6pJtK-bpRC%wClA|fPeo|YhofK7HT2S=D#b1X(xy9%lz zO%P%ZT?IhQT4!qY&Je1^*k)Bo#Px}5ve6j7Zfw{rV?<@L#>rFYZmQ|jDS*iEQ#%3> zirM#>rw(pV;o=}xjaRwQSj=q6c=FX2Z>CkDH-UtNyPba8VwM>`T#DJd82P`4_xSE! z`K5HnL{`$n-Zi%~WOWjx>e`4-1%Cb~fl_g|Xu5@6rAw33A+f8GB3?LQ1VQxF%>eeQ z^tS=Y+2QgRGPa9B+^f4+L8`eI`+WOf<9XQu{VV!gFhHP-H|4L+DH?*Q%lX5!I@o8k={ip3=Q7+TC7`y?z3b4HqT&n%I$e}F{yj%O4-|O zYKq4Cu;2Hcd|tp`y5_%rG{UJLs$7I(2bHi2P7y_46McYV?RWWQS+spEi7AHw-xfI@ zlx1qsfQ0j+3&Qq*+`tbEljok24w)ti29qKGT>{&hRky=E-)>%^aB>FyxA+x4W3ntA3fI8lz zwR>64?AqsK2$FDh1rouOgk)og`Y~+x1FL+!`DRR3T#dSqYS`|-NS;J!MsGs>qCE+i zgAOKt5sJ^`d)M71RZAqTADO0$D{_3r88D>~e+aWP2!Barl?X~X^`D^TG6g=Fi|5r| ztx6$^9&G~$G5%WYOCQZZ5F`KI9_q9N-C)}0a~P!=zmA*Q1<(^Bkt`!E2Rl!@(>s>@qx-tfNKao^PS zi4shq)ZLG_bV@Vr7kLQU=!^4q-I^f zJaWcID18{0E2Wva{Z0xz6n_T0DVKyR2>;*Jf|Ob^&)%{j-`g6<+&e)W#p@_`%j-c! z=+nTrSG%ZG?6zqgxX+Byyv4C*(*KBqjX83aMmhp|<{X*uiX}ZC2Dn(mg1UKd9K(Ye z9{{QSbt`-3rCKw)aFa#IY4P^L2S%2Q_&)TuIA1qaEL{{Z4mwUn0rd-rvoiuJ1hesv zKeRh#cPNnmek@M=usurB|94I8FP!V^&)u%0fSl~~($7HhpDN3O6kOfMcM|iEf|(#_ z=Ku=%igO)zm3Zg!{=kQ6z&!hQ@AKqPQo-G$e{ZvjUcW1Mog377z}RWU`Bzt(2+G`T zk&0BC6|q_`rt{|9_tf3DA0|)YX{jL-7S#zp#=N(mBRe&?oTRWH=F96kGQ0TluWEUu7!I;s4(+?@5A0*ZU+-N3|qyf^hfpz##a<2S`f@8 zg0OqUVpxB}?kD;?;D1$jajwbT%z6!$Ew#0&UP@ zlyOyIBIbLLq3l-~FWRLT690BgyYJa*c_oVPV# zQe(gcOFL^Gq87ARS+oN|4Bhr|NmPQ}s=xlDT7>SW-SkwB_-=wQN>7V-qL z({as@UAlK6Z8x!Lk|7hnIv6SPrJeujj^AW9CVgwgEmtnkMiBvV8AOr?fC3s(IQ~*g zF;_#MNyRJI9@p6TNxam0n|RTDyLJC4fM5g)xCN>S89kxd{DZcZ+=5+U%GUpUw*1x2R*{HUw-( zFN=NL|0n*oJA>j8HAB8|xPR7O%ckViFCWr$BPrXU8=hpleas%NVfWhZhj&|}{HBc4 zP}SGn`NujATow*P!;=Z^lzSwcU_WF#X}Uo~@5QU^YX&iienwxRW=K*00j|GCJixsd zLE*Cr!O!b=Jpb|GM%j=@xU#F9#M1&5CE<)nR#YhO_-KTrsN6ut(i_*y0#o?X|3F?Q zu-mh!G5EYojqpU{^5^^nM#1z*w~NC|j~=k^UoP)fqhMZqpx>Afc{FFk-`U<4PVm0N zL8>4P4eXT;LuqoPgn}VD17N#s!QF^(wW;4`syAl8g+A7Ld6P?5$JvtPqSO8NcSuzj>m03!O_F}$6fP# zA8uBZzfk(9DE+Nd-_HVW3h0Lr7A|&$fp)Zuzubbqe;hp>fw3+9%SXBX914WoD5+%V zQF@(qz-YqEuu5>4M^)O9AAddloy|)7F*m~*67+~1Jbx+6)w$?dx!tS&WJ*U+f@aG% zXNUdoz#v=QKE?LTzIE#0^>Y0Uo}@F}*36gN0})8|1^D%RGjIJoRrn?=W;O{{Rq&bQ zhDOrveQIx8eE!(>FbKaHvwvd&Fa<1Q1c5C^qVM^PT~;Wam2| zPn1Xep99CgIC;GpAiZpcT}7=yd{00ikI4J^_B;I*02h0ma;a@Ufp#4jMJCPR&41o% z9PpL`U3pi^a<>YwJ%5_W77~>4mUksQql*pi9iKog8~$7;tGbKcHvaJFQSa@TrN)A7 zWgz0Gcv;U%zCet&ZuckMvrD(D5NVhGtHd{7t^BI`&+pXik zWXp+$3)!IG6|J&)xRw{x8l;nxDlcFmS_b+cZg@pn0C&E4%=vHJxPHskSj*Huuf}Jq zUX-+EQd@|2?f8e!)DpEg8(AY-aShFYAy@CBckb=mzTS!u5alsI6>^+Y*-}^=7k;6$~dvm`FI~4_d5G{>(buOh1!2 zn=>aO0-*5p+?upf9GsQHi87Xc3`8{(gplB(Kea={b2Gf1aomuRzM1{#ocLb9Rk8Rf z095-U$R+S9cy`kyJ&of)+-YIdhoMOFY3<2S*LFg}k0xJnkV6FY@VCJg$zbbjnF%)w zz$>K6?LX{?++@w;wZiu*CZjFK|9oOrO%6e{l7@aL!0mrMuDJDMha>XKre=oqEGR_X zKa*iPE&1}7m5nhUkd&`|q-d^xtXdrz>zkeG_9S&!u7xNhY{yX9y0{RDv{zmMX|5#I zna!gVfOdaE+AKpRXR~n#JmrIy&V-)9t7sOJ%~u}L+C(H681R0V|2^>z(aIjI#3Tip zwLc(+!=5EycS(3)X#>&eX?Y13?GKTP+H0j2$|#DtJwvC#3IfeiC>w-TG=$ljx+fQ_IuoXb;g4&NEN^}{Z1rQ5xDEk@IBUjy-kE54%auz=Mb946%X_%Rm{vMM01hYHDM9oC%s^%aHm*{V zT$A9;m?5lLvYDl$nY-g&&VC*6@(-s08wg;zJu|U?E6$|$Ijz6Yf9|)ule_3cNSp9? z>CfZI)Jv11I3+&!()Uu!RqssP{e7JSo&EXCjrI=|u4$iF(PLj*qe-_=nOuvsR_%08 zyHVAy?IvSy?%%z_yU?Bkz3OZ^9FCMLQ#gB=@b^s(_Z?&psrRju0>rWSE1;v}Mm=dB zhiko`-)h4PxT~J)aJPmlkK2Si*_0evIJDY0Fpht6`x9ZR4jO%~H)6q2pJ(|^`JbHK4V1W^)b;+fYp6saw!z5<0@)<;*|y zJA-R7gfFR5xWZtC$hPbom!PSWCuzXqC8Xgu?ry6~lY0LIbFS&3sy*t%PE%=L{#0*C zUUPqI4@Pzx`(t;rwbU~gs@;d^7RQ$8Kej3qP9Vi%>wLJwwtU@OmZf0FZ`^lD6}*CB z^8G8k^X8qO*xhC zVU^y$AP*wJb6atUNfpOqRhX^Xb9DH~$81AC^}b-C)`cdBjTPyj1w)e|wUn}k%Tc7- z@WLTdgzAUIu?@(g73C@GvGJJ)8%UI#MxTy&#KDMwk@>P0;ijwbLsFwC!CPE$miq)9Cj@(M9M`DU z_kfEoKh>71?mDd4LS6XKO{u|#OD(wTM$BRaRL~HD)dy27E@*jBe(l@5FfKeU58!{(Sgp zgvjp5=gSeRDjPb*exGK&ge$YPiKd!qgda??@MX!p2q}5~nmy6jZK0cdmvIw}3vQY?u=izxtd za;P{AzTvPh2xJi1-fyZ zI)e|OqM%z(BED{4Fc`y9x;XOXv5%0p3Yt!bp%C>H`g${zBJ#Hhe#AmUelwiE`U1_k z&5=?0HN@&x13Z|i+W{O%?p7ahu3s8^$Asyld+jg;e-@mxdtb;r$1Z z_a(}+6Qq~``YwrtKXC7C5&)V7h3{Xs7`qs^d*o54#8ordmlM zPagU6B>NxYVupT5t7*Z1w`^4|gPXKFH2@Um-(wn94rFqiS5EZ8*r2b!pU*iP@~Bk| zR<~`H&|p|Vd#+n4;dPzUhZNt>YC`3#oO4CGG7p+yb%nj@QdnzmCZkKcS>zkNOS zUGcMupIV^$Ojp0eUkpi!)>iFyeE)$wy~pwMRh#O%+s|!>E=#%z1vIjl=Z}8lP!Sxv zQnphn>7t*QG=m-SL|FXDD1TANMc62AYkpzJ*6ixdb~RQVGWQ++OVy?#6mVBQO_?!f zYfqUpKK1BR`9F@XJ)Wum|Ic;qax2T+a*fI@%yp#P5=FV+3ZdNP&gK%LnOlf3axeG0 z+#^FWA$Pfqgs`~|v(N8*fB)}swzKznpZDwad_6DF%P^|iPeq`BGu^_c)xueKCU+Dq zS9)){M6jIestVqm!T*&$9d^^{$l|ooksiGtpK5J4!*3vzo2D@ICnxnD^yhch)?w;L zcpV6zf84O+2Egy5$$$47VzAgO<1v*W*aB~!{#R6jn1Hj+p9}Qf>=F)s4sj*?>W_7L znR!0$esHBn?ng{*T9<9RrPBCHH@8^Y)~MUuVo5_s!~2~Bs>DBY&OY-|gOV#*kn{Pd zP5V=V|1sgBw2Ns0%a%=~M{@nGt7R_;{$voq>@D;3$$oL*`MuUh!*7Z~De`Qx&KI9| zHTlA=TbnK_y11=aWg%=xtsO;xiw=yKbHa8ItTD$T53c zS~-|*`bz-(dE2@>LD5RF`_lH6FZqSRP9a`+d}5#)sN+BdJljAX&P{zkiOz zDZiEA)9$?o8&%3z<3Qn6dVYkl|64zoCfi+<2XvbDt>BIo^P1yX%pA5te@)EKS$CB5 z%UwzkE!ATbrg|Jnb)!!xAH1sE_a6unERx%RDCJC$zu_4nKf;wH!zkzzY+fYqO@lB8Oe8rBxq2ZHPkh&_%g<|bZ*o_^HJ8* zTO_Fg$<+7srdqs;vt*x(Xt=vz^i`fElwt(>tRQo^BEe*(JD$Q5Y$$p)D6Vp9#PEC5ZnY}TUueN^|3@e8X)9Hv zoSk30j?_qH`SuCK7tT$%0COn15>9RjZc&x4%|BdVeQl2bT9q1 zpRQJ^drM7y`1*G830R@Gd&HFLM(l);lHM)@!(WKA0iMdx@V(=(-f*Abttmm-vqZ8t zP%9)*ejxZrT*PXeJpqAvSw>RB9#6ao47^NyQ&`&(cMp9$$4yK5n|&>VN1v&I`w0~t zA_dW(uh2!@`-dTP_gkm12e7@FyN$MC8~7UH(d#sH!<1n@zip$6XSIaqHut-%{ra@a zhhboxQ6fKHBcuRSF(9D#P)~ymDL0_m5jvj61JHT}HFqOw4RCmaj;Mo6TCf2|fev&V zS#L#e0V?_AneKfr?0PbBH4^j~v$)fH{)tUnb73FOmiJBgVaPpxwZl=ZHRXq@M`xzF z6@1!!>@LzM-}ISKr0U(?A=vjG8gRpd z;yv+zsyDNbOE<){wmYN_mj$h#NKt#Fq%6=awpm`NA@f^Hpmlej_KH$X9`8i~_AV9- z#^dc@@ZLX8V@Bb)5`8Q+)zhm7m=9o43W(sY&E98_yWcvzMgdx_X@SYU#@vJ=52V22 z#%Tb~o6@P0A#2yoSl7!JRM&w=qR^J)CR8Wo-73{KV@>C>`;jXZO;J>&vr}>oN zlcJdYkDSOw5n$^&kPq%a!}G0`f|)MZBJ@_~Z(p9%2VF8|`#Bl`xGmB$f&3+%4x~|S zqSDu~fc$VmU*>1Fg9KU@DG+ge1hT{#k~C@&EGR3%dm?BXP};J%AZs8f*DErS53o7% z-8*~fZBX?qwf-$ZWw0G=jkQl7ba(k+JAV=I6GO*+XiC*Rdh}CIEgN~Ov0x*Tan5I6 z53y0!QX+I!DZMrFq83IQ$|8_|*ovoP=p6z}>e zy?R($hmNscz_7uOz@2+AFvcKKxVPZ^EGZJCFfYo!i_x9|fQh8*eYdO<_rQQ2H3(;{ z`EJ)gE7uEG?N4HJqbiBNbszoyhOELrgY7--x%=UR{ZJlJ7C*#Es96Ws7u{ZP5bYZN zNFurF8u|Nc$vfnpOaA$OCaZAv7a+6t$hMgfjpL08fihyX4BjN(tHX)lx_agHt0~(h9~@v<-Fz%!k@ar$U*Qzf(&=GTKe+WZ{ zz(sgeO!2hDJ={cFVep*RjNZ-tjXxV`WR+0h_1g8syna7bAeil{ENJce!2QeH6ObWz zCY;0GYUclW_clLG0N(w*LCkDjl)8|M}eVZB&&3qb(v`soaBW{)%eQ6-*Q4Lktw zr%v-~@uxdDcYrJRQWWu%!u`ZCv76nK!PRt_{W!lc#Wz39iEvUaLt)HSqD<#sUZ}&6 z-fe#~L|sDk7=Td%{xM@4bDaP-$QlZ*!NZ@ktp+x}@e6^>rvn($Y19v1+s5Z|`{m2f zWu!V%)AxREq=;^xf27hLnO>V5yqcx*Rf&cJ<)Tlff{$6`1~3e0>9h@KZu7UEu>)TE z2SuRt#vRcV-tazw|3DjLcexh7sMN+>`tKa1jpX4tm}8+~E#*>A?cP|v8x=&MQNPuZ zk@p$$RvCO{F4sU^!C3%7RMVR{dlbjwcRxjT#seC5e4+ZPcy8anrN(U^_>LO%!b6aj ziVMh@M<9NGdtxf;V&>~u-h#I|_vOG1GNL#^Sp6&0u>O3!$E0gYV&l}^2v)ISE1xB)?pIJwi%gWR#lgsn(V+EV<0ap)S< zPXozzUA~MIiBn;Y)IY>=dp;HgwL)89-~;Hv!WeZIQ#9!b)-FoRegPoC^n%ZVYB1f) z1t4S}f4G@X=c^Bn5FZ$2tZ^5C!Oe9=KbVmMv#7G{YYeF1%l~vm0HsW1G~B5sFC&bE{XjLs&4b+xdsI zwE=q;{$|jVX-gipk9RXXp4pz9-pG#kkgLHeXFFMa)!%)SBtAtOH^;jM@DZ>?&CZu6 z=gaUIo0W~8rFeTfH_j=%E}=QYJw#yS+4jHhqI)q5-$h?1o7n|txmkWqJgE-QM5cPA-Dsm4gnUu4+Ar_UpAG zfbzent3{L6Pt8a+`Qr|j_i#6sr5eH&vQmcdWhz6f-7ew4JcoApA~hhG{n#XiY_NjB zC}pjN)jx?+U;S&OaCFGi`w~zM>32sf2cE0nBzmv%yzAlUe)K@|LeDJivZUn!no`th z+OK^iF{@85VGv<52sGV%QhZa$zowf?tJ2$i#k|2@ zg}$P5C{1QATrIC^6?6;Zi>X^qu3jusvry z9Y6KoyRDyddklv~m()e81=ZZ6P0rI&S!viO&V(-+w?U^dGJ&4`Th>@JfSq7P;vwuE zD_sA10t@J})51r?^>;$Ccd;8?oxW(K9xMSa4Zh&aohCaC{%)_QbR`!MMA4`xp$e z{X0GOyFa4u&Of>Tm1dvsU%T|AxhRPJ-8@bt7l|2d*Z^D&G}swiFJ2>^PUSGOCw&;9 z(?rEp{QP?B=!>X}$p1i2*L5cdTz5eMvlTC-e2=aOB@cJSQnd;=QU#xPOKQ%*%}C?5 z2>xuWnvedV=0=-l=b7no!>*?Ov8Hzxg>n9zJER@g^O<*;Doyc+6HRI_^cxoff1oG_>oZyD>%X1mboD)QmoGv#miRZd-(Zyl2XFqqIe~A|j z6J&cSNHCCzVtG%%_ID?!KA2e;K1p*wAy$CVv>ckM1nZ6(z-vX{fzQgSfFOfKvcKf2 z7#43USagq)_d|xzj4GfG8p@y+o1az&h0#>-u+0f|Acn(VOXcB^td#B*w+$c-u*Dvx z_>x0T^^q&SCZT)zyXx=w&^Azvdsx6Sl9A!SZcF9=bG|XbRdU5=U6yKlIyOsP=JJV%?hWdC8IyrHr z_2kTX2F*5T{sp_)c-1q9$2uRsD4dRbsqG+im3u1QXFQBB|MfaCOYXjlFEhJcFTcJJ z9OPxmK8u}uaa>op-QN$q+Iqflq8*I07Ed)0i#Esd9h>Q3jplp%`x6HW084Eb7#{D7U*_=9T(3@T#9 z^}#LBGt{q2Bl{%gSpyGTTsWW#qw^;f71y=^ugdPP6v@~}PpukXwjJJY_Us8kS8d$s zNB3R|OFS!D0TdFLV+&H!4RcjYLJgU*;)j$rx90VF4jaR@@HKla=a$E`9AC^Jo8Np8 zKtCOA6wWklYLgsKffF&WWyDkx)tX~0>!S460Fb3jvwPb_@xZkoLlQ&oKvpWmItb#0 zE8YS&YM5KBssNg$beazSqjd7r3BzyPM&l4ud;%T%JVs85g2=e)cYWQr;11A`5V7(zUxzyzwU*?ilSdf zzzb^BN$bSE9)|{8-#q3G{F02VR`t!pa|QO zuD}-a6?P6chib6wr0bZs>aNv@DTFX#`i-}9`aQz8Ow7xb&sNN09hcK*zbSM$vs}rv zNNG&U6ys5TN}W(dr}E6()Vr61;!1i6Mngg9IJxoSu{L5obR$?44egZ^;ZT21S`fveI z3B7Aj-3^UO`Owzf;Q3x(4$i--P2Vdseg8dV&6w~GL);;w1O$vZ3>F{#%Z0}cKjH2Y zMPNw|eWCDZvh+uij8>dwBZh4=b50k-H#jbDV{<3tgd3ClHic*-{N*Djw-h0$m^7zX66Y@ zsITk}VU~QFI+5!r(3#BhO>$V~w<^~IH(AuqtzZvSwH8g82foIH(j-YoKf-@Hs;k%R z<2#r8aA)C)UoQE#y#Zu1T2|v?djR=jY0ja~p#j`?g&0@p?OqZ5_K9mFVf3vCe&)U1JDy^JPKas2X2B>xpI5`yN4M~3o1!#zP2TM{zX7@9 zt}*NSM77c7Pb%G~g|OzH2(hp!;HJ6XUVd0T zuI(YhS*U9wG0B3TM;DvFrn0=F_WH(NpZD@5Sz|We{23v1YtPmn_p#6S+rLZEFigst z^!qRlfg_Qh&4pv*ev9dPLA%9S&9Ko3aJf*xsJoam zwZ5t8RpA(j%MEU}vfN0G&@u2|FqxBYl^>mlUwQ*)_EP`xTV%XSaa&k4kwdI52pyb3 zFTcYx*8&Q!%{{DuFV_grsv?ttoaTq9#?)==o73^TPDws>-<^~(%qoBH>jd_=Hrjn& zW1q#Zj$mjID#6mLl{f0=N#0MAj%d*`iunWgWPeMM*Suc3mtr07Y@|ArF9G@^I&D1r ztme6WZF^E7A?VHR&H(YGyQ?-l2jfWqVM3A*mAsLUG{}Qhp>yU zs7)RuV-PTp#R&n-gpW!8YBFz`EC{7>hjH~%at~{Ax&h|V+`P_3Ne9^TK-WQnjUL^|(@Jtya@%lTV-j&e%f|jMh8e9_x=8t><5F`r*3+(S6)^Tnhtg&;&Ws z^dE^G72>(oMJeL;3kS}X$KEB9s=C}Nq&TWj^eX zzwjy+9s^ewQ}8f7J#5Q=EZ{TA14mOW6-&EGt$Om) z9YY) z?6j(Usx`Jepj%hv6J7i4Dw>ZiqsgB+DeJx3NYD|Icvarv#CwB^1{A<;eMXO6g_F6} zEMpul>NO>Bu9}`ZUX{0hEdUfwJI%Q(JsRYmWn@Rhy^y_sKa1cA-R|tMsxp}^9Cjq! zU4sm65aH&UpFvbUNPoT=w)4Z8{DP=agVvNI0ml5zoL&t?nZ$skXDlo4brkxd#;A@tmNw4HXK3h6%3ON!t7-_l)D?K$#m;G3|;0)Y%{KFY-6!cr0CO zhIzm4Ki|SzBjaBiB)S$I#yVm{1BK$@n8N~ntlHb$<$cC^bdd%e_u`(=rOLw4m}xhx zt*a=aF?@|)(k8W0a`3`HJcSBy@Ou)aB7{PnrOr?udm3>nQL`~hq+(BZa)Nj@{0Bw& zBY=bog$W>`gHa5<3S{&x33Qx=C4$WT(|dZiGgP3514#RKn8g62*fmwZ&seX5|3KEZ z`m*hp){bdzAlU#{>l=N{QD_Dl0P1xmtL$hor$N(1c9oJ%zJ6GD+KpBsX58z+0=YH< zGbJz(^?x8)Ay=;jff%qRW-9Vd^35RDBB7A?xKef%zIn#bBfivK(>?zY_NjN`fiOav&b^4&k)cHw}TrRK|_JAEhUKTtis z-s`M`N&{5T^?+j1hin5h%iPF-(+_C5 zxOL8ug`mumTsFN;;f@&@y4hr4OPusYcgm4WJ%pq}vPDXb+2O`TWH&W}!L#p4i_9Q} zEq0TFA41$$n4p&j)VN}j_qee8#UjB^lSXFo@asFtl&0$sp>hj0H6vvjp?(Vb4>`58 z*!yTY*6HEfhu4}XC%B7XTmB0{OxN8Z_)fX)*>l+18S@y^A*Zl{YF1$~z zmm^<5D3hdDJ-Cn*d(PUYdh5Q#Bg~@(-_2wq$oz(7-RTV1plDS7qAEquTJQOcT?viU z4C1xpEAS*2$yCzpXD$$M;mY z^D)m7Q?Cx)vvCDE3Dwtf_R9j1$YQvC#@lldQf~*>`9reQ^v70?Yr$W>jt4y}=VY#6 z?TGj79rzw?^61n8z)^ZF$Rd}M&-MONL>gY-&=e;mC5;@sgJf<^S?$q;FG#U~p1rXaGN!x}gKU`ao^Knm!B94?S(ZdJ)@P<=&o0wEdbcW4zSydF{IS zIt{hF-iQGOielNAn4d0t|0@su?Gs!asQpC+=ghvozU}9_vRFM<)O}oX+9SeycF4PD zYeD8RN(J;5Px!4Ee;$21#e$HonySQPoeAC=tN%3@B$01QaIOwU;sZ}n2X=>GACixQ zE+blvRK0sky@J8C9LL(@JoMco-R+b$Jc3|`mp~z?!}Z50H-hDt?zK)HzOR0!e-vh( z^E)74Q2e2(5-OKwf9EOA3^iTE9-7nQlxb~5iR>L^2tH2ZmXr9SvXgu;{*Ke&6uqo+ z!-st}SjcxXkzDl?xC;zaxMOh@`5MFST{ZNCx>r$60!Z(3y0OTOBJK@V{|5pLoud0U zTa?||>ds+{bNv>qVp*uw>;^2kA^(>~SWDO2`8(bNkf8i57dm?wQ+%0^!5J(MJ5ll=dn|m zY|aHi->}%{D2e!t&fox;KUx*T9ue3O%F}l6GE~*VgE^ z&#OrM^qo@a|oLIGrtiLrTnq$;z{{y{xkgu@0`Ec{ctLug`74xv(-#=3PTjI=; z|48D6866FlsYARyd`Z4j7;k9S!{V``2VBdQDfOe3-FvsRkA;}b6Sp+l;#M{O=~^q( z%tLy?$tBW?W1$=wMsY4i#|yehn)|V^(Y;jPXc|F}Bi#Bo#o{F1q!mMQaolm;0X?9m#K-(^fZXlS%cG4Q zZP$nNf|SeDFCj-&3avt^d)OYwF=>%?efOfYnA-@9gC<##vlg(?Fu>*QtW%O@EtX?f z0~wUY{@ED`#FnAB-=-L_^yJF{i9rv9tq{&Ej0>RCtnKL|m7b#lI_8eG&rzxS_}%;t z;slxK0AMD)S|`afORK5ddAFtuHz;?^bJLS+1Swz6xEx)Gjj3Gt%~p@FD0ZP+@k$n42Brkw!^%_`d?lrdJ!fdrK`H^;IRpr#*$NSEA1x!>eZ#@YZzD3W_SAE*87Y{Fd= zr>?jL?+6o`Q`h^up7QYsQ1@E!(&g6is;K8|tJ45b)f1qERtaDyiz^AR5;NYV4Y;B= z?o)oW$x&r;{BV2XBq11r_hI+?wM&r%HrbtU_0G=>2qKq-yD-@ZL1{=WYJ?-_NxV!OO4WDv^z2) z3K>w=8Gh+XhJV_pPre-T+N++w0>JBO?y4ZC68pL6*Vv)b6D?vN!g!E;n`(l6I@>jnt+cJOp^%U;em9}*>og1f=`VHeO@Uh!) zVFe2M{7!|bKRuqj;m_OWoi3zwx)>uEh;o$}d5QKbQvRajX zi{zsdg3!TqO_EymR9Kmc zuL{4@)iVF~y|bP4gYST%Owu=C;gwxZ+E)dPpUJP4~jhO5=D#Fh3Kn1>1uI}Q@`Xh{-&GS?bQoC@1AgC zSpG^inV!V4`nJMb-GZRAvRmcvBX{%HNo-}wd-PH#N8Cl&bk;VKV3Is@U>){0jwIt= zX1lHe;``ie)un8c&ech!wtqBR2C$Pr9sR>sO5zj8)4(%j2H@_^u8;GNo zz5CIM)^i`iKY7Jsj%g>55Zt|7BiLv%XCOdLGCWT>z1Lhk0@hN#XgrA8TxtrqXCCOa zq;Pq;S##qe75UPefikJd(f)h_xdJ6(<1@_qH3iaipT($YPJ1|PxG}R9%Pz5G>kUfo z?FH|TC84OG8KT#*V44DQM3}{@OWBU^YM%0OQOt1>0oxa$tl!-__giG_aDFHjU7x1w z)U_VJJ2K2^d^hTOl8f30m2(ub*BbeJ4K3D63LyH5Io8WkzE6~z>W>C@(#3&ksW674 zCE&1L9;U=8*V$!iAFUf57Ym2@R4g86f4Fala674h4B>0`HS>S%)0L5VWR6|CP#RMh zqCk(&yqEe-KBWa`zbqEnP=sKT8{k+-2fKJDDg|UanC2CUbx8QY@A;!6V4GH76xFWm zh%B5n(CHCQWG^s7cNP=3B>UGG^80qGi$p|CI;R!Y zv{bp`fE&=fNPjAfCxR1q+v$?OraR{z@-6tuVfNjQpQwS=!!VZAK^eO$Yt$pEG?Bq4 zfO7txFhhazI|lQ?(@++Cjki%i4O)?%BvtdT8}L}s>kmuu(dk=hedmaZIas`YBsku% z4xAq?lphSI>Aem-T3hVLV$o+C=@As}i&*2{9pQy@TTaz{aDW8uMs5s6uS(J_JL)$i zzGe|uRwHOl$^!&`RoxA4>COlcsdRh;JTh_E51vU64kRv3%+-4XWg>7FUoTG}xJk#J zeL@d3vl%r>EZDlEvVRgY_Tv(ZE-6u8w62sglM61uB0&8Ds)^o7@m+j}_8)=_0_OHL zIO!VFja#p?p1!J?U3$`HO5Hz=xYZo{-cRMx3w%x6p49}f2+nJ^-`M{Rn?JLAR7&ji z{?I0ssUyU(ZL)O$OwkVGC2_SI!u24JoeOwYlSnL+h|28N<4E>N6avw7`nD3dfI|oJ zl>uR?r-s>5YUk-iVfF9DH8uvi%eRn)e_y6g!k2*$HRjeD@N`F0F3%3|q^V5nb?4#n z67)8m#d!Y58{;{BCgq)#CX?N~!FpfeK(M&)il9KSlQEGk-mgFtQ(+_at;;u72zF{2 z!1lq)m??L9t$U~8T<8U|9+!9s4C@#J7L7?Du^gN96+kvCWbwZP$6c-|qq%-8S;y^ubr&{RN`H!Vgcw+`@MG+;`1-TkQX^ z#NzM>5@batQTaNzb!mym)ZDj@;76CsyoKZT)=dMYRZl;uzRp&#T55Ft*F-2g&Kp~v zQ1^YRSlv+8?=-HiQ%Y;I4Q*b2-SSl6tZ;Q5AF83v18Y$}o&rlWe!oM@ ziH4RA#w!sdqOyHhGv^QmCp==GUBdItZRTL!;QDafhV-wNIE+(zrFTrfdn4p%Ket7f zrw^yTInQVyP8?sl$fc+}@Qqkyrx#=n&ROQ1+l!~RTr^yN>y^V=%AD6v9v$jH)1VoC znfs1^tYgC{)w-_o&Psz=qVM!hewTx;9oicVuHpGZe#mq7W@o%j@zY98Y4sS+(mBU*Oh>Y{;x9R$|Yb}3@q<(WIANXqDi zj(i&Yb$%PR+5i6el4Rsa32!7cVoX-40m|O*Kd*RAK{=~2FR>)j#?{f-t0KYu&! zx%>3@8zXFYZkHUV|HX-*!O2-C1KruWU)|2Yn3ojNlemUR4 zaqbOF{Xh+2{4~eWMDFHsNqPWd1$10~u7TBOKLN2UHVF@9HB&Najmojrkk5qSU+i+S}w2LU)~ubjY2il8U+U!vCFM`q zVmhcDk;QIjhgr2=Oub;=j-C~ft*OMG)J6GL-C?%sj``kL-|!|R$(v>493Lqzl)0tG;_gP=03%ti$kqgi;s|`5R7|p;)1UEbX1QvE)fI8hVx!sTdHs?} zusvr${y2TY`Ngzozyd+sam3E)xm=n;EMJreO^{TC99mmrdvB5bc!^{NkQ`|NWA!f9 z;CZ{wc2d0O%G+-G*-hlE8GB1VRL?00T4;0)Rz>doqidz$v2OV@aVcbSu&sGCJ!SvN&{mX>Vb1gn!fyb0bK4LRI??taXwC=Kbi%YG4Cdy{>;<*Mk&BPbm zB{%+hGGpxa6u!zeXLOfuFw;$}K0~}Ycw;|D$&`I~P)FKplqoePaf-V8Nc_WTsdI&*drvg{q*4MsrhZl3hj#3I-TO$0MY z`}m=yP@A&|ZODc^$95bKYI}ffWc>C*1~6)O#LUoq%aKVu#3W+`8zG08KkdBL6;|F3 z`o22R3eRd8#LM1rWrylx}ABa#2}+ zVAyu9>%`LJ#QSF59s?2Z&HS$STPoFt8T@*I-VBn`!puA#yALfed2oAG|GlH4b&tyi z%ub($hc+e!?ZfgX!4kzXm_X5(+yL0oUpk0{u=8>txXdXk2EBMT<-!IAkx8atFTLdm zH8X>|d~qP!<@$C1vvZ`Og`_Wsq&94RS|cn-^K|EaE50-=Zv(VZFt{^u_K+$~Z)8~( zirRodmh)rOPY!pqU{aqfeJ64;>t~e4*R@z7!DXkID8RhubG2_fghoU~f(*3U-$0-} zQ|&Eg9vYZHhmV@?gHd_BNSmnS&>13cvtJ-6*HhFt%}>vVo{9!#sx&F~@G>v+G`OZr zg>1qNin>FtB)NEYMydO~%qOL;o+6-R6(X`<5>Ic!ObUBE6`1Stqp32D3bjlg?k;)d zW}7eS7!w%*pvx0vJkNn1nfv9p+F*<0yTrWs`JC~S{)x>lfqE(bKk6s$qC@%c_20jd z`!6=D-9@jf-D@B|;F*FsE>O)jRwIZ^jC2<1>6k~@&WKZB!-W#UeutZqlJM{5*W7+X zntnQ?Fz*yE<_3M(&oAGcK)+m$w>){kIsC@fORR_wOTd@$hYD69Dv`Y+WI=%pg7Sdo z?Jv=mUSyrsI%h`v=S_7@Nl)TTgzg8(o>f$zjgGnAR16W>HK)GT>enp`*;1Gc+MX`e zNV-iY#A!^g<7pQgp$GCc9MR$g@*8%rUcLjtID0jGr;sxR>h+NM>AuR*KfPrn(}8i_ zu)b%$*UAKtAfj=Ox*DkO^xb!wc1>_I(VfnCO32YgFZ_6$5>bH+?vE~c9|%2IY61z- zSxPUb$z?bKw&~ha?;^|8i9`M2sQmXkx?G@kPKCy#b+l#~piQ{W;+b1M8}nUq2ii`lq!@ zG_Y&qG#A~dEOYBKhUt1)*p`8TC0*P~Vh*+JG9~(mDW0}jt+oQ2rP(Cm=|T zt}AaLFslKs>16Go=?qL`*Z^hVAR2AQu+U2l{MXm&bP7F(S4@i4V!7wzpqp(A`cc3qze&ERDe%-ZG`yg8uo z_ujP?eP^kXR{rFc(=}5s+qEo-2FFxPnJwVhd*NP_!nF6$5Xh^owPRChJUlA6{3!1^ISV|AR}8AM_Fe zzjC5@8pXV`%E2qu_nu%w>%4pn;Rly*JG3BM_M)oQL(WCWx=po>=&;4hqf7mn>kF%j zwXFvK0ZfKT2NcfpqKT9c$QBKBV_ z;rG_=+Jlhd&1nI_+`E3yE?<#hG1S^yV_+XkJfrqiMvqxhimTd9SJ!dMpoX)0G*{mUPYi?O2?vbc5lM+N5>U@bo=)ggdR7PPe zJQoL|damll1njYdygscdAjSO=4HPARl}=XCmG=Q*o29oD+L$QBEK%nMPWp%o;u%8Q z>_nRmL0|%=uZL&s8)lHw0BnQ0 z2TQ(?-q@RSqA+4BC^$G%0Q{{qG2WP{Se+o2)G_s=z~rfq>FTl;Q>yx#z=qFG(4<9K zg|m&ul*+(ep^rS*I7H!nnp5P0rDyBZ9 z8I3+(O?Sn!yfK)UGRQQ)xt>%hD{ljX(ABaThvs)=whxaAi1R(}7B@oAsI{;~XdU4~ z&DC7|Hshh3Gl24q*3bX1EIY{8Xn#r`b<5dAStwhScFoZhFd1+aU7mIy(NwWp8cfr< zbO2h6)Owo2Ac4-t)jaf*k`d?R$sdSk_&Cn2w>OAyL* z(9oQN<;NtJL5(W-Ca~dxW8c2eofjlJR6*Bw*(uP(yTDrH>-u z`o8>0F4@u)`*O~jF;EeB-0UsK<`lcg@!=KfGiOrwZFCIkPZ_C#P_t^$E5nB)?5)Pf zdcBHx&TG0cn3s`eY1MWAjd)Vx1FlQM5I-7vQyO||+h>QhlR27|06qf@3ma8U1m`IN zWck)NE^p#ZCOy}k#@H7ZVPKdBJCGAR0pzSJBcJOZCC`2t|6|ImHXHnHl`Y886K!Jw zkMcI#amY>lk$NfHSv@+aR-#}_>j{(vb%61BSj{vf>bA@+_S(-CbPOBS)nzw2zLr%V z|MXMZE~4}=l3-yHGjR*W9I_;zIBM_1(hv*Olps!%jeXU4Z&{O;o^axSb?lB zt=|?eL*gCSOUEp?1bBmH7|%yMOS9H-rJ>XK&vdV21o-ICkYi5&i(l%{2m{=TG0R6& zXq_YYJsTAhXa^k(7Qjyxj+LIVK1qXn-QFWfO8j&GY?OH^JgBavHQc}4{c0X23$1nY zW>+up{>kV;08NN;kBJ~+aEas40Ze{L5O4eBusK!XUS>s#yV9N=d(n`Rl2@(&_{QVw zFtdpqa-7xT@=~ar+YSH1~GvFn*qQ!IDV4Hj~cK&6rRuZ95D6)YbfMg5a)EL`SoenJ`q%gL|tpv z2P^CBn2RRmVi(UxoKgQEUY!ggWQKxg>Ou*r4LvmA79f6p>GmgX9;U!F*eOle|8aEQ z;cUKd8;`xW8Z|;uYLC_?My+a5wDxFGRMo0YVicveqE)1d>ac55#EKoO_6RX*#}0{n z-{<%Ko#!}`+|Ro1>pIWR8GDF>)-6VLD1n$6xhi2~lc$@_3~{2Kiv({3y(#Q*YRA^L zHtZ84HkgcHXSB5S^URIY#Y^m#Otso+3r<8V*5y5J%Slvo1a zNGk=2B@gfV^q+7U%-LuwEB8?a^g>?~`LmUWl>3zMp|jf_iazaNDC8pSL(;6l(#lpMB66wYHi zm+N@S5N@#U2d0JrmN7uwO5!a9rib!ut2(R;Buu-#b$D5u`Kxuf?W1~>;@E;&iE~!H zURYvli@))*y`n7C=Hm~P4sE_mA?COo&Ki>2UC1zgpl%9mSy?>87&BhzEbgdQ%-h;_ zH%FOG80xHJLFAc{VOGQKvOu5bGqHb}>z0&K@3PPll=}jpq=$sP(CWnSyNyTN%}At& zY!-=U-&_2KVcVr>EAVwZaMR}^DHRTTGfGX^?P-@M_QQWyA+5`tcnEhVE9%25*1fKH zJ-_V~%~C8+^c1;wB~yG7Hc_QLMlrw;7BDxBFdxyUZAXpqx15bfeua4S|5(hQf22l& zx-gO01}DI7Xx=2)jobA&(Y1xH{s&^)J`z)C|Ku-{$*_=Aesm;B@0V}*tB*m`w(e|J zh6YT%971&t6z(y;i>Nhtf@;qS2b3o9CdO)PGp_jagJjkbp)MsJ{n=x(K%bAFvJ~{c z2vju@nIfKJnUL^=`QRQ@T+8mtwpFrO$%0GM7^@%})I)yF`Xj17(^%r|>m>EiV7wJ^cwWc|tu~{F%f(*J?l*WzX3jJK z9-X1P$*t8$#o?YP?`2E7M^DGMZ@pS=K#s2P5Fo|SK?v4t9hY^)*_F5kCJRZkZ$5fi zx>1YbZLm$xkr=x*-+w%B|44!wH5~ChjR#RRLETP89B~w%thl!Ti*ceo`=e%ApL9HW zrY>4GbYqzHyT@kYG~^SvwXCyW?5;iF35W%Tg5GH{H|?*Wt*pq<*LfGQ1Pk);t?Hcn zU^z$dP~=w?v@qXzDp_ACl>fRAkpCq?syTbqs^)&5f0#IEE?(cW<|6PaibhyaiMB#`PnyM5+c~`XfaPY9Hh5lW|tJUmhuxI3GV(NXtfMJt=8F|FBCezJMC;j<{ zha&M-%Dira#Czip4I=Em-wdnR<#r-Uxs|KFbfACStV%vToC^|b1N*^lw3n_`Kul+z z{+)~1SG1P)<1KHJ;8~QUT}(l~%!-XIFTH1xx#_9borg?af+2X^>wGci1sNhzn|HE0 zlauTOVvm;rDgb7_-3(WR*Hqf;KAJ#wuGBqgXe|#h*}i!$W!z=uw=nX3PT9@oOL(@M zjnD^*Od4Nps?GWSE#q@FAmz;tFCVgETHi8N|B#7 zVtBYVJ7hrdVi{AJ#X}ySmVB**Kp3hhB=;6odRUtOb;^GrPe52TSB25bO_X`Pd_NEpPAR`J5BWxMi&j5>j2Od$<40{9t)`RlJ8vgkcR=;`djLyRiTl zHQAzFxM8C+0?K4wqwixBeZDe+)D9gJY0P` zHz%{mNUAL5lWQUZ6mLZ#x1&09>ejw&JzTxm?MMFWk4U`M(EtxX*!I=ELw-Yp`rak5 zxD-!uwCdm^urcoJi*?*MA!xU3_qHYn!%OOR8%k=k*HSaepe&KLlKlE-I=`|uG6DrM z+f3h5Yd5*7@l^=CU^L>!%(@1OcB~@{Nw^dtW3<&Y(C!Y=6n0o#i2SF4{;bPZP)DW5=>~dMf zu4-MmWZkYhdP*(@wX;iCW-d zT{t>aT<~>?Byyye82QS8>Gq%3Z=tj}l>Yw=#zzoz+dN-muT$bss9TAbZE_0rlc5w*0Ai*8n%>Do=q@6%YDfycfXaWdD>^rz$QGI?uTYqRt?pUqawhyKOE;{j@` zSNZUdSy`#3+$|Y@KHoL-28-ZO2&g2^Z_VqFGz3T&;LPJ_Eg9NyoO4{*%cB&K&lmt0 z*Yfgie1>kLde8Ia)uM`Y8WfHTsYHv&(N(%m))9d?g(J4k73zgmcwdFFNy`zct3dS8 zkxANJ^ZK5lRpWjAN2*&Uo-?-kY~ zCrXV}LN~q!3;u%wzFdUR-2g8jSMKUmaAf2#1&R>PU@hPFDbsplLM=?$B+4x$S{evp zZ*yO>hM>PWk+soKc7(KW5(MV^N`swq8Pi8EIIe!Uh?6C7H$+8sqQ4gY%>}x86~B!k zb3SIxC(KeSDfQvG(oJGd>BPD)yu6~Xvke|K0`iC%BJE7Y`@~u(PlTd2vs*udRQ{d% z$k4xB#K58dKr+HB_g}ZOKMyJElO+Hsir{+pp*C zpW12~bQYs{x0?B@@KEAVq0n`yCfBwP`c1qOH%^`yzN9!BN+^Q)+3xWcXQh zMt<}MiHugE^+TLQV|=}rPbxpzQAEZFUuqE=wYOlESR=k@voa!-@2)O2C1T2Zs%|w8 zse$Y(G3~2hlcemdTIeuN^zZ5pZ)nk`$@_mwIwNH!52h_`--*i>F{7q^P%!0Uek-g~QwaLhSrFY3fL8h+2U||AzKy=c%3{ZhJ$n4+1 zYw&pUbS~d(Y8$Iqc!>+Jf48z-q;D;Le^|H?-N@_8;gx9;b&DT`P;K*YLt1 z-cu}(4bHIpJ!2kYav+EWKM z(&r5#wk5|Ga&8M}k88QJ>@DhiUuxUurCl!2vtdzgQaB4=1rkTx(ePw`2GO<6xStV_ zDXiH_Z>#zE?7kV#upTE1=X3p=qEEPnF3MpzvD9X~K!iR{@Fzj%eIJox1}d;n(dNiC z6`}FVc5x@ypIgW({xO|T&eE+Dx=+Xh;2MZ`E<2verufUJZzpjaJ3#jHls9-s<(shi z{SooFl;{(X+Y^6ql#5bP{|z{=0W_YTdQdK#}@_32NSoEq1` z<78HyA7|TB)8C#`%H8^UnUM{-!|XT4d#)6#AM9CkG&SU%a>X(mh3W zwsQfuiedd$rZ~S%ALAVn$F3oY=merKjwGcDlG9%(D;O7W0hITqtU-WRjCuk@* z8PsK5M;|d9GBa*KLur8Yv9yDp4HA*hJS2-v!rq|R87>t}{@M3oj!MMx{K|KbH?0%# zlB}xIz-8pcc6+AV59#mMUQ@t6Jfq|HZZq8E2-a&%qXNFyTRKl6s?4+hBmrtf{MKBB zd!y9N^)1n$uYXL7dQQybi>O(F1+!H6u6|7Uh0~o(etOfoBZ8s!%wo( z(csgC(xGs0(0XAJ@=@nj)lAZh^Gu!ObnGyxfVc^#uuF&b@lpS%N8mtDy9ZUJFYQ@p z=O~F#)9!M8vgI3n@1><^iMm?-q3)&c zMgKq-Va}yQrY*E) znZKMl3@n!8?k*UAS+uo+1ZZ;Migm8bI^6f^dh*6kP7f3LITTf=d|%wN5sluLS)~F+ zWYNU?5rFKai^MjWA0a|LEoCun+I(%c$b@^w6}QiBwD0%URj?gA8&%Q|Pt{0)7QzrB z#5+LuNE_SQ3!|#%o~w-D`T4EF`L_|*(laP^hLFh@kzt@kPUc_SR0SBq(BA=`1Gp2Y zDO+)CqqDl-BJNKV{UuNmeFhbl<9g#ymj9exjzAUo0qLvQLGf zG$gQg=g)8_mBf*bn|DnU&l`?+I7pQy>z7oOW&;`Ioz-zuSwk^3gU!z58Mi~K{tzAm zHCY(W^p#l%5BehI%zsZdP;Eg<&OU>Pnx|d|4`Iu9AAcwf$u;rRAI5jKvvbhObt+R) zePiM;(9+nRMf6P)k7MLDLQd~p_Hq(9RH^36&Rs+L^w-)|DYc^uzx6N{US0sQuP!+D zDLne-$9OPj2pMvo{C7I}^wHc-(0J_MPsN!krYil^rVSzG#47pga?{3II~-=raoE4d@Kb)| zTrDc=1~-1NG?J#usFQxE!OacdO|J;oVe(g)p_=luZfZI(_uLbF5s@>hZ{!?&>q`ZOhf_3edqLIj~9}pM{un$mqO3pPwZq(6aoP;0fov$!G-A467wWpXI#3kpl7*;9JVY~KrX7+E4Tm9|BYZ^QaYSx{a{T`o z|2sF+-c>%=qDfxR<*WZ4Fk9b?S~q=pO%wb$-`gSv8IU$iss{ydzGe~r?NZm}f!_Q= zoZ09|unBg@Fr``K!!JjZ*)7Ie2li7+S&3o>p3%)fhm7NxeqA!*%73j7-#)Xf49iql zP!NzNxvID(c-gvTo**{uM6FG21nZmZ`? zCgzRL@=JcQf=hnBi6r4=O9T93_wq2%qkstp_8+9wE9KPBvof ze0{1)B|S*Gc(e9o4Y@k0zF^9#9;~X8`_n92%OUWKyl-}Z`gwOO_&b?Pj7d-qxAOKb zu+lN5n!1_RTO^mLO1adJWs3VFt?6x?|70VXv`=?|bSk>EPr5()DA~jC>tqk+q;mWA zn?#-IlGg=oWt1kw2=kuUuHtXts%^~6;SAef?B8pO6Xz^g!NbMaO z^4tXY^0S-1&jX@kN~*=1Rgm`nVSXrxNk29BQ2K+6^iGL@9Th_7?xn={e~3h%Hbt^C zb(lCvKOOuzc&K2OTLtOsXB^Wb9yiZu<^umh?i_eGL0FutQ&MG7E@OeJ=E|%md)d&R ziZ?t^6h2u2Qu1|H%#mm;5&{JY15>}7zC+TaH4if>Ct%tKks-ae6{A~ezxZ;IMIRn& zF>1RpmK(efz>MY7W7V$4NR!uP?ZM|fUo=L;iIJLha>CVv2c7HR(SFOBTBz<@`o%Ha z)!mD(F7Qe}lTk+Xu1KRkm8-xnRBo3063Gp6O@&*Nr&kkVFNEUN+PC=&XEFS9gzs)7 zpEunWdoZ!1;qE~Dt13?x@VS}K3V+x~KASoDhM)#}EN3R4U79G&REeJK8>QFqLCAEeEmCR2U}%d4z(zG^6B|w)ycLGVA7{l;`x$E zG@Z)-0DVsTX{&?jaG6?7dPn$VBh}?36K^y#2-p~6I($y1(-~(mpgTjZER7WLYFoUM zrdq4us0Yc;E|XM3cYhkMK1<%pUyWxv=>zV-Qq%kMRNv$|C$nZI`8-Gz6VwJtx75jq zqW|=Gqo~#N)wV=CsxD8zgvIFc>tscR!*j3Rl!^H-QG~3}C!7Xo@KM*!V2E zuq^pH^3J}18>s2=oaLGFjuF|ypF38!wX^c+UH2iFtcQb4xtrS;7VzyTg>5a8!32rU z=OL#Az&|TzoL-`&V?`#_n2I}qn3f8Fh(}K}UjyN$kw?Uk;*DhSU;OexQCranuD3P1vsIok_ZYvL#TT54x{T6 zC#3AUZBv%hLVq75R=n`w!qb;UY^6$EiSzV33)5v>ME6CSa`huGN1*cm-y!D%p7>OF z8{B*I#>U1NRNr(E^md)KZbX$hPk0-!DVb3`R@qI#Ot)Zbmv7(8H3u|Ftp9( zzaL`pH^NPM{AwKZE)XQlaCxneuikX5%Xnmoerrebk1|YKpE)i=fpz?p(@b44LiBIy~D6 zGtU|FTH2u&$3R}Sj3bM)$&6v^@Ys{Ha$ZKur>KAk3s~I;Oq!M zQcb}z46iZmIensrd35uYGb!yZM}iRe>1KPXTwRIuRFLD_OdidScjuLMYYE*lv=J`2 z;7Wqj(cglR(Zn?#ZJ(fq8Omk11#x5E8f7Z_Oe9Zoytx&9c}eV>^6Pb8)yd2t4Js!SBQ)A-dnOU6OwtQE3wQLf zkbRQ!?VMriq!l~tI_GF-HfA)&+OU%sE*VJ?k%6}*A`8W@Ka^q1TUL_apjhTZY9&zO zn|*^`0Td&@_1cwKbNc0m%Nh0kL_YpD0&I?XC? zzLB)94pN5|d2f>5VLTwvJ&Wmc1uley>2~Qt;(wsWEs^F|d#11ep(Xpphl8$}p4@r* zDqM>;`QR-lmk4r?HsGw1Z(J9vJG`#ZQ%bzI#M9M3lDVK{TmC*HCa841gw#}E>j$c@ zcqlW-aQ!*^Z~bGLkvg_0o#dDhbg*dtq+P>pK?=Th_cx*>gj(7k7FqxFVMS|sbB5z@ z!&v=eDaCvt}X69Ck=j&Nf@7^~r zp$31_v4ZYhJb)qi)$QBalsd5O1XXo2?;!@|5a^4Eo^?O&juZ7U`014P%E8!raVzih zjhf4A_wPHlPm8^NZRfrBoG-{9cd%LP*`$%$dUufI>V_{-jVFJjTs4ulkntvM{yh-n z48vP{4e^sq+K9z?UZbc7`N zUHI|P;GiaIv}2JZM9@eyHDsV4`S3V=LRZ2t5y&#jG5e-3j+nyG%R}au`ZN@lS3@Eh^t;*IrlfeXS9PR-|S&I0H=G$=A<^-Q(%?dd2APvg)&PeXly zBGD~@>#-ipViraA*JXRbs>I-?;%xzBJXJfD7Y%5eC5O?=RND?0`Gv6et#8E;|2 z(LF|o=aS?uf{CNd4OHTO`7EOf*LR|~;lI_WA)Zceh2TpO+Sn6AC6?ru%;)DTy-@sc z((O#yVDcbxIdW`|J8#AaOcO>~Z?Ss#9xw#b)uiDS0L=$Rk&0C9AFnqR5NXfk9N;wO zJ&!zZh0EDc6$nT*3LWOt13+e^EvEO4s#vYOW(0@#j`E;?WO$)Q>qVJ3-@;p?jv12A zAQxfi-A~$aBuQ0*Mj-eRcxyS=(_Xb5?XMIFx^jhARn`0RQ0txzl?@@dgs}gCgs#lv zg>x8&=nLhU0Pg_c@tpGI36(>$G>OMRz*Q%uW((DC`e z>0`;WDGiwWc)~NdUV58=uzpF>X;A$4Fk&9Op>cJz> z51ySB*RB1of%5Jl+xh%W7(n2(OMD4DJ$RIIaeowwoTb{7L91FLy_dY0Smb4)`B z#7!mz{3_xmF8Ei7g)J@v({WRq`ADY6l-p^CZQz*m5&!r|VH%mL+|ws@?|_h)&oMmY z%;LleSY28)>;)vD0+V)=>d%x6cg0;MCWJiF@7Gc^aACov*$3->Gwa+jBU8Jj^kYCO zyG`DH$sXZJtM8h(X|G@17aOkDp!MVlJyO`00eS;E4XKkZ!apE*{EY|~{%!EZmTI!? zj_Xk4UdyXj%NFuS__;(+SK$WwDEF6Qj34+s1B{*X|KtHaCl%-zgdO6saziNzD!GgL zF7*pC`)25coM(%zA)39eQFxC_j~@9ZttMEd&ucV5g^nv&ICJOM9Z{+>6Ch@y>W|iY z?$<)j?6=2~I?<^ZO&r(h#faK~5$A2HHy^Vdezl5vAe1|m1-AI>=W|^Ob_O1xk24>1 zfA95<9{r9kl#y28t9th=#s6f!%<$le1ZaSB=#S9V(zKF6 zys_biz6Ec_!)7ZT+0NMRJLEA;E>5G+&p%giFzecxH^$qi`{rFCmF3dj(hmb{?FAWl ze+UR9vc&6C<2&M@t3>2VodbMd3G4posQwt?wN{|0U5d+_P>;&}7nPV1(qqwg|0k#` z>lSIRf_>n&fB2E=9g{2hvQBvX#R>>2g!_#iO>_HhjGeS^%Tz>`)Cl{N zW}C}b@LJ?P9?$O;7GH(e*g3%!YlR9owQ7Ph)!zBIEWO2>BnF;@?)_AGYiP+UT(J8U z=zGWfh_Jz`H)^ut@OZgxi60}}F>9!OPAJ&tPCU13Lr0S9t6#uk@m^VN%Okm+JHJ`( zFRJuKDsN35eXqBZ;DZ@|)}JYN{#&;@((YY)-Lj-DwnzJrHUk%U<7Xvct&aTcM5lQZ zX8;s3bl36fk}ndvohSpr@eDsgVe=NAg={t9Uhx*k#gAMBGtJ6}wZwo{XWp3%2cQ_K zM(v9N5za8$d#E&i-UR(4zE8ES-uD-`+3cF!GP%Fv?F|cE&3_s;iv)|RkSFa$IN>>= z15lL=Cp!S+2c~h#Rn@D@(^b;Vd{y$!T?6Yi`2U#M>g#NE-4N0G&wv_bjTSO~ieg6k zajFNL_lvk({tbBSlXw2SZlXRd;}uZpeAZMu`d0b|P6hLTM-w$`;-7M$%0lwA1H?(v zCv@2ZgkSj$CUTL6DBrkJzzgDdFz(%uXh(ir&Um+M-2ag7BaUUro7E@ z52F`IaX?dt($Ml_z;{9th}4JZUjxE0TEd&ZZx$j}EuLU2{w$D8L64U`Of`#Ov|IZf z=zMqsRrmGu3N_60T6JQC#5o-oYd5y;^6%$+Vdt$W%yix76usBaZ{<582Rj-}yR4yf z#0gC$tXoQA{e)--aenNt_d{O*ys{jt{#d^mVYsv&E0o-|{ITjLr7vB~TUVc__LY8P z&Mc#p1`)@h_s)<#s9A~glOvO+tCjb6)&2v$YxJ|N`0{rF`84nC+702acUrPV#LM@B zFu&Lw>5jl?FcR`s4i$MMx+?mm%jZo8c-&|hVW;%*?I*i ze!2<(im^T%9*DY9L)QTsI{c*KAMCK63*9ijaQA+C;~X#BfNbrb=6R5%wZf3qm{T1U zVo3&bf%p%^9w9uH(#Gl))cR)Ohm~{fRI#R8{vxH?{hvh*$sgxt{y-I=17N4V?N7n?-LvDl6he+^@+?GYG6|n)%~ck>kFFo{cV%bS6MbKa#^i*lu)u zZhOD})OQYQOLjDvFIwCO`JFd}WfP0MN@r~yOkv^T^Ye2CJZ+Q1COxTQT^mcEUxL2m zqru*{nxDM;P>Gs7#NGau_vSy)>`C{`cn`Z**l24+Yv^{+GpZ@@BHDejB0?K)1|0{p zwsSxioNl%`U_bX@wEhO#JjafVoIXvrf7mcRJ?$~TrrMaZH$6xv*5CP0OXzgy+#Bc3 zw6}#<#wm1a%1(W$b)x>423w>1ad5-AHhVqu9M|?~UMQs`Be+nuz|ScQMh#`zacYF@ z8?DvV%q1=1|s!{2*h*MJ;jARhbGvZeZ z|3T2h)vpcQld>>75>1XU4Q0a3za&U!7vQmj$h|E?{#r{^E%avx*4vWlMrHaX(i;f$Zu6%X99Bv%xFkppVE_ z_2Z`}?5n+XZCYI67E|x=-$Fa>1!xs}ZbE0o^`$llUQl{KU zNN5XsEp;X#@rHT9+Dp!0lfw)|BKqz!TBRrBfjy=C%in|AQcfpiy#Qel_Tr?<^zx4?7fY-TFVA?099B_ZVjrig2pGY>eRQ`EOMJhzau3Hq?je|> zBmdy>jo9xiZ46~&m=K|V$jUord36Xzmy~%OT+kqukU*iai!v8VAnYiA!e?X7 zT&|HyEue1QU+yA-FH{p*q0Duo?T60hZ6e0Y4? z@k)8($3@04cWw>9P~|L4Tg9EJrDbL~Y9e=hx;;|^bce)c9sTMK?Bj(()LpoQ;INlY zcQ`kb^fcXvvcz@G;4A?2hJtE;$=%xJ3O zsSYdrqpblXq6=9j_>3|xCco9dqm^`{5eLw^%eJP!rJUl$uT2LsfVi9!U_8U9A!i3= z##$vog>hvMv7*rt8j+Q|EyL}4sRhqJ<+<}&*Qh-v{o$VR?!K9IIy>g<{W(Cd1tK6# z(em?z`?&9SSJ)!75;%Rolbm)iW+RxW{Ssf3@Z@boJrSVpT=?@Xz|6|6PudQgv#fzr zIdWeWR(%Kv<{MWeKwTn!T@B@kFva#J0K=9z+mXh^wb~grtLea9Sl%Ev+Quc7&c-gW z#6?JL7~VQp^JHCe0S2Mm7|M00c#ke3Z!i^jjo6Dc3GHXsZkDKjW@Ix5jv)5P!w`@* z8*J(d0>)DZA>UqMma6n|dfajJ=GgA`*KZDE8ubeg(!W^eDJR=yH1>_u9Y{jIw*w2| zL+o>u8}BPxO-l$4iwO33sG1hv_Bd3$L7z;()BXK_AU>q1N>%SxNTNsEVYb<2;d8+! z>iJ;w7F8@ti2H}oiR6p;tKOUm!=ps!V4e3F10hSnfmErpr$62-1e;e+;fv2CdI3E@ z>}{r`C$O!14^KqiDI0bBR5vzX$$-*;>A)2Hi0~d7h6854~{_M^wWtQ?F5qNyz|d zV|4dT3=|s+U3Ha}F-NC+L{dGB&peXwXOAXQ_5$_EBN*8m}(8aTC^lut@=H+~p*uZlqcPc(;{Z$%p z_9KpB79tdI0qD8EG&5~RuqqDPCm-f)L%nw6R-kidNIr=*pV{Koe%xog1wjqFwEk*7 zu(JBz5ZWr@j(1s6YlbU^gzsyTI{fk2gbde`8QQDCsH<{ENM%vC$4cO2I~i+WapC3O*G@On z&L6Vih~<2j>|%*+FA6MnT&<3`3w`){$ApfQGek&*o++$Lt2ScLg&{d!G*cebCs(M9 z;Q|rWKCw~UR!Vu6O(SS2t(9J*LSCqiP6l_gr)H#-{$+OFr%0+M-%2KJ-r`c}V|sn( z){4-pOB-&hbQ)CSlYUSz3S;V0{ppt9Eoq&j1}$yne__e%r@TR5$P>rE#qZpzX?rD_ z`1UKOPKom`rWS2p7pjhmNN+qK$VM1J)gvTYYRA?6G>|=qbl<7H>phvyE6PJ)XG%E9 z9@dJ6z>J{EF^fZ{%!0g!$-k?&F478+0`A4Kebl7WZ=Zb{yt=iuE*1_j(MiyM z0=i`y=zKV>Jy>)rwg*~0ynaZ*M1x{vWpC)~tGTCsNY2OrJa78;Vmx+Zjb8{5#yZg5>4w>s_K>d)QQTX>!asFl z!+*P%4VHUdt^-C;FL+`HbDPDH{JJswvgnM@Suqb}h`XtvgqksgzlV>A zc=&!bc&`XE@?hDcqF#n&zAUcpG@W-q1RomUjXbLOxulG|@H(Qk*Z|dPDSi;RV^(P0 z*}tXCMOG-6(OCNv__F7*0w!|8y<_YU|+IfhVIv$ zi%eroe*K3=+1hb>yjUf_tW$C#yMkc9kT9bXUk`YT$W<(EC`x`@F}mmegFJfF?`+q8 z^J}(>xgbEJ(%BLT4})4RMZZJk#*X^+s~;7@v+w94o``FU(iZuK`*o@Zm5I?C8>DY# zk_e}LS0_3VtI35Javu7n49Z3(IIgUlONjY5bF0HYFfJuH9ed6pdOi)Mlq>W_hVIU% zKkHj|wL&VRFsVy_V1Va>A?r68xqFo97%WcEY`D{1D7GeE`y4aL-ZV zTKk+y!^rb8xxtD&(vAS|OU>j{{)Q`HgchZ#?}`Qd4cb?a34lZMVP`F4gO-YD#fF`ZAg7LihOVU<$(<8= zc#FR&%mw-VYRrz7hPFtbX`nSK92;_mxm%juX>oExStScz)-i+qLT=U?EdNEFRL9-- z5M_$J_H0g*M6gp_*3^-mZO<&{D_$>B_Tx*|;krl@;;D-`brBuZ}LF5S>r#^ZhM@PoDvQf2~O-t%DBPw-N(Y!dX5ys*KS4YD)1g^LfU%V(?*k z!8<;VO|iuD5zhzqzaM`3)kB1Ra4Sw1&tYig68X4Am9;`p7@OI5C$M#|*>|u)fH4|P zWTpFObF3X|RiYt7YgXz({dY33EJv1IGUn$^f(5Iwq-XlGERxYq&KER`q#1qSR1H=4 zBs}035IHjQaAIq-!UjKXPPWB$7~dTI%$r#wWL7P#?pO9`!gfeVArSI{FU-o@<3v0E zbVV|43auh6z!SQ9!FFH(hyyjJ{vPsA=v=SXiMj002JSAd6~xR@laZx^c(>aBhb?yQ ze4RnIwb2t-llG0NW_>0u-|RYy;2of&936GQyxAS= z)?P%JyT&Jfg173PPZ@kc-ex_=&wU=Vw(K!mT!>+QiI9So;M&27%r7Tn z>-Wc93@6q={~l~O&MWD28yL~uLA!4?ty|D2*y}$)_kUr)2>X(#pP?^!U;IfsN43T{ z&9|;Cj#23G%d{sK^th$}%s5-5;XT`vb5yLo;Tp=F)Qj)b4e!uCFh!7H%rLSRiJ6UET0-O-5;0V!frB-<@%8fb7ORbQDfU zJtn?GZf2b`lVNgKWE$K}s*%!HbnbwnO=%?i>}-&lpP zK|ELH*bws-GX%D)lhuMf2<_gmBjZqg(iW(x(|h&J%+It!|;O`4A`O790KF z$xgN(?=%onh&P%sD_FCS5mHA;^daJK!5v|%;OVtynbnoIQI3qLvF~y7cs@Gb)`xY{ z+f1kX5`}gq8HOS55T1Fjrp+%eJjhhchf=j&Kl zR~iMhr%)OPL5objO6&ThelO^5xaZr6?XSC!U6YJZ!sFMrt7IlA5M6}6-dc7J-w~oJJ>I9(I>A#K3 zdb#hL65Xioe9=F!r9p95{+D;iN8X(0B#V%QO%xqsUn?%yncldOo;$Du~Pm^iMHW&wxJajq1way?Q{rH`5vNNd~ z2XY1wl{5=R9o8?}#0Jojhnr>f;?w1y{Owj$9<{vM>?q;+bjz!`geoMv?XSQYJsGJi zWd3kwx#M$VG(TtJ{qQ+k*|*6#3rL|Ds85w?DHKmo#wC=@5l5DpaKAB;uldv-@{>+P z=>Bq04mJi9Q@_{b+ozts=q8IJNfZUK_4=<_cv{b=9&D9}|KJihInJuLb}thu15_xb zv|5ox9~DECLGYI+OaS5#_Pe8p&e&63^k|`T<}f5k*IluZp#W2(PUao3@c?p|kH2{a z`8`@g6Oogt5Zfeu>V`DiO^2vk@g(Q`Te^FGOA!3Z%?7LRE7Hw^gu{X_R=u@m~k?*><2e_xVhWA>)o1X1;s%$$XA6_W1H!n6n*RF)a$b3 zWDClDOit5r;+E?7Um?1EJ6%sQ6|#wCcj0mr#Sf*KMy6nAzh{rd7KdTe{c6W?iD%oB zjbKLxkkPA%X7Wqgaijz*h?Xg5ZeaH^kFW^b^><15()tu+J}6_WO%zh^QS!3QM8UG5 z3Anh8_uYBD!y-=&-we&MRBJ!wn7}0at3sb#9s;fW0Kqp-?_EW0A{0)sxZDb4H3mDE*Mn ziOpw0Yv%Ce7=wpt-+QTPtX#yK_*|Dm)P2JO2_d)hM!<}nigb6h>tz4Q%TsrrqsA-< z2MHrj=}sa5yHZ4_QkDHybsu#_a+g$e`hY+h*YgLl1l?x7knQcs>9;8tDF=IlTpy@1 zkT83+E4Z82vhZ=L)9ra@J}m=Kyui9Enl0mBq~GI~1LYGnzzY-&2^V0=3|&o|yc?xM z!vD%6q8>q8#)8hju{6n-P`2x20Yj)kl}3P|_>{@JQYJfkSX7UXM0eO%0@2>e--s9; zSjX3Fv@kRT&QVK@^x9~c=M^1l71Z(`E?Gyv-c1f7hek}KBPcu1j}`93{eAG3i^tA? zD}BN6%G}e)CPlFxQao*AFeJ`u3D41udK<`vAjfKLC!1;OQ!&amscBJl@bVMzEQgNa zc(sV9rYXQVZ(}<$JMgMv-DY|8J=B+a2Csi>%u&2D&+PWlD<;5Pdl`@|(b5fwM`UJ6~-bD>DEjvCd-95=TVH;f}bdPNb z0dc`BeuF7J%<|fu#DsQ*LqiHGaWZe0)VHrkWto((?=Yj?{rb`97`xrY;PY}O?g(A1 zOt+U!uSeEg#0}X`8 zd$ED_XQ5=8ABDh9&^w76!ZNRawp-$hGX-M3Qsb;y;``AtjA0fCwJ5g~th{R6=>>Tj z;1;)GiN0RRD{;xBqPq^c%8&F|FoVcK&_(d-hFr9(6oZVa>xf>tscz@?We3XBU?;=m6;{!OaEFyi zM|`&V2Fv7LHG8ad!z%gKmhWYUmNBP!tyXf`h9G>(`PUtcC!fBoen5tk2mw&r#kdlO zSC|7or!j|wP1<7l_D9b%nV1I1w!b}%I8?Nv-sSqIsB`p9Rjl&k-(<{y*#M&VvFHGF=>fNeymihX)+PP1RP$Cz5jUE zcBT)N1ZR~NTr*~n(1$;2XnF(Icv)H!POar_QUY>zHOa&o!|JUmEjFI}2FPL$F4FWvb4e37&au78E1@ zhHjOHZM|)0B`9O*fB9iARypIXKw;j(T zgU`L1rlBH)2Y`hTc?V{A)dsMYXsa1Q0TD3Q^SMAuV)ZWynO{v(iwX~>BjM|AAgy+5AulbbZ z9@lmK&pE$yN43j)V>5i@Ez)58B^!%?Nobp5yvq+Ay`d)lC5#-F9L)cuCP=EIquDj| zmzw}5hpQUmoJ5xDWgq>tyz>i#%p5+$XcZ#ab|1l_o|8RC4tz#{$0ko9_5W_edYRoE zU zGRs7bT@HsbJ^L0(i*L$*y8U9ihdB|Y&|zL%rbcI)uxEVtqBPY{0xcdF+9Ca^m-!2icDkotKh%}jnPKY=+) z;A<7yeK0U&?Q5M=hw$G;Q?u80*+G%7YM({K$m4s-*oI3ttRn>bSfGj^_ls_p#6q&1 z*EuHb&fSucTe6*8cCO8D_FkJRiVKmjx>WnRSS4JCp`X87kLFj9KR`K)IQj*)!DG3a zkaw2rN{{P9IERRTnhgy-DOBqjChhrTf;D}jP!9Zs$!n0n^((X9*dasV3IC8SGO2&u zM@{1$A2~#39$Dv*;9rLHY`qlW*|Qj_jgHgNA~#axCO6|y@Q`RC#g_(-bDMA_c*h&z z(US5voLGzW{-l0Vpl}s((UqdWSKTHrq4}wP-%|-QXx4jF`>pEw+p)Vg z6G2!9&6eB$yM$qgG4O<|r-X zW%QDn(;DY*Exu!NNioL`GEeFEMbG#inaB;&x&GN|mT4uU>$L8A8`-y!mS5O|sFofH z&ALnh?$%Pp$3~mU@yOT>hfl4IpDdYwwYJVFJ5tN9m5;OA$PRlPl;W`2u*m9310={~GK?=wQk8LmeN_e?bAeu2p zQdGm!*VEfWz^$NxD|39!CB4Osb8MnrBi$rfTkf}eyZBPGNNr@qpN>i*E|#F(?Q2BD z=m?JuZjq#J7x=aKq*pW@g6^oBLN@|>8<7gaIkO~6`}r0BCg!NY%R6n^Jv5B`@&t^l zXd}2peHHm@VWxa4uY`lSRUQq-K zhFb8-9UU9sSqBMH`=h{cNFC6?Ft|*soo)}pmyiUF)CvzQx3canq@h=N%+wi3;(7-9 z1W$#Iib38zJ~$rx;i`cbr&yuC)>~NyvcrK#9=>(|YHoWBS=U?aOvwAdnM6pKTB$ zjr*oN*?{V8_?9^o`hp(*Ev%od_bEkN@GJCRZ)a{bwhm-Wj+BS)>ecExJ{^mcev8H8 zzip#2mM3A(uqADT(Wkiq7Mfn(gQxA00_;6S+7{2J$7~_}b|MVMWsbU9^aj%_(Jr>6 zp>3foAH`}NWay7v&ESG`^H_XLic z-@1sVeIRZ@ptcm3xU`UuX@~1El$+g<=k4A@{tI<(JM5{V+h2qNjuf&Ei;(IppNyWE zxw3h~rhitJxS8aXkc#4_>ku`{x4i)#q{6l0B!s0&s`tzIu*0@&M?`^wE; zYbu)^wKBa$H5+r4DF5+l`FA1e!13t~uu+g4a!=9?X8n2j#+@Qq#y;{NA7bMB0;ld( z4hJI(8?jl#W*3tKe62AtQ;|S`TE$q zoB|#cBYu-`+WBO}nAdj1zlP&H(o1IZ<-Xy8FZ8IUeaM>#BNHnn`OVemUv&h$C?Y}Wx$=Wd`K4ey7wG8GLa8XEu(o47m~%btcZ zXD34?*M_o}KcHZ{toVajYA`1Rpx5*&pc-T4NGj#?Wn$yozF0h6+PYbi{kYSWYZEvA zukIDTXSTry;o(p~L+{rNrP4rAUpf4~oM3ofWQ_I=VTorqE+ykNX*?19DQTeeI8ijn zECJ&db9<_p>6B-;J%4T3TrpMGMQo_{SGuCLMypGbaRFGq~hfTlcT3^=gj#-rDK zkUxWU(I1zh_I&v7%fAIOjtd}pFh25F6~v-eW9HE%CQWb9!dVNQ*UyqiYHEDj-C1?0S7!r(VqB=82)H|+~L znN)sGLd7JkAJjyPsTy>Ogx_0ZqR@%R>ya=Lj9pEz3_8AKs^V~o#P{ zpxanCd$to9mBGhqy}*Zm+;yM+t-I;Z#hrzX3T*Dw<&uuQr>(m+*Di8*?F|_aRvGp2 z;Ta!{q@ckd_!>9|r3IAM+u~P%!h}&)M3sCP#jhDOr~9#}&#d~LFnVA!Z?&}OJ<@i% zp@PXmobDqP)Z~N3`;)m$6X7v z41s3mI)3}iUzJ_s`|MnX!D586lAot z#}}EEtk=KK3w<0mfJE@;?ef{to88|J=)jR@mZrnl?*q^7~Wj@n_5RrtT~joLVA1xeXK@!ucT65CSew%nW+gy2Dn8 zl<40Ib^d*jUTRg&`?GeSX$Kyr`;tr+eM47>NcLPV0g!6D6U<7C1z$T6OmNR-#R^tJ zUG-OzEZv>d7Ye<-t)LRM37=7VcBn5?$SolCRrHz{EPuwQTP?E8-G@7ArxC1hizs1f zPlo*1S5B33yWtAgo*JXy4$FVNQXfR@2f{bKm_9F-N|wo)5A%)fY^DZ>13$BXbE77ng=a-a^jFjj}C#QE9I z%TcM*%aQ^Dz9R}0S=Z`mA#CDtf)~+hE9H!4C>;=&C=^}Gr%Ma(g6k3K^jxvphWdcc z>T_^N|FRPYOsg|NhJ}k#CpV~6mB;e~nF%h2WeEaEiFe}0!=?5XiWXo$B&+E@NMdEX zN$p2G1o>3>42sfEfp`RG2R4~X$6l^ z_gxtTrl_7Nk!k3WXu6tWjMQULv6K`REj#NYX{OtAHKX)T+YwQ}feg@IiY}&_L4|}e zBO;ZM4VH6OZk}$S?C{O}Y7bWjdpoMlSi#@c_)q4mDjnZa2*SN1 zZ3STec|{X2xwU|E2x+|8(>G}><~X`-Ns}KV!nNf9=3bSSIZ6|ex8rc(T4lK(SdrB5 zwPan%w+gJxw3_w%-FNAYG~BdKHxYU!3dDTX;-pYhE#7HINA)F((#^s+uyuIn4rM{M zDB8ah9Jq}}ysHnE>2xPEznKlatb@%jsyz<*eP-MzIwrB(TPb4Wo|pDQM~!Z8<)J{j zQK3A5)23E1_qkNMc_mVb_1Ntbqm9%^XxB_})r;{EINQj}Q7g~6l>|pSQYAL5n|R?u zh2G-XuY!}tr7_z{E5b)w_!L?c6`W4n-^`KDv(7Chh`^sLS(SJnXIA%67_B~>} zi(+!=f1WGk^3GFgOX+I1AH!AI{)`Zjr0NSQPI%tc`QYO(*(x{fGLgAb9Fi<~p{&2e-3ifE#>kv_*QIsC zU%n&-f_fc}2AG=7tkOb}!ECIoW>p>0lMuCc?<~0(OA%dnWXLZYr}4gDV1KC*$w@U! z&$EC<|ZNJqb^Tka-rVrGnNRF!x`30{0E{8=+S+1EaV2P;trd1UuHo2zf=tYW}r*$Q5= z(f)O0k8)WuOckUyZnJif9|EXP9|}*@iXq76fKVq_HlD0NSco@!V8QklOvQYqr8RCAh;35_HTh)WNP z71%}{&cJBu6`X@cyxJ~gC>SBjBP>)sHnosz`1gyvy*TlpMnzp%CuL05sJ`W6Tzvzb zgv2%j9iDJrJX1Ag(D-<7 zjuDmc3)vAPp7Ip(MHLwq>(cwH1|6&0HrsmVkojiU!hAe!q+$^iQ842D)BESsW&zu- zN2A#6Jnd?R?&cfJ-N_*O%du09_U8=oXR9=39#+ec18q46rtZAk41f<3>GH7n#5=

2^hiKAcvx$1?I{iL6AOrKK&%cZ%Ou-4TTThT+QvAQ=GH>I0AS zt$6m2^8Mz2U@O$)reV8A#}r<|bcxis)jyoZdDxpXIb9;6DG5E^cX*)-iWHP5mx7T` zcbn{+KW}y-w|_Zf>#p{6+dJwrUVe=I>1|0}>v;aLBjcaxWoEWfdqwu{f^PdGZ4z=1 zJsmp9skvl)&{nOk0ZsIijhXrN1Qz65@L$BxmJ!mvWDAC6-t5wmEIm?FsWOa<}Rh9GdkgdIKnZy2lV8sj0>~O1i(LE{V>=2^sh65u7?Ss zR;W3lP*e7W;hW5{i3`+81hhT0b}85PWO|2-;JZwL_Es2%CUzsdwHXzffp7(DHEYY* z1Z^e?Qke!gNuM{?>#57jj8|n$DGtDpMgRvW&u*|W<>3*U#W=}m{E?%iQJ(mym4`pk z(@pRG2g(Ix<9nnehUR+n&)O9_9tj>UWVWJpDP;NWdMWO={X}@`Du6Pukc9cqVQT1n z*f-T_tdi3DtLya$^QuaFhf#pdlppN=X1rfzbg1dwdoSr^F$in z_RbnCENEUhGj;Em_=-C|nSy-gvdM^9`x)&^uHTo9K1l!L_&YxI4O5RO>a>4EZ<%UA zzeh&yFTC(USNuy7?Y6~%py-Jp zgHwA(un0;rj;}mLrzPd(9|!eg4iiL%Ykn6Nf{#H8ZoaqHOAcHjIVHU5EYt^KHmY}$ z(WL@qpxs#{NWPy-d}pZ&L(P8GiiYIm8o>iA~@9%==>F+vB9k-SFptF;V==HpRe_P|34ek zO7L;$>~~k#kRS^>@_LXNi;B+0a(+#;+L^(2nYEqbuCw%gC;eY@cZ=Gj81`Yn}zlM7npPPBM~LmbqUsuVzm+3C3VD+mf8y#4jD$vRU{S5Z@G%gR>q}?RdW9B`JZ=Ue?(n>g}DxBmuUmgPimO?TXflc8yQbDO+KE zEHP`6sEXUw!@R3#2Z0iAD!lXEHB_##4c6lG-9D1ecF;csSG4q<3WVf=n70_Cb6*(B z0Wq9-Dbg=dws});pY8wTg|wO*if!v;UYQhX5cxK}bFr3=(OSClrcJF&MbLF-9FL0j zb?ly%N3WKD)B-yrMX>E<`OB}=!h1Hh%vk-?yUQ45R&o!ei~2?;h$t8xhH&)h|X*XN>S3@;)Wl`#eNuAw6`#QbCbi(ViuKO(;@*HYkj2#dt}Ba_Q%)WoAqC zpICaME?gkrB?Jv9Pjmfij&Z-Q4wbaTgrYaM8sisov=wswA@ioBq8vs4zRPjhmFw0; zXUmVu!AT-^r`Rd88wInh&xt2?+NTcNHYng#lM04hFqhEBaA6=ED5tX}?#M!@Z)ID1 zrj8ZBk|o8JzW(eAlyp+gtj!9*Eb!%3X$~rEQoJjW?n5(iFtQ4NbN~uxXpJU)r$f_6 z-hOLR)`5rk)rJtFL{Dme>BssY3sR3_nPMQh60wy9i#s}o`EDQP(Ny$#-_P;D8MmQO z%-%xYO;YZ4>gqStnM^v?M&N=w^8LnMe5f=4<^$%*jRYwzmdNDeC63~yyc}AfZh>-pp zut9KyB|$qn2str`a$It;e)nhSi*3)J=a%oLR{E8)4LJ%u;!~?>3|<}=Q3+Gwbah#I zVJRMy!y5N2ebwKi(2A-O=^~ zc4=w0Jr^C#%_fTAf%wvnxh<>;!-JM3uPRp-PM9!U5YMfj+DdNzqGoeHTj&>)+D@Di z>6Zu`jr5C_4BrvFX}!IW9IFyid#XTK&nv#=!)hq%595%a0o@PN(J}TyCCn1V8|Bplb2Xf)9 zG-^htlsl3DfiC99v)5`2OUB#N5V@c`oY%pNO&d`?=`h><78CFbo8ryDo|+WhC{dq9=0Oj zo%qlgZ+bec__t^?C#grfMm?y`!Zggma%F|=TwA_iJ3EO3YMgCvT=rpAg9)AijB|YiCqPBVL{G83PjU-uBHdtnv`v^!CNp+MW+JVp(V*kmhdFJ?de^)u9!coxwDV zHNL6=$_w>`24tu~Fz4p}(P1tre{m3P`45j{w_wrk)_|^ap-pR+$bCZORhvk2Mrh9! zNkdndPdrZTnVDxKpsU4mgi(yqs8=vc|o(E|i39Cu^Pzc@>!a5QYM!^ zh2r!g#dm&3I`ks5&P`u?NRha*X8(KvR1XkX5*~uNG5>c4s0FLdu}g*#_Xy2?<=;aI@Q*2!rFmrE1pKeqoxVqFMoMT~g8y2Pm zgb^TFbJNx|_y|4+D}w0|KD$L7O*PbSy9tqE=mc7VFwz)j3zztHe74kG|0qLi>!f=>!h z4@K1SB&q`VryF^&>09rNEw^?gU#uiOD;=R@$(%S&ID3w*ZruMgCRo5A^n*;k5ZwAV zDGCg{Q~G6ke5)XWSMA6^=Nz47(l{<6U-V_@_P z$)l!X3am-_ESK68rmTJ?+KD2y~){f$o-dVohpo zia7BJGmT$3$7wG90Uci06v(~|Dye^Dp;HfkVUHO$!9de5!^pe<8!SUDgk2L`_i@@P zxU)6B6mA&L5g>I;Dc=Id{y+VciGnKF7sWEPoTzrfFGsU^j@MJ@6bqaJbi}|gM_x*JSkobgw=^h+Au`(j|3DON zGf-L~u_djP;+d@)c6I#yQVnqH5iY7L-hjD_382?W6jgwojXXXE(tKJ7jHwYbH1vS8 zO!1|sF{;6U^yuMSMyia_5e)NKQm+~9dq;=P8OU=vB{@)igG|aOBiDKND9vLff6#$@ zM19a+d9wg@~1>IF1%#VZ)jGN5|)hp{{Q=#_#gkA66%vG~8 zV%L`OcCCqz?}_(A5(mG-qQ$4)4=8Z9JWS7vId@%5X)WfD;Z2H&dDYw`6x1=~pN|OV z-2?f$NTXn;79_au?lkfGswv5Ai|o9X=>lCI@@Vuz#ul*9SzXAKeO)UVJUzo;+6l*?yc2eTr>TfAV{rXRk0dH|U{E{t4W3y3U^1`+8GQ?DI@_-uII&@0K6k>|#djSj&{{$ZF#e&{QZx%&Q5?EQy)}ua~-g+oTQ|E6MqDM}h(u z$FJt}=1$$}8tWa*5}m&~TE1ZIdPVB3%0o6jj_|NPcUY_Su~vvQ;H18lTB_^sDWtfD zkS*lrli%O-?iMXKUg^(;IV#3bAFMIXhHY&_^ybwuiXJJkuxPCtu`$Bw%T)Z2{x-IK zu69PLVv64!j*Y_Z)Pse4zM%>xao~ld!lsAbggqrSX5)k%zp<@fb-Vba3cO5{w0>P% zwvT)&*m=r;T}O_TK$OT?6?xBg-XDm{h}BTvz^F)~7!MaF=?pA#393P)4)Q^yl%@)F zD2a{@81+802y(hKJ8vW^1iz|sm5(*R|Iuh8<+gPUDynce_U$e21Mv%FEz76%)~oM6 z)xibqBPgy!A2d$3T6vd)S!Xx7KxuBc&a1k3u<%eKw4H;w10CpM+cpaAA>F7X z>VNZXfpQKM-**$G>&DUV5~{R!Xd^`6t_@x%Dzu?@EbyL9$s)PnI; zJ}vKh%*Fn-^Oho-<9dh)fKB6=p~HfL9lDUJ@r?b<_^fl6grEM2<`-SWoy;J>E*nMHXj(m^<@rjv_|%lOSy?Ocj)g|+7l_anhqA5ri` zSNElLliz%>Z(`<}zcj86H>{14x_fl#_n3b!v}g0gdeSYYlO)S)my8~%BEUIdq#+Ed zYL2>&>BZZp)pQBwvKL>qX3JnfiS%fi!Fe8mKGuUg`ijtZ;`(e;;@dpwt=i#{$BE7w zJ0nr!#6u@^EGuwJibHV8I#R7M8W@}pF-xI$s+TpcTt(&uN%oUnf0a3ZNorYZMsS)+ zu}6Ean5V&&ZcfRj?HqSjIX*H?AAPfWZ0p9APd>1FHV@W7RF>n zRKqM4d7M5;KNk<)kib8pFptPsuIKL8iGG~~-Tc#(cH{Z;a$iL=O2OQLNfv=3V6P0L z7zuym#=*;t8x5ji?qP(6`gH23_3H_DJKn3${CL4}u>_Kn%zg>zrb@?e=|&0l&xNns z3)T03`p(RWfnImAe&S%fIGvG}+Cy!nohh7Q;Dw7Un!cy%XS~PjorU44RRo=YQ%G*^ zOZs0gukuHS=>&+BnTujv=~0faR&E3!$r6J6hZv|`q7)y#f@RhILOt8-nU&*d)v1(0 z)bu-UDer54W|6WeIHNc40e<-7cC%A~qlgZ7c_~CkXb7Gd+q7nIzORS(~=^WjwKP)%FP_|6LNFh%nm-cH~I^0c>7(Jz$P(ej?F?qljICM(~;Q4mtlikc&+ zkizLx4lh4OKttsoQTFHFY=)` z;Y|u%j8|8;bK9hK({xC6dXheZj_n}(+_Ti~&z{$bRt~*k0vmU8R#7-~ zVwKdi^gp~gEc7zYN6p;Gzwqk!>`{=CRiamb6UgJS@pjfF?QGjbwZ*87U1Ih@CAm@7 z8Y02n#zmQz4}3*$ah|x;#^?kd-&HODyxqIibAU$Ejp34}hTVg~@3puTMWW9sa6Fb| z3Niiwy_lOP)L?W}R>jQYNL4P-TM4UwCC7 zx|r6c+lSZ7g@@W1$@l5VWE?0m|DJt0!H7q&rFgHg0_3$$^FZ&YNDsU?t2Pb0 zoA@vW74ItJEk#+|J40PhurtOIe3O+%>6O4Um5minmUIh(trU+;6$-vO8hI~)mpYkk zX+5OX(_%abeLR!Z8vp(J^fuaFuNWGg{w`NfF_wvdejjsq2Bc?`kh;Ar!G7BDGPab% zrNM7oT~+korPUs^_dn~=DSHUy?FZ_nO-(|08_8sY>PG6^YvKV1*EsqokVE>otVraP zlSCek5}-h~<@m4J8#mcv`pq_=B)b0U(JL`jr;KI&$}Jl!=Sy>Ud?$;sZb#oB-w%Y*9Lu$RUvP=| z!y1jv-&^zKLr>fbd!ABTd-MFvG>SmTXIBm$k$-_a=^h8R(;HRNdXW8@Fei~A+bAe0 zDK@Cs9(FMQ)A>oW>o$kW7rtWqT}yq>YHP{rP%P}(`wH;Rwwz~K;uD^D{zk!PVN5`)&N`vn1LMQ2D5~a`;f^P5Wt$U$>{KN`|@@n0w7?uFh+kll?=jhS{# zVG^@3j5v-y+h1S^Zt-zVHr%3pS>wsPE}Si9hgY`vAE=aB;=V5IgFO4D=wL16KhWlS zyc{Qf0plaI^4s>vTaC}pxUE|fHEoHDL|EUXK4Zg**QtozvK#KXYLTy4{V~;wQs2>L zOrzUTeWlFK`^X<3SCa7&-cN!_7oNO)Rr04# zGg}K^pHX6k)F$osEo#1uv?f`(xDV?U)i|NtwwJ2Hz0-#jMz$qtLN8sWJPAF}O%(MC z<0ahuUTiTDn%ZppRh^-l)k8z@RYlx>1TeY^*y;rqtVpY1t{gZ^Yeh%mDSxFa@8)i< zL=WlDn7Fm6FV5UuJ7zu^n&rMiK8>mDJ|dAEo9$)7GmPg^V+^V;+Y#W#Fr-G~r}_=| zzw_>KGEg$|8WfkltD3Z`I(d%M)3qrR3Kr4(TC2g@@z_FMndY4+yE&tDg#n9B!f3y0 z7S>c!@^EtQe!+7=re5=7`DVp?AExr~;z%J{KMKYRM2hE4pl%nr7CsScHcrRptv7lh z&o@O%8v7ZYC&r}znhvf|1$}Qp$dNSYzWPDCs(OEa+R=lqW<~9NG!Nk(BcSN+Apz_X zwn6TXx9L?YHkex-Y@QcZ`)RE7>^MBD-=9vR6l3MY5w3jyEX9!z8C&nfKTEgHyI8>@ zM&YvdhT#2E(_n1;$0Fy~V@&b{b91+P=^t>sJ|RFyH%4-M@-1_>@88u&dGD?>0|~qT zK(_8oiQUx-bR9A74WDJf5U^h1;HcC=_V$=lS)&?^_~sN26rb_)Z+CT~%}~8tOOGfr zDj`K`CLI#w%BxEv`2cT04nlxz{AGuiDJc!kw4#I}&@qIg7fg;-exhBy=24?u%-dl) zip0MR^A41&Xn$gCfnx%O8hq7=WHibN42u#=p*8+%COdzUbLtmT7$Gxu{UdHTDAu&(ox*wqFU7dubq|L-WXylBAR+G3Tle+G`$j%K6w~ zeImdWB5<% zNDqqLM7MLsfJk+$9Z4uQg*5J76a9=9B2DiFPGLRcD~D(7XC+o5erIK=s2`)?P&P0l^}-qza9YErt{_NY&uxoW=rw zu~{mczftGt%(0*KIVZRZX#DUUqd8NJ-zl0rC-MvMZ!PlFaW=2w&>Du0f^&5WQ4s0DS z!7q9K1xGW3MhE1e@=0Nh1m8MoS(X0{r-1K2cl`SC8C^7h&WCMOrfn$xJv-gX`SbzB z65DDasFJAh<$XuXZ{H_s2Bc%QX92~NBdR15!7Fa!XGKS@!1vojf&12>1Y7GvDKz`d zfSM!zyu@{Lf{fWO>lAmuSm76B=M|hT=9M8HUT(fS_oK20>%*s46$mn?!(nFb-)_E4 z-X>j=*Lg{Um~(9biUs zceZz`8)Nmk)OPZzN;m#<(lGuF|nnr7WG(hl7*lZt`1 z=iya$i!r3zkJO~ex{=#yms`E2!19yzFI0E|W;;X4740hE?poLOj#p=%tqs~uCPHLB zz5`krP1%;EEU4{HrcrOK9=Z0Th+TO}$C~Qhw-NYY+4^tI*jSA-%hvL<=h+>j_a#e( z*MNDto@Dy2p<+HRq;h1eX9EH1i3MtobCRoiiNlUKw;@c1OZKARc>9eK0!dzX_hg05&EAjix zS%U&a2N)>5_{^tNKSX~lWzxuD-fB`lQIRO@w|ju?S-Z5mh$_x5s}C{0Xi8P3^X1?J z5$ui+Fu3CdQ&eO0(b1(pQlP<}q#kA_=4`Yw_Ru;GwF*rf#+K11s)_tf?4KUh|4{v9 zNe|58KoEu71p{PC-+JuQoBK}_;)NxSo87v;q=}C!WDZgmF>yN1BFW&C7x&}N4ua`2>?^y2t8;-9CvAY2g2Ob=vEzJh_wNgN_? zS>+RnER8#V8}B~(a?op8_51Bu+-O-H*|cc!wGSpz6XWDGDm#3uLQ?FFFXe&y7EBg! z1(QR6%EZDIljgzLy$l)(Rb>!CorkHIwaM-S5jz@Gyk{I!xLKxgROvADU1D104`u z!xv37-rXxFzh4@q!T9LJ+9frmbH3mg)oRI7{f1}Kj5y21N4!_wS62655d{CWNgR3hujZ^|PGX6MUA)!BJFX(mUtkf(T>`S5Sbv;# zj_ru`gf-(VT3hI!CzlSJT1j_wq4Sn(22a9TI+CsFI2Bf_80086xBN9J4;M1>j)1`i zfLvUrjSh&pl zl=)5f#a?9qS0ny+SAe=lfy#RWMyo&YU}RgBxqX8OeHr$wp^UrS-vz6xbiw6$GsBJ1 zmJI&Ptmul3`WI;_d4d=XYxj=B@8*r?EEV2>{i#jyXt=^me0A@b208qPmVqB*;Ow<+ zQ@NN}cpp)5T>B$6NXlP9?EfKXnIXB#Uci?4nFd?!SnkQ!XvPh>jsnQW@#t=M67K^M zH4=~AVBz68M(xLEJSEQ5IsQi}Wy)*^foIMOf?*pa;HJ*kzBrh^QGv_uE!f^XBMPp*k4}rpAD^K)O|}uv2C)W1^m82 zVN_rX4M%Rh*M*wXA2M)B%LLh3Df=6q96k^Ohpsxj3s`IswLsPKSz@Av%&h$14Yxb} zPyRCm`{sZaih063vZj(V0L+qCe@{nz@^)h8kKr%`Mf0UD3tM+as%*|xm#B0Hesjw+ zWje)BQ6X0zCIJKKN8#P|EzSc0DbBnZZI3XK_0+~GmdGOV#$IWRJ+f%9({R@sK|u+3 z_2=NtPX1Np=vK)HTzV4Gv{a8D&ftyHV@1>;&;lLPvaue${)l1lHuQ&>k$*aW{(BA5 zLz34c1erqd1@y`y4gY~w;gN)U$Nz!Q&n1uIw_tcq9W1Sq!`c*66{{Utin`E> z*Pr3%l&iUG&fI;k8# zs%*2j3)wwV`XA_yVn~OxZO&NJDo-ebV|?uSJYoNqa%3F?ot08!RF56-gTvC*PwbIg z@T@!8E+JFrH5N}X=X903FD9P6z7qi&%gKL|h||<7r+E6?>w-m*hlrHnnNOlhf`fty zz{YLTdT7eQy83Ny3H zCEPA#y}p%JfaVp|;Jwt+qXB%0`upk&S;vM}UZB#p(vZvcsawzdoYZLFUw_iKL?9H5 zpzs|e2e5V7rY!ky_T*?F1S2dZVn`VLzkmPHGW+g0Uze3L_k{nc+N;`{4;moQSl{k< z`LUZ^fsaL{EaYJuU)NjKV0=#sWq-<G80Z*9Y-CKy(u2~VTWK2)k#~BXK=U-|V7U zo`8puDR2afe3xLM4rPHP4rHv#5+eRw{5_%ysfY@2JD_@lIK@_)VftEdzr=(xrx`O; zRpr6)T_MJFN8r#YAoA`*knR{7iYq--R_1rrBsYx42HHMOmA@BO8uEQ01dbC1BGQ^a4v zR3FWA{uWB#0f=6`9$~=6dQz|nUh-LAbn=V)HjE(AQ0;E-eXS?CrbH*IDmh*}Mm5@C zoK9VHYomML3EV+HxRhN35s1C$=j}LwO4gjie-O4wC9Z~wqMlN8Ji;sCnx{@ZKl=k48Hl;%PV};2}(ekouauYjKY|TzUEfqOnvWK&JvLsNnkg8CQe7dr+#xl*KjJZ(KdHXwzE2!)=$<0nh_sL zXXN_`;{TB{4x-w1<4@N3|z;i>+$t=n#ji>`9clMUOjw576 zR=Ts!D6^0)vV~-4Z$feIj7X9ZBC-kD^QbtPW$(*A`>gx^KEMCqKId~@@AvEZd_JBB zuE|nXXI1Yw;^el|}DHyj3wOZ@A{Hkx!KcZYi=j6K18xKnE4#h}@#(leb#;!YzKno}JOKf7ON?%aUD->|uF*Ei2jw;^zq{{)LWhU1tv|&t_ z?qh!@GEv%C-_i8JaKcldwZ1u}vZ@l7;)2?sAX7Hh>ZL;#$Ck!&x8SV8?q3L+8P3;U zt%ff@22t)oQvE0?A&0@;H1OjycN11)nVD9H)Gy*%ROaW}WKR6P7!jmJ0daJJb6lDC z;Bv(xJ{(?R?LK3kvMT8~F!ERHX6#=n%LklX18h`Aj4K{kK3KU|P9mvKQF zmh9ywk!`LKemY7_=wKpfAwc00c#CL9BgD#^G@a=Uk{ z3u8ApG<04DKhA6?IM^vhb!)!7tkgWcOL#SvbvPuPc&b%wEDv{Enpl!$nf@f>l?@K5 zR-nH$y&CxvPPvxY1x;qTq9v>^?I(S!5HBx`7Zny-cq-S=CltvPEhi?Ts zt4(GP(Z-^j+{`!}$P zFOp?e$o>?^*7E+?@QP)Bg%yYsMtLAe;q6%xci3$Z@d2E^>(r~A8a1WxLFDEBAaj%#+bN6QTMK^E7w5MdXcXj30lA^RTCfywRy`R-koY*E zx#S&N333o3Dui&5t$o_ekbqu=yQ1;cKQhypuCRB9ytB#tzADE4!9Ik9LZ8nhw=rcJ zzP=^{W~=J<=kWnM);5v#!lx$p#{v{&1o-bZPSoHHA1Bw(=DIc^N;Ns>jA|m|KM3VT zo;@4HIE-~lbS|YSMlPn`-zy4mI6cY)*-S!Bvv0N^X7(J{!P!fo^iUzIoi zR9?e&ZJP6u3-5YN4k+4-37Tq?;dUz?8J zm>*I3u#5bmfx|>^%SM)7m~+0jHQ({jQ?LN1&%O^_ zO3S3=XIv5f9`G+@<8AmW@znM%7iFM86iH=M57J1FGzLN6Dci5kCMo8>Ma)BQEw_$? zn7YmY6me`b*Nm2RUB>7Mu^qjt<71X^SVa0pR+C{a-G4T3B0E({;^xxQ3lU1n{G)5R zq^EsM-vjv}={}&<&eH!tw$UVCb>_eWy60#z9~dvW2xZ241qtWXU+-#vf`7j#kDWwo z2nYvPox^eNj?0%)eR$_swu_?VyJGA;EC6>$Dlm;`3>|^2yKz(J#C!2q@dR|?s3n@xf9M~ER5Iy+8A8DT@iES1-XD8^-J-> z#Q!mp?NdU0W5yxJkZ~@x^JMUJYIn?kAjsKjyZnn65)6rjWNH5xAG!jJ*d)+f77+@S zRsJPXpnL7}uDyXNIi+N(8rC0q9i_-2v_!QA1IK{Uss91WII@|wHqjrQ_rME2LQTqhUeL({iEily0S)1p7YAL%r0-*88%h%Vkw=R)IH;b6pMocs z2(QoIld}sNb6MRZ8EiAeX-hiHh+z)JN|(x@03dy?%D@zJp5EE9>NI^$s)=7XVI^i} zJs)3z2PP1A#yeD6KHJBQtZ(L7=3eF{{&Smyc+14K?Fp4}VR`=pT^xhH;EAc3zl5RQp=mjQC2>rbSTBNG*mVmHxt{9p8KOkDTurdV=QfA zm6?AXL)UdoS+kpOh%X?IWcBOHe;b-c+*b~Q19r_Ux)9M4Z35%=qlMQx=44XfA5Py? z6LKx#!np~yc3e<{cK<6Nlb*OVjI3EjPh2l=&TiX+Fa55VnhE;={Xe;P=Fx}Y6+=d* zl?d<+h0UtUB5wt9Q}W#5=i>tvqn%k{&pM)&;@A%-6vh}PmoCuTI`!=pdvR{*i0nf+ z|C%cbhm3%iziJW6{(qC{z2BUFg5GuU-&ZCp zhJTNqv<0C1o)ZN|AHTNQx}n8>$jW(pSh7xAlx&H|V$TDYKbybg7!JPvbhn-M!8i5= z&I4*yA^f@Bd~u+K)PTM{N3=lhqZlGC372VGN-p7KRE)go%!rTo1N_?GLSEHmOt~)qqgS!46c6rh-{?5Bu zZdBq%APR=%T%9fP%ctqMNeEh{?5$?FGQz)l<<2Kui#CeAD=^Dd04hj6zFB5dpGl4-4D>#)v7Bk5KKet9i55V_x94y42m<`CK8|WxI0maEsUgF<;ykR@b>SX_7 zA2z-zkPmWjoHQIkKV@P#tp)n^tL0ECFz!u_*&vCUTwCOmD+2;>0AK28P`-O$(aqhN z5Fma2`nmK9PjuAQ7PM3+`mon*RetQW&kq zcTeb5Hv@+~f=C{bC56eGP}nvvp*%k231D=eyNFx-A^I`Bg$VuV(Gq9-u{j$|lg{yw(=E7YOeg^;9 zoXHiZKk@4MnTz!zS1e8|iGA1Rv;9!s;}p%V1$r`_)1cP^QztgHd{4U66mgklF!Uj0FpwVklPYi7QzFKhdf)In|E+C=imz+XbBVz^;T8d#8 zmws*_`45S|d?-N_(CYJ(f>^^rDlbw`x`MoRMqU;7H66Lb*d&rA5+AvVwY8``H!#Hx z8|Au+83l+JjD-+clT&5kSdnN0_$I22M)OF)Ko9-aPv#$dZFM_`%V34=kL#y8XQnOL zD8sR64q4a0$gdo*GsKFRP8uv-BZQ}Ajj;e)efas@4`pWepI;u`u z+VVfp2^L;JwvOtjAN;3Sg9WJf)AD8etg)7w_c3XWdKt6)U)C-zjZ9yfcWs%4-dhTF z1*pLibbkB-Rv}$Os=d655eP*Po)H;U^KNJQp#1cyhYel~Pi&QAQK((Ents^&?sk8U z&LrQ0tK(l;WoztNMNcD?AY|Ap(k|!L$sO+Q{bEkp0tof=RSyyGio*EHLpC~&_}Q7r z{V2&i|Eb{R^m=5Q-#LEa5;X~AjC$I69XVNEDPQRaxp@KQCRh`xbuVFVcUXxxr-}T8 zv`pW-B^zJJCWyaoJ+MdHl%R>RWA`NfW z+ggYtSxV~(`fsc@QlWJ0!VqfIwj;K>*O1O%*@1j zp;$j2QWaL_2pK}gSVO=y#btNs!k4AR8=VA14M^zw-h1AXIqv?x)gi^N z)Aq@K6~0`LH9s>|^Lu@RU5Fi#2Pkv8h}TmKyo8~Z#dwQ!>%I>8(NC@Q3zsE%myZGi z-e@Ca8uQj$=^l(u|L(*aA!ZHx?dlt5M0)Qe7(JOGwA$4w4v$m^xxI6GSaX!asr(vx z=J)7!+MvE}X3C9a%Vx2kj~`*vJX_izrXlYS5$MjPcZ&^+iEW-ig~7DFGj_>sl92Pd z>FFnR^|YSpf|sTyin@@b)}S42%8w-#dtr-z7PfGw9OJ;6>A}HzWnLk9d;7!%_HW+G zl>R}acd1dF(-1gqM&6Os)6}u};Av?uIz@4EeM$DzLcF3}dU2pPoHSfRgpg5zfgW~$=Lw}POY z6g95Dy@azk5*|t6pxZ?$nO*2iakZs296C0sM)*d7&NR$aKxc?fO)zF4WEG|8*!h1A zyoOI9WnY#1N~)nH^^vDX86p31gIQ0V-jMtA-k6NnRRon#|D3Ch58)5XyD}d)zD;S> zVxS0eKG+_I0jr4z3hO)_pG|a?1k7Hmjq4~R96>4fVUV3J*x1jKzr_t^%Q+bHUE5dWKRiUZqR3FP%%pcD2PmXu*|{5ix6SDH zNS~r)21n>4b?fSH;aB}vHlp-YZ{ngCa&RvD=>s^xUj&!5n%D0lmkvaKN za`Il+8vfDz#ON-#4^8UCo7+KySG%VpISH=#f!VGnS)ceOPlf_;6IF$8QWGxaJ;=mZ z=Rujto@Bc`HN7i#)PzI}Lez>1OaB6EizmWr^p52IPSukIu~+wenVlT##gNM_>pFuc zYzc)zJ+d_q!QBkqC@}f=0A887Gq#%#8rNqkS}E5lDMf1kw8c%JKFWvr1!U~PgQuLdNCdAxcsn^EaYfx;r9P`7aWZRFHjk zW&2Nz`X6!FnzQS{akZ3;s``UKx9;1+koU6~TOXx7kVu}A@nE`Cf0_%$gJlB?9b?LvinkKLmIWhvmNc@7kQi?By>3~b~o2|C#3R; z`3%?ly0vsLS(cDfo_0HpPjk9+M0Cuc&+wHRP)a*M8P4sr_qZu=G%C2CWDRYbU+U$i zH%mUtwA>(>=FY(Jh3OOeZC;42mJTG~>dO|<=)T4M8K2)};CJYEN*1ZU=|DZ;i*&Hy z3r8z8;FU++b9RQ1VhuhOTf>{=N#^IuM*ge@1~~dq4|b0js>tL87idU$dg)rgA7`{! zXBUpW-=698iZ6#L`vIRT(-(NVr=e3@m ziJH{#P97RwvG%SQ?%w%yWiv_S2=2u+DMT>@WNVcy&)?I2Wo2b&38VV`R5>JMEoHRm zYgMn0h3SKUCxqwn5gm^okn8qHgd^vD3U$cx7)zhL{*62Pyl3*|XYu1}@^DU|qw5H; z2F2b4Fn>*bnnvTdF!`S1@vUQfR6n20Yf#JRl%h&FL4za3GP~XD@4G~T7Hl8~(XG1J zQW3%J-036CQuS+97!ZvRZS%zM_g!=*oVjyLKA7gm*K(wM);}fOT-oB^va~QRm#_^$1D0=_0PW* zN1rPAiS-ThpSu7JOt&5faX9AlU)f&Q{huR&dSbJ{ebCfbF5!0lseT10TJe?3)f@!>`}bzrrWBukYozb#kMj0@m9y!^e?)R8e?yD4 z&(F!x(l@u0C#oBc0Cu_B{vjMaX9vQW`9GTYxF;$bnfQ4+cEIVYod1D7-^alL7igU= zJ>EMpl8>OTjfcK!03=MeNa*;|c*CX7e;`;>d|-kfh;GMk4za z47$jO^&dx|^;U!54SyckN~*oW6PkJ=@8HP~|1H4rpWBx`hJZO=`}`te7@2zrwwlzn zRXRBNDo=Cxp{xk~ON$|0tKTk&Qec$}k!ZMn4YdJ6COwm1t8dIdnUfMqT9J`|f%rbS z{Fc!`Vj$f0lAHL$R#lXElR&w2@>Wi1sKi2^h_3d zd~*#&5Av^Aai`S>%3j~^ylI0k{d*z@sa(b~41E2|$*=!%d@!+NU0l1YIw$uOJ+wHyBK>qbrjrcS5^R#&gb*Vj_Ki~lgi zys7dr%cjs=*W%MM*0CYAt6Hq9-ig552}r*gF3IgnQ-X@ zd*esCY^-z$jB;)%4hy^Rw>gn$sgPv)Dt5ScGmF>xJ%y|+O!~_dniTsF6o71N91# zz%T7p*l8~z6JkEh`>im@_3Hz{lur*@Yh%sr4T8WTInv+}9$pFD>jTw?=`FfWqL+0+ z(C>e`xnOYIm*L1nKrHXznCo2u1TUAynEsOMw;e1K#b7d@VbaFo0;kc2G<_dR%GVM{ zz2U~{8++s^nsD5jSCDSfB<3aKa82Iwv-L#d&cc2d_dlb*2ue4mbE#An_w)0(mEkLCC)85}{ z862cfollCJ%^%4p2sL47AIVu90Oiw_3!mq`v=2lQ?|Gi@t-diQ{x!V)>$f)Rk0SJO z$afa(roA}TAI+En9n6c>DgZ)K;xm=}Y7dp;og;Ge^MJN1PmJ(*H6>`dI;COy+fSbMlfWG$47imyV=QPW}Do?9tJbHU(H04~Ay1-A8!2q;$%zIw_H)_`7 zRA{WzJ&ZPrhhV%nu1$DTG?VOh>${MZM_>}QzIA%Dj1Cg>GxsG~QEaOfLOAjk0Og9u zNA)H4K-rZ!%7dLubmr4(F9T9;k*44cvyy@j6%tckE9q=MZP*e|`iFZ9vHEfTiN9Q< zVlDM@kVa-UU7ha_B=_a#@192J+Iw&tnJxcVDvVF)l7Gy;p2)Wp+K|&9fv>bI%!EiW zOJ9 z1)h_hB^AOFd4PmMR!NX753XNT!41q_YCU3HKKY8DvB`baJmvLCM(DYv!&PfgmU;J& zdJV%xwu>Ke>vX@m4^_8P87GJ;^@NvIO3R3zYSJq@JbNa-bNTe6Br2t-;%39{#?z-G zYw}I^7-Tx!IoZA6iY}XynLVCdoZtK&5x?-Ie9QbBcSL3@HY`NGg4KNLplZ`44gI6M z{Oey45UFi|)upamfQItxtKYzA?jS7CqB+8437%d@#WUvb%Lu4l(<}=PzuWA6r?;6$ z0&(@B+*gNDIR>1brsfD4+m1E=k+9Rvq+{%i=Bh9T14#3dgz|-#?4i47nV)CAgY3sv z%o2X{`e`(!M}HfS6O=irz8jpS9pu{x67L_eGSiX`hVeCDNpvu+B_+d)_x2*QqPn5s z5@DXj;bsRV^JVN!?-UghT?683i&I2enji8NhfJMAoP4T(o4wiN6#vON=OY{*z-vHh zFKbx9H5|Tu2@011rla+xM6l|@#c<(do4N2oLg{*oxGkYVO##6Bv8T<%wtrA<1QZi; zUcz1^0}*Qx$vsx}%2te!>VhY}Z&V9@5s2QU&C`+=@TKaetMsF~{M@|JUTMwC6rS30 zo`30hWDC zrsl%f1Z~@WLg011V;r}i95C)OuJAlKd|4btOYrI7xt29E?`YQW`MKURL{f8Zm@m3T zAE;aI+v)UCDg;_&%ZyJ29oBaj-uP!e~?b{fU zTa9sEa7Q_0%@QBt?|&e^?BW?(lE>NAzlx=_;N9~B2%5*OaL?JWH56s|HA3--r?pjy zxhDDxsk==sQnU*L%$n_ux6GDe3pA;LD4B^vLoX%&b7KdgGgJA-X)7O<<8@_gIg^_jbR5%)tIH&k?!( zM?7kro?Re6Enh6>$(G@*Ts_k`NjYtBh@Yqis*g2lbUK4Pa%q2#SC9AANV24K`3t|IFFuFvv9wu+~1HL+XrJ?|Th$ov!U()uJXq z(vrCq5T{sDFqR*Q8_U%9f(d1jrTS?_mUf;Tmk4)zVjEKZ+YXwxyAao*9`$f47Z8Me zh|D>NbQ%w6D7r)B-!kXtYh?0ERYHv_qz*UZfIFXLGZ7|OxO!47lv|tOMJbY-8>s9P zMPpnnBPnG_uA{s?Y73FdqwCRRtIPYmY(!<9}Lk-kxNQqZvvb|K3RgB%0+Ox+gZ)4|?RRCH** z`gElz?Z&&cUZm$r|P2vNn!U7wLYQP#k5JH*vet%a7Y-LIM@efZ81wiUH zWMytS4@`$$MA@EiZtDGNHV^lFQNFLttP+enAEQr;%T8Kz&{-Ai?2IyEWChtne%R2_ zt=EpvIi;yt4BifW@gjhf>qO|n9|L3@Kc@8*^oovftHDk#fb^O2;_lc)%|*4nXz##>9gJ2I%5t<_?f&n?(8S z*^j`h4a)ULmp%_P2yZ0wRIzHmT+O#TkO%Sh#V$BGRhceDz)mpX##fi&Sh;n>d5FOEtBG*J_B3`cwjwkuo zOWkAcW>k8k+EG-xBDy#-^-Snk*%cbIO$gk7WJR%#yUnmZvY_NtxDu^u4a^W!I7$BM zy)Ihx4L3!HmIFj@)(6}1Pip#eRyPnpON`*x=NTYUxw~~SXDN{~A!#n^!FcTj%|@Gy zRA~d%z0d=@F;+T9UtdU)vyo+Z8}vok@kw`e-<{cv)0c*S_gAMXKK=V1*1de^hN~TZ z_C~j0edb`!xC*%G!%KVTrmWvGmy@#zUjlxNgw{^|ySPK7{{Jl_AjRp_^FZ>lfqVMn z3L|YsE6E}3D8#KG)>lYW#7Lpc?beoU=R=F2A55>!`PX%3dS_KGj`rd+@AxeG$J@eg`^t=%Y02^N&%Sv*E%ec8 zS(kIUQX{&jf~uYGaB89y__E$Y!C1;=?0=w&g}B^U4mUwkbarki%Kx|+9xjp6FVmQu z7PGq*_OgH+q5uovq@>e@=6i4JS%5@&(B|`*7soi&w!p#;A8E_0xsx3gZAulwzK&^~ z{mu?0W!x5}0byT_Hs;LCuWQvE*1b8-iFijCwr$-^4i6IIV;FCRufEEi#3Fe zFu)O65?EEG@DPF%aA~?nWbuA;vH#cevm{@>(~F9`rxl9PPb4hg@Sw%HP=CgK=6XwD z{X>6A-Jk!;XC;nDQ78l1uHJmmmF9|F9igJ{+kwqY%{QpSn+-?FN?d-_ko>as&!?qu zo6Lonc84kXOcO$aU$Ja1E*IAfP;kHqHz+a(yUTRo-)F}jP$@qB(EA3K&c{7%#2K*I zP-RgGFsLo`+~vs?kKO4brzAZFJhPXVft~20aUc_d;s)m7tMBsG-gJbd&BK6r+E?}8 z!&i6h=^n_yKB}2t|Dyod#JfBgf6mF)dQ}2byntV;k|?K8g!cBeSW%z>2MyW3rC&xT+;Z;y|Mu%(+bDJ4FtW;8x>X?X=FSN_;` zkW6jw&4XMQEkMr2lEzF|>S#LA{bF>yhVcep)kSeXFSKiI4<4EUf$MjV|H)*iQ|a(M z>zz#vJKU+ruJ`5WT5m)90WoA(g*}sa*Xu$Nj;NeI;;8OiClGPBn&gM_FJu0<+;9Y#B z(FF8N5$}6KbOWP&%LKevGqA}cj!HIkD8DGDB=NXLCm4v$zQ8^RKEn7-VjW8mt?qiG zDo4b=3neB#s}IgtKCUCg_CF@oznhBoD)f4lHYKbZ4a)Lxc|25=#K!&ceWuQWA~ZFU z9)Bxmrr1|el>wzGDd4>Dmt@$yK_G2M`bbiHGYwy1DsJChDIpAz{s+>k(uHzd+L zT7ptt1>g-)0gTih$@bsX+nVCN&NGqEf^gaAcvL}P*Y`Bh?sOY}iof1T+X<*>&=FSPJ)E%&bDfbcSvP0>55DI!2|0LN}j4CyJV$2Sv)cRoB_O~ zvJ!j@3zLW1yFr)X1ng<%IM8iIPYAW6B7nWpt#&&8;ubyVkWbj#($v(smwD}tOm!2U zrIxex-1y?k^NI@NHA_tUtPv|=>O$u$ z@P-V@^ld*~LoU}Md(VpJr;%O zd|KBgRD_c0q+|2sl<|+s&ogoUf%h1{57RxMyfi36ZbZ*rvZw*$`ypl}>Qx8(0V{(2 z8FzZTno7YVe1D>vX3aUcpncPsS9L_j{M$Ge0RnC?zCWh?@?v@ ze(&}KrFXvjiq*}OWY_XXB+XqyH?$%fFZRZ%bLVnb0`D}r^<<1lYm+g+w^47)?}=gs z3>0byG5oISzSk0o+srNFI~m$*ZBRg)oq6Ks=-w8BubS6Ob@*V_k@*&K3PE+vceG0hG&JU;;wUM|hGrkU9cyYTEEF%eWS=77eB zS%Se&o3@vR+YLzYi7y;)XQXTM6O#&YAp4kZj%WwvaM4py&2fshoU|!8Rts|w8Jyb)pSxWnOp{GgAn+L$9}BMa<)B#f3%j0FZx$hihRO| zpQioGb05_fs7>g^wWE{iCp3~D_-^$he|3cWLAkHYKK$$wy%_n(oHoI-{ufu>q2*By z+`pG{pmnObPRT|9oByQ2tczpecI$ccX|(nt#Q7!LiEK(06-avUp~6^%+CN=v0dLqS zY4k%k(=1XFgZVlR;5@H8Rdx|u$~JnwFioV!U2?eZaWlp!zD&uBocy}g1mGU@=TgJ+ z@)Mt5T>>8mK=h>%v35+JZBF?AK=;F<5^e9^eo+`Jx3>8t)n?eyDm%I|PF^i7Q}$-; z&0C#LV3Qs#Gec6kknRiLlR@Z@mi*U?4B-L?{@qWid#j=UzErqz&+(b!DQ3D8#cms3 zF&8=f#%QQevzc!HkUh(b&6J-?JQ_8^+{8VX={`@*e~Y4!)sog7fp6s0rGruA1BcSA z%oMUZA|hn2gl0j$$>Te_CYS8tde`sohBU&bR{Ly8n={z?L>ij>%+fO&YNEE%VP?B}wxmP3jK{u8@-b#i%l~XOQw|F7l8OhH2qasnt_Y*HA7fUUwqfJNxm{VRJh7WEK2S zg1@)G=;u!zUAofTgOOmYiuSr%bd62LCw~DRQ;1*a$y(S+vEz>f1=27nxo87c|5O-d z_2cg2y#wag6Z(wVtjqu-PRo$12PZ;V-57@58M@>Se|%jUK-M|xY28a?M0vg=icfeB zHjJ!h?>h24TKmB^(ys&t7QEYOX$_fwroP|2^QY<5t^K+rQqG;on==xGe-@43QkD2_ z>cAT4a3);fW5GQ4J$u46a9l9@{4tR*dOJ#8&tUMt5rAWZc*afZW>h?KfrED z-CIWH8K4bK0w`K^R}X+*x&UAN(aN(#g%4#KPb*#G!)GP6NTZt+jO&OO_s)H<+|(_o zwoIecv{BAI@sMR-w5{(x5*f+%Gh7SkWII|pi(kiE^zBn@MhgEf&KS0~?zhM5B138h zU+I%&-)>!Xv8RT_J}?uX%h7i*$X6&MhQ3C5%X#cBzrKT_9+B<#kEJ9l=wRBHbB(mR5V)B9Nw^hzMI(dyCZINtT;bc_?+eq z9{gs$P1H%O=iglNq3vmrL+m;0>X4GtmZ}#6XeR>kPVWKD+ShRQ%_CQ|?O&o*0lCew zs5O$0f+tU#*Z+jIyPLs^;`ia%D%1qUXmez+JYcZ;Ct>R^ZsK4eC50zmsOX;A3(`$s zM-t7tMv@;M#dCv-^m}^nwcORFbkMS{4IQY+4H6dWd$O(ju^gOY%GWKe-K>n(Gh%#N z>QBe4Muz&UVt7$kf_#m*A%APJXbM`LQ zZkP$WCEo#mb*}S?8{h#}rzRLClCY^pH5W7CDH8gPfkH(LWXlF#{H^Mndx65BZKK3V z9Nq_hETvCreSHky2DTBK29D=zEf~1-vPuYI!iX}RIMGSEbX^E|7xR~M#h|C{zes>W zknwN*hXG+P+M9j_Kghtvf8e5)3$s{SA8uU8SI&A;k~!So$FM2SET}E6$K%nr)x|sb zqpJ`j0kB7A$!SxrAjp^ox?_m_r8B8rHekFlss1Z`Ea|v^nnQ>x{j?d{SDq)`7%N%f z6#k3t?hTGO-tL*Yb#<$nwWgfFljU;Zy?XB2j?!*h-UG(hR|3`Us$%$#np4G*H@*x- zP9fg>vet82-RXt^Hp$*a7Y<=UNt~XYKD@3_7QQsTLL^(o?Suv)<(uzE3XZO3kj&V! z&S{k1_Hw8M z>@Q=J_8T7g>qW_q5hocQ`=-;R8e3-j{B9Qgp=0l#^snNPsrfUbe8HCM8%xYuV-|6> zsW&1FP4Wz*#()!(`MVW*#ixvR<2xrRic7?cAH)%*O@qZ;@@f#ut}IhkxNBnLfXlX+x5D*iQ2k+63F>;+3K7%ImhFOq(8Tp`SS|pe`u1a=AJ9?M%#FKU@sJC7G z;ua(C@Vi$p2`+SSGQ~a})m63ytbARq`?DNvn{=y7T+>-(9P5FrPqu`UpLEzP+)L3< z3vqG19Y-iRz%1YCw$^S3j3^?#L>^j>_op7SlVL+9{7~^J$us7>_cV#6x88M1?L=-V znK6gFVq4hp`C#?7X{8N^$BlKu5lbbV-^km(g(mLw05KqpkbMRms0Q&D7iNZ*IjL;#ex9<>CC%$d8@0zsw@3~*Nq-;`Ni1(y-MaB zu{(>;c}DKz*v*Cy%KpNsb0~=6dHUW*{k(SWf)9vnd^C0Q3mcp3DbfFz&$h%2CZMU07UPoY(g7@ObgrYG2rq8RqoHv^MPxO;X#QU}fZNWPemW zeJSvqx$fLQ1PSAPl?+8IUkU?Ul3eI&{%BdO%UCBmeEh|2kr`)S#ywf~WnfK1`PT(0 z^CNz0$b%0wNr}(Px=49rfvPV%ptTE%X$I2gcIYRaZ{+ne?!~`kBX;AbdgIf7aCpo9 z14j?6m}eRJFpLBGZ}o2=Gv?arEj<^XtWN2q&CRWAaWr*b@gKPD=6JdXe`hbDT%M{Ir{oN zD&e;IuSYd;{&3+vFRG#Ql8?oyFG&Q0g-n8xTrI_7k2mR$B_El8i-o=-tNZu_Oxz@D@#wnQ?87&)RT&{hU zM(%O<_EdtsY%eX!e}XZpbb`)kOCiB6BVl!YWC~#n$8|>aq(6jsyNK|w)t*Nvu8JI2 znb>#v=f&~wL6-8~QARapLimB0KvpMrh5)2Kyk^~*~Uk>8j z_ez__qUk(&)@D;dlwNb-bKEwj9SGCJKKvFWEr3!(|_o+EgyxxW0sAH z*Ml5lY=flyv?0h-02|1_4EIbhyOZl&y`mVjiPiIP-lKbk+*3kD@r8{Y!{9JZQV__$ zdk}~Ccn8Ext=2|@fvWk)ih@ht(Cj#SzQW6DcS?4xZt8$tgy*dVQ~eY83NpH`{Ph^d z?nxWTU0Lx5VL4ARIK8fSx6MZV&vXV=Mi>zZVWT8Y2-yq!t8-qgvj0iR3{E_8 zmdu`Y6;8@S!P|e_18)1X39r+C~1|$BbnJ>M*P! zUCa!Y(NzfS`lCGo9-ca0v!U)8Fnq_bbn30A^N%u09-!qG73PnLbpN{D>R^9QYHn8< zYVZ+}C3Z++Fy#ZrEIP%83{V3Tc8rrbSokL&M_MMf1?!|ogIwBG#=+<>@-fph@svEX z8K@X)NMN^$%k~NYia^K`(#_Cw~JRde&j+6 z&mf^Dy>j6d+bLgX>yP(=z?heacmYZ1F34$md^XL1p(OH!*obuB|0^Ruc8Y^YIt~XU zTVS^te5Y%7iSorCo5Albae==1)dhgAWa3A4Jrg(x7vw)yIoj6K3QVnNO(jXga$aI6 zqA8$oA@NS0cRmOMMrfvB{KEusnF*kE1YLbx$|}NNOWj(vCpSGSKgvK0Fe&`ggXoSi zrRS`mo!Xw*-pexdA(6CWfJ9GI?PhTZ)yL&6s6&8x_KbtK<)h8IaGEEy@Z2 zahMkP4_{yWjG8yEwQ77tIA>M!GoPb{TVB(1FxH)`x z>#KAf=JQrpLTlrQrFhG&73n~v{OgL>E$8g;q@fM9HGS?1>gAD>f3u^p(x%bsu=OyD z5*K6Dhig-GM6^(N<{Zx#kqrpLN1dh1fUZ(0)s5ajc6mrG*9=dskJu2ot%4n& z9c%mhp!@Gf_xYz3JUmHh8F|5QsAf#smWtR{7Ny)Tw^bN6urGZ434z11W$UyC$FJXEJ@hxcgVA(F( zyvdGHl^y%pBcB;65ojaX|1Oa&(jqLS@|$&iEc0R@>($|sI7YZ9_w!Dgl%D9Z-OTi9 zKVD>~e)(0B1AFUgyDfVJWAD#fbA>RDck!xjl`%`Mj1m&!KD^@xtt;>Pqj<0U4=Sh8 z#9M?DiwYK?G zqi)A|NSWT)*8U+)Au%82Z1-n%0O0%ZeQ&C3#3mA! z&8yR?mdsH<%dUM2X1W)tr*%DA%B_QYoBMZwIAT|i?!PnRKj24j?Rs)wM%{^f&VzgM zJneQvSzTbr2y6WhoOo)16u~JvX|Ln``9Rn1PT-Ab%%Z2NHbo+ugv5nWvOMxxAPtdHjf`+n>IH>*xO{ zIuC!U|1XYT?&X@-NOk3MiLy#Yac^ALD64E4Wsjtil|8Nz8kcKCrE64#viBYt*N7_= z8M$1#WbbR;@9*>b13Ww)pZi|toY(95>e1l2RHC!w_Bd=vPBJvD)yL-zPw@o@uqX~puEmpA`Cc4?xe}d7Yj*Kz+({iMPqDn1c$KK z-IFw|N2bC4>{`zDKL^exhr*@w6x-|rHf;~TOFW2ny#x1JZlT!jz#94B(&=pOpzNEQ zrEyhW=Yj&}Y_1Y`mueciGq&7>i=Q~#IA753%Pe7net=#(y|mThHu^L#oLgx-Y)k8F ztvEhO{ViOCy8FpX=Ypnq4E_nYjRHf}Zs?Q$Kt`c1)gVCye<^t4Gw<-qcGAMFeQ%4$81((NeL)g+Z1dB1U+J>k4~UViMJJj^ci=sQNrGE zznLgPUnEu>=(2vmm1mOL$){|O@6-KqB(SjEqf%uCCu*ZbcvQk`S1!`?mOk;XB={j( zLAbSHW;5!=c|5Z63qPgwEl3iwg9sI&iI>1+50!sjT~)d}@?^&@@K(iW)rk(Yrm4KS z_Ed*IIH4GkOpMckvRFIf@3$&o9~#pytiNhf!Ua;1zdxe=S7C-*wXqj6jq;sDIMb?A zv>ESt4d({IhB*rBvX99qcbg z7vaBjXIk#8yW;AFw~ZR+UTO#`iu5Gr+K}@_zD|6lXc(S1GAgRK-xsRgzJ|K`6`mxk z%VA)$aK}6L?G|d#7etPLp+EQ6oaTAz(&MbH3JPTo2B$8v`s|dt&{dAaBZhFuu4-Cj zgphs7D|Ev9&T|>Us<$n$jdGH&dC(SXecvij;5;r5+byv8z?mhE5C1yJkxl+6Oyr>I zUg=LH{UUT_q~!Se20$tuAvM?yq!&{;Z;U+Uy!A}MnDxb9cGo)pLEQ;qmvOjz|8ri0 z9@)<)K!<_y-hnfM`_EF#HF`ECo1pgS!Ho^AAE$p*^_IyyMRgy&v7D~a-^f{YOR(`( z?+VT^a|`}uVx6LWR)j_*ZlI{mzLq5!3on|ld#aYR&IKxdEVK8WPhKUPk_^-xtt6s5 zMBmA)=j;uLO_-~ixKb!CL>~e$ZWK}@U*SOC-#QA!VDHW=^LlH=fkfo*ymc89ZpH-t z^O$K8WlnKS)O-xk*%PyASEr&P-2m9=ihAAL8MPz9#hHfs+06XUs%f?{Wn*d5DBmT4I4rnMaUNjQHwF{0q9^~0M%wbQLdDZxd zJ1YJkn$a9y;MkA+uBbG9=+cU5PBfm?;Ld`3UCys;ijup$=KLtMPSRAuth0k#=&PHJ zwYL?7&p|%S6nOhQX7pwAU&;S@sY&unkhp1GQt#C){>C%EhWX_MCT^!pew+u_h{3VN z;Tm9GeM@w2_f#s7PU63V%v4J|DuPoZ6@i!X*wz>P0#EFVu3LWF04)ue;CvqN5r5!N zm3hMkKoCp3#^$#Dp?=e|Z@OKGFOJiVU-z*EO;oSKF>1-d_^|?si|st$x336= zqEO2VwxADZK_FEr0SM1Kh?_n`g0uZFtLdql&%v+@OATI%e5VK8YM*WY2yJ9ee`g@0 z$~v9mA~VnkMoG46?(C|+{y^wgOlxO|FYo>b5+A{vu(g~1BurllMtAdsfO%D};#FKz ziQeI%Aty?|a-4S$G$>p7XoXn#up>5< zNZWby_;jc^7eJjtt7V7S{ngOdQn$;E>e-j9UC>~o@Y=*kVP_<={jvbH1}cXYZRPKF zXAreSC;E((VbFQszR(tE5``$}#-hiqH4s3U<^89S3KWZ4o#|32k_Jh={=kUmV9?|A z>C^=+u!wS!4lX}GPYMj#(8z%5x9au4=u+xqUGK2)G|np#IkNTOvlZ{(9Xa1na9qON7-4E2O|ex7+fzl?zU0 zO+qOyW2)uHCx#$}uqKeLI4?Vhl{!i#JYkVhVpdK^UGR<7-v^92S#L{j&C$BZ%wb&g z@PaUXdTNodlJ1CBH`jv;^^JADVPEe(@Kx(2MuSi$VAaz%?<2Dg9ga``2kKs)0}4hQ z#XY`M?Xv9LU|+|bEN-KpDxM;q9r1AiU^TW+kSsRPucS}XUq8BCJ9|Iky}D1d-WnTN z!f%SYgm)c1o1Xq=@9a6?HuMU24~L|W1q3EtDl>+>G}Ft3^KMq82nvbDUE3b}=0%r6 zuC#7C-us=O2teLpza;rx3^$+M`dr&jXncC>E?OcXN3TeCBQb5q-0S*z^B^Jh601+VcqL%tI_6gL~ZWkps7l{o2}qV2M{4 z>eHpAD=dF2?G237-E52U7x?uzKlXZmljgT{i7vR)CgDGus0(pT3P}ua&4nb-Jq^;9 z&DRo23O;J`^$vNuOEx%w?!5vIy$8qV==FZsm+I&GA`n3tVPyG=s_mz*#wLPO25fF$ z3MkmV+=HlBC`Xqx1U>ut*+s_kmn8M5vAe&`68!znVh%NjO9M?UK+Tmbg?#>$_t5mw zb>ZU%yNM^0ex5!TntDRRHWkZ(`Wio0e|+a8y7eLUnR(+s9M=^!!(1_`jM`_T|MpsC z;ypNYKF;yBRCInSl`IZA)nxMSa@K>7Dbo}DshM~fmH5@uDTWxgzG^2u<8mfrYPlMT z$HA`&-H*9L&!?&``x_Q>kG&|(wE)w#4w^oP>|&)$6pYguZcXx)dL{a{Z(JgcZn-t= z%+rvjM&`_47<<=b#xLDZc;d?+n?_4Tv&60EE)(FQel^jC>I&eLRvFw69q+2X*iiNEhY1O@6e z|MIspqxMvetQ6lK3%q>N^Hbejl-U>zN-+l9fbFgHi&lW*OYt6{M?B|IgX6v`9bKDQ zTKc{avN!Z(f``qj#B- z=2p8gWyYmus;5|Cmv+JRUBn$ou4@8N$=`c;_$y(y7zi?ye0~kSGc9RQmBl#RbEtpx zh{G$zl0uOw#8miL4&Suwxep0nEgrm172Mw|9RwifZ&qbR-n)1n$b8>#7y`Pvm_Sp+Jn8&oMpsHow+t?>}Qzf@JwIx_!S?p=SE`cv_V}xhQCA1DvIY zB|w)+Pe$K5E5`{LiwE!i!?b1#NI|_-tvsMYhm;*P7vxFEZO;|cD8QxyRVN|s|5QbK zPZTE;W1@}o?OO+v()-U>o|$(%RhQN2xV<9|9)6wlEUh2MDK9}Ikn^tba7WgWr~jxs zCFUb=hd{+tJ}-Q{;hhifUE|r#MXL1U%Y@?4Q#j2L=*Aq;n2G9x$5+IeXB&kcW@x}s z9ZIZdP;cr1;w4BhSzi+T4^H?%%OAOzL`k~gbkNHbyf2v*^Xv8L$CS?;luUXL#u!dM zI5biCX^rQKsY4KqaUDSKPy^=q(n#H`xl9QUsJb!DOMcR#De&a2G$Bngjb!xt#}*2Z zWLa`4kf@AMGcGp?e{b{zk7$8rUIgq(i~`vt1& zW|EBq+H+!KBNJ)9G|{wfqaaEEm`L6E9O=tGp+%WBp6($*cXL=y#v!Z;=8-d3kS8tx zy(*6^c8k~73KG}8M;)o%{*YYxt&y+SB;R`<5|%##%{UtX()DT_a!11LA!`1DD24Bzy%@l%tX~r}6G^vV#k0*1+el^6(eV%)Wc7z%Nl6HWK)i`7F`j zQFjM9KjIkmEGq0hh|gh|NJ=M59(#&LMC`%@c>AurF%A7K2<8vB?;e z+HkbZ0Vbpn@pMrGLmCm;iS$iUr(CXbZK%;P($Q-t{YtB_PKmWKg7f<=t>E4WL`5Cc z#EL@{Yp@6x;rd+k(PUDAXZ{0764W-rmZvY0)e)x6SQq)?ckuMYqt4RlHJ7}GQ%ny6 z_#`ao+AT$aL|*qAKR^roC6bBhZIvtc?>3Zh%NL)6#46BfKqeX56oW5sLsRohM>1IF zluwI!`_#e@x9RTr4|QhWaz*tzDkamO?kpR5z3WhL_G<)j!NMc*^M@mO6-1x*$uTWg z`5y+7ZHLoE9nT=VeImmNYJ7y{3@0~-rtcx{qS2v;+dF`Q|AHk~Uxy4Dl-Wuh6UGA2 ztJU#7a9PygUfW?zqE1AnhsE*N>YmAV84avCsWhLe2X{oM2wRj1?qfE1ny;?%#H6+N z`w9szXFIKSfn-lhoZ-+rYPQ-yP|NezVSWj1)O_<*MsO}$F7rJmBl$?z5ciqdhaBQ) zv*-C0r4U@>%x(^A=5JAXIPFRrIUk4|1@Gjs#3+x-%u^TOk|Uz-;v1{OQT2MVqJwPR z%1@4$I!YYY$}f*dBJF|gRII^X9yjKScXT7XiNr)W%^aB4MfJ2vYy_d#bgrLBVFD^< z-vxIBkZY-WHc@>PW#85yek_n2sDXfza53saCpqc@kAT5knDO}zSTRShOQDeWYW_pM z<6ry9g`&}k-t9Jl-NP5XyIWbqTxN|=9jkBJ*HRqLdEkB@4#oy6XBJEzw>D;76ip(j zj#31i(%jr+^sb$pLW@;sF5VM$q=fMNQ*~~|wo(dOD>;KwJC=`b($%@6M*dpeOEw4ya9=vN&n&hL0>ffT zC78N-b`Q;cbJu;p;!}yf*L{7uWEG}_U-dS*1dGaY1!7Jxg*x&B+v!K0ED{C6s{SS5 z+~aZJe#(#N8{_}ex_XP!&nBrq{HMQLKKlDmLr&b7iH6cM8GbVF$l8vb%k3DGkD3#m9j(BDKRnj$z;pFgIFH#6s;Jtp0BV0t%QM%5A;Op%o^$w+|R@nd;l|a0qYnNqV%2XXdw>Cr<%qcCmE? zdUGbOMUbvyLw`XHH@vK-I@_o-TKWVorGA&M<|-s|OYg|#CghB}3Dd=o^eDhP`u~j~ ztCGOD5L7|#xPH1&sMKqIyrlgW+Z=&~_WDcB_?(rq4yd#TIcc>w@qe}E^usG$LC!+W zLbHPj*ojL;a>_6K1>3||1D%Y9v{Lv*^)!rp4Fw9(jm`1s+@i2;z&HKSUTrhIk?QGs zDdf$|YwwHi&wBRzV7?D1m4a3EeN|5eW%qCl_Vw_$k~{Mgu?N1n=m?}a_5HQbr@lP7-%4{j@~x`vMFT*%`TG^3XU zJdW{Ag&+9+Fw$7U&&OoN3qZs)Wk71+%(g?s9GtP$byCJzbx=u~PY%`3Xc!Y$tSobdD%l`vmhlZHi`jxm~&E2}tQpkzNJr8(K z-!AGO)^u_w&qS}+S=0VgN_a4GggL`tqwm%Bt~1+x^=V)-3KhJl=EBn8`t+Z!@q&>X zzxN^=M*forxzxySa^|I$LR`1JuhJmEOn7tqei9Yxgqr8q0EHkZPjk48;X!BHviVj& zl+&Xq*)Vzqr*qibYt!esHP5>wS{M{{BpR{pl}eAcIsqx?NUIi=R0i3eU%y}Q-DPTh z^=%qaSK!NAvSuXoc0j2wm(l4@j-8IY&uEibSlBz(gypEW+dYy@nyB@}c=bPN4}I?` z+M1(ySQzAN<`%>)&jPv-r8Mg4qa))ip(8sOI8c!E=!JIw$Vo}{qGD4e|L_1Ut;b|5 z+Aph#HkQP8Xbv0F2qN_pS>UKcf3>0S3iUB1if9IsRBO7d-`gK>HD%lqg3Rnk%s+eV zzCl8Sdoa&OJDVs)>UBhfbIVq_Ec7xNjl5aA9;x0^)u=OUU2cnyYilPLQg(M%%@kD1 zd(`;bs6rLk<{4r2Ob>ZZX0@6&6nx&Vmn^=S$MV)uBxLrz2UHCiaT4w!bU~R%UP_Hc zTyVV``z8+rsVu+g-Im#?6bD{TjIUc>(vCd)*YHaSD*(VG-!*Q~O0$24FQ=gn8Fk0f z%aIB-c6BVZPf0aO+1o&vCYP{xX9HEF6DaX`mUR1anbP1;@ddERIOFMba8?^ zJVAX`Bg%LWQchzjQE9C9YQ1REZ@2`%qOpCB%fS#>L*~xufJAu#kdFFWa)gmFYjjQ| zI5Q`;5iEL&tQkeZp7`hq8nI90!nBf%RJ~OrvVV>@sbDfkO^~VIp}S0Bc^g_ ze@TO<$Giu!)@~`rhBUg4lk@h|y8}<-OqzxryDu$iN@c507qNQBCPsWxV_0~KOEN|6 z9X!XNjvI%Vqe0|1(NodmG)!m`TENX)=Pw+EZDIsdc9xR6#LR-Mqtv2v9rq~I?Lk!& z);R|?#HnosY8KH)gJ+?PnaAPv$;d7=E4-x|ejhv!;u{Q%&N=k<#gYUVdABw~_!9Ni z4qcG5dSTzR)p?xtQAa~ndjTx$-Q9VHt+o@vuy>w2k&WL3729Tm(8Sr`}nUD@ZEW>`R(0jZ+l5x99Lqv0Vn=p&1Tg2WqTrPW} zucLzt3gpGAdtcwn0ZTrtyfP3SvLim(TEheI?^jMgi@#(HpU|zRHH#ANd&i{4O^O(+ zJw?pnrKKjpS0Ja7$zBofs9B>RezhTC9Si<<5?P@<#-+E1RV(5YS0%1sTDh{r_VS!5 zj?4;Cnd34zSa$whR*i$eXTqo{TqhTRD_%KYaA2h2_Ki9o)pJO=Yu5z@Wlo)uaE)41 zJ&|VO@LLe0U21&gy1z$0*vW-n>JZOv#wQb9S{EiF5xF9Q_Y^4Z#Hg|3?Sqj3Y3C2U zJ2F^P^3qP;CG-TPd^wIp9cdN$7+sLFG6fQi^g9&6$vt4Y0drp#5dGCGM;3NKPJP+=1!1uo!IBTLPl7pw&@E6%*jjtZ`_w z!98e=yi1GP$<^Hy$(DKa=bWzRM>~VxuFTUdZsxR`5*u#sA66BR*2ZS>akqQ^Z53(- zim?PB!uqtc)1rFB(JG0G`{fj{}JlYXE{uyKzmMK!sA>lu@C53)(%{e z;$EQD13gEjELJ9($N{D+gy$Q9fIHX1{zvo5H^PhSKzGJs;m;s@Q@^xL<@fZI^(ew+ ze7C~rxuc`@nR41n{E^$SL^-{6qx9A&W16l8jr9_^Z{l0Aw>=M%C zEE)gQD4xv-3M^I}!ho03#gE{|T1v&{-|4Oq8Um)&r9ruK+8o}|t@)TApQBM!D6E-uwkB1Rl4 z0`-98uU3efir!xvUv~E zEf3vt!(N4|26?)Wap~7g4=w15{Nhi04m8JYDwn#Mb{VhdtkfC`BIGT~dZ^{gLxDxM z3qRlVHF9rJEm4NCWk$9wm~z6FkIwY>FF&I7=bzeckMHLlJfE;|x`)3aK2|yla3zaP zZKpMzxN22u0ifkgq5i9HF1RF0CEwCp`>tVOlJ^22gqSG};5-2N>DiT;jhMUiykdqM*^%IMa2#_P2Qcuf2k5jEHQSnmH(7dVdDwjiwyBj~r(Ay_p`* z@7!D6*w zC63yomL4n{fUij9I(ni(RD#!CoeMzpn^1H)6l>ri%CGOsj-CR%btLr@BPpgkFAlyT zuG|(Ti8Mtj8QFEfbeJgKtZOGc2!HC<=g;t2umbci7Y|hZ-SVK%PEK-yk+$~5O!MWa>uW|n(CSj*vlMxy>i*k|`VUH_H(fa#rgAna?KWHxDAAP@JP zk`+mYh{hJt*^ApmzHA4h0I7TqX`d@Z*8vLG4cUaT=27rIDqWU#S7VCK?-P z5SVTl({S30gj&8ziG`m&Rqm}0B@h0Xw#_W0jw;Az?}v(@N!o_d@LX`DHLfl61gkJv z%*Nz3Ewd#*`9=~vF5->5YkP5aq0qjrty>r2N(6ve^-LNw7d0f@HuRQ9a`r@~3qhr2 z{NO@c$|dKThXf2-u$KhUp3GZz0ORQpuWggg^X^l$@rog>asyP`zLR}&1hQ1=gU zGD=zZSmK%9M2(aJ6pu)uYJ(JcCRl~n$ax#V>tsQIlf1Kf>1u$(O&D`EAl);G9^ zPkw<|%yc2qY>oCSPxy-Z*ob<*;!F!7o0!5|He--(b*|#o7p>vu|86t1LI^q*^}bX|bv&ytZjIXv$ll^lEf5q%az4o7O8p7U{&Qc$2M z5@I9#XbAFPcd|h$8H(|L>wYBTm0YaK$vDFet1>$Z(Ns z%W$sylPPB3h-VZ^U=C!8BXZXI%Jfrbd8J-x>)4@%`D8oJ^Frosk&0!lsXo`Jpj0sst>lm98XF~C!JsdZ+Mjw!-3@YP@cMC+UpDFBl)E>U z59gWv`^oa2E4^qUB9?2IF5dYO7~*k~&sW94Uo-Z)bslFcPQUd_zapg5IiIA)-@SKa zFuGEmfHZFy*%i8#9O&Wip(?Ry$Y=S|I(IhZh9jI;hi$Gk6!*Y5>d%>zPmI(5W;l+m zd@oyW#{PX*$abUj^FM_+Ub|SAxXJpoQTZ#U8W!|>j-}}_6yq~tmp8j>H)!28$ln?J z@g;xywx(a5<^su{PY28Q6jkV)2ny=;lP8ll*Y>JH zP^*^0Qp=?Zg3!%g^NQ8e8s~-5Ed3#%k_z3_O37&(8*iA!MotnNc*Ogj=(viI3;6hxZr#va(#{9(*4X)znzWCTL@!z=BJ# z8Jbrp*;WOPz(}m&b$2@tC1$g!b;%^zAnV}Ar zUSj9(7Opx`zlCS|S;AfZnm1&jR^%P#(Vo!Un{UQ(K-7ua1<9zEi*%zAyWt7r>rzv1 zX*Jn7S?sC&+M-MK#QFO^QmJYdRIQ#Ly3=@@al2i%LnJhf*v)> zFDszY7X?;HA*-s@=E6s3UddD zZSLtV>IBcw!a<=H@ibBU(1lG0I{+D5CfViyG|EgXH*EuIv#xApircZjZlq-@9_LSO{7zbrKsY zahSTiWb4qi{z{z%X#Q~DnseyPv@3dgkGtRn;^A1}7#B~P$0I@U?-^P!Rt*!u@h`IS zRASy;-5bt1FR{YvDnXok;dHNp^CoiFZjp4@J$S;u!)(f*8GavU zZav@Xf}Qve)P=3ce#vMr%-buZV4UUvcYVCJ<+Q|=Sclr*YhsoQryiyqrF1tUA-d;% zuvPi17pUtK4s#HO;^y-smduRm&o4gQGi(^st91FU-==tb+$zPHDLMY;&4ja@6k0p^ zxr4}Ypwk9!*?ber5DRiJ*d#|DYqQqpJW2}xYTR1o`@>ko+h~|c*OEmT0oBziVuBaPR4Eqz zU+5b(cJ%3k!`%awJ%N+g3`Iu&(p)ii?rbN4``>kumdp9&Kb{J`fB))1X)^hJQ1_hF z@f!se{PXs0CbRLa;g(96VopM4nXOMdL+nKMWv+$WgJ#(CnxErCoanIhbuygM8VgZy z{z4N(+c5RRj@||r$2%lkC*l1)@?t-RpKqN|}qf|ISQ={iuSf4da z-YT0$7<}V%(9f&u4F}wy@km0mIFZ8Nv>h)ROT+M>b48_Ln^25Gq{0F2_7HQ_*81QS z&O6d-5>3koR9u;j+(`#LJ*>BBlPFqt#EEpS3Or3=%9FB3%`&!4%o;5UNK$A-_#+}9 zA%7#e3zH^YK_Kud6tdk;6Wt`5RtGv6C?=rbJo$4vNDcpF(u2StUiW;_yZ@?r@=I;|W62@RptjE{;8-zz@u_X1KW+O%?Qu!BJZps8pl$*8 zScY-)PrvL2{a)G-a8Vk6ixddfJ-JsnA14!x+z@HWl%Bbs(pD8wPr};nb%%~<&8M4b z%zMugMzZ8F>Q#h#U*om$B&aZskI)lp!n~mMY#N^=Kaehd5JD{pF@0mzml%4S6Yd>^ zrTt0uyU4BvGt!)=W~qh;UG+8QQem3J%I~jW?SXeJ8Um^t1i`1m87wi8)+xK;Y!D>e@8Fz+LKN9d6YyQ`tY_zM<(hG}zWs3GYor_YAL!DFswr8v9*B1Y z5!3q91I9C9~ZD;Z4tX|q^(aLpn1*L;$X7ePXTwM8!Ce-CtE7=3bqaPxJuRpSyyNBMUD^6%d%x< z{Rj2>sO2Oz|J~J>Y!Yb?$j|`x37ncA{m9$|k(oD63Eb+3tbiB-%(8YWY`YKQKDdWNa?29v6Vv zpvRTo@K`mbtTzAS);w`1eYrMpyVFo&wmHeATZ-xZU#rLNB~w{YFfv~IrS0m?gKr5< znK=>BkzmB*Tc=_52fxeMcgSTVWUSmAUS2-LH<*E=t{Zwb8?>OO^xC>ZW*d;kThapg z)0SaG*Hh%b=mC&gGQOfrwq4GbX-D$-<&%zW*JH~3{Hf?rs+!9t^;dF>c2m8r4@oGz z!bk6pN&KH@I|xwgi*9{JT@Jh8V6dfafR5x7J+dIf;a8FhI^k4_bpcsD7lGR?gek<^ z2OSt;)q(zFAm6s9>%Le(76u2*$YwQ|Q>aX@0%pMxkWlwRa5J2#qVrVZ+a-o1a(-Br zDwJ#8BN5GHKOMEZx1@t+dWW7Djs&mo{PWqp3VIsW4X26EYm>!4AZX*>=sZE5X8kGk zMcH2ae1y*=>TgErU@s@DE#i!@YPQpGqHcd(w7T=Xza~xYY7`ETsnC_10Vcj6bD}$* z2be0H|3*(;keKHaJZRP(o1DD%J4hqz&PICbUm&ZMgGIr;^{d! zoI`qHEV{Ow;ACL_^YQJ^A0zV4&aRHdcJYXZlOZFBOHFqtLoZ*==1>%Lz8F z#@EsCn2Gy}MY$h1e6^2fN^sbmL-QBN;9K(Q$nNH z{)Ep>Uv?n%2eSP9Ia>VAeJHG&uSjMf84;-Epz`1#!}?Z=vP)xzTFb8q;$GmqdvlmF z@Xv6J0efD$F|>mq7={@N^9)6wy-s?*UYv1RXKS7ss_7?GRFf3_rBL7r$mG@&_W-Og zW746FCprQ`XU4tC=2CO}igVL0y!YGwLBse<5Al2T!hEZ1N#Z?x(FKV&Txu^lETB*B za0~W8POp7G!QSTSt80DL${K+<4&3OfjZv2k^4KjtH)$So=hn^9i`5tBF8H%#Tr{&N zs*tv&a`{9vl>}L(ylL9G`hV6>J8r|!YkVu**t862@kx7>og_|}t3>ZC%?dVT8nJ$r zK}0^+Z_*+zeHddwR`QI zw(aSuq8xdo@|G82FF*OaL;D!+WU3h<-qNke}Vgc|IWppj6`hx4Ytb-{v9=FOH9qu zFKNPDsbT0`bNBKWxc5lj5w>^m;&O+AcGNI2HnY-lo zUoMSa{cP!knMh9z*B~_3Ag-Fa2d=A;4sIJ5_X9c3JS#tnB1W;NDI4!Oi&Z<$xth+< zzut*c6S{XPQp{4^dCJJj)p4HiN5A^n{Z{WCPoA3_e-rY9{5nGJv}EUboGDv6^v{Jn zUoD=qEAM{a+VBNh>Nj>RFQn;J+LN9<&VT&_&rCkF*d7yS%U68J`M7V9Gg6+VF$wkk z%up0Hf7DD|dcg$btLL&jl?)8XO*o}5yi9_DFu)vtY3y)}Y52<99A@|xh-bU1F+e)J z$(f=zK|xRU^TUA*#nwS7&OsQw77zf3`)ck2RcV04!K<{rgYua}AV5>NNcTIN#OgnG zAQNvg59-kqV7{Uh&5DT&iFh3g`*{b?-63R6OdiDcGOF^d&?X$UxA|fYaYW}xmTBbo zcyQ%uN%49TGC8-6ARYl?(xga%3HIt)um76m5?){N+czG|xQ&Q+eax&lSq~odX(vZ; zgRZ85Vq!@^fg-LJ8i~=!Gi_Y|6gAF;>o&}Fbj1^%7;EohmYBPhq6OSV z5&KK210X505ZzdCioj#?XDpD>Vw;3lck5<_`-bq5wgq#Nl*_lW5pjqJC?ITzc>3Np zGxqtSu89s5vwh(HCzAC-;*uZUy#NKBB%T;bt;Y~|`%*xAfH-3!LlFvp664{EBSqq_ z7;q|k7uGo@2|yYNm4i6-|a zs^^!|7y{Hf{;zesisP8(@CJbXSl9ys#f$mOfOtxjmNdBL%f&rd5;bj)b^roxe&%z7 z%ryhkMS|2)gSfnJEeL<%#bjvNu46jR4n1|D@s+O@P$e?^|l@ow)ywfF3-E-^xe z6IR>*{LBTb+PG)f&_xObP_MRmKkISlwqeh8)7G zrf8{yXqL2AW1#A}n=7O5`N7+U(AO7&YzEYur8@;%0!jBg$f8?Jq{n^-41sYrUB_Fl z^FXZov;RQJMojICv4`P5qW;OF$jb)gDq2Wln>&ah+(1}1?DXmtl<*-^DE`Q`Sr=)xfveR^jT*%fLO?g|`jh!I2X$>-T5q3(L|k=2o2KC6aem{Q zbTeilQL4D47e@DU2yJGhn#;k9pO4U(-pzzG-d@!JKjFG_rC-u zj5YE67=qFDxz{gLTnnat&&x68GDTs7z5Svl)ew{|RvuH}6F;UtewCax4;tUY0NZ}} zD{Hq>q;cOTFfx*S)h~r}9v38%ZBIPhJ(fn9*Lok-bu&O@&8+z4bqzLlEs!GzVAh5i z&n_7#S5Q<_`qb^F<6B*Z{Kh6;E1|?aEZfGvG+0h8d{*|1LxslsN!#J1H;){f z@6I7AJF3>4{_0l0Fl=>}w-nM8G9J`XU$+nRSsfF8uq`6VBSO#Ai?B+K>Gm6eW}SRl z8W>3%$`f(Bk3&7&D`JX=!8mH>G;LkbqDhKSVcpv<7h5V%B5{vC9jOKl;z0DZjqG@J z=|+d@?`_E+|FLKl9~MwL`%X)m#*Oo9eh@sYR-e}O4FySV1GO4uqK^j^^fXaY0(B@yMKl7S!HoJa1nMr?y;hPE-XI~h zg2g|3p!}zzlvM^Y>!77$GbOT$U4jVisa^12*&Q@>(Qjs1=U2O15!}d;DCjmMdptS zR++7ns(YQA#;Z5y>Q<^IRWr}d?!E9GUc7s03lhB0ZjK8Om@To<=g3Km6-;KosO!bI z0R=?Rf?*b$C215Sh#o<;8r!XJ8F2SFD_&yT2zd3rz6q3kD5o!;vHnTl+$xkflC4xR z{)4W&kxBwmcf!IyA1l)XKi@2PI1zP!+l|Tdaq&>h<)59A5&r}rXHdO;ALH(G%+vsL zaj%t007kjzMh|P@*m!U~?nB5XxpaBt8$Zpa{*J0$yt=J){WBBh8;)xiGBYP-_bgA+ zn~+CW=%lx$^wlo?$Ugk&q6L-?*ovKc1UFqNx#iJcW#0%`8fMS?|Rx zlOmdBv#Ouq0#whL=l6dVzs#}0;n@pW5k0lrjYWW$mu-<<#smjebq-42ZUWV=B{5VhNk?Dla$&ED5q zljB2u>$uh96dku%ab4BGx&SV5nHhY@U}fRIh6LJk{}X4L+30$H=&Mz&y@mY7y0o{c z5{dJb<+BymMB1;+OW5mwlZ=WplaHD=NP7h*SuOJa_?ECRb%h`=%h5IX%`H1flP6@041J#Z(z}RuE77vvq91+m|PgWjEty80^hQ_Z~)Y#&m7a#SIhx z&hpP8d2E*hHXcb8seHW(W7g@?Q#VaA;DNA0tjZar>Wr+ zj$>HP#xSRSe)sqK{lD$ncHh_iejT3A$Me|@kBEIC##Ka^Zz%hk(4w6HYxADigK(uQ zbm|LZc1hfiZ;(Z>`a#5yR93hAs|G;LrA~xfq4)^m>T8f>cnDE)M;$xBoym(Va$=rQ zC@wyO`Hxi_=6Nvm`;gl_)p56v)~Dz9Ke@Typ2hzE9dR(6{Ao-!Chr zaZE}a6SJnr{^WX?cRdXphW?BfZrT2mnQPtQ#Xcb5_=z!gZ+^1muHUZx)r186&T@-Z zCqj3BQ-_5me?D_^xv_Dh`1F7KU(FQF&)j}Qe)?o$>4vm@-9i*;MJ-5P(>3H&?M=!d z4zevL&#Z;w>!-z6gRbzSg#w37im(Xl0m+@sKTi?g9ZKSK9n;%SNQmd^$5wBSjM-Fn z4Q2?jbW4B++59$p!>&-0TS+b(%p3_oa$I>OP>PC7YOY#J(-UxOed)_dkfg+Um0uJ< zI8s_xRAIn$^x3B76U-d2sEneXEa-HpLjoc6kgpIfy--quaIJ`=Izw`REfQXp1*qP9c$jwx% zN#EWw>5N6|q7HMl;{wa(vk^Xbci*E}c|bC@ZUIsJ%T`*W6A%;|6-N6uUK%r<=oUbN z6DK+-Z-O)Oc0v&uKe1Xd=$vh?G3e)m13l6gBdF$J6~i#$f*=Rxc!W;HNa05^9}Y-= zHv?Ml!1R0Kk2lxr&rvaF8X>F3XdSjF*Y|wl6yi4p{P<|%tNvT}OI|`mF$Y@lpQ3LunAXOFZG-e`&8IY1OGt!98@#Vc>Bcx5Nj)3TYP6GI`5 zXM9f|3=o$%S3>N^jfa!kL07`hNOnGc5U&Bq*bdHmswf{47$bia&LA!tm{e@I-^&ID z`DUeNGd~o4nAPb1Ca|89NlOQQZh9X52sESPBi^WXRgmBwl>kUS%9jnd`51_o2Lw4@ zsS|6WZa4cVNJ@rn&JeNuK%+t_d*bqHlb%!c{1JIrO{o1J*py4RF9`f2IALCGO~cw~ za5JCs+A4Dc0HBL3+NFKtJQX5~^uSVp;I6GUuSHgdRLyIObNp9q zy<9w}Jkbg(18fd6>mok`z)}@O@$9rK5$lVvjMMNB5gm))S}NDRNfwQ29)&VZNxvmt zy7A=0kwW^?)khzy`oP=23{s0f4wuh_7*l~@3V?ZpQ8FrMd`G= z$Q0$F?%~&%#M+x3QjvvOaS5|@`PLU%M4Jj7xjAKZ!hmLBgB`)-YwJnP^zWp+7vW$qTc;4d}bk7-OY zorFIPSdFmd$>DRr!kO!=G>$HUbl^?R3Esi?_4-{-{e447)uQ&{iFTR$#)2G=y&v+m zlMtVWquSE_jFFBVlMdne2)6_DcpJOVSP`O6Td>Wv%37MK>5h(Lmjc*)v261kI?7~T ze-*J~Z`v-l9mi>Zb8RZGP2+6lS2@ZgKU=GyXDFl4+bnxyjoEIqfC!LLa)gCSzW&qa@|=QZ|*?^mPpJ~rANYX9383amOBQezy1o;dtKXiy0UhO{QS2{;^oFH)eo4DsV0Q? z;)iT>Hf?ogg^aqhGel|&?k+WB@o+<^hBo5T2;8ha@y{lH>F(5qq>I)$%t^J6dnC?2 z@MixI-udmpm$q_P)^9h>SGoVX@%gLmY-_h#mBZ$1T{f?iNe2b7(LHloRNI9iNN4_z z&#(PxSVKx%$N9|&i{XtXrmW|zMkx9a$jViKNjAmo2qeLu>Ib?V!G7GZGaCzOKW|z$ zLebI~#N8gdmOVN+JS--t()drM-14oU3<$&mB80<#cZR)f`JS;Iz@fA`604|HB|Ttb zms%$$UGaY0(QvnR3YVP(L33!tJGZloK4jhf)PFHGIecK47KG7uj zLAj`6w#W);MJ8bW88Bp6g|L;WhKeQI7?cYh7r)*f0!{@UniTaqp{e`KdlAvYZn;Tu z;t(A(ZuRQ}d0Cl_$5UE1I{t)Hi{=(7450Bg!}i;Z-zGgTT}NYsyJa zta}u)K|hR!8ZJ8jn%%fb8f?QWP`An5ee?B(y+YQDDQTa2+h?b$tDojted(?E+t<_W zc}`1*?Wd85W__B$-IjQU2-!Z7bEht4G3qmC#P=7g&XIb>OZ+7!X1$!mhZn_3zoa)#ZCfsR^S>p@$9XJ`@{z9^gQVRa3w#5EkMZniyZmn7z48H zr-_CF`Fna}uM!)Z*W@k>I6w5^5xB%st{%5K^gmB}?@;l?i82jO<2ftT=9!Gq-r1;% zjOcOkE@;tjwH`0h$@X#eeI6kG9Fcs3|MKhC?MByU<7G)SILa2e2NC{TdLPY-kjzOm zqHK4Gzf-^Tv|Fe$yHjw}$CrZFKO)vtN1`2vH`YxCyMDj)gSe?#X3h{)J06?yg2Wgy zkeQgYr6@?Bc0Bc6F(Yz^g(6Ok*6uH3frkVPt8GWWr-gnX))xaeoCo=$7Drowm{A2 z;}C8TSK#25l)8}8yqXA!G51s4u^`8qDj=CuNaMhiL_L7Lx<1Hm~ASCYCfZtWdNv`uqq9icgQ&sRv&X7XaROA_S{6-*fJRjEywZ4?UgD7 z9t$X6-y%{g1-bVptxKEwr2Q=11lI{q)@Z3*qNV`pMKl9WV!Y>NWD< z9%MZWM=GhNuLMcshfvIY@sMs2a>b-V_JxvdVHhyVMhqvOEh)-^vs$SsrSK%&|9smF zYL*R&jCgoZY{vST7ypH24zR1DVivD9!^CFx&YLgnL6eEwE7WwPGIVVhf7e zOQQgW=OfW7Kr98|m8pmn?w!|~iJLyLTa0lntJJ+e>0JPdM?A6AQ_CFro@NvCv^g&T z>X?;wumM}vfk{f#>e1C|cRUBYnK!RxD`i7}DrLN!iH+WW^Ud&q2cRW+|1TPic)5Jr z-M~sm5Ocq4=|C&;T^GwxLQ8~?+k>KR$<=uPk|ipJwCZss#It&q@(sh<#U5}ct+=yg zZ{}&gmdx0dHf?zjmKM;~7@Lq z1TTFHi@Ew~GFb5NcvRRX|V~$pVnUUnOl(>=fq|BUgFD6SNm;aD;|@4R0s4+fa(8vcN<$fSMf?UJlzq84`!R+D^L}ecD>5rIcY3ANVu~%72F?cnxYvDJ@F75H<(WoaBO8 zs1t?WgFiaFR7(p`l2I{fY00dLds!#CbHiZ-izyp=E98Le~>%Tq{9`>1QBF1%0ua^g+v|BBt{BECKL zXdiw9ENw?kB~$i=oe1J2Uu{B3D_sAw6Yb;Ws>_bg-x-szthhxrQp^a z6)c{Sdj>Rwu4m^D(#gCfWPz?Z@%o)`v|GU(yQxKl(89Q{#e0X#Mrd*S|i|@~}p6U^Yi2Jk9<1&%U?xt)MSz)?dccOaSxc`{?C+HRD7| zUu@-cfIdt%+?ktjvQL`Oir_)o{Za0Kt*X+*CvGr|)wf^y<9%}SH?#asW39nmFQ=9x zTgZ6|DAK~cfl{HrHSLG3j7}*Q<{YzQd z;QgBEj;SUB98sUqbvt;W?QyNQ>$}Q@>DTvs!j9{~KQ++-ytZDVVWOxy5`BWplZmjG zcbzE5er4F(Zn2)?(?h<20*1<5Wjqmo?Ew@aj}MU{(5YUcf;CM3eTzr%@zu}2LrTs~ zPDP~XegjYrp;eFe1qAwE@oiOmx+tpWChUpJGUD6gjDeqbrw#GuQAvYPam9WA<(Y`G zu7a?t_uBCjPFD}_yfuLD-fv11IgH$P&H}PozMNsVN`H4Oyn;J~^;rhobADB;>a2q4DWZyzt#8sf{eZ!_xtgfY2IzCix&`tB4J4~paJi2-)41;*c$ZE zaQZ!$^LE}bd-Sn}8N;o5oWy;L`o?vPhp2V`I_0arME0wEl?Q>DB}%RwCD+x3smHeL zlD9`=5anKT!hrM2N4fgaumHRE;LNhGuh=c4w`RL~Zxe78agp&|#_>Kwb|$|?4#KFK zi&aG`-qLrFd~3%xpI)9DW_m>F_cY`FyW6&`81D1z^R$f0W9=!wUYBf*k}@5FXWUOg z)qzax2q&`$Nxl3?O;m*&n}#D zfqq{D^ zard(enc1{7qoYQctUwCI@_+g6Xa%B-q2iSvQ`uxV9m3_pIE`7<{xPbp>>HE6zyA;?qDXpd=T3m`eoy z3uu(>Lkq|^o2>Nr#)6@zpEZi>L9NgEBSl#8Y)0aUXmrc^ez{LlrchwQ*eV9r-59Jd z9GhOb;sTlhjH}@L_0Dx5u~;31=H>{T)6B=s2 zhvw7+QL3%qHXL3qB6kVbSwrdo#Y@d7m1(KJiJbQX;eu$0^73JzpHUv!)TE z{KUX~f=Q8M`_=I-qxNAOtg=jiW)%>`1TSho7K~LWz6FxGvH|W8V&uk%xR}M&d%V`Q zeRL$QHGnWHLAng4|06W&PJL8#dAe^s(Extlw^Y6gaoAJ&37zuxlV*Y({k!iu3DGT4{kc1jhr>}J6K%ePKi zKME;@fN(EuSZ3I=o3-Ll=!lg}e*;@S0d-*)IDi3)$6J(d`RC~~syj9hM`gSmkB+94 z3&ynEfo_9wBIdIiEFg;y!OiZZYy*4ZNN`%z-r1uEVF@ikn$Y3Mu6>F~Iv?MZuH&w* zbt_uyti$qV;p;q!^c0USLNS%JQwlnI+~w3*D`ZL+VCWdVn0MD0#Mn`B%HTrLCu zmr}#}S6LHjc4PFm7zB;gZuotw31|U60+{xT+4SV?lv8P9m6+W6yFw&wpd)npyP;O) zZth7v`^cY;J9$mw)8hNpH=mun<*0~n!6d5li31Ya?UK7Yi0ShOmcQa3$J524`F$z# zLjO`nBmD2Z;tWsA@d%;L{TVGjeKqg>UOWgmCH}S^v{3a=%vVQy2}M>!Q}T`UI%NDp zwf!aMZV`k0OIVL_a2>q=$in)k{SUD7gqTG~n??7Vr7VgB5wgSo(K=81Liw-Lwe_zT zp25XyoTxUZZ#o4RtGIqd6X|)!Lp;OWDVz*@ zD$rNVXIQXjRG(qN8{`#kW*lKV>nPymxa9%jei&{M&KcJZ{3pq@J{-|5#S<{&Pnd>N z6W&ZeZLh26&*`}v^4Q*RIb;82z$detF{7fp=v{HvBjG0DpvYevHk}fs9#F|rzOLi* zNog0i)5`8hDw!8*%%{2Vx4Dt`7Ozy2H5Uz9{N-vsY`R?Gy43ik$@x-af}&ZVL0dw$ zefF@!>sRD$!63uN6$u-w3gc%!okS1-M;f3f7=(41aR&e1AW8#U1&uD0b_h-y%Rs$Pw=io4U7f^W5q;I_m7A zH>*IzP(#Dhq0u!J`L`Gb^wfq)s$x&f2e5W?&EsDP!iV_=#^(?6n;NyjWQKmHI>$BP zixKWwG)K(TOwW_OoTnn@-7brgr(E8|`~>)+2n_DEaGifr!9_;;p~j8%T6(Srxmqp6 zPge#gpUMuxfopIlqH(Y1&)lW63Xj^c7=(wIVnndXIBg=fGIM^7)RMH+l+Zl8+>(_{ zfY<4R2Mg_@>8#tc4n#KY19=X}&2u{zG3L~w1t)RcuZ8wszl;JxNw)%7C%wVT>2V{^ zWe2;tj()jo^YxiCa>S0w>|)wpL&c$f>cnF~TAp*?AkO%6{b+r<#?%jFZ4-KUaCBG# zJvT?MQ^_4z!<1SIDs{ERYN~w6rw_lMiJZVLWRO2G-;h>8zpA=s@KU=@>3|g-yBk3o z6C}^&1#yH$f061Ugs9OlW7-aJj?jM1@E)uz)lIu&6eG`}M^{b(rdci96k4eGIS%`U zNiJ0`4y0C4L?`7m$_gjo_YZtO`$Myi&T?HupSq-wQo%Wg$y?m_izX$7%!5(U=evZ| zx6utp0M?oTde(OB)Mlz?10ZLc-V>RWxrpnH6R!(wwIQ)%r~1n-jd0$q%h+Gyc9~^V zTs1FzKahK5iHq;j1(>>?)ZdkkF&C)!s$No~%V*P-9efizJ#Oxc>$(g{zDt9=62x0kp-)7|{tjsQC=E zPcD=1{4?f6GZw>pyrtc!-fta`^my;U76q0>3vIOGex?YA%=rBWvcbH3bOsB<#AN;W z_;=0ae=6i&e>vstso+Jw)E8c?tQqvHFSFA3Okfv3);6&`(>+o1b4Yjv;#Hil5EuBJ zq{MsDh5va(631i*XX~D>-cdHn*NphXmqlmD{fNgB1d{o1_8SC}X9V$;gHEUIG*i^X z=|un_(Zn&!-kMFQ(C~ZxEPJywDc5igP=GG~cK>nc;!B2?-f~dO7L;H-;6duDTUSix z*EELm0ok{7pkbx$xtC}5AU|gV{p&)So;3{*EkJeB;=xa$GP<*;E!t;VQdjv%;r_4s z=2d`QW-*3R0k-%1i)z_SJD-+_=ms{M(iRskr`UAPQh|Yz_BiO{1`b>T#Oi_(3&!~f z)%<(nUow&7#Rz-_dnR}GQqnvs7UnV@igjZVY^9r*3Zn-f1sDP(cY$OUe<z1Kd`yp zulx2US?LIvih^R~ZRg6#UlNVh=dsGqekP%81Qo>0ku~OXxDw=D{ihZe=!*?T?u{p* zqN4+Q>5YH5p2L9ZLf{lNV#%@&i?)C6zzBy1D4K+I)_9o92=WsYZgt6czkYNP3{Fyz zP1t>M)ihk4Kp{?~jfDAGy~0-t619P?^T&_tC;c;N=ZbLju~0v0COtmo$7L<+V`$pk z+gv*ABg2zX zNXTJ>A~EEWHzMZ9rgrtF?Cl1l%g-DEf)sgrw19E1nf(Z!7QBfGd3VV0`NgvIWh3jX ze14Lad>|kV`IKjS$6P5n0WEswqLzm~2EAS(xe1&lJbDOLK^*WqKr>Y}g66 z0fN}#an;wf3SG@FDB~{58gkX-=Ifc-y>Z2y5kb#V5kM3GnyMHFDWtK{#GVgpV^5`Z zW4p^Xhc5)KPm5AcrJJn`^b#hEU+)jAX&qZ9NV3@QF1f|YYZn~@rYH>%GPh`&RX9Kc zrEt18KB835`Bw-9cbnwscz!$v>J+?0AidKOG4DvAV12A`x%YFvCt{P8NLr1w`9%OP7WSd1l=}Ph+NQ4UQBC4g;MHQ9=*)Zg> zH|kKW_aL3gPX4Y=8CAC$A96;8LSfjwNEZ9k=_u0YuB9+i1-!Cv`>LN?zKqHif;7#I zTJmH0ku>>Xlk^Gc(!E17{7?^3@cDy8Dl5TdN^_z2u)9O>`$!*Y^P(S?UiR{EUepC< zxPCKkkh}!dGlbH|iJd;ADv?Q{$iDVr< zNcvz`*7vVJPj32>6Q`wQIZrTgum> zn0U78qp_e1xBB<)$4KRKg*Af`KRsI?GiZ`*y_WXDdgZsslVj+!8y#%kQ+CfzZ&W$1 zer?PM7Fy2RY-{ywdd(y?I17=+xn%}KEOxkcJm{DgP%Z92w!3n);AQ-w@Pu#393lrk>4no1v|ub>GS7Z@hc+*m!qq zvqFtahpLIBmv;}fGq4V8g>=}!n&2d%O#-^vb zP*~`2;6C1k{QvW08~5^02{C{ArD}4z=rg0p)6mlsD@Dp|>j=gZE=)|K;DT4Je6J_+ z58SWMEGLo$N$|Mh+|HUzaadx&&r<3CpWi=0K5l$Dq0k%rF+%)KU7azX ze@pAVs(a7rA9DoVPrbvp_Wt+rOERo8?mQJs@bzE7p|5`X`z8WCYAW!Lksc+;lch?> zYd>ps(}(L*sy9Hc+V0v;oB!N|yLRE8>APfKxzoqrc*!1Z0zM6oGKma^vpM&7NevQN z&1e5+omw9mn+qoMoKI`Xm^t5&n+$p*;9&9D1zWRQ(;rWjvFomeen-?lalW#1%KI-S zwA8SAjki-K>Aj(H{+LM?N?ziep_t@0qM!#;a4@7wVA^e&p>@GqvlzNHPlU% zW|-x5f(w5}{3O!_Kap7qfCxA2c=m0lf73jBqb)igV@iDy?i={t`Ib;cLq+XhZ#OS~ zZQJU)Z;Q`b|9;Kh*y>rTt@we=}8`mOo2cG6VV~KP&?(9SA1DnSFPV15jd#rx3NZqGgXInNiRm!d%L61=;&I;Q-f z_(!FUofW#>1JLVUseJb+igch-5qdwAAs@^0b@<@I_4DQ7moA0%y9IsX&SZ8BbOD_T z0F8&`->LNrabjl`v`g1hUw^u2uRIT%as2+Wt0dYqI$YUX!SnK=A?F?Z73bf_-2H`J zx7)r1oyE0L;3pZ6ojO$Ta!!9CKZaFR0-r)!w7S+EcPgc1#qD?`D|b>hpP%s2aPutj zo(QgpdDET19fPVj-^*^bj)lrry{_43HlL1Gzw|Y)=if$9PaK&`B|ygtMiTknkrvNQ zV~xN>bSxmz*H5)7jV#Rmj3p@ux1c`)9bYW_Gb6>>tG$9?(jv>lMvJBYDq-`b#ij#OtFM zJrJ__v%8rQ{#40%Tt@~?ggQWoPozP}y1(Jq7qvWG$KjeERHv?9`)yrjNdEcGUs`fmV2ls)Ox@_aO34d&3UR@Ux5a-q-#!k6n?9G@UGha?JLK!)1Dp+ zFNdGMqJu#t1j&C|u5O0-hInNfnD+x})8GuZ)z#5lx@OVf;R_Pyr$rBlkdi2!B|=#h zSA0Sp6NL!02%4!bs;+! z=gr9LMj-KJ3o!h;5RM=3QZt$u-0*y0O?McqT^@vN2eBu$E{jVB%LYWOW=56NysvN# z_nR>xCUh*R6Al2E11)#96XYm_A>>X4j|25Y$uPzohTl!-B4%wst;YZye@s{8B&^a6 zbL@&{kh0JYas3c^r0&%I*&x1Vz1t2V;hG(GT8;ta%kjfrV2KB|_%hd%1HmL50R39( z|EMZ>E|J*{J=YeWF6v3|&(WEv8^#Z!@!@OB#aQx&7uCguU^RE0CdJZ{gaR`I;sKFs z&M1n(;}$d|0+ibcDhUWaj!xBnXoZCP4!UMX64MfB>g5nuxr!i-VhqjcIJj3%;R>Ih zY&M_!7G%~CvL_lB0#fi_==-haJb8+M?fpq;L0cO0Ey<}y6SV?@Z=e00`t>;u{L?=R zKaoSB*%0WKc&|pedFt*{R*xv9AR&^PpFDH`H+G5~MRmq)ap9rqQQA6gdqxPy*iU-`a{Nk1vA4mi_al6g4WrwFAUN z1c!8?5zeydY8l8)Yp-N|ey7yeN~I6{5I5H^xg$JtP!Ys@)t)nWkC8Z!enK+@h@57H zyS?3w=36~PtXl@4b!76eWlzBP(WjMIClv>;8t;DEhYE7A#{AfTy6g-Acw-B!Ac)U> zSF^aI#sp+R66E0*EFvZ%^$<^p&E;JWjO-xA)#!OFL474tlc=Z?7C&Z=3H=8YT*?Z4 zkgsnOP!5ISz&Hi?>H%W9#BZ!&e8g$3FYABOu_d|3q(Hs{5kl;$ys0}K(@}y92l720 z8|AgT8{YWyT%InPX)U@2z7t6)h3=i2zuNACsQ2jrdz*_);O}2i!JPyAha%5TD^==~ z0xo|!OqC{}v0=dzf(J_$!H4&L$Ux~A?1ZA0M21mxERFX08>Yz;2{Xrmn;B7hVN0@g zQlgN<&su=2e}pyZH4|vz*;H_ei}mqNv~_Ccho5hfLZK^op)k;u9FYDF+0^bA=>>3w06-Wffo9Ai$OnC-FLM8 zB3Aoi!KEM--2lFH%Yw7@-9z#8yNK>}7YMLHyGy&~{13qqBfH~i&^+}`p{3CN zPoBilP~MBT)1B7z+}R61ih~Pn_p7iRkrHOhgP(w9`klBxBAgvQ2%$+Tviq)Ig(u

gpKt?QpE#KfAv-WvQ7E~oclIiK_7yhLlqLKs?dEnbA!e!sCmoz*~|L}N6`PxD? z%?RQB^h)o|34iQA9S1(wOl zHj5P>GqS#2iSLr@cnIVB=j%bZrh11O`T?}buvJuve1A`=xHz<7JY&T`19(dKVGe43 z;DM?L9{>nWe6ZW2Ky=^7ZAxnuWRh4|MFrE`y=~7AF zD-MI1M9l;Y01sJpHaxMQ;R_@;m3CfOQ^Vsjb*pu1Vi#TKYY7s)%&~7Sesx%2)zy zDhS_YXV<57eNiZFif8n;>{ZLTzU0L|s}h`O#2gRaJAa?_ww`;@!`$)X+4FQ0o`@fv z#&fOKY)Bt2b>S3#O3hCgRr>mdPw|EJwzGF}JgZ&Gv3lD>*Fi) z(3hQS2fLE*=$)q=Ms3-6*#+;_*5>pD*C#&KJTbZNl2WXO`sa6$NN5a)3gVphRYNSb3P=7r^Y>m~mE7w$M)Gct z^fM?gGCLKD`gm%WKiU2C8~nuEHXIc*aftjZ9vI233K>F6FQPq6pRp;*d}Va{^?4>u zX)r4@NHg%tZ#IYVeG*h$s~J!$!GH?Y&n$mvBbMRj;Bu|Y4denIgdN&v_b1Wp-hL9)Qp}#8GE|p#vUG*{sa9m^K+1d zE-zbSK96FA4BgGj-+s~ut_(kQT@t#15{B@P%$zN(s4{xy0z%Li``n-tQuJa~p zf_<>LnxQsBKORvgp0Jv&PP}Lu`s|o+xLEL3(?*vqUNMX;cvu9Y zd&>U_T>9U5O{L}6z#S<6!81Q zn&vfhL4XBRXGTNP%*_i@6AVBxH_a`2>jwXJ5yOIXhxLf>PbkM#$*y zKQC8oHA|kJwD=Y6Xd#a0(;wKEvcJJV20DF0wGvKG+*0WXn^tSH<_0S+Kbj^!N%Jb< zwn{KLnPF++1MtJm^=WP~WIN`VeAuqT*EIyXG7=vt<4O_<_n&wJKOvn;_lBXSnbi5Z z2^0dU^gqz0TsqwHU?u#C*1a0Uv;EUOBRhTr4*9rH`T#9zCy*g^5o9YjFY`GFYO%zn z8Fm1-HkH>@5_JVhX9oWZoUz(EGFaFxF2qQ6sgVTZ;%0kAROm8U&PIotb^)lD42a)4 z;QK-gi^2)WXS*D>vUgV9xJljCuLAg4;5(FJ~n!e!zvJU)XPwK=FvIG@Z< z57KT&Ky+ACUFF8bX9(wK1Ti!hXXyY!PSYDG5ZCh`h%La2hk2=$1Kg+WKkmMdUofrD zE={UO>GW-&apF1i7>=TU;HsPfmNcXXA!z`Lj{4tgk_`q3ZlB^TVyVRGY7oj?2YObU zm9>UMV%ycWVyYBt%+zs5o2ekLTg0?HzN@8lP(R~M-A;?{@E;TOiif0$T`Y(B_w|8+ z?^$TfK3;j0HPHs7kZAXYI1|^dX#sMW-09pkoF|CrZ&t}A+_ zXynjYl?I#YT1g+AYY>~zlf@1rtUiJwv=NWS(lAtY@k!CMFbBW zMS&X_4`t+a)%Y#9@f57Dhi~iNK>yVsMlA&+PLqYeWc+7YJl4N^BGp!}tQ`ClPjZ%kr#IWsp)}N>0oeeEI0=Jr-TJfj$oAt@!JE1)ysUmPgR1 zZZr{OlxuRyL10c&=k)e^|0*q_B4C5X<2idyzF5ccY($?|3)_qu{n>@IFfA%p#VN6_ zR)UZc*t&y!JUqcY-V)uW4E*Iug*)Ewr-9NzQsY{$s zj3c;$5EcrXo4uEwGF6?EVIpAJzG0WuAoHcA5c*n+pIz$`d^%o?^mFVZcxaKwF7`XyXXjy{=+q z5!Z3b*`WqwhcC1+v}{)K^k*q?=;^_SA+VT}ZNQzIhAut$v=V4c?9PQn_QP(M=TX-u zZ}@5}NGR#uHT6C*kT4AQ6180EToM#ywEBqV`JEfDn>IWegp~+^mi&x%C(;+}!KPpb zQPkiQQ>qA!v*sDEB2F20xi6z?%0PR%+%XfJ%@rXvNoVx@uc+m(-wshy6HA94wM8b6 z?*g%$x5xKyU$ChCO=)-DHg6xpqSuCx|JWsa-+MKwXv$WZZ%0qZ1WZQ`YyRLT3lGR+ z+VFdSW0a`Xk-qO@j8heO8rDh^$9g(p9h{x^emjagu)O~3eEbU7m6A>H2|UK&te_2e zfHGzD2ry(zpAOXfKA3fM@K#w!cD_L4wXlJE!uanOv()Yx&E0dzBQ_iPxrT(ezr63j zI3w@(;V*r%l|mo$;@4%SaWoe0PQd?L&HQps76>qt@88nQ7+ar8lRnaspWN@ zPiL5%9-h7EAe1$J{izZEy=KbVDRthOL39-E8MYwauA}!+Bd3_l62&kv8Jpo-cWQrx>mvpoga8Kx&hq6AdD& z0$GLp5QY0Q^*ntC*Hzor1`6Bp+b7b5vfOvgV0K^ndn zO7hhz_AWK2L-pG${G&*1z|@dFanzuUVLn4!dv<1Z@Tg!+cW0-u_$DEyNma4gJQANf zyG}u{qQVVpzuEfTE7r!Mq00rQ!${1aSQJAg8gxhd%z z57j|=+PKK`+t+-9;%$p&+v$}V^O=^D9uUv@$f>G=?LNJCbXdN#sWg~%5`Z64GWuY@ zY|U?BpNA7J#{ih_UQyfb`}h23MdfFZ2VOq-@U2rF*j^{FXDxfvDLTx&yn*rVMb;Z zRuX&V!S!sOSCOKJtYca!H>iat;j|GVur=C@41N3fIwA>vNn#}C#gxO?=sVf{ z92)bB6TmP2y@7g9wQrv5@3RGg_B>)KKnllfha=i_`3e|lrh+^1nhgF-WG;&xk(fw%mgv)5fK zH%fiZW+{~_VZmc-6Tl7P1}C6oeQue`*^Z}LwzjIdWPB6pAR{{w&uRRl^W)ZSjX@^Vj!zkg=!`WMn02#Wt>De*I}Y~C{NkvQRPJ15 zJ!#W1mi2Ux`RnfeV#WBM_Hs=(1J_l?7p$?Rfmugy$O8lxu0@G1_kjBv{3N=9eC;o5 zDp6Bb*3T`in!U4};w-4>iy{OJ)_x&|5Py-EVPx7}fnOL7>DPOQA+9=ALt?L*KAHWz zD*39slWiqupJUe6&3s|{YJ1E_yKDIOK3Zz_X|pwHhI-2C8wD)9eUlllE0P-#T*&rk zh&zGSN}C!t1MPIkQTA=Cr}M9q%Q9bsrT$1->ht(UJEf#k{EjNyG1K!$F66&Kbn(UH zA+qC(hF4;Ln#~y3_G>sn9EN<;ef^emXsA9>YYbnC1+Gxxy(_I zJH{G}+`Q$mU%b0A`c}`wE(49|={Hr3pLU@ZWPF(cu=MyHpYAQkr$%wR)zHo;saZ`bIYh z>X;9t);?`!IVs|pCkAJ}>O>H7`bv^j zBRo_?E;OQUC#=EvM)Un>zIV4*j{t$cJ&opJeY1D5ed$pbRlA6sR$yTLT$?B2w})mJ zl`_B3EVj3(Tjp1yE%QoE1Ax6Ee3Y+p?}6@pb z^6o~TcvnBOrRs%YG<{E&{qtm(%gT@frC4AOjJdrbg2A;4DR4OE_N+^6yg z{YB#_V5D`R4r#gdd*7Z%?U-Vy8nGEz$XMdV*Uh?>Cq%zYI9Uy64;Ox|kT#R1lAI4t zO+9xa3dHq7l+Owsqb>rEN*o%M1Y*^2fFYsY#%-9Hj^(>9u16-oHss6;dHx1;of!lB zaviRq+3h_+t=x_`d`H!Go#Tc<4^2)hPFWZO{vo*yv*XwUz-4~D5`f!W--p2bHpRcn zR@W$>?;;GI0{Z$mIz2=9CP-o&v*+wz1-{YdxH99va1L72hc>jQ91af2Hz3p!cq}59 z(`59;soC<{)`JMUd9+{&DqRNRtKBep{6pWZ0TC&$B05DL0ig1qeq(;^J`>A#hK_LG zJxU1xBnTdP*7GH;LXqtgLSx4yb$mYi|3>(j&1+x@L23{6KpZkyj_6AC+G_Ue1qc`b zijiBi`>*x1#j{l031DIwL&mA;(*D#(9de9c6aixdSUr$pnU~%qx(FP)PycffTT`0lSV!Li>;M$K*jXJ0K zd*j81+#XIv!NNveo00~FtDG|BQ)HAY;ucqrhX(#8z+d=n1!(S~KS{(kMiY-4%eK*spmxYDtg6m3;J#>|111 z`kV|mBB3!(t$tm(+@oU`f#V|HZcim+Y0{5jKA=rHSDm{b{oOFmH{;HY$j)abh(RQu z#3R+k`fg7am#L)wCHglf9v{0;Ukj#$N)>IKW`w0{T{=g>7xJwocUfBsDe`3ElEn`^c;2wi|KnJJ z&+F!03V^n3-VS)+RJi4kk{R#SGj0Czai`_8w=T1jm@fk8{`8FH3JMUsJsn>jr||Ty zz-wcpcN6Z0s*eC{pY#~)DE}u&>ON~D9=u`mwf`&X_fKdFf1Hn5OD}GAr|qC}u#zl^ z?fCSmiH(ZlKD^1(o$I(;QLXXd9ok$`0pcWl;{@Y&7nd{`RaV-mYS>@?6Q@m>pCBv^ ze%gI}l)S5$MA7oEa(cD>2=;7NM1P^G1vPCTdDzi4m{wnzwPW*h2b!vE!Tq(j>%A3l zbL?%$K}z^5i7YTq24Q9pAB-RWJCa^dC0yNiyaN6VyO4wZu~PDjjd_9sAxD47BaO#O zUlJ5rB`}^Iec}$irqubuvb)K`2rqtLTp*!GcOuUBro+(SyKe;=6INSP-+viB6?xf` z?9rJ#lCJ{=L+y&W7t*)TlWX|BLbmq-d5_zcLG8F|?mYvueF4Ua!LfZv!^X%z`MCze zbdv7{qtN<_0gX#3CB;J2-fQAQR;4R zr?2|JuciE+3qHq)pZ1<#vE-|~9n#uM5?j}u2`66@{|U27TRv+_(|-b+zn`Z464Dpw zv$>BhU>Ewpe?YjJA2301o%;@dX%lZx#a;Ru#z&As#$wmV!!RB{KVyDD3;)Gfh{(Z3 z(5dNN&=Z;Z!91#3_d$pn*P#56En&mZ3PpQ2&pY+l3(-v2#|7`R)}-#*bRc8ktaom4 zy0(IM6+RT$keePijNO_32Uh>J)jwz-wx=o|*O~T|N0Rf>6=VDH7umUwol+J;i=Lq; zdSNAm4SkeiPI&-Tq~=<(Nq7+6?Vw0pF8YRy9MuhwdaxgH2L1Vyhv6n?Rf0_0m+Ul! zWByGf{-rL@lc*-B7w`DIL?f=`_P3fKx`*jGo#94yBPE_D!>P^9+wX2k@Li*SEeIF- z4>XuUHK_I5HoMe~ty5VIiIz8{*7dw0n+1yG38!H`#MeKbVEv(IF?Kr#Y=9jP)heA_ z`}p(&(+lglx%<`HuAIbMu*Qzkb)ywL&xz`p3m^+={isZ0DGj|vRt^d%3{~?PdNF^= zHDrggY%viW6Zxk)`t4#)P!|8*`13bKCMR6Vr9u(FyQKYI(HO>reCtdxFb-GZkv48c ziY}afv}PPIy|&#T#?cd!(Vmsc&#;dr#&ofZz0)ui1WJGD=-ZW+?N8IU#^U=K7gH6* z7TgEJeB=TpX0Cx4PZf{uo}-#yo|y)s){iUw7O}Cx?vu&S#_!UmJ>`SHs(#v&wi0oY z4K$H9)(fU$gH1{V6@ZEIYtPNBGZ;|!QbMwd9CJC%C$mP+JyT z2{uf#i(=C9u}+~>yTDN%&J-$8LP91{;pzpv%2%=z!05qt&)jpQHINhH-Dkm#9vF{VGcR(GsV*_6Y>Rovf071 zpsgb{Rt&M&HQ}4N$)wwx4rnB1j%B?E8N0g7hA3!t#soSt^e&{%PbZV`8-_x*RuRW& z){*So889kjh>ow~FO5*1qgnuQM660mhkjDE-U9-Fz5WBqjx-ca(NDpqbnkBw_5_pF z^;}FfJ*9f0eIv_#v@UEiL6fhuiQ5fE76b6AVQ^W(0DU*=6~3L(Dh1q#Jf@%-_b}fvldn85n+UsM`bR>ZxILK1CO9|ispc?h(C$-I%^=R|T$2!PiEw*xnRF=J&^`5eXV z*?rdr!v>gPrdnpN^i+Y-_o#fkxVf_uX(!ybhpPRUgmlx>75V`Q;0`tB=%0hQkxs4AN zaoFtyy0X_GsLyY9qKP;1-udWZ{5}5!O~*v7OvEB)e5bPS=JfvyYX7H+uh3<)o-A?5 z;-8Syu$GTlBVPz!qbjoWo+$U4T&zp)ZC6L)T^P4%JC=9#2Zxb82PN5}&Wcq}U-@{+ z`EHD#KBi+=%&E_fu0q0491q!xswN<*y;5xpc8xH~>1xUr{Q5n=ZZF+U0+dJ+L_Sya zt`&Wmi%$#lVtei!uY37Qr+dd{GA!8!2=+2+DtU^8=BN^2!kB|XQ~6_+1s*(tI8XU# zE+rt+(?trOB&?y%l?r_8XHE=ysS4d3v7x@>=+;rtbx?Rxv;?-F>Hz9J0z7e#rct2@ ztbw*hB7|y+oRh6Rn5MLyMy4G$U)HAau7!Ro8O8blD%`d}P$sTvva*&>GMAW_-#VK|KtJ7H=yh zN9sNi%*%b7g2cGM1Ps8C#tH9ao1@4>z@)4!Uh#w$F7w1%MkNDhm_5|u^PU9J!zSsN@EJ?a_;b4$H#8C8LO| zSsr{W1(bu~nFITOJ5BF~ubO+M^K< zJ7o)gRQ`Fgfz62oGn;x&&bd|=Y_-{NoNIc5vvpx&C) zALQP^=fJW7cZ_I5P!(Oy2&8fE1jM? zateS?tX8!mBO(?`U*OPVFe=sA6OSI8ef-N=rE? zDA%!1+x4CUIFJ+?{{^}&m>0=jD$X%NL#T8kj&r-K)|Eb;pP)*``>1=V1aL128jii5 zMQ0OJr*qkeWMk0sqS4cCi10abJOQ-SDn$_|hml6wF2@3+X%*h1%;eywW>a%7#&X^? za?D!(j(qh&5vo9Mdtb@^^se#~q!B08ilqqJ8B`>7;?iF^x-1^^pYmCD8u z0nEjW=Q%?!Uk>QNCOv+!F$dDj%nW{aZ^lJK5Ctmb=ClrZ(oV;9)-!T$p?dF;%~2n4 z_X`coS_oMe=Fs5Ag)Mo;auirubt6Mc1Ch{rOvHz8;ry1-0`EL5?r!Z16F$ET&64Uf z4}7sqcK~9x=hPCKm4DH?r85gXZO8o4i&fKG{13$EbV*2h7u{Ims&exi)knO^$g)L# zL$cBpJ}>{2zRn%G#c<_sVhB^UT1InmkDgOP1yaLxclyZg{2Ssr;x|Gpn{2H!7Aha+ zm30{x<0XrVyP3pIEV!@1m^oT2jLFDl$RSj_dB zHLUZCGQo*)-+f|pz8BkhzPD%ZQz|#{`s?=Q?&r*8-%*77@|O61ns2yw?uT<=a4__> zpp3>*Lfn?M0dJzY9MQBYLLfIB9Uc-7i>RW40^O>>&PqM}lo0=~EHn<91srt7celNI48!N?~-qlKu;k3w2>&u3fFzRCFEuaDd6ZfIdO454guROC(pM( z7s8gz7uOVOc8_f<-4aW&e4+Q_dZ+!xn-QnIxRcPgLvH9uB!^%(V^2(w?x%J(<_C73+bZoHMA z;n~ty#m09i0jS)R>vDrpZAIe?>R-=J$ysYd*{cZ5o4(HpJwS>TcQi@u&&I@dNFAmbSQFCd2{KxLsIk8%%^{JIc)3W zdBl>a&hky3uxYK?&>`DjG$R+!kg?V@|}pU*m~!K~6d2XWa<1CpSt#RL@582sd9l--!PL z6McSCvUiXwUZ3ms3P#O7=TBNuaaR*u2Fb`r%wY=!IwJQLP4+CNy-vI_OX?~_wab*+ z^GNthHlcMP)jtTuQ1{)I<5)HI#p$6dxJhLG)9K zQ>XP7t$T$NS>S^4%GvY4tCE(k$qDgGt^#-9|E#Y8el}4U6eP49-C&oUdN%C69$5MJ z)?~;M{1+zSKM>?LRxs3o?CHKR8+@_4_^LKi*`3f-ZCcEf@2TwU-t{4c#$P&srx zXRI7{;e$18EvbIXrpT3dXu2<#`H!D4r<8ByNAZli&n>HN(o5C6i03BU_(RP`jkQax zk#8a(NteXa4`JBRH^2C@c#3{7ng?e~bYsv$U?9BYOPG(V|C!PH;XL2HShQ+nx%orI zRhC-rhag#jwEl^{aJl~S(545#J0=!^yWH`MMwowLWala<=s7m_P~cHGI-t+isXOcw zsnUal@7!SseYWdSxr@h5xvU36;%v|EY&EHh-Y5x{OFg#N(@A}18)J5dLelfvamqEZ z^B_Y)?2@|nKH&IG^$F=4;ibdT`m@_A>F@Z@h(#B}^EIy$baYGk&#foKyB6W#eq*X-)J{B>3aDJeOzix+ z#Cv&Rv|0YjNnkCOE70a?rmE!}8NE7FAh~Ol`7arzFykY=xNu-(YGxt*9R4O_Os7wO zutYqvJ(105ej_f9UNmB3f|8$Jn)uAE8WPV1{9YNBWN)(O85T+Q}% zo*cbyW#vvSJXbRcK(m?+{So5>REd&}kCIMv7bG_yp&+vkRDasrdp6o>gedGm6~XUj z70bR}Evfpm3dVmD5DNC7$OU7pA%{1f)PBq6LX{0^u7o;8DB1Edbxr&mkX`9sVgC@GDl!7Z)xNG7#Wl*|IV{cZj2$I!*6!DHvYI?o~_Gq zr7J39lJ&?sj%Sn_XX4!AU=U|LgD?v4@!Ywt5>nj}dImGI`}lM!Ro{z>3N}xP5J#BV zJpNfbB>ian2h!8dgF8xktKXQJYVaYd09?5UczDf2*+`08;9Z}cMSOItD1K2|Ye%g0 zLCVOtA7uSyZHIuBl-1e(1PUEhK~h4UtWAP2cPlp;vq0=hLM~=?smt}TAUnSoD!OuG zoZoi;DXi*GLvs7*lD;oXvP}3v#L6@HMlI7-00Q4}fIj)}u3guKSpBYJY^z)#@3Zl3 z%CGuisZbrqfPm{dQtL1a0dJ7(4Gp*J>Qoi27MzmKul0*_?BZ8BrtexCP?xF#nLoiVT+=ul8ASAx1x(%&YRAYDrTNP|N5x3)6Wy8rQU0- z*elRx44;#{Mw88qc-{NS>BVBd>5bZiAQm8E5H>NWMIRhBf--kkYA?E0kZWi#S#!K` z6jDdVd+s`R8l7ov$gJn8Hbz=*=?wpYh4^J^iz|!-xx|g=2+;VHma{(bm~Q#W7KdeP z79|(64lVi)ZlqE>&u(zuWg)-1}#4UTF_3s%R0^U zP3uyw$jCQ8r#j9)yM}rLU41?napSo`L`(WAz{^R+Sdm7c$wtEs;`4XLV((jTCF6{y z3y!V{*9iQ}y}9cccNiAZt|8hSrs`j|@?#ZK`qlbXr&MY*SG0l#T1JeQioRgR7kFQP(|{O_ODklY;j^v& zPwObakdG;n8>V#rbnnB&VQRZZmFiVgJ67_^QXf@bZKuPPu?wX@;A1Y{u{e1O*?w8N zrKrPN&zYbvqFFT~wRvgY^o9%%Ww!dhZomgIA1Y>})tLZ+d>du!&=^s}yAdei_mnPn z8O^rCBu6Pg8?FH=VqEdp9tLQne z3+|r*vRNPJxGkjYrwT+L)h4nMe&1>0N;9YoC1>oOb)sPFx!G{Cb_}1%zFFsm`VSzf3$I>0zQoQn-kkZ#c zv7BJ@0ne#JEL6_!uf{*vzcAp^oo@Bl{K|uZ=bj%G92am~*UuC}HP5ru!X%=a?Vtg{ zVN)&L5tWu5cC};fsj)l8oS|hSH@>&0^;jnL^lYvAX9fH;qdYIp2=jCFcJN7`vg%qD zNDNBND9F6do*DnQO3PG6SFZ?p7cdQkEEpvU@igtiyDAx;lcTg+Rad_^q25`@Cd(Yn%1XR-6Jg=IiXG2b zzv9wInD5!QZ1KMU`LgXoO9>BXJ)3For3X zrj#`X7JX9B`Rrhx2f6TVNbssVd;!_v+T{LpT@Lm))X1AA-dVxx{?ybqmjdgP-fJ%= zuJADnEByzG)xH?+qV*J}Tw!DzG&di8pPHMmlc@z!cb&N41#|^5ig58vXIZEt`A4bi zikZd1H|n0X-AmS`$EG_U2qMrewEQ@Y@p(e%V5jw;FR(?n7&x@TRwI@{u88fPX);!)-^)H};hmY88%yZ@j(#TT!}uB#iSa%#VP{^&*x!38_0 z>$PnOAqghCv<*247!F71(pyE0j4<8je2B@)TxUe3&QBna8CRLY7kF*yr6WruO531* z%23kb0*LV5(i_D7t7Zg+5V{xzab?rJx|=JX+*XO0-Gk?NBY6=rp-N3C!R`~X?;zMd4-PPA-PhovXm&)mo#ga{&yKkO;=Px06;NQI6 zf!Z_LJTJz9up7k9wR+ZSRNvVMWBJ3VJvIVcw`bgcAmL^QKf+G@^ZoVU?809z1v1Z_ zj}~(3j;a^Fa$LhhGL;=~_8Y7f#rlj{@*7s(j60a0!XFKhqt8q>geTJ&)RY$lUutK6`ZG>+K~>(Nk=ZJGnV4G3y8Kbh4%^4VZx`Kx zYp_3Hq|@daaXD1dI6Rd<`~T{?P5f{$pMb3$i}|A?oE1_;7F*PJHkw1fFi|OIjydCN zm!P&{`J-s*UHoIBT|yy9Z`14yL{21}uatCE#{aSThheev+I>eSiRVy)uW$99e6Hg= z*=Dom6nR#IJN>)Z!lb!d8GEq9L^i(*^a#0&(bm^g)rRY^G`nU?xd4!3iB$>lG?!Ct z;qA|8`oFIOmbQ$ z3F&xcyy1D^ngurvsIX$V#k&R?z>lxDIvn5^4WGj~w_T}Dwn9bf5q>FNPYJ}sZ=k3S zdN=Sz*V?X_4Qfv5ZnEoD1PPCYGj9ug7Pp0F5HQAUhNF!RssMo2t8EKhuZ62$(|>lY zty^W$=gBD-4qjR$vL&+F2JZp_uQ+IO<%%ZrSy%Lw$|W=SMKvn;^hse#!~Ap=Q&XKh zVCYdQ&VSr<ZWkR6%tx#&A!;(u^UiJ^H&|hM{3zoZZ8jX>50v6da#0Q+i5T~ zICvQTei1zw%$3o8QJ^-Qgo+JNuPbFq|EIZeGF+}W$ltBGZUBR0_z%`Tf*v{~h-H&{ zdL=eSMwClL7-cUicOjk?5Va7Je$Zm^;3koVGPw;g9F6kW7BnF6D+8^_!G!%hn$Z8} zXk;Z|x3a0mmD|*gB=(A?dV0#+d6EYr(vZ|tM9OL;*n0)o-cpPXA(ckolsu?{PV__| zcpF>a31q4!Gl*ZXE2E@%WZ?vlfuUE^EY3+7FSLBh~9+U zN&aP|6r;-~7-;kbWe8{r5%)I8hj|cA6^Fa0hr)S;@v(H6(v%z>gvPGI7Y{BmG1}M< zN~-cQK*(eI!Miq==Z{@DI4tuZSrb()uM zAWQQ8$>R?RhmTW7>44^jDkNJ)l)wf6&Lb<+zdUC9n>mF_oh>Gz5W?D!dQj#Qi)Fr%I{e z#Ds2`kzfN5#xP0h<0t5vjI00>ilFT2#q9`#3vua4DmD9KqVm!0^G0TUH*hYU_s+Rd zSsv|``cvvqEqv+jI@^S$dJsG!G*nxt) zz7m6Yqpbe(KqGqyq@7(BaDrB>?$$ruMN$pix}Hs|X&73+a{$Zs2|9OTH8X^M-w!u5 zIJL_ce(uE7G|&fn#y$&1{y4mN18Ooqw`EDsPSZ1N(fkJ~EdnufnoE?<)@OTXdj(0L zjtiU#tLhm_(vN9Zs{|8DIdRHWTL#@bKbNT2Pa)1W_>t^%efYPBFe?+V_ zGCUZG0o|zV^KKW#G9!~zUAdyyeUF1f_J@+c@p}b8)X;Ai{sW=a|50K59)LDOXhjgp zkYq!xl9!DqQK4PAfkG_+jDFBCAdS^fpcUeAj(j*$S99~P9+Xz}S!B>50Zr$t$-UgEa7@DR+oZiryV7U5_IVGR|aW3U}HHE0|PZ$SdD(H|R!6WbG71;W5(jDn#_5K8S2jaBbuF`7 zy*tFOKvnnf=3{;;0g+O{5Mbu}{87cctZFwK4b*Qf`|#*$IFKU0I~!z@oxU;T6LP$x zU#>sn1yY*(9f59URSyoxJ9!HtY=lqZ>y^9Jkik{8Tn(`6ydV7zAi3tzO>$oCvdACzfLj2Ur zy!_w2M0q_4%@5iLM>GSSU`ztFK0#5cBatS)wZgB0{fSZYcL4X_nJuzi{=k!0CxFCz z^m^E>);%C(#)hmTuJ3jSJRX)PoHk{(97JQEaw+TTN9=kgz_ku}>r6vKdae=$xqD_e_yv8W6uiC{L zy2kwidy<6t%|(*kkq3!0&~qs^R;|G!F$Zo@C#{iH#tMW?vLiBk_>(&N@+ww9ks)P& zlXUV2t|_S-{jr&ZUobuZ9<+qdooz^{$89VA7;Ve(E=7KP1r*f=D-JOq1@4z6 z6mGU9&&`8O4JOi)k-+ITS?=gJWvl;z9t|(G-5uj)%P9xZSoWTM=4D#RlD2r#S@QLf z=+i0v^GrLj82{H&Gcwll_`4y8YiJ_+U0$~jR*C4{b09QHGoDM~CGYRn9|097fnOGl z5=H+?FWtKwUBCw9T^|O}#BG0@mS$fJ_j>4IlAui8!h~2-$dHJ1b>pFe20*n3ROr@&QGX6`oC>rX#B-GM3N#f7c0;~!=8L{Q9Jdy&8bkA(&d+~mu4 zbIT1H^u>5+ox>T`S_)s@&+OJ!76~S%&ZEN`@~ECvGlDe?+qk^Nj}`zc2=rAe7?}O$ z0}>s_$OW_>NI?s8tW9+{EeZTvAxS+Akn}yzv2(qa;ZAg#K7RbbtBMl7{cO>v&BN;a z?~*jzBa(TnpAGZ+>pfLLJEMl-?Wwt^k$y3OAFp4&uGOb8u4-hgsdi8~a4S)GSN}hd zfRph+SttuRqKJ&1Q%KXVMRI7L=Y-|~0olg5PeFz1zfVACPY<|n1*tz=_kG?&W)N-3 zj(!l5_~irZ#7nE1X0)c+_1@R7`c!HVHV^nPt7ZGGss?ciOY=lV{anERDi*Tr{y zPbNsbF?TRva`Ka1MDz3=8&(%yl{*vzksDbG!v;)Oy|mfw;1PnZ2lW>WEaidLHnG<5 zVYh=s`sPQ4uDdU0)(xB)tu!z}9yBr^I!=mAT`e(LYW%^>|6pz;zfBi~n(AD5gS`lV=RWAR_+%frLhv+3LNd?h?0Ak%+=&ln{_PQ@Syo{wh1X5)~e@pN=d07wm2A zJ@%TM*mY_Xsis^`#y@-XF(CH##y9J&zZ#xbr!IY{^2T%Is`%Or9v)SfyPihl;_fv5 zIy@>;UFXeW4)2w!QGFl@J(h;~04(_6^Dn@+i6W07X)k(g*sp#c9UJ=(^rF6Yccny0 zp6Pe#aA3sF1v*Pv=)=}W%0ozK(?^3$xnEkW+CsVuTIvvqTy=8Ard+Lu?^y7}xh(Km zS^!~TH?|8OpXIHm;_^HvHrCytZC~u{_9H(Z$k~+&ci`Y=8|;0`UG9_5R|dJ3uM1g~ zQ^{=r#iU*v(+*`hoA}83;Q=~|^#H|&lBEa?+;}>QoXduq#R_x{54grQ3 zYUBF^diLq*!ptSH>Z_~kniEvG@h{XNN9{ak(P#eTkDl}h+&qt82sKUGztn%rJX02) z+Y3KDefRV!Lb@yn;q4TeOu6r};>FxbgPIU#O?7%vdw?j+Z;aKNW)4eIna77)Sg^G!gi$uCNAN+T<6(ee2M$qIQpV>;8o3y7+K4X zPa?^T{BKRDy@#?NKd~$uoM;@sbseYQ@xa2~X(jNlcxT_UEU6M2A^+_jsxZAf=d_`M z!=XBP6ro+Z#HFIld7BZ+m4fH%zm=ytj#RHbHS<`Gp%KcCvJt!ZWm6^50en5&XNngI zi9QgHKTT_B99kW!P&)@3H6#sQwP3xxx}vaa|7=VF-!oYL``ALxW9He#{;GSwF6CH* zD1^yyi2I0GzxnR@sGVN)K6_LxSCb>SQXMET)W#8PB5i(XGMqi4yfo!uBJX!WM74Sp zJtL-R_V+`w&n^xJh5P(_f0qp&Pq8X*U_J@LZxtap5EBYac4v=6t>YWgZ1~r|dq^S7 z(li&Ak=T*_EnQxJo}a>6z=T2EX5jpDs0-_wIFhQbGnhhtVb}wOdLIbQcDo+FiJTXs zR>0zt{cH!ID)_))tmW6X2yQ_1apy&50 z${TL676gC88}f`72PeqPbMctvA68PhBy29m&ePu{N!%z~oab;2wiQQ}%75!I4MF1C z)tKKLR({dy{oSLl3@~Rk7D$-=vDPcVA~sm}9yn7YWA9INJTMY`;9VOPZE-NI-J^CG zpDc*yIhu47*%64{4KI-RrsRF34J(HduE?WGz8?@ zp8j&fUsX*pLCNZr2pL@H_>vTd)@r_n?>%uE5C1SGBmgfwvkck=t`-Rb1dwygsNW9y;*j=1XH%Uv)&2qgVHNTLnG9 z;hu&>j2^Ao49-WZ8GR$mcLlR0g-ZSQEcS%N8Frc-(&E(R)XK#;Og`+o)*3-K7Bw{1ocJHft}Ed!t(BuK^>f zw)zM1+ZsZswvoizQmXT^#Hs2*nT-+bn!bCUwp5zzKkgd}fm=3%KYlH_aN$dXo(`Rt ztu)G3^*n~vltLF21R$fg?w`{Gi}dZqtPm6sSp0S&3+NW1vJw~OFH6bn&ciWvjS-d? zYSQ8+Kb>a(KCBU)=*y?F#oItbY0h&gVQ2c})A6oozrn_UAyC{^y!C zguxHJj+sIFAby9`k9uujUv>~*1!f2JlJ8J51!8#ePsQ)tHSO!k${Tn3y)TSwnUXRl zKZ5w6VTRthCBrFoD=T|^)O33R>|yfTAsFO+O|6dTCydIPM*N3xOy$absPG&E)OLG{ zNW-Z@j)IL-E+E>iUvQ+>}K2;l>tF1_C_ z$r+H)>Es#Idu60?F=GsV*WF}5&jj^NYb1^e6%;#7p-^ArxYR)+wqb$zQPbEdeJK!) zEQpX?>`NxCJ2x1EUKRKoduRg@l+Ja%+aLuQSw3sI0H~u-EEv4cy;xht0<%^46RUJ# z6|jN3Z}h(E6(2OMrS<*J$KClUy`x`b`7?QoADF~Ly|GYBDQowv=r?1!&7LXTu9FQm--nTYJuQziIr(z;m48$eW3e>qmQgiz1P8B6Pc0k7M#s6V`j6!Y)CO*6 zamh;U>36N_Nm0$Fk4v<;QPjyu0y5EBVnmH=ce>;FLS(#hGIOqDR#7(Di%!qyt`@uW z{{0mb2+(iecqWVZh2_CIpZz;zxqOYHzR)ASx1(lOIxVkRC`%`)fAKg-W@`J1Qsf9ch7fi@6EA27&iJ=2izkb=Q94-EpU@?b;N!lan@{L7X}BYWdSA z=Q@1KxvFQPh&BY>d2Tco-RyfMHsJzB^O$F<@`GJ|U63VribEmZGE1N;Peju);BTI+ z-SwNFwSRkADiOuey0U}5xL~gmD+dfMlNhn^e>$ zf{|*vWd*k`NG`E{q~F%cpv2$9KbyUe4i7#hZRk>{8+^lql*}Y50{_7o6>rM?`T(o~ zmezUgo$c#PVxj$9YUiUwej?zGyP0Q9jgir%1M%~Nw%Z|@2zIpvNb}6 zGGG!UwPC8JOabq~B_H3zb0syzJC5$z9)14F+C}eq@%?eY%sT*LX&Ia?ZzC}CrLehS zp6j%o&=gq_`T4*l4-b3u({59%H}3{^U?9^Ls zEM4BYVd|>Gq0t}G)AW=)5FZF9k0-0>_S4biSMUXRvd3rwH^JWJaRqPcX?CzNH9O%f zk986z)P}|w1wXZx<4d7?08Tw5mMnw}-K}IxAG+4febft9^9F{wg*TGY2D(E^7lIv2 zTtLPON*zkes6*ixfb?x2%PauO7W$ID-3i8)xI9ejipw#gQT$L#sB;dW&iCgvMVPHc zGj%H!69+}zd9{D{+QQz!_6O>OZpC}Os>2LK-EI`O%P(oEYj< z(PiQH1WyE;GSq)SQ8iA$2m-&rYM&Z|<6d`uV6ykR7vTd3?BXZIoM2fumaTcEwe#)& zKymo}qPe#*YH+iKD6-?po099@G7s!PDe^euFg&2osQUQpmSD6}*bv!%I|*JAGz*}R zxcx0OQDd~|oh@bk!%2*MxVizcNPhKk2YZm{U?2s4Zu1;uy!5E3s-IrD+j|~+-|D*B z%6Dp1_M5Gd67E=LhNKKC(8X4jdN1DYe!p*(ocEu=jx&2S+i*C~=nfnPUFKfH3eBpM zC}nx}v6`KzFv6g&48sD#4<^P76RnqBUc7%AF>}FJXjP^vAFZUcHjTbsrLFNQz@U13 zh^`liwE?djHa!}l5>%biNdy5s6a3h4RAOLCvu)*!Q+1h2mq+u~9y6NN%Vr zQ|{TC<_5hjyO2iB8gBYd3nv?Oy~^U$r@G!4!BYPk@(=~2E0qgrYcd1GQ46><%`LpO z%40K*@E+l7)8V>uh!U6t7Kq%yS-;xP^aP3Dh>F_u3EY?nG1fF&$pYE4dt-K$3#Fh{ z4(-BSM2Tc8%tbx7D3~$6L5O;{5t9Euj?TiNssHcdcMcd`f({uB1*Mc!*r*Xosepu{ zBCUXQcMB+vPH~iggi0t9g0u_}83NKuY%rS9HTHe(@A(V1-QDfJKj(eU>yW1r;g0}g z_Mr+MG9O~$l>NL=DBDFLsSZN>(dWNAOAHvobIm|@KAt^eq(6Fj1w|klw!`RjqVZSN zRXmuMR9ismjaK9WsG-TWZ4U1gtaIRMLWuk$$TB|Ctexm5p~)_Bi&QztE z7ek=K*ia1N`Z-}IA+eQ@@T4}bvE>18b;d%E9|i!XLzggiy)4_PgY(14*|Aoa{o?6~ z>3+G=vH|%qYCr)e?}MuhOh#(Yx&x7x0km3RzKEq$)-wC2bR~p5vs=sx;Wxijv8#^S zL#f!Nm_@lu=)pwEC#7T1$W_|)`L)O1$z9tXGr?+jwST!{5JggGw-|oW_*4~BYG~gYW@$f_o9_*8Wm~yvO3A1+I-(#gIvGtU6V3;DL;$DPxN_392ty(P zLEe484goDR#hhNHyOtxLnu@W8aM!Lgp2IW8Mn4x3AHhQ25bIztxuOIpC<>K#?4;mi zkIyzF&SFoUbf00f?h=#U`Ww7C5T>l(&LX92%8y%fSR8xjc~Y0`5gRwr16~b$1R;bM zh8b{EhfBQRxG!Qi&PoRNF{q=i$mp{P#dZQMt%PMmclj*Hz;Fy|iD|iMSjB{)z3pQ9 z*+{Gnc$PQ|0*UA`(kL_N28raVmfHkI=F3hZO&MhO=q|RYqI!hEn8&9p!)Y0!!S=Jn z8BuHs^^3tzSdagJ-aj5|KQazW;{kq00LB(v5uEOXg&u0S{*SGsXpmcTzVmzw)7DI^ z&tHFykwLt#O)wDfQ~>9lo{Zp0(f?LWuZy}-|2%ca(xDhA-c2^HOoAPgjnbJn`DR;u*0o+ft@K#^G{X1;x3~6pbq`&eFz2>*!E-HMg zbmL+KGu;Xw!-R}|RV;(u4AX1YlA;Xr^zSG9DAa)9~$(^!EJs#FbI zT^{Y<{se*Xy=N2wa( zm}sIg=N7IkJI&5aI^0dt8YyBqb68~lzw!HP#*)!5=MnCU(oyDjo0Yf3paSNtd-@(E zccs*$NDdLGC1uZl_33u^p4%4B?qZ6r$=@HMYQ2BxJjq^SQ{nV2p6TOP7ReV4b>Fc0 znYty|^pt=B4bd@PC%^z`XMgya@m?}R(F9*QTm8^-^hTtc3;#KeY)`EniAA3WZ@ zU9N!3t};*?@c8Iw;R=;_rz3jfrwNot|Z8j^HKt<579Ul9jk;hE`sU#Cc($(?%4n zNP`zJSUheIcgq~B`)x5L@>-@ohxd)j59^f^1Sg+41Dp?}TwOm9v~v$2Nv${3Ajl&J z0^T{dCJl6ZF)~D3))UXEM54;caGk3%mmjz?N@&R4np2#|s;UbHAMLY>B@3 zYQylUXr{f)DeIL|bMjv;p#TxaPV`K4&vKsRvGk0J+vSHU?@GOhC~}LJ^1)*BNq6`c za$D=mZ!f-8CA6>xa6JAaMSA$O_50xLi3I^alOt0(^9sxsJ~3S_!)I#Cm-zcQQ&C$R zxm#ACBR5QBxo*?lb^ep!@FR1UniF)M%=S$~zKJV)BAzku%7WUM+nHWOj2u~rT~`Q) z^}AH~rS{9P%eA%ZKlz;{CE>zf>+9=cY-0b37`@`YM6G#O5m9m85elz#pKpz)KAd%r zr3r00MA8JU0(PDZt&iT8=6Lvo@o9^iEzHdNqd}KLnr*okXT@v|Ic&G~#>Ddw6Hx33 z-MUwI7*3g*8@efY&G|{o*dj(e;77){scyyt=VjTXjl71c{tr(u#-khSwW{a%s@%Um zc+rKhTZZ^>Cd)%58o$VJ?O$$J3F6(@ zzF+2zx}&r1DLL8>sXDgiEet#oRZNu9AESA|VbN^s%P-@W&lUc`w-mBI-FD?*Sd?^5 ze^YqhF5%Zg?)L`1Ds7y_rIcRL{*7?;Fa+gKR+Nf#@u8@;W}TYg@Vbw)raHe(U8Il& zhv8o`H1VzzR}_o32Uh*6+B4z7UG&E!*de|%oGav7Nx*7*P~S?BV5@^*QRzQz*~ME@ z`kN+E9~tfKQ4)P^5!#Ywv1Lq%n)0a0N)umBu28`1S;50S?`-t?|gSOEQfo z2!?sr8p|nn(O#hu|L%x1r!?<5l0&z)*>^F%>AN=d@a|h7Prw^T z`|vlo{s%lm3TVx@o_Q`Um8&eeKM;5I<5k~m2s&Zp3|)4QUb*D9*SR@joI3MKuMRLcA{sVTGSK!7{&Y`1_`nJBy5y{s>i%(OtGGM_gkx3;tI z*h@f!xNwU1i7I}=)i+LFpRgZ3ct{CfOQC$w9}{`@ElvGA@uY*l>CMKh*33%>jl@5d zS0pn@ztg@ax#yrriRxJX1vf3u2f{!yCi}+WYw*)ThV6g1x){da|7i9i=lk~_dKraj z^C^9lC@hYgY#_gGRi6zzoUS4BN4Ow-L`&!8@$jnN)n*0;Gj+^7ILiK9MR9f{CjR6rz-z}e&9Yst47B+^i0&z%9&$Y;A*$3 z(pWcG@TX6RI|$=D&2?X7R#7j1*SVOFo?CkmWb~-i>!u^+@KC8OZm|*k0 z7r`ZybX)4pLf}aaUi^F(9+MkZFiYBrgDo<9wb79N%fG@n!+y@xve%qk zr&?7XX4w@?J1a;(^?kqc%^LUk#-EbDa_iK&DBgg%bbC&H>-7Phb;AxM_8;VMbyff~ zFWQ;=uyXh9ez0HS{PZnF3rE z!EzK@dj@e%)>TKwlyrKtUT7r%SJmy-4nY43 z;^=UnXd*h`(KkWbKp5w$rBLLbk>`?*)lMCz!XD0z`;SQu8<`@<4_5J=$Z^qqlS3oQ zKXdAh`YnY|%(V_?TlO=PpYy!nnk(1trJs(P>x{NUB|T_YZ#fO*xF zbHcbs3#599l>Z0V?^!lqxEmeb6aNPNFCi8TCZN#7)fLH1->0g4wKniIakhlw^K0#& z^^>+SvbSSSdN{!7hj0?u4lK^+hvl&?*w+6nvq!Eu*yUMIl|8EW zsNax!H>zD!Ew2`krNd>7Jx|p8( z?ZyVft!NcLzJValK*Sh^*!r>sdT2QJHi@6AyXBWV_lsd9+5HAn^H+c7Ukh4r`uFJ- zYU8%|p9#nO|0#fQC{Y?sl@*u)K}-&J&tZ6&r&$=Oc^VBy65hQ^W2%4c~ii~fy`jSVT})Q7L3B9)}fl-H^LvLd8oW0|AB(M8YX zQfskYQU->ig=>1VUcqC(kzXFH32(jLPdQP1nKvCE-+umDWAm-@DFvwr{5ge*2j4J? zGe;Ns;ph8i_ikzD3~RA8erda|%3`r~zub8)oXv4Ev#Mex(YOzP_iN^S@Eb3$l$!-v zN2X+iUHSjcTK+U9PuKUSN!|Ii)O&ybc6T_3Gfe(`EOHz7XW*ZbU;e2Rn(_}sjX-nr?elv?N zA_EVa22Y){LVv|#9Tq%C1X0Mmz}dlp$G{ss6=2+@GRT2KEG(gKF-Eytk_DI3A>bM8>?~^t zAr$5kWn{dMcBoB8{Y`$K8G4os|G_B5#%d=DYXwIyk6!Mnwt|4df@+WR1G~sM5;gSH3LBdEAZeb7=}zK!6@jxRuPy8NmY&Y9Nd{1ir{pe z*0Wgntmoks8o7QrbWXkSRY;w-E}o3_Ur!=jCuY*U@8zk7_a1%M)(%Iy>)#W4W-P)V zK`K=doLCWqu%FH}UsXs|7Y5iNdprr;@0Y#I>d%fuU^Grc#m&9?`8qk86*&lFm$IBM z!dMIJ9a>u;#Nj0|NZA`v+oQlW23Q6z@)1zpEAdPY&zBK*IkO@Ial0vx@=N{gIK$oW&l&T>mSU z3VZX5@xB7w3=J|j(>6SD`^Py(CT^YIwG2_e;mEjdU4jX<^%GM3VutR_fX2~FGA_yLeRwX^t)E)xfrj^y z!LOLr^(f#eKrM2D@AiRexsOI_fNj^deA=MDYHP2i!ft~0tgeB_%*%b64|UU+eHPV* z*V?7MSp^Nrjz70~s@^55!`>Sf91oFlCxE;XZ3c`Wd51K_YuujkHjjOQPsMi^|6R%m z7cmGS22`c*;-BxFT-T%`SR(PhjWHG(5RNXE^$Z zUABGG;HY~ZM=rg?H9Qp$z$-S<8;|ptNP7aoU?bFbKpb&4vB{8+Jnk7Uf@}^q)>W>C zg@KC@Yiy&j!k)-3<~^GNBg5>t`7~ECN@QW-ghuXC5w$(M<~ zw@3~>+&p#S*+6dpso73`5DhZCj(8#h9S^vgtvT}TTy0ewmhq3Y7TIck=HhYOf%xTR zjmr@_J3uc{H2=MFm~BeN2oZ5Mp$SIPAgWP~px&VM@lHy^2Em0G@9A2YoI$U5#Mq0B za|dl>SH}4DC2MwP4s>i)!>=X{MVxdb%yP=f1cj<54Ua}3iYw)JcroI}92&!_O~kF@ zOBQn$JW!MgXt%6dR)qjL|V9nVVWn)rRe;(a8;#!yw-4)>Jl(< zk@+LDs75{FR2h0aRJrEH%?%UE>_vDlA9-q)O{?G0En@zmCpwike(?T13z!9wG3-~{ z@ZO`Mc!1ft*r6p2x(LI2(}Hgh2SwJCdM*)+geTKGYvJsU0bnxD5vVEz8);1)x^7VAevu*Ikb2 z#JqPh=hl~~sN?uK9J!n~PS60^Tm8B}(Y;4sBGiw)ldP=9cG|orFp3CBMO%#h*Z6E^ zdmk!{G-+GM3y&Dv3U$pzAflri4aWpxP>L8~XuHu_{x_k@ZhK%uG#%HrM|_(DKMyM{ z@Rztq73_I3zqgHt(%xn?VXv4i8E8ilCCq~p)d?#>gLj@QS_`?PP8i`6LApZ%fW95u z{x^CT{G21iM4dZBO68blMu9J5sAJ;TDo7BHa1$ygY*}0TA5fDXY5ubjDRV-&p%5u~ zv=_t{)g5(kaueb(CIZMoFrt}r>+;t3sQQ1#aI$C>@n}mw0xK!z){Na5DtYk3 zD-en%?j8@7@jn*()Rgp3!7qj2mTyQ_XMW7zXf~C2o0VAS6>#k3#GKm3bCKpU%PTxJ zMx|Z{09-Jp zNAlPMw!Erwv4Oo6rTns;bPP5nCS3or-52N04@D(-_r~@ zcfh2Kxt)mj*eY&FT0*}C9=a%ScmM-yjQ^!y`Xc8B5~cFgkw5D&f{qXaVj32KBjFqp zqf6mPgWYbRQ7j@YdYgpsTPG|Z4#!>n^|fKeJcc~%7Hsku&ZsUd{DD)QsvRy9P{1g? zwtK2|_uG(fFr)PKlPSNt=GrFRg}R1Uv3w#4+le2U=wwuoKj*9_C234g=a4-7NxWeL zIbDLBe{SFC%Htm?PF_AM+kLBfTy7$5r>=YF(oZqLNAV}U8Fax+ln!s7@{^l=DgCz7UEG&C@?>M7o7Nix^0*pS%hqxuiSs<_Eeiuq& zTB?etAN@18)V@;J6g4LjW$&gXQl>A{HekBDTaI$51Ab*=^bN>HT`Y$rAr{)&`XDr_dRSKaF{+aE0}o zJANk4c-gCm;Rb>E+5Fg>Gn<)x4m-lPEK+~pzM|WvzmUmS^q$0_2)q2U zM-5~XWnFKCcxPC%pTW-hweyj8)bjRzgh(C!qI@8_y*>R($(mgxP==dUgWX?U6h&etb zR9P6aCS>!2u4;bzwtMR{TO|YY=I4|F1k|w*x1A1LyVLH3XX7}#anxwT) zTl918+*Bx~La8p~RAOS+3HC$h( zv4BHT6Co_$!c4qRSr%3LO-6-n)(S>dq{Jr88Ul`EpfN3+xF5d$ah#8B)>Of433n+qcL%TQ6Mob! zjY*9|{QiEV=Y2pjHL8dJ3IO^*omb&DRg(uDzjY@|*Fg43<9|R5C`rx5-4n8>ydQnY zQi*BndLIiAs>9l1ow8^Fo3K!^yg;V-y6r#ks`x(USdAC3)_}qx|(R zlqSu3%F6S6qzZrGq)_ab;g0VIe#bPGV#o8(6E!-L)!cwzUKbqNtCFlZD@#Xx++WOa zhTQWH_j=aw{dMQTL6Ur9Z>nC7N)38o(Q|dxYLMG7ph0$ey3#=5h!7n)?oeud3+dP> z(e1PW7Q~$Q#}6-(w=0gvlD{XtISN0K2A#svRL?T!Q9;?$64#GDNRG)nsr50ojSn}$ z6OCM_x5yp4x|r;8555xX%4}?I=PsoT5|_@yl~54237@66Yy*IvHlBDa>hb-70F+4N zAg7K{7=m4SxEdsRHTD=B=G-B)MoW+ptUZOFCN zj*&z_*8Vn@xUO;Z>8B(Xu=?%N@*idQ{`kxG;e$K{Migz!e~kn?Jd4DQyHMv8-osQ$G`0E6=!?1mZ=zGhJ zfS&pM3jwvIHe#gSyfClh#frO4Jw*jeN}@47${ef#4*GS&KCTxABqjO9G$!0#xm^=) zfH_hxLlM%!4Q~&-C>{q?4<=SA<(C-LO<##9Lgd5i2cHQPZ{|cz^G6Tv5Ed-_-S4}o z@r9J13oJ4c_H``+`P1R^%abi!HQ=M?4pnUg6k41?txpYgNbbsd^mY39#qh(433H3P z*FT^4&vas4nEt}u4-o3zzsa3P`kY~$EU=05Oq*(*%LyY(MmLxDn!!9^ORySMH2%AV zgg!s_d`aUDAsREAAO0B@efeuk{UO?+(sDADjqvgY|0kon(SHh3y6AR>f8s~K<2xrg zVw*+ZX%z(Ms1IEixYUz>sZ+l?acJ}m{@Q1;3?nyNFV9}|Cktp6M=Y@n9}`-l4r;et+8 zPfX0+j^b7xl-6{6ucjGX`xEA&%|d65VV42^1Ju4k`I9xSr5Yl3lENB=1x}Amu!#ZF znk^`6Spo&OPaMjzkaP&VhNYH*@f%PkENUfc&rUq`#tNdkf%Uv#AAvGRm^GuR5sVKW z;+taJ zappY6F+2(bwG*8$?aDo?*(CV*{hQ|L6)y(1de`)er9wphz6w%O_Ol9EFF(z1kMrUU z4o6Za>~JmW!XUq5?_mF9KF?um$3Mow(k+Js>fPeQ;G18M>__$9k14QGgq(jhENbmG#bBL^S2$@CgzI3?zp(-H1ukqWH-p*T3`Qdg?Ju~F>q=E~U ztvEvT4nJ*)5@9bfb7F@@#L&lGIc0P|q>8+rT#Kf5XZ8T_@3VY{ zX&pwdMJ2rbLD+>uvnzvYkV7|jzUNof?>d{uJF8x}xShPret(gSluHiD*x-w^B5+`5 zkS($yVSkE7L6*zRz0r4dw)+`n$-qWsa`Y?OE6sei|2G?F(Ay=v@;VG7|bKYVxO@hmvN%yq4uRim-dw)%1Tc$d3P zs*K!SUrnyK4r>z0GiD*Bn6+VmuVt%a|6-CVI43^lUHad8#UTlcsXYgpWA13o0gn$OPlUb`_fdA=*3l4(@{ zr);EMO?JAM(!_G3`<(N~r&iAyjW~5Sd3Fx&zk0W1dExhZh~nI*3!OKIu9IXZmcNC* zn|l1XQtx#7UPO7X=zBfYpiz@9ZKZ3s6RsSn>73?*keD1KBaOQx=_O6-=hH3zA6(`3 zb$P5y_t{Mye%9H%t)pw;wg@Tawc*a--Ph^`Nk=hH>To#k$SJ|-GU$Tfh?`g6Q&w{a z{&uijF2BkkdwG>_JGy{cnZH?3%4NE;4N}k*Ee5{KWZ`qpycVDd3W5Ef}dF|1vlL zha>}N<;WurIKtuRpdiLO%hXR)=yP;~U?3So)LiglvhsDQ98Pli50FC_zKChAqt_rk z^~8seqcB}Yz{F3e5PChgRij&;`X7+X3R8~oD)RW-4(~>-4-XD<^xY{wn>d?ah==bI z>K_?+9tigmodFK3F27UNGKeng4+D#osL%eGxI<%NUwg8>@8lY)XT>`$UaMmvJC*&+ z2Vb>l6nQv@BiqEg5H3XRgzvIC0z$H)n>8r5dYA{^R$aIR!ZFP!<)QYhGweyLrRVL& zo~vBRQHrsux&$(HnfEd9^s{%P7K9M)0k*oIxg*fi`?XO-X0oWtYE|o^?d>xY-4MeD zRR9{f5%``pFmRG_D$x)S#3$w(Y8V>nc9gYYe9*nrn!Hd)NSC0N7uqD1VJ`87FEZji zw6=N&BH#f)RqK6MWS7CH#R(NhM73|IgRw=;RF6RV&)!XLgiaL33O^LVR)pf#HW5jM zsU3oK&L*F=^{?Bh%40dK+)KkohEw4$N3b5BG6WlltqZ!X3IdvJrwAK4|Vp= zxr`&cNo{I#u;-DdeoFG~k1kz1wX7lkieLiYgN+(c5+@oc5g*aSf8acKJ%dk*D}cNR zO(btq#UNp3Fd@$|e<<>0fvX5Y@mI2;cTzvH{McJh{A%vZPGK0^Y0OA%0Gu6$^d;3oqhEu7V|%VGJMLEz{miw*xXz@V)h< z(s~{*wL|N16^`ZM#B_jHdgo=xKhkcSY7mK{x;!rYTuObzGdW-hSl?W~%R=RfwUyI9 zqZG=tZ1AK>mq2HoJPsYk*&Q8+s&mdheKTBuM)P4zs9T3aA3d$ZHcyAt`CskgtvZr% z_VN6z%v{cc~z^pxu=7j6J|Ej}6snJv<&n_X<0bcG`Dm z*=5($_ITcUC(P;MwUuiUNg(zG!`l9M&X-p_dPXOftOw1H{@*x^)aGOHPfZPa64m5{m29XsvON0IS?|_A`+O8WQN` z)tSkZND(F;8I$fn6yDoF=p4U)EO=j8fEV77_WdF~Sc#Ya76vAmjR4>$JQ1W?j|1eH z)&&Eb5fmM^Mg&0b4X&L41=5VQ&mWBdYjE&Hf4_DUg zs|CK`K%#K%Yg{tlbfRpkOv@o@i1QPc*XXnj;7T(1-ef!*U90drp*hc-Jx`XT7KkEUVsXD?BC8xq3^idSWMYp>>CyQMtggpE?WjomoLd!qpaaj3742RLAJ@WQ@ zsC?QN8|KHTZh1mgnD`2l1UwmEZDCK-8mn|dOCeywe3ShDbCS;_$QR9h%PYpl5*iMu z%8SYDlPDqi=pH_y|A4%f5qNTL%8}(8f*O^aqglGZ&$yxMp&c9!s$r${F5ZbKlJ!X# zMjx=5^omAU+kEK`%QgJ2>tDwkAcRP3U{~@HY%CyoZDIGG&XVh7vBy4}x+v?%PUvp+ z)iv#KDaUHI%cg+6L;<8v5D!j{B! z$Jy61kiLFV1%B--j=+(|CAorFR&!SGu>z{{y&aA{&nQE<2m`{W8+P3;1|oKe zpP0MSY7T^VipT!=m=K#*ItGB;E2j+EqRjb2$ zkB4u1roy}5kdq^1k7vm|#2p5aOgb-rm@wuZEmRyrmrxMFgdiSqkOx4&wZ*mv$@=u~ zl%Ze*#dFy}tnUoCGeCMM3TPX^Ktb`{72$1=#}mPtC!eYuE|veHxTmk;Lu`9HH22>G zU1&IH%w4Z)D7=bBF9q%|Ycau-4Rpz(i_j6!5*X_wi!GMoDHno7XsqIQKri%AQ|j9{ z=^pZ_9D}pFAo-t}FY$@4NRaF5hLU|4!`pP0EKLR0{A~Lm#4dDoc`^p_7Gi$vW@~5_ z#vTOrDKdM|0iF%Ss0V1iH3QYwPk^jZ9y>G19vT%I+6n}lyttVd6KNUkW;m-PNX@4d zzH~{4yo6h@$8D*^JMtMfc@*PFA)UMAz3V_hGQ14bhTWEQ(A_#;FHUh1WuurnxnVT| zG0F#6c-Yow2+G=TA8GX;U?yaI`zR*A=N&H}IDh+9C*?sygY)`Gk^}M~*q! zLoo(o5N2^`h;^NpQB+sBr8j6q{h={{HZo`37cPIlsp)kH>@={F(JS7BIl`lRScx~7 z$*ER=21^dr9dLy5cjv(<4qcn3N=o3X2SSp2(ODDo0?=O$6qxx25= zK!c$LemDaXAaf|OAD@l3I)w9ucc6V!e-;F!>PhYH@xeJQ#hhlD3lk^qyLKgILvl_5 zdJCIaYJRpmO08?3+IqncKYgagI+*Ta;F^a_&}i}pluK_qPdx?_CLJ~aVz$Dde>>f` z9Ok;K3N?pZUYoIzoyL?S?aeplq@fBtxlPf;GKS{A?>ugAOv=Co3L6Fdh(eKV>!Ynj zO|Ne|ud*a49ZLqTOJ548yheI?8`Ozn^)7|>5b2^A7h5b3e}M1(@97&gG5$}69g_n1 z&hO8yw^{O8KVQS8a(%s-6Y?h7vD>f1MkMd+AH*HYWB9jgE@6txIT;(T%QZeZUC8}Y zS@Qh;ZRcNV+EMfWY@!678h`xAfdG3&1!s&yE`kT!RNC+iTT#;OE!eATVM0##UYN!G zP}ubJMA)bHXHj??roC(VR0bhSl8@(SsN7@wi4>l!2Q3gKOjoY>Z64Pv8V=s>Y-jZqi#>)*mk9WH15Z6rn5CBp<8E`E!j z`kS+XT_ZLg|D+7lm_MDU26T%=&nu+OBjd8#S$Z%3YW#DZWb1k1+OLYE**fnxLeQD9 zl}+g3PFw3)pVsx6I6;L$s!3_Lsh-;FaJKob{-(Nbh1d9Jw?7snX;={;&mO*cpQ%gg z{E~%o$zuW+He7I(AnQNBeqTkye{8ti7~0K41V(!4fwi;0Uw+ul2kdKX^8|1uDlJ zaTtf%ro$K*cK4@!Tl9}ns1Zw^;*Fu~4KKz`aq8;w=9%zz%jSz-Ervg&qbC0)+r%h7 zIdnIDZS=52)o@~?IZGo+&tjJN)tWN&`1$jSqFqi`2T?%A!um&6`)Rm@adG*Bn=CW3 z063r8W9=yWRg4trb;5}VRU=jTt|HOxRml^chn7=a&I%xbvHS0V{w2G$&x+esUPBve zzJHajS!sT&`{T1(*eLa}l6#Twe4U_N8`hsUy}VEP-ALL*Dl3RUquaA?;}|=#`wCqQ z?Juymk7#sp!0s(CuOAvQy4~uOU3hc@DHQ+-;%3}Gb!yL7zLOO7mjxTW1c8>53vWO< zBP_D6>gUB6+I6!l*`{Al$b85I%{Z#bQ)SQtj~J{&o)PADLauNjnEq{aFpjEfj+4=4@zHIM>0}jiH>;WafoOw)`zkR8?avo`SS@+>SiCcD1Z7z|V zrwUn2dAUuqRcFD*k|~?{g#|z?UcF&fK{gSMr%N)JHqt7GUWL%n1AE6Dr9}NUF9B#- z&!h+D4TybK_H4`u{K>lMrsGE5QyT$(b$Sl`ZmKkzOY%_PTt6P(KXUlM8h(y>9hS(b zmX|-2PJh)@yXhO2?53O+5x9C+f=6numTRUF-x6@lY6Q)Ax%%Bh?%`OWAm~Y$`g)z$ zq=ED?`l{yMdfs$+T!;}bWO`dcM%z0AV@1}>z^*g*!|kKu;QNHJnu7wMz*<|)4vV$J zSPfGMpQOC>)CY*TObobUYZ>8WWL}LjR38Vk(w4WKUapmV8?}`3IGO76DgU)B;x!L>nXb6vr^zoe+I#(xP*4~T(?#yN9EGbMrqwFmI93i)zz+b%%=1ASNQ)ttTDB#5=iGNYa|RFrnD_(_ zD~<;WpU(Zg^2ELC{QjhNzH9%O{{fQ|o!0wDdJiAK_b_EuY+LyCnUgD2wZPe?!yoTg zvj)4K#twJ=CY`4Iz9!szCAAl%$Rwcupuq{BJF8L8FatIp50737YA_ z`dT=xp8wVA6c(3%=K=Xam*Ju0za)4=?V&2={^D}~^J|;b#}y*{BBDhPA8m+)wC+$^ z_I6-hGlyc*>rc0?-gWTYGH_>F&NBY+H7@4bn4Wq3thL2O#anu_v2Wq4W4sley_<#X zAA^uJ`CKjHU@fDb-MNx2lX+Mi^%`qU^KYpSWjb`j6+|^tk)xsNo;j|BkgP2o8gmmx zr{n!&=@>PREm&d|r;W4}$G!rN=qU1`?~@maTdqal;fsG&-$PQvx0c2~Zi|hLBhtu$ z%*Fdoms4gkpZPuW1KCPDW)^%;Z5Df2y!7!=M~Dd6Ut+z+=r`fGs2LN*`-XPQ;jgVI z_mGos=etat_FH5P>6hg`7nuj31%C_->A#WY%UOP9q$QSOy0ty_EBHSky|j%3Z(zVhfjI6{6evyG6hWtHslr{`^AbsHWECk|q~KOi!j`4{H9ao6M7! zqjwHx+t5;9#9TNnBC*~-Wx8Q^$x+G=K7??cW`wDPgr^|qsvcu4$4x&IW8+M9N7wo7y$S%Na3nJ$(1t zj6Zha-)9h8956QADwnMhS_qh$v}s^n)ltyMw)sZ#tJ}Ic+OJnagei(NCOt}h$0D0M z5&!DSR`)v@vhFZ-itW-l39nCLKYsPVoJ_J!cO^Pn{tc>N-UU3qSxdpk`rK8#_4}hg zOQ_=QukoWpfO*aK9G2eFJnsbwhZ~KPJZWQu#cC>S5UT1e8+gv$=aW8*O^fwTIrhSE zJYURsXz1>9n+=Kld!-~c#U`nmeDJ_+H*o-GQ^3ktJLpQgV&p(h#%QbsL_p8%P&(FbPR zUYa-(Sd2NmD+N(zk2C?&B}lt%arAJ* z?!M6AZ8s>IZ9tKT^(70@t^+^dFcezVFLL)dkqCCLab%@LC7w@a_u}vfw%chdm8cP^ zl6WlaHq)DQIC#WoOcdf;P3pq>%qJw|{!rNIW>EGUaD?zZdC3h>_l3xVB(USlg1iWW zBtF0%EHS7f^Jm2?K1F?etG(vMABl6IoQiAu{N=A?-*`Mt&R^c#RA=eS0C>poqw3Is zpuAvXR}0$md3xQ;>dG~%NjvNMOz6I9y0k_e;TF%;;dp4GrUD6mEwX{bWL+IHZcdHJ zZQE$a#D+67rYELEVnaSVV8=91#JbfgVY5 zuO9d|yN3>}g~{ab1bNQ@l7*f z4Im;oT>K6SVCU%#H$4E7ow7~{#Xyx-J6tQZ-tQGarUoDTl>AJFBuBx7!AF4=WmW6E zNB@%nG*pQAAMiH^2I?sct^AUBoY+dM zFm9C4yN7>DY&DqzCq8v%D1#aK+B7TTBwt^1MNz@DOe7QPfi!|G=z?a9YV|g2rJ!Ae z$(Jbp=bH#mT-snfVD_X>-ww2Y+NTVs(e7S96X253Hfy~@EfaOS4b5n`8>v!@h>W*D z!2#$9WIF|%lav5QSE?;0OLS4Wj)okglypehl=z&5xD3(Q!|7M8O4%)Tm)k zoPfzfbz4X~o%b#=N>-h@Qe&n`_{$Y-)zI&O;OW=|D$t4+VRdjm2iAEDmX4+~^f+;3 zw|hMn7704>TZ~|tWiW1B(l%TSjt4k?PAvfW4dxtLQ?1np#Xqeh8^errXO2CBPQ#CP zn-bTX8coJFJ-}I_h+o}is`OVgl2BiTB&xG7v}~CBKig1^6i|wPULd~cYLf@)wNz6`PnPFPgguj-VO`H zQG|utu~6$c+x-sQ*~sqjPl}>&X8oP02iRS($uA2dO-C=nPRg%pkyCX7Uh+jn^{bjA z4b_9gYKvW0`oDt(qWP9V{^T@uM$Z;rA%B}D=vZa&v8R@dA0J!o9y#CAz!6e#Mv25l z6++}4kyBQumJOsYaDV2#+Z;le8Xm(uaSkMTE}EF{0b3Xe#3m`Jif)P#Fo@ z3r2`Rk6-^vOw>X;rPvjPzjN?D)hz5;o8XCz>JgYNS1~48H(G1p|5|dm8>p7^)zs?t z*^z7-Ez#}kG{frv`Pte@_&*_{T5)*F?fkdo5JX`^ z?RHXR@S7|=-Vk*rd3X~HOASy3boAQ{e~djCROLJqvro0v(q}8$XryXUjIRgBL6Qo& zQ5ZW^9op3VrTwTuB(Z=Uf;TxlHsSrV-C}+5`%4TN=T`uW-T`}d({f26rD*VP-y%GL znI#l7p!xgvqp5L+CR%f`2!!B~FgSc-kR3U{qCVp58&v#A;g+;rU_DYcx92AgCL#+> zWLy#Vt23{_=6zVe*{M-el_=tk?N`+=$6emaXcHESJay7IotPXbCgEgJM4TUfj0b4F zS`I8%mlM@CN&hJeJRN+CY6KHT*9elx?niHnCj* zg0LVSF@-oDG&mJ?^l<|v%rdeyjq{_50mzO%Z6;RP1JAWkCq`S%s2*a<0LMxYt!OfW z#hz~ZF9g23f$9Y#=f5M~2+>PsO5#Fg*QZw1IgWm-d*J;P&%i`{h4KfHLDr5PB;5tW zJ3hqmtt8ra<;$L*)#UV8K@#)cZZW?(gEbRbM6hvvI8S*#f~%dW=AHG2?ja^Rhmozk z+LB_Un~r~(M0O&_%D|Tz)F3fPjKlk4@!_4N#GK2L{{h#|Itr%@${aweYLFRVQQuUo zx+w*I5skN&^Kv?~aL>YZ!?Z@ZVF}$v3-K?qx5=(n*RjBXzok}MOFB1m#Q8-!?};yM zBwqr^!7xeX@0??#+1I}T5v`x4zMp@d^^J`OirzTK&&mCCN|xs8in1@VZ;N6z-p zMO~Iu^EA9bwdeATFb^m3Xw|=OPUv}z65-^^$~VX-U!UtFRYd$B zMdu#R^!~^3?+kNmDAjh%#+ee8V}-1&i@&Mm&CDnl z$Fqu`CqX`07V+R?Teu3x(sIK+!ekb^IbESPyCRu#e|%i2`nWilpk`7DTtm#t9~5|Z z=h$r;7J&g>S})z;7O`1(PSwR&@;#BZ#U1f59sZ8f!nqYq;Tm82**0T}s$99V5TTJC zm^v)Xm(5NcG1T#zZ2cJ45}&_;1+gqK8Vt1vn7#Ag%fiK!#O1d;4U&yKojR|!WGCH` zRII??u}egdd&(;4W{?nFGwEt@CRq#DX$(KUah|g5rG)t{`fKhXXlkQInw(2Wd`>ir zEBxnPoE8jsiOUaj!lOIH)Pcxa%M)21mJ5uep!qHk?7eG6-N-{Bo8^>76+!8Xfbix5oy#UG2Meb&Cd53@C-WQI9#X5jPdo0zci?&nIK z?G9EsE>}j(ojQJNGW1U~*LF-@>6^fJo^MXA4ccrkVX`MSUWL4TxV5HnUeGbSyd(R^ z#OH52UoFQa)+E@qSQcdMHTQT_kxzL)qJe(s`2&_48|P%SS)aGKL&c z^V2sXa>~!AzKuozrzXSaF_VR|c)t#CQ@mj`_ju^=n=Oy0BG25}>Y>hb)7z7&eJy}6 z_s8uU?{;Yg-Yle~A1(g)gG`~vi5d<5Sj9J{Yp$8rN{1&KU%Wbb=EopsG}ot z*3WSnEM20momvk0JAqKP?9IEmi~GyY*F`hA^7exXhIj$)*!Zgt&mO6Vc9QdOH1&-M z+Dq`P^jEe=?efQmSE8Td#$h+6_r44?MNNkUXFULZwr~7Cy|ER1O;f_ffiRfDgs9Q1 zSv|@{sJ#lhb@%XsaG_)NuJw!(J(s^X8yamNuS{fSTCVk}3* z*Br?wZ}M=Rk?h^6H-%fUPBF+Gal3z=5#_+}2I&;en<}2wxaM8g^&@i}#ny?*y|ZY$ zWrAq$)^v^PTx#G$9>LB0>TL!}qP!6MxyA2);3q0b;@drW$~nHwd3bsIrj)%P&UfMw zW3^egyV$aKMse!%_XEu^&^p*HHr!uWZ}vKXVH~ zMTB2O{uu%*!5RhyPh=;h`2O-+mHP`~8Gf(1D|g_Mzy$5|<|ihKwrAihUgT#PTJGfu zneLuviy7G;T8ocpzfCfp%hA3cd(Wr8(CuBwYS#PL2vne$k~;A6T5i(cwAxLq3wvHW zDvtaK>GkH>r6`BStCR73N5z`pAFAbAICg2i%ftBc-!JNOQ`vTs8ow)gDRBruXV^GZ zj^NRH|Cl2s4G?P=bd@o+8E;R9Ic*Z@PgL6?t#kPjrkVGechVs7lJ0NQCi8oFF5L;I zV!omn{*g_P2Jp0Luz2YE>%gC%TxR{z0W-%V$j5~esADlRG2~?TH`bF!Ps7pzOxS!3 zC%ilfYCDZzJ93yyn=DH*?L3E27wIcbYAEkDy^4x}&TJ`}q&)FJ9d|%!83&JwYo+ zDT0$&sI;v{a_{JJ<9ztpi;jlNk3@t+JpkwBa{B5)Gu)TE-q|&;ac?8)la9Z5zxVT# zj)%0^{@#VxiAjM{p3}Y$TVuA@5$}iVf>E82Nu7zgB8BrD^F~Rw#dlxB=PyrSrneVd zTRpYuv)?G@=ZU$rSH4#`wJvmnQ|6}*|3iC;G2o3J%#lsYYTh7@jr?xq6dWeD@lhLm zZtJh^lXz++AUBw;=WlZSyx0PGFh@w&dx~0=vcFbc2uPd0v$p$l&9bTB$Dbu<|7_X9 zL;pHYLag($CeIZFvN^whOtzk=c@lREtZ5Y1_-Q@q42LA>%s;5ERCTVY`ZyKq@bhLE zLPk8RXbxVySm3tyH^<`HjuguOO@jC2{P>^=Xdm00a#{QOiKUnV_S>3v@P zT9DvX^BFM26u10O<-1>F?I%5xYYzn<_!lt3#yte#%%)>OnGSU7ee^${H>}rNTK^EB z-u$fR=*!Pr{WB_lIVZDOb;xvEd$glDz$Z1iCqwGzXgykL@rQUvtWSMU3`)1&f!&-d zt0B!1+x)U7bn`T`AqhtFbxk2rM>j8e_L-xH(jAb+Ck?@cZ%g2>Pn<13Zt3~h8T)4k z+Hn5r%7^Cj)!%>Fc(Ae<_VSO9zk$YsXwz@atcX-c?2h|dZt0_rP2VIx6x$(!j z@8|7B={1$=fl5?Q_>}Glc&Jf%KkDu(j!KJnktM7T&j8OxDEVD_Ou3Ps~TG?Tw8`5jlM(3UsnUmr|z|1Jiqtq zy&gjH=EH5P(KXL*ThW#50}+rHD{w2a9c1|~>D|+(zIWEjDB1h1Irrs{cigx)df=e@ z?#SJ5d^gS2(`AKo61u{qH1>}}o40Q}yZ3suO%ER#@ysk;5b-uU@@$G@5*Y9td#aMD zO?CydIW6t&R7U~l{jNbbI^lV2*@f7RYaIY{0q z>Whb~K=a!D+XE|mPbYewRpWiw|A^C+W=4auX@avzb>j#U<`Z-dC0uv=S*CP9RLK_b zm;s2tfohNkCDS&~syYV!z{;MQJCGf}-_3|MBY=|e7zuk&(#6fO-)g+6V>{-Cl(eaL z?7tKU>`Pz{HMmh$X6EqREo^jI94&xl!WS$KRfXM&$e2K&Io+&YKtC^_33UCr| zDh`sYu4YE>XCUanoCifFT>QkCX}8#Oe4!+)i|`x=R<_`KcCoNVwH4sp)8c` za~;u%|L)iV;sLEw)RjdWP{z-xp`p17OERoiXe#KnupVWR0lu$kgHITc&`jT+$^hwE z^44D>>-yTBqt%UN(8cx3kaI|rrTfg&l2rD`w^$`B&+yOC+}b61?`6|G-5XaYI`lOe z*FZtR%LVg&Aep{K-#ESTS_a(cDYaMA{ALa65`ubz%8{l>Er zYjI2R_jm~_Xg*U7xELJ_1k!Gw23u~*0sS&Bm+_xIOkk>uKl!O}gmeghqEoyG);dY{ zeb931mSEm?b1I$~b|H2zt=@;i7H2miN$?V9Z35mzAI!Ut1s zjO_0K5_d9RO*X{^8>UJscHC*2 zdmO*+VYSOx^7TzJee|5YX9FsAsOGG#u8~h_>Oy`OT0xUHlmMGLZ7)7ssNCa1^eC-S z&HB55=Pnd|J+Qn$s~}jqBVLIoO9j170*v3>zCP#oj~I{!|5X0a)HF%sOuOnwqZ#<@ zou+8vM$~L`(lJyXPP3NXECRpkBiUhxRF&DWNYQs{=61RTDoi=?v)d||-fH~hAQ)!| zwGt+7^26s#cN~Zc9MY|_Z;~)QDE)V%ZK6y3op3YS9ud~dT76>+YM-uO9Kv||Hg6OF zS9dSwb+E$7<95_*2=D?KD3I$9eObAeHMV3@B4v(;H0_t{IC@XRF~AjldzxqJOzPgo zpgmWGRdto9jMuB&Y`^f-m@BBWPx31_j{dm@$nHwe@~7UzokN_=8Jp7>iIyjd>v zPPb}{%k)sC3{~-{kyGGZrqMvKnz@~LOF zl?$e-?4$|f>V-BnC*$}q9tDg;R0-7vO}{-PmtvSi$JVoY(2fi4&!$r%Io@{^eZmEWw71y(8xC5_zsIsPxq$F!Th(Dn;16$!_} zoG=|TlNi2JQg!_J(J@^{(23?~X+?z*OhXmkMraVssaqNL2?Z;*~{czFDOTu=VO zK4x_B!^cgH|ApluGcP+#LodrhtNRmSD|$*~Co?i+#5#9sd1EJCHR#w6m{|`$^vo!; zk?)h~g~}OKwQdOOCGs6VR_LycPuN5_amDf_$?AVe@g28OpgbfQqp3NR|9e5!yFqxI33LLFs4(q4*M0FKAn#g@!uYV{WxUe`_yEfuI+;ol1Wvm` z$bjmRk5WeD5Cc4O)nC!>iMhJxcw}ll^jjQ}Z6_n_0JMx^U$tEb~FuKG6tPPKIx z|EPS*RVnyuP-0njK`O_4-4pkfj^bkR;d>)fS!fUY)kN(Yy$bUabu-ZWn;5}0zI3@m zaQRO6tWV2tf}z9nt6tb+Z(pD4!WucBbIe%vQVJg-s~?UUady1D;Ul`MmIJts_gV0} zJqH|UY<$VIafbhwII)(tlfc*hGb<=c<6^I6mXI7PcVMzx{oH}Au7Nof15?R)9%Os} zW0=B5$Z>WVJMu>)+uGC1>)Gi}gP&rp>;N!501wIdLlkyAe;~#|w$el)LAQFG`a|`b zbza;whgXoFi$2|m*&UfGm#@3Dpqf@$b2bZvPNJmcS8>8*!6S)=K9T^ZObjx?VC&U) z67hjSC7K~|{diB-yWAH5D`?9~1W9n1($8|@4K$$8IDu~q*|8w?i)cn>q7{P~P@?O+ zo&j-ir;NadNIn~GIi$Bev{)FFUGO5P{?#hGS@QC?t|n8%J*N;{yur#3Q?ir2mD3x# zec~=i^iwRkjbM?%k~DyT%dFp{vl@cz>EG2?(RT6PPZg?8d^{fm-V*L1X4*UMUFbx% zA*Q?5<5cN7TF(N`jHi!TfQS1`C!s_Hsofa8gTrza4PykFLXk;%C1>nd)e9>8oj^1BIQzmd)P6UMT|5 zWOW61YUqjW7oVB@I8Vt$Zr=j!383Zi;lzm@u@2jW@zr2}LOwvpv~MxDe;D*s@Jtx> zL&c=C$Kx~7L;VNgrT{y@*odO&Z~6wuO`gNnW1*-dwhTx+`tbnRPNQTDD(%Tq*;`~5 z2QGZhWO%q#0c-4a>raJ&{*6FEX!M)>AF70gGN^di=7n}aP8`u^e)ZaFAMj-9`A46i zX&9_t%4Ew*vsqODI0(+fVHr^7r}b~pyv2(Rb;OX;sH{I!K2^!31W3e@_DLhjv_{Yo(satMgfmK?* zGwe@|Ir8Kqi zH!Y_!wHIeU75p{h6OQ1X;G?KfQxkWAE7M1_)?&~a`Kc3#sg*_dLyzK;&yYk9G-SQn zBB@hkj^@Q1lOArO0mG!%EHC6OqX_lyns8OSpN605khVRx3@vfBi!ct?r&(LV3iH@vCLu* za0HAhD?jO-#f6&3_G+wK0D4*}B{s3roW~Yq&(J8;ywgGKUL64XGTXDADE0!PpKsgL z_z%d-ZDY6I)VtmZ-L~uW=176ZMk+BqMExYO84Dx~6FtCubk%Hn?|5%C{Wuzo`wl4< zfWFx;ljqOeGSmUI5*J{8i|p?n{RuCMZ#Cs zVY+CKnh|9*+w*L<0J6>Qg$u40o zH2%a$aZ0JN4rC=62wvSBpHu)0Vey4AKxE&h25fPwFKc6;%9!gVXYu?~vgM#8cV*sV z%qHDjnBv^;I3?rJ1U~&%jYy1TuVqd|d?Fk+fbvpuw3$pv?rgV&I!N-DsA!RDe%NGI z8stlX4qw`)h&qhB6d#Z&e4I}>d;r^(@mZH^P z)|_rp-dRn?nq0;jz&({CnV{V5;R-1%paGjeZV2dh$*kGf;gt^@Z*O;sbA>bK+L|>#raLLf^xITj!gbm!`W}63>r~3? z|CPW!k$jVvNsqSXV@xOd#FkwW2D)OPHHmWILbCqH9J&=La5edxb!j{mTHU{=@bq@-h>Zf%NZuE(-t!jLo*idg-`@=rRQT^s|R@k3! zf3e;MMdgJ(r?L|t{p3Ufq)^T!qi0fPSyb8SWMpjM4rk}UpDXFqNP+vy%s)z6GKrgK zT7?|Hx`aI^Y4rHUquKJ9)u?-Plk6ffGd?J?zchP8eQoX1biu(ntgma^38U~mPB^hv zVucA(RC9K{VIlC6#@<4@P-#0S6rCZvFHB>pW+7h)x|>&{zH3+1pLMKVgFQPh=(rB* zb4f`b`ycHiLVthui^UG#4Q|rxvj)jj@0AYXoQL0N*q4*U<)gQ*=xll&)>3W=HHa8; zu=P+$8d~uxGOI!aI6EEe#0hhUa}|}lxF|zY-kInvL!+1)Vman)V(M_UM6~smVoUH( z{+a#{(#f5-DlWWJZJPHjf^>BejeCcG0*Sk828hD^e}URhe?7pTBrs*anXZBH!EBF=;z$&|5odX|{E zDjMhh1r(bxp9i0p%xCk6%2SQz>H|NnX>O=NiFR+)g{y%>5Gcg+9ClS*}KAw*Gwl3{g;Mbr@ z{G@HK4~?4$9dBNX$h5k4PC9&q%`F1$J;X4#7z# zIHG5``@w^>TjArp;|x}0wvPtjV+J_%&>Q$#CGa~0A}Z1;x-%dx$>-{LpY{?pF{GVr ze;b895p%)iv-Jw+>=oct^w)$1eL~Y5j<8Y!B?rEIy>zS^2(ydfS9ppqU&^8flTT!u zC2)rbdgTnc-bIYLM)1B?v=QN3#QbD`v^t zXNn|X8xnZXIHFs*@)x6`Ti+qD-jDW%bIX`v4{aMyIUPAGmnx=g@|(=dZ&RASj1M_Z z6ap&IL5}LPxr=Z~jfW)jq*uGD1xci}%$18p1B+$g?BcL01cpFD3B)IA$oU{;M_Fy^e=(3q=J@tiv z8}A$;JXcW`Z*I%6T-YXG)moH}(Dlp;ch{3It`x}pEr*8K%MVf)(=S~!E;RdY$@UEI zFL<#lQCNe!I*iTz9-oAjx^Y8G%|APz$?i#f0a~}xl|D;I`0a&9j4yYb2@#$brcxq5 zv6PAefRjSjT;fgCzknGkp=9f(gVGyK!XHF(ant)}wA8#=LM1y+W$z{<1UVirOc*x4W}xjCW*Yq>rSq-+>{TEr z5z+>3Wt&pIdq4_&m$iU`!#VSqnILV5mfS&cfqwX2_#PwQFPQzPESWkTRlR z6$=%QtZgKF9uMjHs z&-8viw%sI6I3L) z5)eYHkOHjH&9ybUI1Jyw)3p5}Mf7xLw4ycm*(u4w%icmxW8NH5k_ zulOxY#}?}i%Kq+-6tyln0y;IJm%wnJm})e#$CEN>Z=Q z)2H{S`HrDWz>liUyKCHuk~riuOR;$_(Epw*19k6fQx~U^DlOC~$!g@`-5H}#iyIv* zOtM3RhZr#>FyOwM4MLC@ouO`k+h6~xtVLE5*MyO1mT%;MPI zU9jROnqm0P5lzT&`mF3Nu-mHo1nUu*>t?8(WG}}Q;tSnyx(ma2oTPCHR8(!u96D6o zAlb&u202Wz=<12Q1Vc)mLgxW^^H=)T+tK6*5}0r^cuuR?_s{9YbiZ8;cnPKrPU|c` z=H|CI!(ppdHZxb`v4ItfaB)1-h z)jIbmIL{l+ZWX!qKsQgmndz>MKYtSw!d1BmKz)6x&cjj_g!d#nz?J?wPAu4_6Z0GiOD zTeySVf&*fp%#gBQQ}S%A*B4w32#d={*Is(5{sTlMt+xsm%CEM@EvV0^uRN3X(b$(E zJwTVgi%-y|k3W^?*G-$s$Tf6l1aK~QicTyxc}Fi{#u=r1E{k3gS<_=}Xvd?|AdCwL z32c4f>5ySxK#idBSY=PYEQ}Q$%^`ARKSDGXw)>k%S?I_On!686bq8Y0LQVs09=v>T zC92i?b8Dxk>W!zDrt)QiD{*^S*5M#7f77rWHUH@@$@r;e3JFVSlH_Qwta_hTZZLmQ&e)U@U zXnk=_P^q#54w_}+wVc)TGbK|}XCx_+V=;!98M7Q@FpFD_ zT!G!ibVzPWgxabI)=G4@7642LG@P({7l0X7>1Ob(*4M4UpwhG%4D*9s5>H!w#w{~D zE+%^3W+sJuu#)`OGL=%=EWGrB?c*HcC736GN}J);v5v4#TzETCU=VU<&H}*z0QF9p zXtf`boKj*$aAz4eZ$CswKm8V+VOx>eM`J9&>mNtOqgwAtDnjw0&sc z$lugQqeI*FoW5ofmgu2A&K_{TA@qk5_Sooz8+$zeC=JR`!!kxI&ZL8ND zWq|#*FLmrmR+!-$#<$_^F0*rHZ*K~EEUYR9mlPoth%Y)n?2lVt`-zxZUc7ruKaV6` zOt^DlR#0~t5dNm!NJ1JXDyY$l5QvW!y+pS`giz2WiV!jcc0F`5#+H~owc_=j5q?VF z!`Y2T0EZKse*sAMZW!8{V0IaJwt_mibg5$UbkME~1Jz@kngPAc1Dm}H_glq|;SBgw zpYp?Ef;P9ntt?;;qM>0grRfAngB3XPY#22)G~a7l612I@jSc}J8|;>*ueo)modIQw zd>ESFVpey$FfbkS#**uh{|ztcr>l(9yNvX+-z^C9XPM2EL*46NL)ji~KGD6}@fPjH zH@-OAOpkH~*N&wjx(#(xy93EbrBf??N@Q`UnfpQv;3V*v=+R1c?$-zGm8>-6o#q|}!m!zY)z`}L_{F2y35%;yl1!Mg{Z?2q zW0CJ+&u&@sf_!OQE8XD?cbXneWv`niN#QuyKz-|qVydaZtZA+VKyjS%ET>izFB{py zW6VMR(J93u=&R_}?-;8av%v3N_KzG|8Sq$taO80Va^;`&#Fogu{EdAQL!jR(C2mJL zME0Hd1mY&r%s{1gjuBolOF)NhyKxW`Zczba+Rv{p=DTcKA0xX6Km%0HRhUw0FGgpL zr3X+rH7l|*^V~YkUprm2jJaWnFz?wMPNoxr> zU0-KwRSknW_y^t}=lhPW9jh`^H%_6Y8gI6fJD@EEdVLQ|_Wh4l$;I_*Pj;;yn`A;x zg`zmOa}u-BtRy{POV_2)h=`7aZqJ0Jso4XLiWg`LGHMG;{!`&nuDM{Y!D}!fM#W5Z zc1o8AZfA9f{;*Zvh9n+?)$0Loob*!`XQF2eda0tJ)b}`prowFpc;r*8DCxSX$7uF~ZJPu+Ndpj{Jw7EoXKQ$-(kajiiCTbVkvn40|2eS&5&L!O8)%&G3J2 zg@~W=leEMAo~WFbWz*I7K+%@Nsft#OBh5t?_7(&Z&*?|p%IlUaMEIRTTP=xk3elQ> zIPw#H)5oK`j@(aA^3~_~3MuO$&fC)%Rh#nZnvtsmC+-1NCxM_{IOQcVS(~uyJmY^1 z>oneHee67@Mncl0pA+ko`S$8iSe1~$ZlQiHj0yX4J4p03rwI82-|H!I-CE{(ClzM6 zSsRK@eLzU$mt!ohO(2hXK-34AclcOr{TCA4%P$Y2%uuwl6RDB(kP7{uFM@RRF2o7$ z8`#J9+XB1i>?$vEmC@r?)>8v3CWmVTU0=@S4`Jzv_$A3sIwnIo?ZnEn1-7QB9<*r+ zw)6KabHASoCuG3n>$_mt<4VV`X}CFd(CsAB*#qH-;nOy5_I0de8I~CjHr)Alh-W{! z5pBCITmmO#CDmjSZCr*Epg&3$zkxk!r-}+H@gVC~K>LAf$Ay@R3U?rG zJnOBMroW<;G2ffmvI*rM2t$a2F%{vxISI{07kO6icdCN0merVPr(X}7+-9vl>m+VG z7K7N`m<+^k?TWJJ66g@KxCOUVk1t4HY^o_|&iSjg;-Gotf{YD|d5`c5l_ZicJ5 ztBV^4cWYUEEcD6EDii7oJUC|or`p&3kH@pS!JuwLoLp}Y3BrVZ5|Xtm4Tw4+5u?vb zihM1`bOnYi8Y`*{fAXl2Ne`m8FR9dU5$vpblBagkgzenUqoFkRH{AsP+h}!c#Uy`{ z7ZTwW7;++T02(fYs|lWHkO*@YkWj#75hx+au*B_MZBz|=W z{E)vtRN%{!L5bP!j-Chg$s}wToJ!%mtNB3hwkgu^qZlh2Hp&eHISIjxKIn@)jZ(bH zGD+~Pmk>+L*!SUZP}yz&Q^vc*QEdWP_Ts04;Po?3?D!xcauk($(%eJcOh3n#Osjkg zK$zNlY!qcEMiTMX6GJS4A6`UwpY3I*JKa?Z(MwP;!QViVoGJ&2z|V{{RRt*BbllIkFv`_OO&Y2~ z2n;sWOY?kUG&W&zp-6Z&Y@=211laAWGrdOv{V$z9jn+N%?SiB1a6nAV9khx6l8oXfA13A%Lh(x9Nu$H)d zqJ+^O)M>dh2!_g2$1X@$ zLmt}cc?>jub^x@+dp85lUz^Q&PDUmYRGcJozQHbKG5+GE zpUx^Q!R zU~7%j;gbQjssY;bfOb6$k6Rt^uT!$IyrkX0z}!P9?AeK?hY&*suDt#&#%Ml)Dq1K5 z?9xZyC3GZ@&ds{tPmNI9+m|~qn%$oRVD)Y2(K*nk4pek}q@v*gJ$hZH)oO}~4W6Hx z7EC(-W0;WqY7UNIi6g9sGLHweTKG;TA59e;=mHg!E|4YzY{{P=7>8X1A?C)etyXz1q3d=r z29e-tSNT`Vcf0&g2UdbspyZqBIm5iuSrvdSfnXnyCJZy2-n~#5p-Qk@1dkLI7o1Oe zJf^%TF&SpI`n{neaQ26D^jD?wuKy9gze8*HMTrQNCog(wT~B6Q z$0o~B5~P&zcO9vu?t_74vyd7L#%lmCXHsVb+$MF1nb9CeER~7{1tgepS{P+xwj3dN zxA44r1{OFg6URroLoFv>0C0E&Cj$>1t-cH?FHBmaTNZ(*?{D!*sw~|3Eq|UYtlyFT%l+^SED?f|!VQL=*Z~AK@1#BN+M!#O^-)W&?qB)(~izgOq z1Oj>&M_m01<_Mk8#(k*G4zFXV!Y%wTPUY9ae9UgMjsqymPCl%a6rTu+YR2Fsw)N;T zX-crN5m!=qbkTsG%2th)bEnrYYjl?UniFU8NJ}nax5VwsYREH&n&hUO4s>KCkwAHC zD^yFz90zPFON@udJ$QD)-{&bI8P7+Tg1g7sA1nSC%Bxt>2!3Yjc7(;xAWY!_tMw0qlSQO?%@d?rM<6Ft+Lh zUKw>wB>&5$(*i7t#WXaI>gCD4wmIq|T--0x-%RrUuG8hNgp zYEyX-5pj~;e7wvOQVfNrZU{pC=i8+05S<|Z7g`q@KzB&AAS+Rw^=VM9Rz1D7ccL9X zJ?kobt*+%d<0VIDj1(%GXL-mQTHHf;UpJ$gCVsNn_twwpDHwR z)6gq|^~n`*Q@!+)33WCLagsi8xWs3mkZym#;v~vqV8j}yxr~0@T5Ngzs@Y?u zsEbDnriL)t3neN*rJp4V}4m$gR3D?V9&|VE#ivadTpSn-Z6%WSw1M;8@Gh)N1O4d^?@a zm9U95`%>+lf9;y8Pl_{8$Br(%1UarP?qKzw( z7b`DGu}mE$n!#z6-**{yVoD{I6P*f|@OC{Q!z89?j0ISB{gl*5k6eA9GQTg)>d;k4 ze1!cv5pC_+&1f8Rhi76N7Pabw`W>0V)?1H!fUn0(Ae-e0J;4DtN_So&q zH4`B_eJuyrrE}%pMTk(x2=zAHhCjIGRd((z*gf=hyq*yws!3SC44i;Br~V3NKgg5~ z&`-&5KQA_q&P`YttwKh?0JvT3)aB;cg9 zmW7_DlVr-&Um#Ie$CPkLeG0pDVDW33p?@VFW}gbDd~>Prh`Y~C2pfxsa20mJ@)95| zS6|}?gTgA(TwxPe2SsaRm2e9?0O~JZ&^~*hHsQIELy*$;!c|=+7)^~qS!eP0rYk2} zwuzAIy8!!*rGmF^%33pcDQgSoK}f5`J1{EPqL~ypr@+58eRF@0-Y&`4(7;tlcKe5d z!oVV=;WnUVP68}}zm?Y3Km^x8$IF+5S!2iUTY+Bh96sp8xW=#!M)EzVv zSCiJ70eW6igGgRBYUK2K|3_XTA{t#xF7$P&OX+igxg?w>&+#YZ>8?Pi`ZR!>QL3ZuG$`vO76UtNRSpV>M$%COHG(rRO*akP z@j7TFQ$A7_3|j0s5bbAJiFBCTZsI5!$xZ)&MRcOBn)3}@L75Jkyn2ig=Ciqm^QxIL zuoAfMvD2GMW7`u%3)q|l;|`E~be#CO5dffN4Ad-?!@}GnU*vV=FN;bXOGob7KwqBl zdJ4^DY!D~k>L&-3UN#I?rqC0qn0K6Bx@y?{K!1Kwo7lF}AsSQ_M+&xu-@A+;T7b3` zxAB`D^IsrKCCF#nNd(6H6ifU5x6As)_2!YqA7_&pK%$E~aJdbyalc?PUDc%qMFHC} z9L2aKTXQ!UnuUffRAgIPoX|*v0xV(lZ2!GQSTMj4eKi(pv4Y^Ox8i}2OU`ON-Oi+w zKB9$bzWXtE)xG*k_<&e0x=hJ(`IqxgxQ14N*w7#d|G)-~cUR*tq2>O#O$_L4t^nN< zLNAYO*usluz%{Q)2*lNo87>LL9-$t{>8-L;BPm0o_cc25Ad2!(6*=L73`oJXq_%NRExL)w=52sOMy^ zR8|2Tr$fB+;_Odj=Jo-Mj)bPC_N(H>-pfa8^X`oI#)@Mk2DG#PqcECO{0?+tYCH$- zQbwk~JjKBf7gxcRaf+nn-SkKLp5-=d*2GOI6Ibr98EW)`?g7zC>@tXxsiqt-RSpjC zjuxvBA_&A=3*{R8=zkJe{yA^yidg#<$D!Otam_JCZT zDug#8V67{k%Wzr|T#v}b$QATobp714k2~R3&Jjd&${3u-IuPu?a$BaqB9~4`kF@)1 zTcmgb^ZD}fH?uzXaYC)Ej+md=u|<*^6^Y-Jo97J3z)iValIif$DEY>75t#N>pRxWg zub2GRo|Ud&z_#Y2QyIFe%#fzm48s(cPn3ZnB)I;%@qTo5DcAM*|3pQVLH}6zbw|>? zuf}3-E>nB(m*_X7wj6%FK)tlx=ecAbI#5aTBZ*g7npl2bG4tMM&*Bj)vEon6M!mDsA|o56(^l?5>n8g)qAzU z{w?BqSi$&b3xt?D(>v1ug*wE8t#qF=v?^jxd{^rw@FU;uvZ}M$Z7_z$@t=x7B=eIa z0gq|1+*svX?OO#0X2+uBQuk(nrw2v!TBbzu?<+tYF&#Dfv&aNnWl~2-{O`1PY@3GD zr&GpYx*x-&OtZX`{JCn*1TtKWm_6y%=y=rVjU;8XiKdQ`lmqtABEzkKm~J^#p_Kmx zhd$FLWYXcHJ~;7gv{GdOG@tqQ*(lUtgR>rgxTx1JIX49cHmV!}Z1F1RzU)p0uk83h zOy|I#uSJcq4p+nYET$^W%vq)0zq*efO;S!GG|E=dm-lz%rkllv-)3Zk1N~GlKwsa- zx$QTPWrCo!LSEi2iRod18!#px)45cxLN^;_LRK<7X&`eDz*uHxb!egKB7&7=c1?Xe zV4d6)Jr)l>2-%6mTW9xEiqvq13@wS2t$iirc<1`CvSdcS%K4IG@6F|!m@Ct@Dosof zGEoVLO$12Bc<(J@Cd61WVKAlt$JLQDNN1-u;?V)+wSLUrPS|BFHLTGB(P3@=uIge6 zvTjbP#G7+Cc|gkQQ_4f7Zk|yldntJi3{^}WVp=a+_By)}nVu%|dX0!-x><0c{wYir zDmY2ia=rK5{C8R*@H8mWrv~q76Q}zC z&Xm**;#oaN-tapz7c#|?z(5Hq%SKJj>(AU5IHcIZQPN6TIkxHTX@0NhAG@d-YZmB` z%8xnrIs2$|3ad;&P9crm>-F(`=eq??%V3~mcq*$GcpMwqTOCE|T;v2#t zU8tr1%+2#Sn@@06vMnm9^riD7ZjLgrm|7?yWQWq^izK*K!u$8d-7#BD5C(J9pCYMe z+p+g4ltL2}RlrQK;ELMcszd*mC1{*^-VGu=ZiSpISLNa8nOn3Bw zvt7{IvBh`0v)cT{n0xc9m+rT;K|xDX$t$vb6|Wv&c+u4xhq*=cs0B*I;acrj zj9=)#z~O$C4GT|H)i>A>O0sec^;FIxnxEa+(50YrE&yCeq) zLylh2+iE;*X$f2#gJ4IoCIs%jJNn1%ORr*QqY|Z@nc8lm3xjEyE#dNz@VAi zWdWW$a?i8T5b}PPdR9e%WKaY}37MX)<@$%rg{miB-EM;tTpm!Dmdf|PFD`Goy0a1JV6UJt^P>b^D=g1IO0Zvy*W`jL`!)08+9O~N zf&V>e-ePf|AbzHW4d#^mDZzqh=&mxpurBw;68Z=HKRgpfx<9%0VX6QKHs;hIzNU2K zV*`Pu@OR*zELU*lGTGCMFsLY@G70f(0}yU%5TFL#y=Vh#MYBJxhuj`nSvdf=vR+_X zsZB8_3h|Jm1>dd6)?A4+b<{Ab#5F_mXNVRbLGav12Xs@kcaV6_7Bru^#Fa7)3d<}f z_8sP)g7Fi>zN`_MezV?UHZ_L|4#F&z=RRxbwxFZcMmcR{tE8685GA&+gHSHYAN={9 zGVE3I)QsU?)aDcHxFTZP^_|dT-%E!ez=Ajjtza;nk+s_hrv}&VQA%;~X#DR?^XDKq z=MY(F6hZTKnR1Uw>t@EnB6Y#{nowlg0xo6;bPKUH6(+>>D<@Vwek!9NjS-YtkUe|( zQouPftaKa9giT@53G>SXnL7oyuc|ZrCHb?ABzA$|Rv3ijatf7WIfS1fcsj}qGA;Ci z{s5Tl46ZF47>$2Ys|kI!A%DEPZ+Cd>*IY?L$q z!`XV8e}xPsdr6>`W5c|}Y?BGq9OaBCnkBi!zev#*I0|k>rQYuOS&!(>jy|eTybv zq=R--h%h(l=FB#?)oF%=zL+7WT+s?RBXM`h zTW-`>Vp}fUO+Q=xL7s@)!(nvv5o9ci1L$(_v#J2OM4YtGS58=7qkgQ@E6UT(@~*8m z-N=6y`_f}t@C-6YQK`KZqoGBk;m!>hcUB-J00=V1-oaILsKA{yS*=&EY>I>h4PFF` zJ9}xaMq^~a+83CaJiA(T!(AC&-dV5^YdJz}SCmHtdRBmv_g&~+!u)>u6L&3QxJh=> z$;8~nBzKfW(7EzBYmSwt!j zi1G^hNbP#DK{O1TdA{{%#({mEB(!S8mYa5_GE2j%EG~aUQ%qYxDd(+FdrLd1L_$0~ zNfr)b&LN<3G{35#RFg-_8dQT?oRY0A7xvC5a>|wIw=5=5vGX>D;COLBml|9TOn|BI zP3i$MsBh`j6QZG|p!BLRR4ej_iss&Qc{y$>?NXhPWTqyqFV=n9!{#+DDua(YB{dja zw5cCnO`8WT33h^0h|moJn(mT}-uH&HFC$W?_;HXD=m*2CoHQ#%yZZk4X>c%JPt@^;G7pt5rqLTg;_nwt%y0x4*lm41sZ zuRR%2T(M?WkGaUV^;p2kp4b5qPP)Gy+|7ue@^y!2$wFjxmBoqicq{!4Ipq={$mPx* z2ui6_fvZkWA&cU0Bm*OlN z=o=Ijzp1$ro!v<6p47}y-sC0JTvDNhZcJI`Y!21hU&U`}>ynbwR(1p1-IVp<_N`8y zv9+(_%ZcveID%Z)NL)MNk6zuJUwQBWS8w7)q(RtfL~TG^=-{G2FUjOZe=4Y`dejTh zx?iTeJ^SNqj=FE;miXQiGjpN?i{;AIvR9cu4?TaPb<*F^V58{es-}pQ4Y$onfi%2F zYy+N`sqN&LJ$$-$*Rb^?1uhJ!`aR;qy0&KKAiAg@S^xsDPgw2?VjU0>0nt@rn=C5M zmkR89l|RImoP#T4-*EH}a>o;u97aZkfDNYE(vnfzYzekEap6rE((gZCzc3_N{6beq z0z%p~CEXM^s$}-nM#!P7+o=U81Zzzq=!$5y{mWQ9Y2W#}@E{mF6*%(Ci4LS7=9W@L zAUg}w(@s}^4Bb)cvm=Nmp@)GHuZOOjFsLsyWJ|)mRGLLIPPV7U+kN~Ta!=&+Kp!_) z?o3)_IMKe^LrAOPtdyeyzq=$fxP|lFANIc`+1ff~n({Q662R0)1JN-kJfUq;MjTUL zK4DzJImnN6%JeKt`;;$!7=ce*(Qt(rPN-)dsmN*^qT?(oBEcyJr0#!*t0|& z?H}*R@PNKAF|>FTSOv z*kCBB(0Ja8;pe$>e}zy@Fm{1hGJF`$BiJGCERE5YwZpa$**D1uq{sq*JIu*gJ8V41pl2Yii;;E*~u)}K5XD4qP|?XG(~PA2{b z;Qs=)Y-qH(_1J?ix=_ zlb;Qx}=db$1Tmj&rs2zCdVqd|$*scIJ>Sy5f%PT)+y+9;ywAfbArAq-z zs7J7=*%im8h~mU9PX&tHibd`O76`+6R!KiY2|D+P+}2=Jy1xKFQ-$$j)WzCi3qwU`d_5LvwBfc1AoS!ztjn_$tjwb zW@3d=SBdT9)W|1q{CcPPQ`(THLOod_Nu@6YCk~+K^!Uhvi3zQJL7NQL{j&+Vd9WMQ zA)=Nk0o~~T);O>wHt^bb-U2YJy%BN-hd42dgH(m=x$@ZRXX z$tr>QEuyvoCHXkevfV8b9bGXa>4Ak4Wg4lLmJda+ihTh+uqqAjvalg%MLv>Z_oomwbUIS8PL)QSFmhgeIByf%D;i$Xop{T-b8s9(jXyoX zpp*dHQQ3LNAt?^#zUj@gt2;l3p#ie5VJ2?1b?5LMOQvyFUI35XNypWKQFQ#P$1dg9 zF$)_VNC+1?D1h9W{u!J2>Lsh=?l%z?Y^7CZ(Vu@@i;r!vY*KTftC_~^SetwGQ8ejm zVeE~Mm*ese)t82$KfaCqN}*(q{XAgg4qwaHteh4+ie$37$z`Kj?B6rO36B=-K(5H!D*TFJ#~G z@@$-&9N5|Pqs*HB!RDqi2|Q7z`^NU>Us(I%JkdkI1~I3fjM@gJE`CG;_Az2a*~<|= z_^C;&AW=Ovwgb9P#rBN99z665B4~y3K3}6_u|rhYq@FK5EK&i+4}iRl4qt|66a>x8 z>E*7t_j7t65VQPhJrYQh{ikpKX7^h<_+o6x&b(ptowQHWG?;%u5@9%S_<%nC8_;`! zNcEL!)Vh^83wxWhC##YIjy72_nB~2h0ZGPn43>W&5u(KqSm#04z>s?P`S$Y^i`L!75G2ece z;r|Uv07liIC%SqypB0n~ zI4~}^U0;urYTqUqXq|uVq*vYWQduY6L?v(dfwUo{RdSn!jva_S zp1M(~j4|~rrzgg(AtwX-?sLvcsApFn0GvnLEeo2h&ZE;r6y)@cLJqRnjqZIt&4J9Nx zRd&mQkV`ppWoyt^?y)xE6x%ZGsv?bLl`XQa(X9naROX`Ab z>l&)ys(N`ya4k}79=7g|bH5q*?lK1kTeb=dS!+CitNOE&kbyb*>lT0gO46fqE9^e8 zg?9ZLaNlTf?r#$R3`)mHh*)B2MFeE!! z7%5ummdAiw|Ka}auruv=+Yz#7qfYG;O|UK1cS4Z~#BLR=MZZ*EC^QND+=W>J!HJ%8 zL&!(GL#<7-_6uJ?ndm6hIH>mJoxk1%!j$Qx(-qBVx6clb;SfRkC8!2jv(p5P6=yHA z3&sa^({yZ9_myL4);lPe(|%2s3jAvAh~mJ|8-r;Q7L1_#c?aU{NE1zQlDmFD+}hA$ zzpv|Q$t-esh(M6~rf6|*t``OrJ0OD%50K2u$8D(6(!Hbc@za71ftx&1ez4JA(-BIk4Z#FP&4koo%Pw(2hlK0~L z+FstXXpf+0F%z0VQXTFJp^A**+3YQ9hC%y-e%ak-eR&?*0Ky&zW-Ea4U|*>Dge8R| z1LhQ!)kF-HGM)g|ke?PA&xGZV5xxHNlVflBPjiVs-@=baKM*RQw)esGXhiDSTyqTr zxpjVFp~{dV6y!1&nIdwNF3mXD%*o&?vk)pQ=mRe!n+4{!jBb{pS0vST#6l8Il!9SR zzj*yE{n+?1^fV=mLsEG@xUgQCUs>m3VS0FML@lzX>L)zSeT#<27a%QYJyYrdp-^m@sDY*#T6&rB zQmUR8m#bO_UKLzO+&5Delc2lI(ZZBH6pg(=$wvgNlU}~v{T>3tq^y95TMjGCy$PQe z%+{zzJeO+HU%jxH&2KZaQq;12jqke$fGqREvl6k7jPfrhH_zBj;Q1xUGa@kXTaccE zyFhvGHm;x;8F&>0lE&bQULFyD?u6;jb^2jDS_tE3e)NiuCS~a-eL0K&Lixcrh`Q!6 zT9hjwOt|*F=a`(kbp-$nGlGzyVe~jJ>)mUnhy@vzcx8=ikC*(0#&6B`()?sXmD$cy zO7w;K&mclvF$Z}|5>EKO+tfF%D3i}i<(a>s!DfMb=dyPmAN7_jX$3tw`v_2h=aE;P z<}{fCJo?S5?w=0n3>AT0!AJ{$-wLzpq#t>P`7liP)N!Z%1)JiEdX=?_LIhE)A45tu z9qxA{ETSl7+Y!CSjmp}PLS)z(m|AxevSvq~_2oieC$lu6sy`N-TL)c^(Rf)UqVyLq zUW=9gNH8JK>lf7`~tqZ(N^|7B?KFt#4`s2cHc+t z1ZIR2a1QbXiLJOcfW>v{{5M{-q1>mSh~LrIveTu$&7k$MTNW7Zp}?zu2k2Kv`DGKzO{J-`J!;LSy(&|3oYbt{vy z4;*yWS^9P6AV`kU)pw1{Dk^TXoFDKE{kt%!h?eOQ5W4PtfvCTpKaHUXWGCa^hr%o* z!;Ww90}Ys^3VnjC=g)&&!@V+}u~p2YzTYxUYqwo_Dl|>!1Iw#s=bDcBuIclb9v{%p zi13axlPhWakXDiWh*KTE1N)E?-@R|ko~14*v1u8hZ#pRWje%81;YJG@-#BH0CdZk~ z3cWjWDkCp1l4?+trK4x3F$Xn4fO(h44q{t36l4=^e_Cv4d;SG_Wr8%P(8VFw<#FX% ze`je9f;vBsxt&AXor08X=}VE4hs1%js_N1(Vjwc+YZ{i5VfO8)OAh)%@Im2%4na!G zFoXUeydCYyrA^A#^)-Owq2IlgWfi3;qV2k`#P1ZW`I`_!bE;KA8|g5l&M&Yhv&_Gc zJ$sMKP3XpZR%ev|`+LpBZUKbngC1Wkukh#{vAHh1@vWc`2Gy+~!2)!<{LvbooBJhNaldYCqYB0lb-JJoGo_-^wfb{ z_e~{hMF?io{lSsD_LkW+su?TkVG4!-%PNluV3l&m*IMXvAIe$ou~}WJ@;6{L``^Cb zK+Z)D=!xs({O}}_Uc41FF-rJ-+P=JukCu-_Fg&kKZ&NGgOXOFJvL;&&%g8eq9<5!d zIj8q$C?ey?YbE3x42&cNwSw^kbe=~BIXw_oUwKIR9`R8mK8hEIOa4Yh&r~J8%bI!8 z`$UDwc#Q62q3So=&u{Ir&FLCb^BTKA(!TT)EF`PY(0NisKGC_x=(lzYJaAeeOik8? zRHHMd`-NOnnC-)}a&QlNl8SKOYJlG1EqOv-xq$Pbu6b&j3}?=o(p!P#F>P{2Zf&LLT;vatJ8fa&h7u&=xqk_Fi;XR#`sHaKxN3FV}D-*k*jR1dVyR4B8W%dc33XF9pSX67rZj#=6Qg=>xq zSJOd_+AKaf}YfS92x77-jY$=*Y5cI zLU@&c>^j)ktt0FNOsk{29VLa3@U%tG2cKPtR?3Fqo}woD!wI4m^bNm&TtHAguyVze z1ie>i;-Yk8G)}$+IsHyQ+<^^;)g}_54GK_9)JlS*T>QHZv@`>L6f)nruWv%PaWbAC0o zu!B`GLfKL_ca~RNN#FilPf^y=wxAGyzZweGJjJ{yu`+oc=qw2)dQ7kGMlPOfx70h} z7!&?ZE&I!!Xq~5cV3Ndxp=ZuwB$I+w%g1;>5r+TBa`p!AfDGAd**ou2CiS z_AIs=di%DL4>xz^d$o0@pSN0Wez=_|d1u->f=baJiN^i488fKYd9C{k0Gzgo&Q3jEy8nn04c{O|_{%UzJo!BQ zP@ZLzmEJChBymJ~eTa7QwgcRypn2&)t)hIj#ZKxi#0-0*nSFgiq(n_~;UbM%2n5e3 zjiBjo(4}$hS*h z@r1S3)bB>BN;m7HEPcW9)TWP1#)gtAo6b;DkdKmC897r66^0A#KVP$jTmjBZ_NTIl zVnN$>pSr#McG&-bm2+KgpN(lm|l zCBkG6l~`$Sc<`KTi%HHyDkNfR{QD5c!uIICV^M_nMhiR7=Y4*$=tk7Cu_FJ2+86)06lvv4(7D)J=Bs8{mh5E?RHrlCX1PkJ?j} z^OIDB&5V~LfG>2_oQ7f__x_LD*fB%LaK?m+0rk(SWN^Eo*VzlmqMX1R+n-mq<(#)# zk)xRW^d{}>zZ|_gt*$0ioZCUsH7N=C;;TLNeeylKby8m^)>(Zf=p0Smoycx!lDsq; z=6i8hG4^ZWMHe)zzypFOjbGj8cLIH*3gf>X%sak?O{+o6s{j7TS9S@HBX8kusfU8k zlk$e!vut7-pl@TfKOBc1t?$@1%~f)zdF86V0spMob!|J)rAq8OT<`0KJOg8PyMBq) ze4CWKoMFbX1B{9bUZ=yv0W8iS|C$i3=MJ6l`aZd!t^=Bs@EIq%#e!KyR^GZ%p-v1X zXt5L=m@R@nR&*jvS(4D9VF$YuR!5&e-#yG-RE(_B?(|SK7C;DO_A|SJ>4BbJKi|6Tyc3H^Ph|0+ahLwLNKs#2RLjjF_Ce!zZ@?Vq>tL`~{8kl_~W z3$d2EW@(kszFD;wME1h&jMW(_{Twd^%Ckouwm4(VF11kcl;EUwlDa?qkbkGk%O**s zqE@5$8`yr>+UMA%F6i1N1q!pA{r)`uUg-3eU(4X*h~a_nQ{7gs)gG=Tk}q1Yc2Fw?XEE1#;CdTQR&q(rso zttu<d~5DiGH>qERLVq_QvhavpN(sr#S~C7z*dW&61bZjn8->|IS+=b;Uj7bS%{I8G0@; zIgJ~`OFt1`kADgCI8JF9TTD;El~^m3!`-;;hD-@PlU@T@4fF8f2cQDKv0nDzbPe8P z(~rJX+tF-?(&A%9=54nVwaIIa`9*pj(sc_XHeSl3n}MR6|I@J=5D|gI@1_ zz_%-${rmb$gzuVkB6)c#Q`=vCkG0%Ck0&@FGu#&!Zqy|`bzLuvoPZ@SO)vH8HT*n! z&%Y}?XO`H>pp6F@--4UB$r7G}+iXywF^Kj4Q*c&upceB~f&Y-}Yv=j7H#H%O_!UB4 z?$vX1YIPU5b4EnWf$19S)rr@Q5bkW(S5M(;aU(1Fp**vdTQJ!?uli7s?G$gP;X8yX ztdjJjLHd|I!J63B{Z_@$xdgfnjNpDTt~c0|LScNQ+EVt&lR+8(af3sLuIE7~xM@?) zQbTs&wjxe00t7B+4GPYJSJ_?w)vagm(lG*(TIHv8cFPyGzfEkWS+a<-*0J{m#rMA* zlxBo<|Hwz1q=6)0-QE`)t=p{h200^fL-IpKXK?lR@Z8avt$%> zVUJ$YpJ-bybDN$V5NBwrEuNn5vK7#YihfqQUtf(y!ZOM|W_)2mpE(cHzV6}u2z`Q>goN11seJ6QZMxC#JTk)WqN^75Lii*@mn;KI=PY+!3o6(0#!kiqVJ=-mp7+CAPcgH&Vv7)XWh#~mNld9rLznv;kyx1$vR8ywWrHG1h`K4zo3Uu zdj*GX`^9VF`=Rtx{tZ27=iHpHi1A^61v8zhN1oEgcdl>$1MGLw))fpm~aDE7#74$ys69$FrqB~7U*@iB{6Zbm zWCj4iYwcn)ql*NvM9;@U=HoVCve zODkod20)v489bbw$qt?Fo}}qjw2ky~kxa1asziCkrM6@zx;Gs*Fk3SOP54Il5k@K+ zB4$5u%*@Z-jXoaIKR?&Kl5!(~)&|AvE8{6$IptDOO@rdq2X-k@@^OR`5IK79&jUQx znuNwV3w$Nm0BAXze!Vcf#l)2HPRbxb#{xI+DS9A`oIjey1%(lVEjtsI>u)D^IzigW zozCr&nVMng=zBT%0>k=hVPEYzTZTKVFK#R9Ez0@^s|_$NY`%J`O$rV?Bd()r)|b53 zmsZaZyFpZXtC>Bj^Iu0p^F#O2nWBDo<%8=pYLcT8z^Dwt!P9w1u){)8dB0w`dm9L z8q9RRIY_aeMXko4dnYA!reC;0aZj`IX|wO%`e4puwjHkt^2eX$a?iD4N3Q$={P2Gt zF#Z||HRrR=UB&B9%ycq$ydz$^Qt-_X`7z*si5>CBNLbH^AlT7PIFdnKQ=k)<-N~@ctM%lP{Bj2)|52mdJtT7A&Osi zF!io~m^K#sq($vyo?YwLhK9$Sx0wH$?i$cupY=KMs~#_%<*b=nw*_S}Ve`;w?cGiM zqtCbIjg;hf0W9hY=?o~Hk-Wlwi_K|9<9tNAjAGNutfU}nhhZ>-DamND_YEC~@Esd% zxzPeDR;77!jAgv?85$SPV5&9KZ#ZTIf?=R8AuL84EgqG$SRZNIRf;-`Qivu176Xq)Kp)Lk7N4ROr8Mq$KhNORh*1ClVcDmww2O!yO0tT{sc;4v+5C<&ZHXm-SHLUi{w?(_(FaMGv6jx4ubzF))AKd{S# z-%38xcJT$B9r|2gXn9V0;=cK_QJ%!nBAfa3$&>$IK{C3VbNrL<)DnpXJweG!(Y4G5m_2l{ zEb8Z#=OHy_^M`Vd$_4QrB~g(1MadF~zzy;!Tdt$FOXyT1-Ix1o^ArN79z)NtO#ZBP zmX>VdwLgA}*^g+^Che?fJaUa;ra)r7D1Gnq4kQM*Qgx4XSo2#&v@7$9lU~N{9@V$Pzx38UN`YsX?GzAlj|NYIW zu@}ETd{fppK-G{bxy*((CHc=N`SdQ{hsWu5p6o~?A&2lI9s8DS=b6M@h_l255>-4T zd&$`G>8DK&UI&g_&9PEcBlv00V$YY^5ssMftyG~MvJjYliwE>$Nq2lLx6;z6%NT=m8XAsS&giW5j#si&WB?{?$VKlGy5uj7kP zQtxq^@~c(&qLPJn^@#ZIjYk>mM$TCN&<@)I5rd@Fu7=)j;T?c^lz~k852EtFwxD&~ zE&CFUi^&vZfE%sH&~mLzTQ#O0AGqw;w#&|PvEIQYlps%*W+IkqLR!}~{j}x4O}V1M z;yL_o;~+d24t?MRXyx-dd;P@0sY1wzF*{3r*|Ecmx<9k=$U!A@MBRz3oUkMD_FldT z#^q(43Lh%(xNLlH=5;rB!KY8nEmG6=D#O>`gUDma?#$g+jV%%Y%A`9m1~R8a!=%>* zDEQ?UMO~WKAOc}Q@xCZNcQmr75)cf{@{pjkwv)A9QF6c6;S5%z?wYy+M=^3scfx^H`M+y;lDAvHoCFVk z;!_66XKcClPkCbDtorTiCSbIyt8K7gDHZu|Ny9Fr<=s>Pia)QNes1VeZGOHXGH>V_ zVUcnroc?k5)iCeZbv7KGyr@A7ZbU%P>!s|J;a(t=yOLQR5)iGqxc2FRZx3xHvxxe?>L+8={jno5X`w(mIqBu zVqz3L7(q&!Yp+fjzP@9_dTwEqt!{obO4#)l`S)*ZK~%eL`3J|gNMz^uuxpn>9323) zAO2gDc>VemFr4XgOQ5bC{d4&o9W`&by`+eP-pveE_)4FwTae@9{jZ zdZc|Wb{HSJJyYlzrq?ztRH0M@13NuJuzEBj)S#5CWd{5aggCT(3KfOKuC&|-zvYv+ z@Xoj4D+&R-lYsX~C)=A%k_y7TMEmI2CTPW^%uJlA@B1p}gBt+KBt>&8cMkswi_ASw z@R*&~o|)|Wqs{lvwd*RYRP61F_C*!{-|7+0zWW8QoB6lMuxOd;xpP(e$Y%c%HAgci zrDL22c7C#Pu#BnZg#v+OHzj-SkC(s|s@J-r#S%aLsk5?(T6&G`)lr{ogm8~GaP!l) zfS&z*H)8qWv%{3+#TaA;j8bA}+SJ)?l68Kw8)1&H`8OwM!;c5xp=b`fV33npVx{qO zi4WoUw<)yg>1w7M5HEOAMVz;tox@4_cH>CUwD)E}5phTkUiXAThX{j;K>-aou0i@|>VG4?haF8f$=kK@~5 zqc*qS+ZKQJ9md@(qxuz+A{Q~dtpcS)~%6E$nc)6HFi9z z_c)kkE?CpPh(V5mkNdb6THlis129J@GP7K>u0rP@1YSf)U@ABIjc}u{?bgl8k96zn zUl}P2l=45!qtO~7};6SIKH)y+={E&a)9D$TGoFn9u7+7R+d8^ z-(g-zsKQS!E=XZJuj5FjE|iuT%t)5HVE0u(bLoW}0@iyPhSFp$&R1v?v-)Juw*E$`}bqE#>} zJ@7X3q!IjG*fZX3-fy$+v6EKOH-K@U{rUK?!0o;sM02)X-K7G5rS44A32Ptu=_6tb zvafU3D?OC4BKnNgx$5b+3`$tiA8ngAI##{h9mZjZ@eTTg;J(04le9X|XavmF1GV%p zrsRzfUxeDa#n9Iq*EceAvn3dX0d6Q7z}Cm$qU72PJQA)#PZ2>=N-)~Iih_r`f$J}hMz$S&MooXYXc<`WS_z5u-$!3r`x|Dk0d)QA-=qpWmfQ6 z5d^22`CRB?T!bZp(HXw_C@rr%-|CQS>4ox1 zgLWNR_6yj85V|!ideln<3_UOF<4y-2SH%q_vu90NX-Q+?kH+zhL4kB~ySFd>m8G7S za+=rDa^l20sj(9?=fcH@?rD3EZ}Mss7Huy7Xw#sty5V`vBU&4LuDi_zf%qgLpuVt2 zbfQk-#xO(Lu>)Tr77nD@v9YCKv#S841D!QvdSHwjJNvzU!j6(c=h04*zPgHygN32@ zv`Tm^E;#+snTliAx2#!%p2;mJ4>#H(sA7HiUoKkDjFC~*`pK@&IJx0PY1Cno#rL}` z_JI|6cfbF!j%EwsGXEEjxH-)Eo3<#fCICY;;bX`LUQ z*N@N5FIv<%dXXV$0S$(k&60`D99&J#TNHFzbV*v5*a4TUjDLeSp-&UA8WlzG$IIx0 zHwK8oF0M@+=%DRb-+SSWJ;F!#vA{ZES~hG}_oXAJU~Pg0KyB})ipf>xOtN~B?3z`yk z)l#T1X8E<&Y>eK(-ncATn`eE`OFO&xq__q4YQs@#r_u^K-k(%+a1_Gv9lb;d2FQ;t z|6F+fL%nN~%%=RNJPU+E?!L;w8qyr;Hd(#e=mro}puB&yzDOEKDOY`q+rx_X{K*u# zXrWLKEq+%nk6$sMUWYxpi$rVp9w!@h7(y9}`Zfo@N+~#Z%_m?gxNZR@_T9SwfDSVw z9?ki_9t&!(pV871H+T%b_H0dKyV1cFgrDXW*jG1SHT92kX<_qpO6cVK;!X}XtKR_Z zLIynK!7h)={@8RJ_1=3!`O+r(Q=z`nB+AimYCJxAW&wPfVAb@bt`i(UwWDO2ftkjz zmu)vuXWA*J%e`cKzbj1U4bb<^xuvoX@4aXH!9VjMM~e9l(T(y6i?(?wfg;;^D39a! zVMyG+)mqo8mG?ST-!jgz_Uee479!4i_B#g89qejTjp8*^$QF2^X;#9K77I8?_%H;U zdemCIB}nMHW{@{LzCt=K=mPeAsJaVczt5^=;1Y3i`#xN1uqSsY^>p>SElJg}DEZm% zKjiJX#<~O;KL0A2DJ9{e(oZ;4Y#-tu?O9id{w6>D1jB=9R*HkJrm=gxTt)ML*TgbG+{rKCM#clM8$uy1JiWcNp^6;h^KHOqAsD04;}iO>OP)?|6ezj^uB z?kgWPP&-{g8YQx_!ZFu0Izc>%$zP>|3kL8LU;jt*;r!)nKcYkoVlMC6Sw*wD=u?Ha nMP(;Q*K&65@g-=GU;?od#er$MelbGS6e3gq?)X&o-@E?@kfs!O literal 0 HcmV?d00001 diff --git a/B4A/Files/anterior.jpg b/B4A/Files/anterior.jpg new file mode 100644 index 0000000000000000000000000000000000000000..48e56e42dd1fbae050bea72ec09ddffadcc03001 GIT binary patch literal 19358 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 literal 0 HcmV?d00001 diff --git a/B4A/Files/bus-ar.png b/B4A/Files/bus-ar.png new file mode 100644 index 0000000000000000000000000000000000000000..60678c7a69fe1d5c375db50128645761f535dee6 GIT binary patch literal 31189 zcmX_n2RzjOAOG2k%E(c+jOfh1h3vg4*)tr9tRs766b{GPM0U2EarTPbA$w$tlTBpL z|L6Ms|NnbDdSraO-mmv-JYUcE>;3vfKG#;cb@TpB5D0WjO;u4B1R}%&|N6;EfuDd+ z1TBF7?s+H~dAxM7^YF5Q*@EPtF4neeYED-6wz{@fP#-s}tt1HK8w&!ESJzKsK+aB= zVb~8GZZlXjEW<=Uo*-4ZU`-*J<}|Kx84 za}t3-9^Jo)5?&^sXd5j_SVgW#Yw)d@;Jotf3)*R3Z=PzI4w@Pdo-4l0{X5mUZf~bO zP;Cf8Qi4E3WK5ZoA}Cay|3fgGRkuWd!@p=!>1U~|>16f9byj@P7v%aBYn#7saygNz z2nZyr=rh=%Ks#=-^1R%jI?QNpF7DTjx@dc!YCLJdO%1uh0P6D-_&~?-je1m3-Iv)2$F`eHkFiMK$ z->xQfC20`dtYzbl$D%kfBr}g<@Ukb4-C2cQvy0XDu4(E@I^Sdb)`oViC9TwOq3Yu@ zR%&~CoZ(_wUkmDad$LK^lZBnkvueW92JYcqC>s<}_0Bf3>MSwpdEL)}+da#kZ>`Ov zXq!{7gi0q$`^o=_3ugEz7v;oWC-6g3n63Yx>%Hl0uyc|ma&;1=2`5;CwsjX;&{!+M$7{3|v7zQ09Lxc&;AJT8m zn?Amz$nnNfK?i15-XmN%b@!ig&td+W<*U(OI?os~m>(jO8D8@5JhB`2eRnE0ZYzr< z0JYx{&iY!R7|U8KkW+Ra&cL(n;D&rFOx{EHe}5mxr1J#)D_q1enn8j7=aj8RGNPIn zqy}VvCCtAcIWTAflca7GeS&2$wbo1|Wa8MPh_sfJyGw*u(Us#nP2P!S9*n6(RmpuX zlm9!Um1vg?#2N&JJqljcxNsb5pTsBsLr{_mWl_DP~?%#H@D_4y2#nLpZ$nX5$ zAGEC)S>N>>7fa)Gq{N8eUAtJyg!pf|K7d;j_DQ`kQcw1-?Wt9x75-OLZsK(niqQ&> znFpO0k~OC$LDawNbKf!HBQ5?e&c;E?M3@>ZuB|rDApT)~$*uc24L*7~*n3`1jMJC( zwkSas#Co)0QLuTq?QWjXNpFmoj^dd1B?~ z{N7wcwfkz}6w`2U9vFBIvln(#ttN!T2gIDFzsbKGXNy-&b6*49`q%x?SL#o)^MN?2 zYnNLsOGh>ZDSk`O#Qk6CHtPE;k<8ZSinHsK^ne!0siDPuGTr~QYk#1^gNQCG;Rk>=;3t@bQr4DQDP7Vb|xRK`zg)G6zntQuj+L!1Mljd%Ni-{>xgX6{YUcRIVDm`?WxtDZmYhn*R!MZ+OYm>yUa)Uv|qu|~RJrnrsTUsJxv$H|Q+`+XNV=?dTjDNQm; zys-J?)lDS(({uNC@HcF zZYS;es#Tc1s`mN2*1~>?9(rF^Y`u1L4>Ltgb^Sk@^WSzXFxqdW38K0O76#wAjiPy* zZdY*Hk9~Rcr2cn}NhRMPiWk6u;6Q3zJN>Fs?P?Xd+Yg%MvG+52{;$Ojf5b;ExLo>1EZXD;lv}%`>sd122#nMZx1s(OL66BV{8AWC|i*nUw>V? z{KoNbdz4x^K#dH#~~4!~;Z2w-oxiRAJnK>#Mht-iHv?#N1Yw zpf$elO+6o+*qxOh%F5_kC2xqtNAt(4qiQ1kqO{%vMM5zhs8XzYo2SdNOLSJdX6y}1 z2RU9J`D`HfmP{eSbu0CQkGlg$`-L>Z)0Bdk&TORDq` ztdvVv%X{_aQn5WtInx5Vye!STmnE&cvJaQ;M!0#zF?=Ae)=T^KOj}g(^uG*3z&zwl zY(QyQcuuf__*O5b1O8PU>Q#cNn|0f!l{zbaHD5Wf z@D&-I?3LJCn}Pz}Ppy9iBwUz2lW=mP8EA%KwiPbleSh4lupK=L-SVQP=H`;bh_j^#Xm7iCPVBg7HSX5#Oj6Jz~5yPi=y9@DS-q(0j z@C8Ab`9wbMRFR0Qa%!_D+3bJMR!IKRcCZromRSWZ256k^MQps^qbsG|McXQ~+MnZP z3iJPO$iNvRoGOp%l{tY|9?d+bQN*YG5FbXw;_Q(eIgE!iD6otB8Qa<Sdj&w5r6c!IM$(y+Mq0$&DmA7BE# zzLGyPVONm7t+Q1)C>-`d8vg2^d1OyWrUq|=b)}MDD{ZuIzjs<~I@;1B^NN|trKEZ) z03f7SNBw_(r2ho5iOCK8)Q8HDH#(BQ_u14h4%QD#UWebZ{hTo^xR2 z1p8@u0|&SLu*?d$wS@410RCS8ED{ivh+Oh*aNvO~0Df0_tcH=puTX6?<@LvPEe;P; zZ0$oa@w|7(I?iRXM_knelxBEDl=r8IRBP>q^)^C9zBUMc!e(TZ^C;$gst%W+_|&C zG1JdH)cReC`v;UiN>F1ggU5vrHI#gCTeA(a~>kYsVI+06iR0s{H~ntoVAgx_wqkZ16YJMJ{ieT!q9$?rwNbwFh@(x2&sGr z-s?y8x>Bt{`v$d+&uTaE+WO5E0=u#VTn=K73!0K=J8>#~r0ic2$hPZ+1dbHnm^ok9D3Y+kn zcX{q4?K2poO;*WM{lopp-3R!rk%e*^HyTN<&B#rxL3CqgzeCtHu?X_ zIzn|9?(iG$2)~$jiQJb2BoCQ}Kmy_rhf!>BCJoXl7sV*0SS2Ju_G6m1lZn-9A({u} zD@IS^7!4>M89uvA)kDhsgy;6JOM?zd*@C_|o?Ti{L5uIxvs^eONqc|Xoq1tRx7%jZ zHvOb`Nix_uZihaB_4Mnr^G=9r z=_xA}JPcvexT^od__?O?Qkk#knEBK5a7YV+fa!9sP7WG@fpRKr$cYx0p6R{}Uk5`zj8|j+%L~wN!e#f=t6Q_Ce^^}zNR0T~x5+;4VCv(rM4gJc6P?p$T6)9>d5MAI}GnKk5oCw0*+ zR_uuw7md|s5g((dqyR#CjUwxE=a?(>;)M)}c-oNZN-bHK|C-@8A8O&hzdbcxL_(pE zwHfy{=Xbx74CR}$D|H{0dWhuhPqEh;nAFi9)yn3+-JO$YJ+B-b$TU^Jr(yI$CPXpz zrCJMoYU?(*ZBH#}8ohA6jSfPe8J;_H2T?ADKI{u=74m9*m^3*i>uF>=>Z6fpI30=d zXs-W;#I@l8s`C-%r9(hY768@yP}-0!FEWba`wQ-`5RFc&o}Qebwyv__Q;xD+h^|>h zqFx8hinnA=)XKQ0jBgJ>#)UN!zW}fq{O1M=hX^Y2-+;0&7mlt+Pq>Y8e79*kmnl7K z&)yBW$nl#0PAC-|tmw1mO)q$O~!Xr8O4Fe51hDchOOO^Zgvd^@{J*o4hP>(Ca=1o+@fZ zkupEC&{X36tO=l%?+4}EQz>dXB5FGJrJ}_5K#f)#qiyy&YZSDOD|GrLWj!(O>jdW` zr0Ze_F-313`LLj&M|dQ@Y+yaM6&&kZ+l0PnBMPSNGUy_S}!ajV}Pt0gZ*tW6bDA+h`Rz0CXA9487D zZa`lwUf+b!Qr2Ux@_7$(R4`z@_+>rmO6e=IYi*~DpY$g-@ecbix4r3W4QU@CndzM# zu9S-;A?HzsCOVMf^SA=~{l9^;DY&@NbkYwv>HT1!n$d?)W-HvJRZEKK-sX*W+vI#Y zZ1gFbXrHO(|@%W)(FGao#sLS~_X zZw7XXXFv30rHP*s1IV|ig|sc1PuvS_KK%Vin1UH9^M^f2{J_}~J*vw79&t8Ps78FMu-p8j0!5&Bi~5&8U*63LTd@Sg z252KY_C}M#RtBeWkPPo;U^O=J(i>J>!@nk?`mn$A6YISyK~$=sD&II#{R?Wc1PhZ) zQVJ+7SV^uW-h{0IY=8$q7SL*lWRCxaoz)%6VYXDP=~2-|56k{L2|AHChw)y_HS^J8 zT?!r;PTi8Yfuau0fn*yAZE944B=teze|L;}BJ?<@O{^>ixqHS=(^3cnn1C*%iAMb) zEdu(b&XpDj`?gn+`-AwXCp#Jc!SSZ$#>U#mx5x5VT`r|YBI`3xX@v1iKp#^$WyN-& zYHJkctyt1sT%&$!#yhch@_3?3J}Z>G<-nOdL1;nJ$9_>NQ4}3UJA#cic~t&$4-WPp zqgfF&&20vss8I*yf~ZKOJ+CWSUP|NQwh=@x=Sg0gw5&*91n+*6=d@;jK@t3wBgls4 z^Uq|)uYx`?b2cH0S);G(vg=mK6b?V_oR962&hJ@Ut@IWKu+6`@|JkGIM4q9J8K^Jh zQXlVV#zF)jlI1{_K)LL4tX@37dXFf@@n3l+#R-6$lt2EoVoOv_He9-^`y{zuUUDMi z-Lv8_dm6PQbiQ#(Uy@0=dC;q%IzK+!>dc+dK6v-$15NP6blRLQtjAtkZx=>oD!T+Y!P zsQ3!@&3Bl+^&_f5(#7X05~Oo8T`DmY`sVOEI}cIAuT7IKCyqb!Sb$x!jWGeF3J+L& zQSYTZr~Uqu$B7;1AWj-%6l3q~F8mlE%t=`8(45%Oj*mJW zfAPG3OC%BWHd8D=VQN#G^O;8z!<0m;gs11u?0rP0{C+_n4T2mN2P zZ7ZAdQdrgnFV_$Q7pnWX-Pc2Be)k7Bddi`ISx_hZvJk$gDM$opLCH;mP58SfVMy7n8?LXC84@q>Z z>#ga}imF?RV17Fq-i2KmOt^oo?{=fxxE819@NWjDH4f?6G7y!4TykjMUbkq=8GG2P&9~O)5qOb?T_EySDW60TCR!)l$3NJ6_^KO=*nbp<4+${dI@P z7&BRt4!KSSyN!S=NW6$^BM<;Z4x_UKZx%cuM`?~Fz$XQk zsTG#JPf<$79RsuijEl(LKX~z8SR-~cl9N&48}>s@%-`w~NIX1yA6s66-Bf~?nY>{i z0!tjn?n=7@9(g0f%7c&H2j5Mvf3ohrp)zfA$Dp3?&d(g7KFVgx^YH)Rw2-Tj7X%Ip zmcSX5=T0o*{7SMQz1hU1@z*9Q!i8<}h^R{tUtpG2mjMRKruUyot5#YoE0(<{5iNSM zMJ5eJWF1i$XY+*g%S(~pjMR(hQafVk&kV!di0Cqk*6@+83_J|-gT$>iG*6(c%WkH1 zc(x=c#mOwM+Tc_vKslX=WEYw$RqhsjhyR@;uSzOserFN+r2_jEjl|9-d2w8!A90ln-U)U)cJ6 z$m^mn6lsV9Fracq8HUju3uSw4@RXwF-CyS7Sq%-TQ8>rKrD_*&Cg%E zIa&wL4o?8oBB%X+C$JdW>)y|C98b1I;urV=laFOrc!dP($yj=yb9N&l`Yu0TNhJy3 z0s@@JO$uzE8Z-1F>dtFzfG#J~{_-Bsp`^Nbn>97DY$|M+$U@TjcroKZVl?=Tv9$|wv+Y#Pa;9aj)}BY0;t%us)FWNx<0x15IYB6KK$VFw>|6w@ zh{BHC9}vt>hm&2%hSG2q|hzF-jQTxSP`5fpPUI&D9okXvGL51^_3(=;~& zv?rjuAWLfTqr7Uuddb_yOAjmKc|#)1Yf8D{Vyo3o^p6-3t1kcsAp1ryzO9hbAbwl< zaw4NO1%mRZ#>{)Qxy&dn{X6XR7Ggs}Wd5UHvwgD*_SK!Z(WaNArI+|PJVZTzbR&j7 zaB1dm{4b7%{@^I|Nxn{_Wf?eyu$cQLAUk_6Cu+;7%7SVR!fD42#B&?IO92^z-{!#X zr>8}9HE+I0Ow*oTKnt`Mpplqcb(UTBHR;hnL4EaK2?miK_*chgEAmsraZ%+Q#FO$) zQE1cmDYl$3WtWt07h4|M|0j{O4!Mpoo~dC>CUKehLSMBaJqW9|Z|))KMD z2b;EWF-$8;0Sf-Y(}*s}yh4+xY+T3thj$n;4_#)^gOkqmA|<}%%_B$WL=AP}H*LnD z0M{n$K=8pjegCR@o0qM+_b)Lwecx`yfXGEW;9XEn$Zx;NpyL-!Pd-`Jz|DU4EP+a} z03Ra`-{V8ArgrCe%_KqFvNK57FpFnl^Rkn059!MJ9@1@4tfZS_$T>f0N`6aiGX-CM*fJ1b-$Je z1sTixw*uX|Te)A@;ia^|(xYU>^cMI$Ak1^}%a7W!twk$BM!e=%X1>RD z`+8AVgIHzb&WR$;*ZeatnT%V;30rTE*fGn((+>xV z_-14aVYKzq18;KCAFpEspwtTi*T202e6~#a7dM}4Nqc(iN7OyUcj#Jy7BVjJ-4ok= zE%r1`-^LgKqSkhwrv3a8OQ0-Vl}eHO-XE4-z1$5nVirv`>c^L0J-c2-+(D#3s6Di9 zjoPxhsHyS)>yBc9AGZG|()d&H+ALy14LP7geUaY9LwoW}y7Fio>O_GDh(F;#50hFHKBKwt2rjSXI}0Y^rv*R+vH8{ z@-ao4937%o&zOH#6o`})`4$TqyN$Ycdhw$l=eK9-;;Ke9Cx{Z(%9!L`*v`KN7rt$@ z9EV1ld2FOHRTCRq)ANhv+tlM5x!;AQBstjw;veWKDaUniHa;#IlE4sZV~aNz13vG6 z8SS11$HVj@Wz zpk_zY=wdJsYzRD9+Vva6OZk^EDbo4$41xTJ8RTG?NCub9Atg7q_z{|>xGZd-UIIGG zEI+~c!S>>bBO%BJ;559f@1$OD92IjAHS?|{Q0h`@F=O4wkKRDBy+<-NX+>VaS39gU-GL3kFG0 z_B7Q}z1$Udx7uL*#l%YnxCy7!ff88ccz$(8IXjB7kf9$MX&el`xgNb5payia%v1A! zhCc-K2BMQ2pRS*jU2r#EqIYeHYxUxn6~47PQIud_5w6?C?|GxhhZLog9=<-&>-1Q_ z)e3OXGlTyy1E+H~N`}ptPX}Tl&jNn7L163&g;A8#!{U^L*=o{hM`l`CVlad{egCZ* zUj2#2lk?Y2!Gn8WGVq&fH*>+|pKqk;#U(TypVUzoafIIB{HWPasQJm?$Gj_LU^V7Q zt73w$M3>*`)V)D7r{EiFrsUG=vqylDO@RBt5hE9zx8(eeO-;q0$8d-~?o#6WPj=Z| zHQ>J7s|F=m?QKp?@UGfc=iTlRbwimHC*}s%1703r%|>CG+BgIu?Turt-OIP<$?Du= z9p=khH?rxBi&S)=LNT!p`yJ;CE?av^r3L(7cBcjv6ma-nx>IVj2_{TRkmBef+GJMb z>07u+uy+0mV=$|CIk(QNJ7U<=bq=z)IrO+;6GH;5^h}t(_RrT>g2JueChJ`E;^jn% z*2`8mSY**_#oQUD?S_2xO@1uprC9TzX{;p^Xst_itaCF&s!ioN;_mA~lC!v?7Z%?X z{{!&=3uHu_c{~o#c|Cfw;(yXj#Qa~u)bB-^c;A!TJ`QP#bOUd_w=>RJVI&TobU=0S z<5>;HCc(fJHg$8|^%oZmxHt+Hh*sjKx#2>4bYb>Y#gJmCan~_DjC4^w@#Va9htU0o zHI9_GG9M@6;k-ZsUjPcpKQr+*{+g2B+=ssP^)sKy>+hQ?^B{{q&%y_B#I4TmSSJqp zk3cgH5Blw50AKIzuO({vP7a$;2=Yy9=gAa^ zR)wV`L4EGL`74dGwITy7%=|A1@7C7;K;L46A3}Rsf(42=6a=?E(yH`BJ|%0yL@$xy zPeYYrm7)Yv!BPBtFxB1Ao5ZEvN6it8)_5(1K?@^N~ z0&~^&hMTAcLEGX8I6#d+Hd%4(x)Cf$Py&VIX$mA%$)uKA>X{Et4%oYJJ+4lD~FHcef=1~2o5ZjI7}~|o$uU1WZT#6&9l#}wz4XR&EeqZeZj+N!{%7};Fc>xDH z5=P%YhwG4wtabH;JOs6=`8~ATdi-3=v&I{L=sIan++mFFSPm#g;uTdSkB;=5v94>l}t57N$bnW<8Uqe9CrP#Y0<;gf3|fk-=tjZ>{M^*yN(;aA07sn+7W-=plhc+;}XB`18p=3 z77zi-7vlJr6YcqdI_yUpC%Tv$xSd(Nv8@lqKJat6{B6&YRsqhw@%_2N*d9`20zgWU z=UssdulY~B@DGOb&WWb}If<{f)Q6fPBTa&11LnV}jDvFGao*l%T$3A5^w9!yBYe&| zMZo$hl#uDa53$nx(;8f~p68;VN~+pm3t4FbkBrikKx`wgL=iW>`y|vJw!?T}qITps zJpV9+GCjMLz_8@0swho^2io}X^owFYzognh}00* z-8AAP=o-JS0Ag9>Ij1?s(U0lA2zIh%5ODn>?$%Y{Hgc=#78riSrk*dQolHz#!0C75 z0d4y30GqO^gywYDOyUvM>{G#{ipRV~;@JZPZ7qlysX0dI`vNJ&)b~zjev}PcGW82z zYIxSR-~MtNw(uWnqaM~n%8@~)LoK>A(BQcSoUZMUsYu6?0DMgfuD}-o`RjZB9(-6R zvg7a7K%&%|)$EZ*vKcI{%M{Hfg^vl^8V%H>B+4@3hzd%s%K^#_o^jY0_(7!f-@AGS zJiWV-bDzU{LHXHoA1x1%_NwtJA6U45{qnA;PB$ypXTCD8`yYt7hD<2=x!q!wIHyBD zgpM?yE#Bk94)u9sx$eZe+}U#LdDcu17-Wdw%TY?mC$mO$AYUrtHZJ~sLi^Dgla6_@ zmLjS9Ca0QD#Q^IP!%M|83wW5CyN?mx_x*3M7mq!CdfSZNdnVx zs*3i`Je*Sjs`}lhDO@@ZnsR=66wq;`?mSMqvxbZ3y>cMPHa##vO4S9ul-5UjQ30lP z>C{8!2x^ngF;BiTKxTTP*ZwEcG^a@gCOMERCCdWxy@h5L@VI@~?E#RPeYt(?fQuUC zN;&jj>!Wn|J6fwEJuQY2zy}7j^Rov9q{8qJ7`1!$5>HH$0QuN8c`CUi5taYz7S#1 z7g1#aJk?txb&^89Q{-O?{nje^W*@Ui2i}%zqkbvy2utht?MM$_mQw0J3^(tw2XTsP z(cP2meCV(ys(Zt$=Z9u1)!H(*GXdy5ZGn2dj%5%t^C`M7-!$ z@}dB&7$Wl+@qE_W-#eI|l0y)!Un`fzLv$D_z{UmfkGQm^-+hX8w zCfLbQ5s~fE@t7h8EzS^pEFuAc@G}IUON#AF;cQi84v^P#CI)NVV3ZW*q4(C zFWFpS(r7J1)DZZVSXq8ljSs*S=Bbv|NqSpSzw?H5OU}Qb+VOM{W|L^OJP({hWM%K?>&(ypKU3HM!0{BM`p4OT; zS@diJP!`CcEJ%-6Cc8BB7W@bVY9|}PLV%Tl&nrUU=NwA!b_f{>I+MopT;JHD&$NC&8FCd^n!_Dz-=6zr;7 zIca`r@kU99Zpz6E?of`8`vWfHD%U$8w!}nJjGd@ix>VlE)v|Da0~|l)43gD}gQk*$ z4ju<~^D}7O0xd>2!syXPpE4*8+){cS0S)Vy6pL?w%p2}iJ%0S^BFeOXnDjQNoqDCDDFkzxc5m=_ zy8vlcLWKr_ygu2{0xmEZduO1?L<4smpQZ&CR7Cb>*vBjYb9h}JNWISO%X^iBTk|(W z68xQia}6GsyT?TU6ST6T2ew?m5Dj{4Et=W-nUTs~j`(D{9?#?wx} zN)>J}{(gilxH&Eh0*!|FTPV;OtMXJ=1Xj+U0bm6hdQxrWD|DE9`qcGrUup9O2sEb- zI5e!7;-|V>Rbl$>%GJKZpKsIKmS7iub81tggQXL3zOFt{!Gxm?e%w`B zTEYR~p&(9U(b{kl%bnHUo8wSdZLapH`?9ZkY*UOcMtV`J=h|Hf6+vjT7OTrhW?`Tg zoNYP~rh%+HgUR5hRvMGEyn6aHs^=FhXl@)MXE_r5@iTEe{U5doPKQZj%|z;-Mdme; z9I!htgXsr>81WEUmfI-?%+ZcC8=bw6L3I1oyeBf`aRrn)I z>^9f)^~kIurHRYsiew%XmC zol+pz{<0Ly3da;&X^92oe$YtG`%s~+U69pxCwn;8t*Qn+k(DzqjTOd;x_+6*?#OUI z&|>OiD?iylO1hkHB=tyA@U9%|ucyw`2W;`+G@Rq63$V6p$d_)v+Qz^)MXhp-V&puU zbD@EqT3u@+_oUvX;CTuAtBJfPYcfKEX_cI#zX)gB$E4Qifm_Pbh0!FH*zVc&x5Xo< zn6-O=C7AwRls?Yl!*cUE26pian3*qill2HaCq5%V4|4z)R)YGtr_(S58!M10Qw^xp}{E5wTZZU=3Ex`_* z^Mveho?i4vubv-`ur@Sz=Stxhr|EP+`MfAhr_=^4d(g_+bY6qY{V)JtPdt}|73cz| z5H>TU+2fj}1w;;qdrb(@XJSIOo0zqCqHYv#E)7g9_WZATTauvnRHOjh2sShmoPYcz zJo+|0l`?=DQUNqZ?p`!S4-ian~~VNP>2fQRkp4yCVK%)&}Sjc=06v zs|8vRB*lvr_=~aE&f521Sce*XVWSYl^MQMV3CA0SC0IM92D4&R@SRV)qIwBA_FUri z>ZmW0uuUbuQ2-y-tfyNz8B4gY`(zk{M)VSZ;X|X{*(Gj7S*Z-_i#qJ|J8$`5|0f{1 zWEpv8udIJ0a-I+W3hDM+Jh+wC?bjX{5Ht01J`YT~kKvbL24;}j`FAAD7@|z|Rt1Wt zJN2uPz+sn3p6i}(yfs&QQTRtblp?>$T?c$UAHvqmSOTr?TSk8#q(naq&AXg?#tSVX zKe+Gw%oH;4qgbQ5<4DE1`t>dzyr;bZ4Dwk)rJFr|NSPGm(|zLp#Zp8p(1sgEAf;Gk z;#mulDD#0T0cUGUq3z!(TXjYs&bU%6pR{@J#`GEbtaMBT8gs!2T0BNporAKZ4nO?^ zkmvsAF{8zP=6ir}4s5P(43?w)v%DRF(PtgL7%`22wc_5uF* zk@N=LW>l^u0h4=jk7;{%g7I+!bd4l`J0l~&_#+#|l*hm&wj@*%KL(Z+XSUzIm|bcH zYhjsFNB!YOQfe<`7jrAz`MQxC1^EOwV!_WZ4np_^0!M%BrkOPx3W8(cBFqBqdss$5 zEJ2h2m$6C^PLHG9TKIUQ(ZFKrqM*(P-^};;llVxjBJFZ*$^$1ag4IjtxS@w+->8o@ zF$yvJ7ibNd9WApdrt?8P9Cz@_09L#gY1-dJYwMo$goB>y>1^yC2|0yx9=Mw4^C;|^ zG#9J`(4kl9Zw!%4dl(Yj)EXr^^Wr2jT1fek?wIQooxEq+v)7 zGN5c&s$aB{XmfrKMSfIq^X5YN1mBS@t*J5z-qr7c?T`Oa8PruvjzX!$L0$RoJ98%y z5dTQuB=Pgj1>d_<;Wwr+woizXf%? z94160vppp|mLqn6_r*HHqk^ z8S)3Zi?8iKN7?1NmLg?4N<>yvRjEQ1N5~N}GZCIL@aaX0-Jo}CP^5`>F(Ykumc4ydUnnO^Ak0YpR_lp2eM|gSbh0+&vD4?2WR?s`; zfe9Un1YCN_qrd!BCBSPGD?h50cSA}17sK$;j-o}6N4cvd*SW|9oW0>kuxIv9yHQLA zy(~9v6SvTd1*GsYeXcbuz0ym74@%n{99d@A5VCq8$Ztp`utVy%U+0u=XT&aon02=UswYmfeI`?byK^j*=^#rgcvn$62l!zWWcBB!R9?{5Fd`82sdE~Jy0I- zeSKLs(I|>4l`{l(%J2)Ithlnv`aB|!A8i|sdsD0oEkM*ShUtU<$dS96DkXRO0_`5M z5k_&a`6PC{KnWL8mSnjutR^y>Ya{U&YJhS*6GBFH zAYD`%1z}i=@t-~PV`w4)4BKF6kyw3f%+vOAJqKuYEwU zh-oe>F2%Qs1AjfFFgUDYPF{CF)r2;E{o2I>n%hQ9wCYHRkrM(1oxbgo*$MGrHz&%h zq^#EDtLS!(C?4_xVYApf8o18Eq^rVG?6t=c{}E{IKKkVVsQIgrnfsxiNXXfzcf;=| zN&K9AAIPk)3s*UUg4OcvVGyu;&FfsHC+!S+3GAAxTvLM>>fkN+?vkdWL3hh*MkmC# zz7Q#&!Pmo##^5bx0Jho2#x~!nqC+sB7E9uag4fJIi`U=M`CrQXmYLY)TmhKs$*S`{i zinraoGryuybwe9{mIr6`fW7~~donM+evYSj|5haI20D`z)Tnfm+G-6B@h;^MES`?x zNz(B#{tApG1}~@zG;CI72dW6{TpG(#g&vPI*RS0Dlph8{pZsT*(4XE7OyzrWU zz5+6{>%a`Y{pD#E)~1`Flkl3*m$yr>Ng!gY?Q_8Bl90x-BZ3-*>6Qkm)3bGSTb_E~ zqiGfmX$jmFCkka}`Se%AHY4Cxmn4B+nQ)U?H*L#s) z&EFX-B}ats@WI%Z13Tv(s%&S_f*Z3IK-8b8=P}QEOd_eCKWVV|FNN%KPo`}k7BttV z_U6a2zw`k&2gdohfc2`|(jfq1@$sXoAzTa7n8E|tKjN9W{r3_ARTMdFZ^}M;uJu4O z*_j?>zKuv8D|@a*ittV=<5~V6oA-eFYRNpG*Wb0G%6p9}Y9WzGCzcPhbj(!X=T zmxU0Hv2m!?;cnJb&lwJk;AeZYCmwg;C+++e*5DCZWBWeQj^}j$*nid{klL}O0;O1_ zM#ZD+$7v%p12~RW`oY%jdWW_9r}h5f^VmhINTd1~;|QkfgEuYRgbMn&9<8?$_;olB z#-Ypb6ALS9R*yj>7Z$PJ= zHJg!AiFz#Sb)NSTY%vrB@s2RYzoZaQWsz8d0c;=kzT&nkEW47V##Ifxm-eaa_`(sg zL_`KWj~L7eimUqV{P6<@+QKS*nljD$@_&Cs96S0J_Pp#W=r?#zO(0Flf00;_qAL5C zTHIp)>(I*&AJ#0&Rtusa35ORI9RI+u@!1ebZLm(9r)#%;5D@yd)C(6Pta%Dv-cIWz zEpS|1%N8SGukSjW+z$G9DkCqKm+s$KDjEzb#X17eizt6u$85I%wGXbynIWl>^f57Y zyW|b+f_NM&f}0KES4Kj5v|Mz6zwGR^nY(!YoZ=)sbt@ABKZ!68rUl;I8~X(YmVuof|BN;?l-eoUGCoN1>t|9K8$6?bu$2JSIhLH_ZOW?Ht9DZ~^Kq)W%Vk}wrd1*=dJJ2nfbx$h? z40#oW>jSkuT*5g`q@lNz8jaipb2Sw{_V|E7)2eZ|z==l5Uz2qJzh-;uk)(CIF| zpjj9Gz>`2bKH2g>XGakCGOW+BFKg*3P##;4a@a#4V}14?W~C}kl=#c*AYhptL%ONJ z+gsKkD(?A45z(N(KVzvkKksfoES|_v5Q*2VGJ=S`XoVT$XXJnvE3RfL#>X#uOQwNQ zhfKo8LZk8`O^!D~{kK|TBKDGM>2yAqs2!d(1?`jQ^KZ&D+-GL+nj5yZIz^U@IeTk< z;g`Fr`8<=_#sMN@FJ|-Ge#-%{)rkcc z37{O)i>fxEYhiso2dN7)`1l^$0}htvO`)sx^huow3hQFg+N(_vOO+#^NR5k0?PaG3J$*6Bzrbln z?a_w^oZJt32@=2njA7?6pVmHBq;6X88X9Rn1inqRa%J5D??!=vd3jVZ6EHS|2lq?o zs%C4!pN{V?j;mK@>|PU)fpUJAKXP|$Qts(~CNsUhn(s@EAPbtev^1_W{Z?>$KIgKo zfPXeToU7L5yhy#P*iH6WZ;L?kU6NYiPX=mQsBykwg^y(d+hyG6^RtEfeq|&3{46^4 z-my>K`Rvh`gROK-LoV9L8ZPm5DCFTahGvDVJZR_bqqvFpPw8j~sMKPOuen^N@-FKp zd+E+mes5EmiKtejsc=!Ga;+Y}qkYd7uE}f=`ryqKk)0BZVTxc0?C=9$1Mp6tn1q+J zG-fhbml&iN{t@k~a6{wiRPvPlXW_cIT|6PD2!0u1p|~3Mdt?I%7$V$v;p~DH&{0IF zYuj2X(zs?l@}fH%ylH+s`;(4N=FmGOCo^!*fM@NppSfqi$*l5rJ>)6Pwk`2Nu|LYI^KG8^HGvoB? zN>TQN!$2O&N)licEP_Vl6}0YBPSk81YTS;#KnK~rWnT!ooN_$SAvIK0GUiL7WV*4i z2~%2TV@RMl413F0DKgQ03wTp!`cN@Y3{pvk50)I^$jW5`y=UgcQsIMwFOs$CgRXTd zzuE*p%Fl(QO>V>_Ns@yiJJzB*F^Vly319keKmnYim@&Jo=zvAi8@ zJiNM60&gzvY69cmCyqf*2X1%hzU%R&xdlqTUHD-Qz>z;N&WZ2PF4AZqKi5`BzcE*y zW)4fh=JWUE_&jL#mK&!BM@OJEaT+|d4l}RbXA;e3zBSGTni_h1@lczS2u-DCRNaU} z#0N(x?%??9U@%(Rc|B4xk=6aM$*Iwp{EpOP_kDXS-vE5oXNsA}3L0HYPV9l`?@Y35 zD*~4^CAfi%Lzje8r6(qs;vBPNW@0n;q<;1CLXqT$J=VfcBdow0jz>y7BO6-W8~S~= zHV9K|a9*gymg5)IF6)NFwRIkd+!gGn#RGhr@%2_qeE5F5dwDPUrG&#oMu15C&AE(# zm3~J)>Ho@TmL+Nyj)1pmykaPa_XuY{W5yjl^~IecVUo%hofzS4gWA#_U8M@-!LHF#^gKthQY?F_=6M=YC z*=nr;v-ZfCm`RHCue3}zM92n)G_4!)rJD#w+VR+bs^l<;Lbw0JAR0%;l|!oPBG z)7jEWB`PHrXyD~G6O7fDI&rR*J3fc7}9ScN!c%%$S9K_8(kvJVV-iQ^)KKqDuYKtKatw9{DA2OJk(=yqmn{ibsAGFJa6fQ z7^s{|1&#Dr6H9ZY0TM>vR}(tq)p`CDRh!=&=x5KUsVdb72%@} z)X_!HhQ$V_spW2DvA9}O-+>`B1A)!kW5P-upem~Xa*yFLUws1iO zs+CtP6r@FD`5XPxh?&HNkm2H1kqW!#GxeFlkSMav%9!-QoJRnt9zNMXiR%@22|7-L zadJb~7Dx2;e0j%k)8*ls-&5ynODWua)#&>YpKlONahnC{@kTp36vsk+au`#Yw)ujO z-*B}T6SCghB}J>3Q4P9X0oV#YzOxQGh4dJP!O9^@|xZc|5{PTZg z69piUA~{Z%n~WE}@x5d1)0NaT4e~yr?0}1O={gM1h`JIg8c!%~n`cuai+qzDdozm1 zIm3=08&9_q?oNSd|G+~hs?p*ggo0r1FykuAwJVDFfj%P&=)F)26aI=m#PP=N{6%Te zP~^4O9wl)9I%Zgl4*Vp-SfxeInp#Wx4qWanDd`Ga{!}Z`(v5(l8a&m_b_3Vzwa!`^ zc|Z>v;=tai8EFw<7%-8!BBTulxwHr@hS7cv=-ExcMCUL~Fe1vd|{cpDeeG%^wny^;b*H$S^If5fb~Xk5fA3!t_Q z!GV(R;JM!>-^@L-d+}IFuy5cOJ7QV0xPROqq|8fq4iO7a`yBK{9>h_ zZdbVdET}NAF|uv8U`L(_@T=0~H!B}&AEa~doFlz;*#z#7JCtkdC$lnox|!aBk6s44 zJ3tZ)deeoSS}j(5WtpK@cO<^W59bT1=b2D<_n!5Aqb$Ni_`g%=3(}&VMQxzArm3ve zL&te16>H6TiWSu(u%{n&*PnGaFc7Nm9DKU!j}kX{g4cz@AU$J!k#3WUVbl_?*KnE2 zK6AO3L_j;GU@P%&CT^fc=fQGrH_p`Fkml(wP9POG560{xbGBA#qtUul*SZb|UBCgA zt|iRJT}A;^wz8Ke9d4LVD_dC}hwvDgX;J&5C^2E#r@oH?S1*GG<000HJ{>sRC&Ob3 zJNfDL1uP%$h7cvSKr13Rc6a^l1es-i2TPpf36wZCuCJZkz$ocUJy<^2FNauEUT&ON zH3O;%vbgzw5Q_V@F5^Ew87uaxkBt7%T-e3`G27hdJ1Pa_AjBaqyYr>P!68@qxd0}c4x&c>_@(# zUX|$4vI z*Kk9=*j<8|b2~?Fb&U#3)+Y#L+f+K#gh!ghmsbA?3CHoaH{^OnlNLFPb!m}20hxT- zpOwZ3H~k)}I0&4hlw@FN>D}bmdV8Y`{WdJ;kq#j%^RiDh`*aCbF=8%;N8!HL_uJ6s zKOwtTxMayG*E+j&m6kvUOBV*n#7W`>8Rn&Dmb!DNInsNzUDI~5UZ%InWs~14GUO(7 z-D=$vBPhI4aEnd^wmn+cxraado^38slJHRR)J)o)_HRjg)H)fh&p%|bf#~roBXc@) zM)%1t|w>?>Ts=QVoGCC81#?#?@f0KpJl}Upj^L1G? zH!8kodSY9SdY^-@H%hTm-fja0^^>)-UK%icfkM2G9i#!F;m1JhjmWth{BdBmf^;tg z{3*+DZ?>ku%8I4^E)dR@c@pew5da zP{Vj@*Qctp*6##K4nb+(`wJIARo83~T0?b~u?;zU?JZL2DP+1g_g4XW&W1U#zDAw}Z?gVQ#pCf|s^-5EYJ z=0VD0VpD+Gq8%XCj5iRX_7br-73{@fI;eHe+LV zoE(6eBXP7|U7gIWZE}|O?JkOw2=A*CV<*-4u2W#_bfv&_fd=tO8-~KF8EnwsvF0M4 zP z)in~9>(D9S;oaU)Q)AtS2#1OFPG5Tkp5<*jVs8IrxKwfFPy|C;A7D=tOsH`{a+oM3 zo}MmNG*dv^fz7J<1iXTK+P!`GeZ zd~pgsJ8{Z4OpMOzX7@>wb2VptW%&5`Yj0ye5t&qS?I<<`!TOeJ5T$AYZBN{CW;)-t zf`@nq4nlTxljFuftr7aM?Ynqsec;mI?ff>F5Rg%T?*nKkmz5BksX0UParl;#tyW@A zS90vVt2iZ{WV2ZjR1*z6Zfy91ypf@a?NJ$C(GS#H9>)?IE2B+Ox9WbYU?HD^upNG7 z>5Vlt3NsB5Na!`^`of?nsu6r#2QoC6iN{!?xTd*4UD?2829Q#tz)CA7_5@N+Jqnnb z&TOe=y7fV-AY4#LzVD1}L*+n5;W%GOUY=IYU%>u}wxSbtHM!>e&u(r^goopB^9WN@ zW6~tB+ih&&O?rng+az^?48zH7_dF$~ht4HUl6kSkf(mpie#iSkhtIs0BJLT)&R)lj zV%5_FFUt}#HE*6<1V_DCjFX^~>f&dawKvUtDD^(a(_!r6Yq*E_wW<*R@l=>W*~u}7 zLBO9<)K=;@!7>6^ig$*DQwh|&+?e!vX$`-urD=09wNd#wJ>R}2(9@{2B)zOHWx&pW zC&}@sxn5)4lN}X!4aW1Kj%Irl@?kwM#9uh=Dg;tEdgi5Ob~(qyAj8a9S3Hz>`PGH2 zMeMCPBZ7f61T5wCS(^l#G+TH&p*w|91j$vzrR4;mT;U}k3HhZZLH7G6adC0wp&rM} zoex%PQ>?CqfD82K%%V8@j38x``&?FQc;QHm?#&WHvlvY-`fIx}77MHCeqOk+i&=8H z2aOeH(PA`m1RpGcpBg475Zq$uI^AKCFDm)N?TuX1>yekBd)MyY1H|K8&xIBF6b?bq(4oD{c1;m{89QSP~X*UbzT$ zchx%iEpR&A-@CwMq18uzkJBw?HB-ifl1kIb;n#dTkwT8w#J2# zx#Q%+%}oC=_Z*++`q!VzreQg=W zgkks=v8` zh`B#|=RxWnh}ez{_5I}QIEbIzGeS0lAwAz*+wkU*WigV$XR}?ZWU$R~FXy`}5#1x_ z2hmAT;ACKc1 zyt6>XR43$ZRu;>+0mg~A+*kvOpxd3x5G}F{{N8`v1n2OUXcsC#jp`OKi@Wx2cdSzoV(tO}sfGu#UHXCKdD0sv(rwGNMj_C$Lk~wk$Ub{$4gt9ZoE%>?{*dEzDK$Q z_=TV$=OlS*SYuki%9SGe$j6aj@8+vo%8GQdkF>p(_^JHHS@`5t;n0b2(hGR}yRGS} z2yWKMKw>`GO}mH;Ol$>Yz;iWd=C-YA3nA0*6Ii?GhTiV_n;?nu(6F%j+vt2o_1v#y zmI`#Td-wsa1f37^`-MN!w|3IZl#-7a;;dH;-5vHcY%|{^P`j~q$4jGGEx)fn`Erqv z4swwaBTpu~IZ-{H;Yc*w+oJv)~~^YC?g!~%}6_(tJg2b(}$NsyBnGm0HA)!@}MX?ew$h( z_XZF;1yR{8-?3#uulMSCVGm~d)g`yn*iBjJFlA!K9&{CtBZzznF@8C?xEF$4%(EJ< zMRn=Tr5Gi>HEJxFNYuq8RTmjXds+4L=bhpc}(WK!HIC}jKMhRLZ_r-^dS*GO*S zyU6M1#f^G`B+X8Utl11AHo$})7NAe~uaE70#NUO%xnjN-7FDY2f(oj!I?iTr~hwr$zbTUR9P_zG|{z8|+%HaIO=tXo~2Q!NxX zuTWs}upG5DH8pvVNbaH2>Xt1sp6$Gpl-muC)ijv15w_V zRkv*YJ#i*ForgV0LP)|x-k>qB5JTeV;qhbC=C-V*v3Vu5@s{*)bCCWSZkQMFhN8*a zf5(tQip&rYs>Mz|KSqNOsb3*+q=)=#vc+Axcd73tZ{9w6TjR-ahjxp$;yGNBI@}0I zKp?*;N`3dV)Dy2EEIp?NSME^~2eNrsCl_3%>wE(HyR3CA8ew@hc9U*8UaUw>b}iWA zOlqfq5DQxsP>?b8b=?+H2edxSVy3ctrs8S**0{4_TufI)%tRf#aUE9hGUUzr{cS>1 zL^)Pu4?SQrP2qW(GY5Oy}c)iXT`~AuoYKdaem+_u5TTFC0DfGt-UxV zrl`f!Vv{v^r1W0jXG+2TaW*;s?fws;v_m^(w}n^iT59xTX$(sj^c{*)Q~irskRBC; z*c}gy@sTV#TtQ&5Vvv{fTik7G#T5QvvUFCyadaz^yu#ECht*ujIH80l1kW5Zt0&&!E4&<3g`E`h zQC}kQ;xH9+n(^ox;Cb*UA6?}%bNay|!JD4ODysqEd~IuOuU&nweH@z-{#Gj2R|3x9 z+AJ~zG%A4G)a%D;S3~1~94Bt%*r<_V{9VtL0A>BtMR&G+HftWXJYntrTkdG7wv$kb zA7z17JV;$tuL%7Zl1rB?py_#iUAW=+;_c?N!CT+ddgp}FOb8Fn!sH>1t#m)FFp=`Hp(x?4Zfo^ zI(uet;c!6%C@6D9UozRym9@tSTQ2Ue!HehtOwfB8TL8#*sPm&~!;I#4CgCbK$!>_Y zxxF(YB_(a}onb|?qFDPi72t}A!ped(5ip=Ll4|nJhkI}2j}1WYv-EZ+o~jGKZtKx` zIRIq2w{jrmP?TSOG}iz4iVRmHqc)!l>*P^z6<&%J7L*Wdfwmb_A4EsTh_(e4fz?|& zREh9SJg;{BU~{aU1FKd3e3^aIZ^TRu5`kWE1<5oiKawI-*jSKXCmUb5nWPA8-I?Pv z+1WQufdsLD4r!6mg%r)TW~*03lZkxJZ;NUtHU?Bn=UL9zb^t*(DTt=@O;XKhU4&4O z;2X7sULdt-RvX_LAKXPfrNC$+j@i@`+nrBd6l52Z{-i6S?=xO;K0GX(R1)P+HZrgn zZEh5eo1d$~9Q2LN@hk`d?7b=nZw-eDk1lY^cgUNewkkQ|H?rx|JH5X7lBUvJ4OL9+ z;6^ei_zX1pkHlkdk?Ej&t;k+I7%NzeF3dW9v_|WF;%?s+zktsZ<$^)JM`)YDjvdzA zUL=0dIRgV*&FT^#zC>Pwk~Dc%jz;L^9mlVDWU=Xjybi@zy5qjgU7iA`NHAOP0&$s_wa1 zNZI#pTiq%P=l7@wExXI2k&ERtl(KM*s*#q;me)~R%QK?#u4V{i3_2I`I*A8S^5(!(^dbzG~Aj%TQ+~YD2*y%y?|@pj=LT7 z^jn3>rU;M`5Yqp%Hlt^F$yiB6+#Wk-Ygl&kvgjbea)N_{XL6GVO6D)MXCuVxn-5RQ zLc_xS=UUe6lXIm(GarXq3j+r%SRzv-6 z0WHP?IFTU-)1y{x+P+x@7%*U=^7-jd1W(t65ym@jH#FSD)^ep=-CKnbEg_CPKEvcT_;Jcp5}+E zS-YyawTE-RyKv;r%~f+ zYsmD+g|uxYyRyE8G3?!Q^rWaUYYKQP?V|OVy$^tYRPPxjszPld*lWfzx@?Y~%$6-; z5;q}VHh|}?buCi6GdS3NQ2Z#+dP-#z z73srvnrZlSESp-sB@nDW&`m;_0imHxx=a)!jCuJ{^8!GLVE;GZn*}3#vQK?JeH!#% zwpZ5~W9b$2@_q8;(^?N_BuEiHOG@t^tWwpkDQp05x-uO6SApAo$Aod`;j6tn(rsQTduZA%B?Z% zPEXLuICQ=Aa4hI_h&3Eg&TO&TUrWq&fr~HOH-LaecTPmyIC-F!aOZ(Y>O}$xCgZ^M zx1c8XgaxPYBfD~KPXsod{JvFfx|K%u!)}d`?6O<3B-f(20de+OAiegFWg97e+OUuk{3_vsKFB!!a$*Ggj zcQ%aHk*}WGFuIEH4|&};{lRCZ&_n59I|MgGjzQjY?aXWJl?m zpap7f#7sHmh9Xe9J|bv3MQOWsmN&KYyxNQicqD+9P{4K-!Bs~IrI<+<-f+I#WCo3g z{>n5bCBeDZqTdCFNc^H&ED9A$cp5rMW-aj#s^7>XSa|H&FBU2Wd%hO74mLjGP}>)c zF$sUJ5EIw(k2z_5b5eo;QHrRSin(ta8<)3kk-6J_wF&|Y9&0vo+7SAC2QvZ}i?DZZ zQJYgmgU8*<1`l5>$hFwA76Hi(J{{u=V_UV6)+(fIDSZw!KpsqeL*+f7Q++4zLHMJo zVTn;VG|sNLzqO;(*Ux@PXk!Yfag%|w@gmuZJnvghON|*OPHWCN3A<}&(`s>Ud$J(~ zxosWXb zPf^>>EZ`DCTEVZrEq+m+p_A_GmzB`l?XPYFuPD3%?}vchI8ejaUCkoz|H!ei8Skww zuXE$OjDG|9w&vvS%73w?nPo^nb>P7?e4d8h+W+Ih<#Ua*x{foPn^r)NfXqu|6^i)%@{o_9um*4fWSj@3d!K1eDo{QM^ZLsdrww$AnqV*~Qy2cR z{QFd#M6kphxC6KEkH*kBx?G|OMQX)*p&l(J2D-^E{m4~x{ zeV81=|0paV+&bF1e3y#`-N=8@JUTvu;Gdq)HwH$gE0`2_v!WQ{lAp7&vDMvcUWqd= z8U2C7;kx;$!%T9CFR0WwnhPI^%(egOc@#M7mM?s4mJ8IpRIq&^R4N9qr+@+P$dIih zFCOCZD_0p-5I34SDWbZy+F~IBMDT?CxD`}Nr@yO})=$+_Sf1ljhrP3ZS;4{;_b-Y^c_ppOL!k6ZqUi&9bV9Di9(qhNoRfn zqT4A!sfo!(k1|r*1v4T1e6GH;F#2YSmis(u%In!QW|~&bUVInvx`#j1%O8Ud^DsuB zi$0HEw`~96hj1>qov}9_ehyHzS?4zC5w?T2F7k#WQ!wMe9;5$vYjg*BoE5etfllZOgV6{g0S>ba*XD7}= zqMmojFeBx!7z-5z8k5DDg+*&5@K8d8d@uyB&1Qa5c`R3nmMesi!?pJr_r(fRu&$7%NfI*WqqW|J~Z!=+xc1drPRl-&`&=K1>YS-D=Ogog7$I+~v2`Hr@15u_UtG5_Bc+ zr_n1JYNQ_v+-x-VjwTxahASaYE@#0hL(CI3Cjh$Ats;2Q1iV!wGkALMWG5Z7JbuPs zBqVmKv}pbX6mCn7B<6&h$>S%i&TItlOUwtK&qUTz0c5WI@HM2BPuDs;Vpt+)987vLiTzyo2lBf8)Fs{z?7l`F6P zKV1_2k&=>tWj%wGa!)YFDw~$wsTmZxTwFA zDGZi44@0pMKv``_231e!nyA6V%wBM8F@ocQMfz=yvB z!fpQ!0LN3D4|t`b1i*bw`oA*Z|3Vos>Hqb0|Mw~PpFjY`0W<>`4N@S`43Gr!-oMO| zVFyS8NWx#Pf&S76bk0jbfD`}YlnW=!25=7?51<2Z@0ALG4!~XzD?wHO=KOyQAh7jc zQ2sB`K9K0&Q{X=((f`5#Ks5+!1|;>$U!DLJ_J0}jA9Lz|0gZo03fE==Tj&6yp7Z3K zS^tXP|0oMVe!>KC_}3XO{FPPUA*KIU$@p9r{ZAzP2LRx$rgOpj4+T!f>PUwmNdG+U zUn%g<;_9qB)0;ZzKd*DHJg#PWmUF)wpJn*CKDApdDH&B0JRS4{h&kP z!JnN%h;|gm$#v-YPxhef6~wsuVVfqrxwPE5p?noU*XsaQrfvVo#5LVsm-_ge2Tuf0 zX4dWrXy*a}OHnUnT(#91)!#`;ER^G=_xm3_8wsnPwH)sYKi4SG(WCeg8L1DYbA>5O zwm$y=-CAyz)Fl+TVyV^Ofy=b0Zek*UZ^hJ?*5}kb@zelHeA3yXV=bJSlb!f-^E9#D#eeFD{Q{3wv3|H*4E|% zeAekJu#wdreT3Mfk5MN>L+1i9K~qPs8iPgGF)A`KGY=`n`g!hl3P5AMTku2Y)n=09eBX z5UmEgaQx)=@82ylogE!{7$ng}mhuF-ymvKZ0$O2MV!@x%CoZL`Q6vJ}L6&=AoE{!7 z1Z~lyfYrT{eHVwBoV|=wfwGIjFe>GZJwBccIs_h*3dQSHmz0!<`@ZP6k@7hBCKFgm zAQ~{?OZI}-60HfsN{q_vH+B8ak#|*PPf^Re<>ch##}A(dT%4Kx%Yq;f@ahj4Cc*C^ z;Pn7qua(dL#Tmcv3l5v$Y~KE@oX|BV%|U?KFw-11vnrF3mZs6&(_Jm&T6_msqv6>+ z86cXUi5YrF9*oqp!)@pqKYaLLYv-H45D%-3mGV$OUurleRe@1kLxc2~Sk(XEcb)sO z?AyQAMmP-pT$DkPDR&}ot6Y3*)u+BqHjMB|Le}ujESHxTlJ_+RY*fdMJw|i~!?ukUqn19cv>q?!k zv(!!=`AkNEBB4O7^o$y{vjBQ>p!lXv+I@3|FYhXd8$WPsj~@U zX|VPA-GGTvO@E(7_If4{>pHwu*c&6xnbb3+g}vk5emAXDVP>r!OwQKKDr61!C^VxsAo1RFjWOa)jh z!|q0hq8WJ{!*IZ~iR}b(4(Q5a79&<%9@6(dkHKQBSCul}58gs;Z_g_{EYj9w$1kzJrtS~1$(#+h9+-GVvrm0W7U7!&&xeAMHg_v7P-*ba?K;hrFV znwrGY(o%L32XOt{BYfD| zaTCOQ&ytbVyI8Zbi(>3tg|1eIOS#pCC zXvx&;Baip5AMajv&Y<`yQSt5t_S(;@Gc8#&jFK@6z-Cd#HuncGsuaj23nt)+2EC^R zZvJ>|h5y5Vm#)p@GoDKpy%>z`_>1V+Snt-Aa$_D28ylP1GuaS1uLnO3*Ep3GdJ?0q z{yBKbLAF5K>q;jXql3GOiR32(y?RqpGa_sWuw<7j^Z3VfZ}dh9uUVMOeUhK9*826+ zJTw#tinc18LdGAc@Nr)3fX?#O1(A<&Ej0}jQmg(_lBf5`FzWn3w$q!k%IRAz$2cRq zkuX{y`|WQ0NMY+)%GQu)Mp02wdGlfy_qH+p?Dj-S_#!0H$Z*Q&OZZ*(`@Y8?`!0Z9 zwJE^VA%I-@H=f`ZdSaI7HDfdtaT*2Oz&0+vfCbRzv(#K@=rG3`4KL&g!Ivz6M~QbN z2=#9!yo~o_V?}OR*GscdgsD)m>4SKtC_VV)EO47ornZI!0Euoe^DR zfg9FBqC-5?77DcOfp{EtoDgwHvjKtj4B5S}E^2cM=i6w^?Z{JIpLC>YEw%n`FT|f; zk*O|y>_y-G;wyk)z^&dp**;z;B5_RHJ~N+%Ey@g^nSJ$X)8~N-PmQka;;pL=I!wzR vWl9BYSM@Mw{>h{ywDSV~8Xlfny}AG*i~1_nD@h|w_?N1pmO{DQli+^?*{Y6W literal 0 HcmV?d00001 diff --git a/B4A/Files/c_cuentasxcobrar.bal b/B4A/Files/c_cuentasxcobrar.bal new file mode 100644 index 0000000000000000000000000000000000000000..4b3a70e445e38d84eeda685b0924242b2a0b1833 GIT binary patch literal 3288 zcmc&#OK%%h6dn^hV46}MEtF@=tE8=K^59t>&B%78P}c>=G>8T1^~_CtVLW5aj2)6y zB{rylRH+hT!G?XeELgBYLNv+_R;=I$Ai<7Z`M%@KxJex;qR?16cg{KY-1GR(xz{<% zvYHvox*Oj;pu0e}6PuoiSMCL0OoaJRbvin{6FP6fZU%m^m)lj<)ZWHk4hoU?iBYMm z{aC$M3Ywt`>DODR1?^_28OK|g(+&(AqYgmq_+BaSW9@4<2<3#oswBYM%HI?~dH62Ufuus7h}h& zg|YaOz1rUUoptc5FOPfxzcz^ZI8kGzqaOoTZmP&Q#j=jflCQ(!SskkcZdMY*ZdecQ z!=Ca@Tg4{u%iU1EOx_LEvTAzz$Pnk{jlE(i@PaUr9)e{tIktI=I6AZ?P`Za+)>K5bTLXcIOWYCbT#G~C=SGVrc1OOIZ#)w=|%#w zr+d;%R-k=$(%trQ(59nY*Z51@6(e`?rd!&NKB!xSzx(x+J3j%ptD{YldnsuQfpM|3+F5K#%#&1vZs?goIEj9ObvO4 zsGp|ijW>+4WnDZq1Ln8BVCDJci;_>Ci_B%HSOXPSo}(uFbi}Bm*Z=(cI=)tx)#RBj z5zJZaaxOz~#MeD!xXaA)yxP3V!rV`WTMvN5-+nN;4EsOwAeM}ah1XS>g9*dli{=qB zAnVbDp^)V}Gx9hWiuot7Na}~c3@SRDs9DjIpi!3d6evUMw8p2Y0m(1>3_d(yJqyZZ zq;@_%X)2Q3PtXVg3@MfT2u7fw@pGUt!GqPOcu1vJp-Ic>;~|C9%l4dD+ zGaJE-*$8HQf=F^)z@x(fc!Y8al(VL3^#Ya@%NMC(*q1=kSwWZPFLUb^EU%I|i6uqp z2D~|X1H9RCalljsZ>F2(omP^1!mj)?TiMsZ^#}2P$D6~j6>sZS@TS9E!JB>BjJJkn zM|i&h!`p=Sn+UZP?^~L0I@}e!zeeEAc%Ol0M|hut;cdcu2BH2_yyagRh9ntmfF|ex1_tXFA$Ot!Xh99P*G$PLBtIl&>3e?8JuxO9d{k|j{?ddu7C?7 z0)~Buup~edvXOo3r1!n6YhT{-Kj+?8)zzI2n+aroW5G>zRlR!k-aY4h=R4<~d#_^K zHvazjzxz=C-UWYGfWJTft^j|3{9OV5{`f!n(2IYZaKZ`5WHLx35@>8}#DWD2uypBC z%$++IE|&|cqJRmbWmzz(S*D3q&p$7oeLf$8!4UHK98AMNFcd;nO${n4D-nrA5DteC z2nONtdXX57V>A}SzI|;d+4^l6J^;ppcLp(G78%pfD#D-K0lQAo)6`$ zPXmSQoA1jhi~sj2fXCx8^ZC3wb?Q{q*Vkk9>eZM&eflT&?%n(QBjp;+&6||mfBnbD zt=^$e1-^6MYP@)N6*@LQ3mcCbo9*Fu6z>1B<^ToIk7R+r@br_l9=GdQ&E;y}y?f6G zKXl>ws>|iUQ%^sGwzf9mUPvM8j+E=QIy-`yt3P*Ze$Cns8z}|uKZnkAopo9Uo!hU1 zZCd&QZ6j=JIV}4QW2?RAh~fZ8!sD-h{&Sc(z=h<)n~4L=CjY<4u4ew zMu#0sZ80o-L!YbkkQ;cIUf*qOv!D1sqX0c!-N8gW9+*9EZXdtC=gvE?B*ON7+p=a7 z#7|dL)vsupX=}Qkx1boQEQSVmp{BN)t({1wi7PL^97`83#(fVw2qJ|i(rJGEna^CQ z|MHi=Hr{r@-*cC{@X(|GHG1paU-JfXQ0sk24H)ofCJNj4!`iU}>fF;|Z+MJ|u4FPK zcyi{-6ncY@!M;+Pt;TK5wMJFUJ8adw)7)%l->&OF>>S|LjT`%jF;Vzt>!riz6sG*Q< zJMZ`V=`=cpcpiZQUJ55K{`kl7^rH`>XK={d(b>^Vq3I{-=ie3uFg9;e3lBZ{(a|6N z&o2@0^aoo5aJ5E}ZHuF`S3#<|6`tN61icxgp4$LlJP9;RhuyxXXm#Z#=nx1I3DeEP z2g^9ghPFg8&F^U~$|`zq1u4k==5BlMAx8j?`CseN)pcNmwQAKWKgIvSQ%*g#pI`s< z$3MO-5{Z5!o6R&)TtCa_^99(N$$HgfGO4gIS!kwdjtQNF%mU{8Lec8EX_}TIg-Fxq zL-hA1LWb3DO|yc*z{fm3&oOS7TPJRy@c9=WcLIL-%b%mae*oRx-TQ97`Ic#iUHBVc zi6lSw`Cr9f+66k`DkMI2rS<`5NjvJBa%!2%d8S{9pTL zSl4}8T79weooBoJ1wXW+^7GrI7Pf7W5^x~cO(y%OqGGwR+kWa$AizWgP@U_s&p-eC zW%u28-!rTL6mEq{5R1u5!(_=C3GICZ-zPu+?6b8lU9V%m%*hvaCvHv}kw9(RDhbvW z_h3t*3ly}S4p68+tUNt;lP0X8TYj7cPQtBlx!t=jzw*kG_C5Z<{b5pqdd;POnYh9S z2@z@;6=ol`2tWA2_tDeSV|MrSRR86!yAK;F%>C(irww264}Z0CW<{Xh1MgHqr2ZUw z_5&Sr=b-PZ%aA?xXyn2X%)kCdO#j2Z2zW?oau#YfJ`DSRK0_kx5qGbQGsCiH+i?dD zT@ddnB{dNm!CgxI6+?CHGV_(*O>bNQ)|M&2qH!+37Yc=Dlf_+^PN$cWQbbazRPu*E z`q8gfuUX?G%RMfgOtu7q0bfmJ#P4yt6=ve|=FY;3r=JCV2QKo*^$m?sLqUqy-2&F> zQcE|cDpI%TtvsnkC*4jPLpHt7F>(hfNaE@*eJOshi+}IA=kaIU{^8YitG`A{^Bq3% z{rBA~6pc6|Q3CCK^!c9;1LW)R&wuIL@n>H8Pp{iXWOfj$yMWQHqu6iPpzk9ez{r)C zQZMRI4GW%l3Y{09hx+>;g(sU9_nrE;uOs;Re}Vb4ua>M{DQbc;!Td~m5`U9VQ03<( z>Y#|P5mefhN+Nroe(PgL8&|w9^~P?bFliJJrgm1LQ1}`7*G7)785MH5T(F_8?(>;g zjMKHM?sDVg(@urQ>xa+l7U^HV--o&L=3@QY_2?nZCb)+|Kf;!2n-K7>>Y7E@+(~!v z08@mkuf29V|M1U#{NqXv;pnyX<}-r0$yV%dvxZehqr$B)iFCW&A3W3wkp1JW(_&x! z#`0|Yz%l-?f#7sM3L|;+?KIFnYY_&nxCH65PQjFlDl~?|Xz%O7zMgJak!o~(@B;|m z@mF~KKzhX*_{FiN_RQE6f>UqpkLjufCSv`Su&R7dxFj z0CZRZj-mEnM8JeEXliO=e~Q}LTC82YMs2F8W$Pj($f35bo|w2t0WbSi^s z)2E5CfT5uwL@O)lc-Jufz+WsCKfmxp7j2yEVo30BIV*Pb;^Sl6HmvQXTWYASt}MYL zLBP8YSyCsRQWDpG^%MQK{OY%EWVCRD22ZUU$+jf+=c+Jz-h0t^<+<>*%)r8$22_$k zc*y+~3I;le0Gf131LvQO`p2I}4X1y}(dBOb9lU2=2r)RL`{Q@G)8?1u+d1Wm!NEbgnLJsROI#28Zzgf^ zkr;Y9I?&VEg^u=4wC!!f-ra4u;3FTQSiKI%9)CO*AGgF8s)&T#9(Tv#^2e&K?Bt$c zcjNQ=r0Z1GDd(PluKREH^^ZOp>R2q``d$_j8-wr1C5}+Z({~qqDQ0a->ydN zyVs(A_BgMuJpy?qn8m<9DBGF zK+{~yS)m#JtEwu*GbyP`j451Ec}p&ZN`-G1x!wSbtw%HknM=8r@hh6hJr}LMR->Gmkxji#~jbP$C}Y z&1BNc4wnMVoOjF(iXt(yzNQ-aTwXw@mm-9>G>FsHqxW5S`G4*H^7mg-?Ob(56X2=R zFt96+?cN#a`Pa`P^PSJ5V(DVcs;os7Svq%~;Rs)ZPPTlmCN2;T_@U$s3@)6H!3FbR zC=+7wq$Yn_TbxhuYY;w#6$+4H3T^rxnMiPXn5W5?7WLFVJ1Jke)Ws%3HFz)xxS2ZNR%DHS-m*@GAJ zWU-y5deKKN{?uRYxbF6`z%Y}vINRyd5l_bo%!t~LbR z1~PjGP}uM))S3#|10!!-TkY5A9v!N=>hb^Q`s#1rXMO+ElgiFcBqq%RWT@>R82=$P z!vU8!HA1B88pqzJsj8x~5=5h6^z`?O$bs7VucrVL@?w*Iu4rx;giuz^A)Ou!^*JM+%DbY?le8nB6RL0jAAWkqT509~jJ~ z(ZB2@wEXdIct%HrG9_yjn7?O`aAgH z&y*Cvc8Fl%t^WRkV~_vE=5;S$PI35&8fku2Wfj5QPLV&*T>9&h6Hax%w){2ZM)u80 zthx39pSf|4E6gDukzSR@6>R9lhzq0)T0Dtk3lF3Em<6Y#2KP4ys#@A@YwWhHewWgD z?nnQ#|CO!Z4xpgbROUqnv!~0%VCw>yU%v){lb52Rq6z^`2I$Nyq~(tZT0|ToO{+=R zFJ|<(W>REoERm>jlk(J3L@=^@E0W{1g(VxA!BoWj_$`l214^qra*T zJ~iO}B$>pd3ZRfnnk)}+s8T0?5I3$W6g`B5D^LVcQ(OP*>tB0K9*`@HOy2U;j8Wnx z1ODMPU%bsv!uPQ7U5XGs6F{48LDf}~1^ZzI{-A;>`m3(ChraX&GhgtiibweE^lu)o z-8yISb3LzY{9aV+*Q%z3>3BExn+@nW?-IE0{S_)d_&(HCR+I2G*)>9-CNX^?b4Ee5 zEJrs)IMW4!@_df2u>gZOfk|N>M`ad=dm=(JMQmLYi4s8$L(gW=@uBmP4+TZG6iOb6 z->igo@%s-UC!)Ry8=oj(R_kORyDt7vsg=-sveCY`ghH0}7rOJCSfkuT2BYNndb8Og zG%^bO@!%XFeeip7g^+4{;NLxoRqs-3=ni#T;Fe;_JSnsBT+DvtaMc{TtD5|J}YAba{+nxXH_Q|n@V&0UD7Z&}NF+^6H zCL1TqcZWDbCprp#k?tZAB&BkDFMUiLUoAL$V@BACiLQ==;lw3@%%E=s-ZH{u%84C;L7B z(sUpMcuK9<_lL9~#5B#_g@SPuXAncdfEX-Frc<02ok2gwV-1rIT^4fjN#V>csL1rM zKM%Pb)tXnKH$C;6#KD|(2b0lqd!`E~) zTBa^QT{?}}qD4pr0#Hd9JZ{fc&%V1rydjs%pg`}(SWqNjJrhT0um_?3y~4+vp&Fzr zo6%WOPv6xLahs@63-GvkPJ@f<8UzVu^zeGzsE(5L5A-2HoM3p~Tm)CGh32*pU$YN^ z%jOcQX+kLu4GQF@TibV@PiMS&oRfa(J}L&pLv>p}8?N3o3t{C;qPNE;bpn23-9 zv>xnxZoR79my~J=GMWBxV(U$x4-hVMI+Vv1*-B*sgq~d{L@tm_ma7U(;!;+QT7ir1 zh->Fk7{X7u;3I7O+6MvSwDJxRS440_*H`x!A&S6C)BVaG*wq)aCis_ zw}!#@EJOX;SK%w9N#zJ-?%D$X(iyN`-1)ah1FQfc1%*{FT!mv!xK|r_xwm9!%l~>f zNg(yHVLZVk$RMcm`n(7SgK|cZWoeuzxb{o`+Bo^Zj>~Bj%o03l9zQg11=3yjUgsX! za&#f(B0ujUt5*fl6WK3IPL@z91hler!xYS#c~S%xC<%}KFUbIX)*9jo^d7-(sv(Hp zo-Nq5;!bRS_*WR7RzX&t7jR?Jc^SD21mOu1d@PejQzaA|QegjK3e+Q?oyBWFBA&l6n$V@tkDKRkQ_xey>5rK;$mhPpC zF*v`Kep3@Qfuk?)huv7iq0Qec{NiAu>P;;)w{Cv__$a_vYKH{@7M*a~Q(HH@Oys*j z5uh6pB7!aws^f3CdUv`gYnpiNJ}0ua#|q;L`JSV#{lCA$Bq;rdAG>jMlZ79C$)NK{ zxE9|qWQ~Kx10)5B0OYP=FdEQ#muD-V} z{IX{?pekm6?y7=0<1a34Pf{pAb6JwKcl)770Ko$cV_$(fP2+H|GKv6k0bMG=RBAIO z`%a>BrD(~{7m@5*NerHz+n+eagJC_EbYs;X8~3c!U}PB9!zPYm*-|0$g)9-d0^($$td}R5a=rJAbSa z4xLj<1ur_P)DDXa5DH*f%T19hw*(Pn6i|6MRA4ubCpX}q_?>*ZZ>(hoVdREL*!`Y7 zS@e{tVf^Gf-@r{b{fL;p2b|oqGlURncE==8viOm9;Hq1ExbnANj3m5d)x;qfB}8aO zgso1aXNBtpM5!9PCH=Uiu*ouQk^s8_ELWcc`9;lzsM)02eQa*h(l?JzOm%!1SKg7zBI&4-K~1zvD(|O!Ug{(`dmHk zesY6|-floP(O*>K9bsV%!?pFy+4s zTtJvl;>u6d;@lH9qd=BplE2TV$j7q+q=*N`72LgUHvYIq#lu_O*gROrrFo*lK~tm~ z&|H?t95O2D)HJSI;$czC6#kj5G)vZRjt-#pkzYgW=|Xo5*pbjNU5R7<6oo=XO>za! z4G`-uaI|5_#DhWCl#Y>Gp|CFh<1dp-n}IOe&@i+M2@(ePg)L@OTL=(0s*F}cp~#~5 z-6tYVC~5N8zG`9Qsr|t0X=O!#2N@)?#zq2J0j1!b`30s-h%vcUsUxh8fm7^QN}zyx z(iu=sTqfFK;Q)>XY@!>rsZ$j$mf%zpX^yg0r(fFhc2Mr z;vRv!I|y@H0A3^!TXh8pJ)u@}#}ENak>EywT--)~+J#F#`Y*8Sd(covK6uJX#M<_W zD8TDgkxCLkM{AH%ow63rmMvHS)HlhvpW&avuThOSOV1ue*Q^qgc!v@Srg;ps5PImu z+=(L4Rx>J^;i26J+CeP0~QVJKr?uymWe)?(XRWZ!kdKXsId=nu$zeXXV1~E2* z%8D8c4)q~P2-*9tB?#O*Ks>=jW*|it9;2m%^!;ZnCcG$_hjxVX^K2y~oLD zfdKZGZdgRj>r>=2Etn(n*4Jfi7c0zsi+BRgdmm(&uz#UJ#UDyKI&c~c*He|LqMECG|1dFB8TRRSD=4* z0fJqxpeosiRJaxzpF|K43l)A3D#BIhO$?#^gYQSvQ>ze&$B3O1(Olb$y3d^i>+xqD zOm}2$jSW4^zm>6xMpn5Z$SkGc0bGt7birubdlp4Ur|2`MKZX(S;Z*?V67ICj{MT$! z0Injgt*Sw1XEz!w9q+NDU;fGGfA|Arvd!dtA)Go(sgQ$s&AIn5S%0Jw))o_q{`u(o z>(CWnC+^GT<{EcZ2q!sgL3OvlShZDTOs)PcUDn9?S(DdwK zR{*kxKN^PhHMT6JcMvCbr*Zm-AJGD7U%^}mGbwwPtWQ`zsjCqoq1RPlpkpgW)~rCR zb1#K>Ch9JF4|L!2@X#@4j-mtFAUN8FjCvB?ZjJ4vWUss7l zY7pHoK7i5AeI)d}sBuz6m9K)>gU`Y)q51tN43EG{lGWz(WMw4qp#Zl3 zK7ga@hoH|$BTeC&lGE&|^Z(~)WvG!C7nOo7$dC^Cp*(1)%oOVL2Xj?GXLap597 zeiuQu>`TkG%KFQNN{j7a?T&D_=osWDxrH-EggV4x`V%g3b*2xb8UIU34tssM0e;Ac;tZ zZFqc&aCM9*HfP1S+K3f{P^wr!D$oE9DiqA9YE&%uHk|k?dUJz)*;yNuJHEZ|kST!u z?>}uNHNSua`zgZFMKv2cI3pu1orTYqPHfm@ORuRVp%0*c(~}r(-%YGOEoTowmY?g~ zt^8V31mtHbYSEr+L%3T*v?>UlI@se)5hV&pcwE`sOCyLSio z*lTi8^(58OWvRV~V(_K&<=iS3zF~?w{(?o{e|4?6PK`|8%{rPDYqHR>n&1*#S6~su zR}v?P_{qw7y1!GMX*t8dq9%~Dd(^9T{|HcRi;}Rk>O%$d8@efz)7qpwT-93{i6CeO zWT;3=pRcHfePSh)MGN8kXcy`R2ay=2@UU$Fy&JZpYuh#oPcv{+h#Ex}wPqYqKPd!V zkK1JuS!Jc5=9b7HN+I&3kOXTsAy; zw&BZKZ$Phfce&T&H59RJJ%S?sGdwlGyr9M!yTxSQSJsYOGC z?StJZct|il#fRL0NlZG6ldn!7GAjooO^iOPV#6+qI$WDt8!Mmx=g@m~gd=WvqGUC} zehixfbRC>5vc&j)n$G1N>_Ko(n}kFPooo&>8Hn6YO@Q#fqzpXXY)TlncwEAX0;I2X zks?_Fk!+3;^Ky7M>+=f^L03oai%2EsNFWs^;Pql|;}qnWgl1A=@F~F~i@J{VlvbGB za^$j4CO7cOb4V$ZDD3WnwQdK7H*H66*8qjCarn|1RL6!%nbHUl>Vznw@CGz^!XAn! zNC`>Fd8)d_-|t)xcl9Fae(P#m|8@k(=dLHrJY5LevdiLC+j(t?9CtdO!sa_~q<)dr zKTK>?$I>|kF2>Ux;fqo-F7aMC1HSX9>k3b!`H2>!`*O&TuPhK0cauN1D$`i@Pe}wD zsnZ5j@!cJJUD(#4pw^#qg{jkh6n?>%5!}y3vPe~)<*amO2n9$n;p^{&yT2P6r=-0G z%n^3$E-6^kVcu-;j0BLGif9#I!NU+f~=-V35{9J&=<}nMLL&w z#sJjrLFBjXNB7QsDA3bzk-uaBqmNDjViw~01cEc;m~wWSI=q09e*PXodX74lgckLw z@VPXR1aff(kjNN^?*@^hbl@0aeGL6XRAJ@PsNS}YI*eROohFbdo3!DN0)a*qiG3Eb zDLGrmQl#)D6E~fTBt;0E-Gd@3qD-hh!eFvOF`P{T&XM+oENKvyDm90HKS(jTKm%J& zndk8npH@I98zUm=g%zwvuC@U=Qi=jyL^7R3jCji6XpAC=B(fA5yJt5;ozqGh^Dd|q zRhR?A$Zy?`qdJnP8_E#UCb7T22fLG_;CY^2av@6xd(rXG&&YN&hlm93c#+pYk}Omx z!c-{!3Mdsd09T@NW`*fAL0d(2Gb(CYWIY|lS&2Bs$;80Z++tl~YP@&REL2`SOyS&4 zv6_mJun}I=hm2k(` zkjqY$*2<|I>eL+1;7gMw zV5TA!oso+mSmPz!xDLV>M8ZEsOa&wVBsqmMf51beFu>Kuic*T_M5wssVd%3?g>GcX zm^Q)dsf9%$uN?>?AB>=>wu!tghpu^y(r@$)4Wd6bL~euPlu!h-U+u;*yR&dHN1@{p zs=(An3WXc%(X)RScD(Q;y4F31EGfQyNTUF`ng=k@4y$L6^n)Z3rDhr_LL-z=9a%<5 zDg+OIX>x&xP~}vFYNyHgoHRP)io-bVG5BhB3ev=ir4S5zJt~4>@{yrD`i4EQx_#ok zaDWM+A>0WOY}8hBQYHhgfAo?S`=}4J2whiz^iW$Wib}W$m6g@txrJm^eu_R6GFsK8 zlC@hB1qN(nh6pix$W?kEkjdfj2S3cN)(QrMy zmf_6llmTdqU+;ll{ud;*Z}q|mJsN@fshhW;)jp+{!HjxK=Z zZxHh#d7eT`Wesr;QXZat{Kv+7uBbwXzXf4f(O?OoC;%T;!0abqUKLa%TjACoch>qvNM` zARpZfWy-#oCm4(RNRYu{8zBOe6r+I4AS)ucCQGOO5KUoApt#rNv&iR@G6W!=LC2+o zC(3Ig<>YXa{c5yx4?M%Yq&b=pBNr#JkOq1b^dzO?xkxc>LEbFs|4oq=k`^sy1ISrI zEQV36<8CG!ZdUBdNnt%MkgE*TIV-_}EX!2|or?*Vt*EJ3D` zLc#e9Nsv?N#M=qxe?xMmFm>u2dhcDZhpXVea~+gjT~3D3kwr~4a^yzZUw8;z zb18phmnIq?dITu`%@)r7QsKHdO{UK&E-?r8!R%`zR{Sid?4Z_6g-!^d2Prn^_0`zn zW~svpP=P!jv0#HLH*v7AYRp%9FQ zMiTtP=vecNP)`$M7C$x$sKn?NuQ?P7@GWW^s9iv<70#MJf-I@dOc`5N^2&^rE#4Qt zG?Rq6e+$LAn6ks;oa=@Sd*M-d)W*%-j zv0qf>D5WVSSq}G}Uk&#{I)2X%m~|&$=lMTE#_K{PmO|6FJ`PWHANlfQ;M%Q0>xwvY z1ZBM=!X)^r3UqIJ86EfDET-mJ&SbUXG(ubJtG>45v#gn)mwhtBI!kiyZW z%paF)CB9j=IMDUg~g;2eX4R*;rf8AI8 zq4yp7RIs+@m3{Pdo6}&eUw_@;-S=FZy!#$RNyuKid??czn-QxhPSK`S8p&e2$dB|R zM-AIvl*Oa<)8K8K23PG2xT~5-A;?`26BbDqhVgCF;Mp==W|!_Sz;5k8!Mh#GncWz5 zFCxf>sLtW>0#=0DU9ZBOpzyE84LfU+elh7(+)NXCQdSM#d8R4?U2^aWReqZ zQ>PN56|n2EKVqb7Z^`1v*NhO)A>|y_tQ#)P#IIpu+jirxvF_UMIaAu+1_hwUR)2Rd z0$gQF1TaM%nxG!%at((45b10+vBL`Lm@2Upo>+3haS_h)a;2egM%Sn>3;~Fc37rPa?tWSiHp~5i9UF1zp{9w1!9$`k$s@R0h*uo-5wB>SOS+YXJu(b$v=^S%FrtL> zM%O4(-1?IwAOl%bmW1hIfhJW%0T49`CR_>+A~BH^vty8{or=L|75sF63YWX9lK3cu zf?Ooa{=axPEWl*fAfkgkP#Wl-MyA8xJ{^msI%(MJ{`I4-nYpGC`#V`>mz*>1Jwrz9|Lsb&5pn_ zWHkf14EhNE`q&53H73bw<76HCY@Zlg4-+!*C|U&_8>VNMxK(FG1jnZ`8rWqOl*PnK zAvKD8+eRe!ZIYoEDTIH@TtbIg@DV{%d1yK@DiA`Ht*bQz-}QtVoUR>)UXy@(Mv9by z6l>oIQf+-i)UvY9fUd+KB-3Su3HkH9m=`FVKgE~vx>+#2e)`;&i++lHfhne#a~*)@ ztk%WCD{x)nnjMJb6VOJEfl>%T=TMlfo+mcUn~%12E71PvZ%D~=;{;z6Iw!$K>9>YB zEG4u#N_AnDMlM&btFS>CH@BIDUKxGc5P(@%H(_YK449oT(B?H2U1;`r(d@)0SrT@C zHi>=`_C8XIti^G=oA{89{mw+o0J)Jmi_xKgXmQGR*}~FxDXdbQHJBAyO~b2*EC{^9%s>S#!=YQgUrqt z5?wLGMp6`=@|Xh&T9=g2BFG<@dW;;@Qi`f7>zMd=!(7~06dWl+e8Xc1-~W4rrY_-F z5Mpuzr;cY#M^E=I?EO83g2~aMx|a!EDnf>*0%|tW^xQ&%pGPfFT3Sv)c%&ybzQB}- zs@whcDF8ubyP|2w$~EfjvD!9amPAZO1~DyM1uyx}W(sL|>cVj(>?Fm-y#;a^1gYKR zK6nT>OP}wv-Dq>pT}_`w?VLb}NNF7aMf_B;090Y0T_oH^HKA+B#Re$C7(k2^fk@*hRn5HHS=ablV|F4i7 z?kgs3$|}X>Js6y=B#Tecb0ul{Qq4sXhf)%}gTO0ZPd9*2D25qG3n-KQ|;AW1Z@esEz_zSNqR2vS9H3QT~UWWSH z`=Rp4sVG8ZX5WmY+s3x1?n11m!$FQQyDu6w+s}x`&4!QtJPE#Dk*h`ylHpVVi4d;x?5 zI>H_wX301VN%Dt1#Ke0@*xj7iA&VQK&K^-*kcm766-{+)vyAWp9@(i{mP(+B)QGtFZmKd(gRK9Wqy*27TXpoEPyjofUdN++ zB8RSwE!t#ja#atWG@|l+KV4J>IDs1W+#f>?rE$$FkAIi&oXrJUwxv99lW>CElPL_0o;jdtK;@b)z9# z<-j*r9!Y2$CAZ)w%Xg77RnxK6^czPx>+uf|nd>9V?<45#<>g)Im_dTeVU^eT3qq&k zB7_heU2wYACpd(&9CvZPl&Y4(ED2}ynk>+u2xFvey=eT2Ct8P4!wf=)IS5oW!$->Q zi<3_ujgPI+Eh?et#JosjOEcOxJ&nyjzmAlP>zibLnoH?vH2%+M}4bS0Jav{e~Uy2APS8U5EL$guiS5ZUHM?1eK5W+UeZ5V_U z>@pM#svc4bnW)j}v#`bJKrVx#5HBHwttrkZw_{0~9K#T$AY2WkN~6w?_F<6P@Xl2N zdc8GM$z2?U;LIh^=M%TN;0$q&+<)JUUW(;=AN&zgiKS~mEPU1yO?Ou8vPFi?PqsPL<3d+r01>i4L8gkcByD{x z+Ta;VK4Qtl1CDau>&~S}8B9WnJO)YVCUx9^;>G|kG2FS~9ajKb*21Ml#ZP(O z->LkSohD1EVK`7=OX}lRB+x|yQD^Z46|$&Ke%~!RP7@)R?Nk`S84BjVZ`trXPK^Z7 zP(2fs%mr)*T?nEZ{b4jZh+)ukABCE|5ug`ysIM6ACDdD`0kaVwJ@ z7Y9C72kA0&A52!6DNLu|m`&Hg^@)R|gjGdhIxz2Y1XiJ_r3JGXIR?cb6JU&=Q@-Jd zPymsaD_H4q!gaKor)-Nkvx>8Q8p=?Dt7KItby?guMb%0ZCbmRGY`mRil)RGLt%c4)7Tp|WkXzvW zS#orJc|wR`O@?}0_ZKv>@Dqyojl9VH6;~23umae!enU*{Qh2aZLy}w$pQnM-x1_*6 z$2JnAc(-IzjSD|KPXP8iy21zJub+Q zC2GanHN_OImHi#~!i=fd!x^`VT3KXaIXr@u!3hP~B3tMjEzW$0ERnE&QiN_2dOsmV zLTrTO!k|meK;lXv7YWcyp_yjNbpcoN$2Q7wpqLXS zx)i3&?kMAS(BhAD%}pPBoOn_jQy@Vioj9}jnXZ)lGjkFzOPE&-VLfB(QRVsr#qkR6 z_y=}xMx)P%C3P)w`Z`xAyEQZu;c9kDyfdUU{e)$`tQdtn;`Dcxpq+U{p6BXWPF0Q* zUj}$xMf$u&ckaJ5#aG@R*GagY;t^p4a@Q?{d2opr)Ns;7V>1>D$k8d9)p41>eMg83 z5Y}r7f@e=q096^Qi`UA=3Y_h<;^`RbBYtOHUfsb@lrn`;uNTcttr#%f4%9pD!6`xW zik-_K24-aChf&5cbg3YkBvU-KYiwX$4qOeSyN)Qko?$_c->h^R_)j z*QbsNoBJwBKQUK3Ft#72^Lv#ePyrkUYdL$*j4idUU~JKbVh#HQlu(`B5JXZ#>^WEt zmA2@p;%-}F+|@2S2fGOVjuUQ)&#iKjsgVnD#_BZ58RR;#mg85*=O%#~iXIfVmySxn z_WET_V%atDZ}%qRh|+OhQTlC?Pu55oyl8UekrzY9nF;LQ7E82m$;GhF_F<`8EzO7) z^9Fb_IOBvW-h zr_Xq%t+Yay$j%E_#LQuP(`h`vZv#d~_G5%+lyZWGvvFJ<%B!O>8Rbxw*C{y59>s>k6(EwKKBQNG2H}oP$kSLSm&h~gw7xZC&VhGVt#3_Rpt5bkJzCpzvHyT*}7^3T|)5nkU#mw;=SiDi|e_Ig1p1Ajf zqLgBK#erwh$}QXxn3rexxZKW0(vu;C!-k7iJpm=;=kz;nzbN}Ip@V}M!UZUbqe$fl zQTz=eWBj-2L?oqa(;XDhC3=WuYn_=tJOIQfp_WGEN<@^ANO9088wlZDOO`?_4)m5U zppD5_iHnJ7LYc&h3uw~aZ%F~(mQ?V;9=sbkPq|VVTA7TMvV;yo6fMyz<^V7bB{aqP z+*WWvqDe%6mgsDrN`)f&sAF7FQ)M(DpqG_HvC6(LH-vC0GI|h`MI6#t+5nn=TXS*~ zJXytY7h=vp(VdiqYbX<}Mu_6^`Y_KmE_){)r=EN|I@fPGpuc>&4S!*Bn@!qBC<44z zR;spT9)(F1u6YAx=%AGRubHlCIRD;!|Yqs~(E!^?ws#b2x_WmOZ0Wzys#(c-0eBh50ydU?z%jLR2ljaaCCkk+c zXWL^aq1m!*qLd#f?xi{wPisydKq*aFMcFa7Q)uCQRt!VS<|v3c`_34I<|?8{5s6Gk zNq96*Y?O=)&oNV-1*J+On+I2d5v~!KXpzpQjwy4z0%W;Jc9QoSq7ig!eoP-ols5c) zqiNuG+y#^?!eoz%`Wfi%?u4(pbv!~8iyMmqWV2|m?oQnSa+YxD)K3T0{spH34xRd7>7VfM$q{@wjojvyK z(n5=xiW2!6H_lLs6f}`UVysbwUsp@~q*O4XsAGknx_sv9CX_}eOQF!4y7#IH8$J6d zs_03kFjdSc7)zJy{D_@FS{x1hb2+pyKwFoEj2i1uJ z%2L4r7#Qd0GSX1SMI5>lMU+P-gwerd{+I ziuNXVVB}EGK<0q0V{Girr1A3p9xP<2FB7~FI!`WPB@nOeH?X{{3RQx08C5#jPby zqTpZ-AWJ@bm6c{H=0@w}KGZS18x(4t;Lxab*9lu^?@nymv)wE~6-dOWK68@b$e8Au##*3s92;h1nNbvTDfn_%$ zR@bD~RmkF|biDh5ZF?>hFnIjQr_&R+)12qSgAj{OgL&5b(f9NJp7e9+_3g4jsPf&& zB{HbaKo6&j)q>`@6t$GsKd5{1P-GLgN-KQZPK{!{Sd7wiN*3({#!}LuP=4hZr@r_~ zUCpyyJ9pHhtCJ5%IW1ilcOGoh`FB@VzgyM+=+4bB%`#R|w}O;{PC zWy&BIqB>LwD1upi#ZzdWcl<#Wpok8WLZ#-c{in*2M8z)4D=6wg0k$aAcrK4cVnvZ6 z*)vNkrc5Te)h8~+mJ^n^5ssYJ?D3p7XU<&i&raeeTP(|dB_1Dr{`bGXZMBo8G|PP1 zk)r^*ChGuL34A`EXmXiU9?nWnnnre91Gj5PAzCLWMD%c7YoxjfyEkSNmOEY;cNfq4za6x8Q~wZqAZnt<^N`W$NQq)UPieyLds@5rhB|Hd*6&i`j5E zEKs0OC`5q4H$o&iinz^bSNM)UWs##0=N}GtvECMqS zR5i`Q$iRMVT>lEDEq+hg#23exI~B%u*)n+6IJh4_$&-Y*k4WSdHSs=i5BT-3eoz1Y ze(Kbztz^wV8HvR%^m%NYabgwHgr=2MjhHk4a`^myInU53OYiCI#%OHh$Qumejws~w zr4DpClNrdT-SPeJ{r5eG^0$;bZitn+3s#6l6QYYlz#mM^TzCesa9Qb|iu)w6m5XO* zsX1Zw2l4Y{@i9_>8*35+2W0YUYHBX;>+8Fo1Rwp$f6l?D&TGVmT^82vordbEr^6SH zh~gS1*tu*DyH+F9_?es;b7^xeGqC{Qgru5|789jm2V5 z)ARjb`^uNw4zWUva~JlFccs*=RVMr~KkvZ(3by*{ zc;5k8(nut7`OwhNt@CFF@z5`h#r_@z*WTnt)ASQDd-h!6Mj1tQ;uFJz0~qS>Eh<#` zX?7g6PY(1!Z?aRBH#gF?e*MOC0zS`!VsvYG2)(_%sHv?-Hc#Y+w3i7^I+;W&ou0@7fjc`*rs0%2E`{Ilun^z(q>_cIw5BZ^f7}?|` zBu~^E#8fHx<&&Mhwzl?y!NI}5&Yc#(y*DnzOIvI_vTiDto%tSAR8$Dz7ZJ3lV?R>K z#KinVA~rbm%YmMrTW zvg9sU0kX*RHtvOjm@dXGpU-9J`Dt<~PaCFj*Z02jt#zd2Kx6J^7SiT>-UHgeUZ@c`l~Kz!u!uyif-+_ zMEGhPt9J{+*WIxXgMEDm$YI@v4S4D0m6%c&xnkv-ZMPj!3h?yP&wW6(at|GdrekXZ zd)zMgJTACBJjL52MaUzS$s$dtz{-&&gb*u!Q!{vbcCkgf*+t0kH2r-Sg_O?`I>ZmF zLVV=v3+P8rgIPG8E^?8aSZYZZz`K#hhG2{iAs-(h1jvZhI;gL{MS{QK4Ta09+7=GF zTW|XAXJA&G2(O2%-XpD^WBWbZw}?%p%4NVik*s>@CG2TyBcsW&60O+1d-t*xET~2U+<76c7 zAdl9Tme#f}T>UxJHns?o$5zk6@9Ans``$f*T$cBJJdr?Kdpq%}Vf6R+i$3AwNdc6@ zssMlMzx48FaxPBEolBBpmimL0 z`hmuEKe^F8GCcg7=`&`2+)uGRXGvL*+z&f8Zxl?w{CD{MZ98@#LtKfEO%r+U?(Qye zf}J~e9@z@8d+P?A{@xEp6N$t#6#6ZiH>VXheDhrB-d4mi_2MRqiKF5T7e~-Sp#Xy6 z5d1!`*a4(au#jf1KuVG1H3rFTh@C-s$5P%W$Seq#Vw!~k(=Z=2Ec15DFxFgl;n`^v zR~A(!2(o+vD^Ol4P@;52rBM{6tY+ZNE5Hpu{hv7`^uLgwU%+tB0_E^7Hav)J8#f4- zSAJ#|_FD4y95KzGKVKllFd@MH{riRDi}-KH4&{i-15EZHw)>4_GAVlJ`hTrPMA?F$ z{%JclZ|_50O$`A0W423Upva zNTfKT;JpG#8BC*w2;>!{1Xu9J5%)gw><;R%TL>W@A!XV9i4UJ+j<;rI@}d3WG_E3& zsLI&tes9t>{?E<7_}5S<^j(j~>nmD4Ph8o#c@x^(_8f4&?w%g3TD=-k3J3YK#>Pg` zCmcpQV*&yNUe|@c(+CiaMo%Z`sB8(LpdbEFP;dxCtkq)?fy^UGiV#m`#U4EcLIvJI)G|!5 zk07rpM2bNDWN{z0$hK?PpA3( z{#(6X-)SC)H5~b_yUrN!~tY^%l7Tqy>~CzMey-WO-*?ByWcGY|NQgMqqDP9 z2%qj{!@hm{79Y_FkV>V#z&BMHcH!cag1GVC0@iQt2PuURJa;ZzKHqHrzyP|)zdg5d z6^JX45;Wncd2=yi+BEpQ-co$dRz5ruBSJJnoyjE9FTNl0c@QLbQCnpTSCB}iDcmG< zNM>Y*F>f#ojgaAd(_1*7-N!u-KQ~OS;}#>IznebW^2tli$(Ik?z$pn6E0gmw2x4_G zrL_3yYdwB?)6Xvt2E#w|c)dY4kvv@pUq@H_K5SmUrdTIY-dEVLWeZ}XanUzIfOPyB zXPm)?B*-7PVxbM)(|t!Y0+4W{bOR%N4VRu)frZnf_~V)YcJ10FZj5iTp`n4(p~9!J z&to6Qmco$7e~S$u>9cur=HMSb@$v7`YmP4FPvi{6*Iacg(x;>hnkv@^;HBtO=^SDS zQV3EC7Q88x!KAR>5Suy|`2!Kl)%1Hek&-<{#|>O@>3IcJ%>0$Z+-ljJ#)BcikFWn} zjnC`*1quGbBE#36O{CUS{NCGjU`nHt6#oSZ@fhi5&z{Y0QwaU?%P&VuOA7|bIBvV` zHuR8d;NKSH*D$7ab#?7Kk`>@|g0N@!8m_yv7At$hcy`mUuzv2$ni`q-C~7n}v2G9` zV2@uDag>uo=%%Zxs+Rrk*Eg@&wsmI{o%0+zjN2L1g5`=(Y#xVbc?lJCxAeK}$2r$9 z8qZ)Po)CYVrX>`De~(eZEJ!ZFe{b8i_1TwJt&9u|^rz{%^Gi$^R#mAP^`ptx#Vx^ zBow#DEA|O;kx%E{&PP*OQie34L`D>Fh{9IhI8qd0*v>X{q#U_HtbS=F)~wqlLNVL6 zR?u~SYt@R!S3LOSsvzC(FWesYWt_$>3ZCzE?~ZNQx^dkkLk)IUa_{D_FV+>hztgFBj0f&V52S@!VqyIwQJx_@8$G&-PEU`Ln;3~Doq<40tRpC9>TnrG39U@5TlWgu_Uu6*7`*?y^DbCG=bXkX zjqtfyP<+hGWc9J(p~)`wZt90CckJJ<9No9^)^0<);F+Eba+Y0+GUW7iNs{>*#WwV& zxt!V+l4TA zFTMG;+YY#opY6_w!dOy-)8Acz)BE9T$r?uNsR478`d|Zv%*)@30NzmrAlP0(emgdj zv!hlg(rf&8F$^mDeMW(0%a#fFXXWVV=#a$BVAgJKcHxYteO%W^-bKXwdILO=U>%f{My2Y}&d@xD0;HijYnu zv3 z?DIJyD6;%de)5x8xNxCJ5WVusD?$mJga<3kjfe8OBGK?L`{9c|`l%-i$*vDn)Xwyu zbmH+i>4f7kYsT~m_uypzNFkDmlqe5imoTHbP7F>ZGdXm1_G0at7faE{1jzr~5C1=V zR}<4z7Dm6)QWyk$7Ujp8NjivW7>J^zM(Uxi@0Yr=u40j5FjaU~V|M%feo|GHIyyS2yStm3nwkVJ z7#SI%;o)JCB>(`GYBCR}rexDx19@4q<5#d5^YIHLgywtvJt01V$ zV8}bd4dBJEk;50LU9V8N^B=SRFTVEoojQ5Xu>Ln104$NTU4id{u_foPp7}UcS5`2o zdX+UrqEYJU>7mZfPFdKXNF*Wv01klJ#CMIaU;&-VJ#zWMRaI3biZ7S1UZabbE{nn6 z-nNz6x3`gxv%{Ag8{Ty;lg9GpF)tG`HZKM^tsOr0{fPxbiMY|V02wtkHG6CIg~1xT zuBb0Flw?^YnX}8~64&(f^s+rHnJ-@fo@r_U+x48Yi~=heM6|xXUPw;(4^o}v%d+~q zT54@+rgjF!4sZK=>HfkmzfqEbd+YY?^B1mOIbeow3(To}35pUd{tkXJ`{XGN4E`iu z@7&>~{rmP%pkoWY&}QlMz|S=ILJ&+cH2_w!(`OYzyH3>C>9U0amHP2#WcO=n-L0iF z;!K9wlu!j>9{32)!cZ~ViOeIbeeyw;3h@wzU0AOmpm5@{)xZ+5?n~(kF#P_<2+cl? z)2lz1Xl(Kc2EU;F`>7e-l&6GUd6q^2gV*&GwY0P-)ec7+cX({-?%i0i+rsHT#-HuZ z#SCClFGA zz~k`i|Q(C(zp3N_BO0;x%k)WCv6!B`?^r(M8_U*EFVVR+G9d5RFDP3jqIf z5HN{TWGz0&6aMvbul<62)jG|r{W_$TRvsN49n}imMhgIi2Z5V!gV@iQ4+3%WM@|Xg zJa12xoxUy4sQfZ`_R(U|Sic2;A_ZpxKljl=27$k5+4f rQ=wwFYt;Z?#pe;04E)UFtpEc6O|sQ*O0t?HNwSJ0>u6O| zdS)ZxbZm@;qFR+9{9f5BDecL1@LQrRy+tPiu)Tr+zC`0^z-}RFU9|7ezwI$%VQqM> zP&eQ9ye)kBId{DNqW-bFFn`y6-(Bb}z8cB&U3q!SH6EoNtZeT{&V4R!xZG2>=DV+U zrUwQ;SnsUSPCH%i>6|TQ&YXOnIi2~`W!v+G*L~kt7{Ryevp499b0jGeCo0WU662klJ9$NqMKM+bXN0aU8BViDkGXfc6{G+K#x3^>J=WYtups2+r>iBJh&XAsJh;~JgRK^2Fmm8&ZV zU6E>{qH(Yye5VqG9HRlT@%$a-Mi__8E>g?U&x7;dNS#<_cg$dev@xYC{Xs}wjAF+c zI#doqSB6~9k~xNS!Ir}Zio#V>5tHnBsv4>LOqV@m=aIhj(NPx^#3PSTltp^RR{K-OYX zqxoW~(4Vy$FZAJsiv(P9<1?{{Cu_!UHt~d(a4{AP6AfoSZoY$cFPY$M&Wom2wp;n6VI83T+Huj~dO zG4{j&Mk`)>%RVTW=6+I~dK-bIirV94RCItOg>nv(aL7iDPoFJxUA%V_egjj5IhFtb literal 0 HcmV?d00001 diff --git a/B4A/Files/cliente.bal b/B4A/Files/cliente.bal new file mode 100644 index 0000000000000000000000000000000000000000..b98683424446f5871c4b9d9c1d59311fd22ff713 GIT binary patch literal 40332 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 F&fifW&oKZ1 literal 0 HcmV?d00001 diff --git a/B4A/Files/datoscliente.bal b/B4A/Files/datoscliente.bal new file mode 100644 index 0000000000000000000000000000000000000000..81e7a6ec1772df531f061db62a07b56b8c78f2f4 GIT binary patch literal 3719 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 SIO>W30000m@4y literal 0 HcmV?d00001 diff --git a/B4A/Files/engrane.jpg b/B4A/Files/engrane.jpg new file mode 100644 index 0000000000000000000000000000000000000000..66e5dc67663d654746233badedd0ebf4f756e029 GIT binary patch literal 2292 zcmV_riFYoxh#gon5A@ zwh*uyjryDZ@0n#RQlvCR}TE$wMwT*!CWv+kMNq-#xN9wk=kt zbxKgkUffc{{s=uV=B_MJdxK-JP699{(eU70(w?#xn~*XNp}X130!I3vIb|;}nR?3J z`V{_0Uw`{i=(xb&dvIOi&ktdPa<&Ma0F}`!^A5;ec4cc)2{58IV=RYkB>^+OJ}1x+tQ!Dp*GdVJNY*)l zM8?*pt!Y6jMdc*Sb9U>KfZ=;`JXZO52bh|I zn%k5Ja9`~k+AKw0?cI&82lX@6BnXj6qxEN;60?6$l*9R9&j!2 z3ff7an#_X*IGqA@IiuB%uP;P39NLk`@)AR_%{cS6h?$Sf-8L6S3u#Al?9w7RQ%P3G z1LM0o=@FLz<;Lw}hmY<&2%tMom8HbID!N#g0MMc`6$eZ~*Yu&z9n}O5GWSWRPQ(SF zylt$i#aP*(f8-dPNv3n_0x7oxVyyv^ji-hZwqkGX#UuLN)Db{?H1V$DIB@bhcO=*r z-=h^fwp^)&Tj?d+Qwmc#z@SINdEhv6k?kO9TpN0RDU5aI4WI&W-ho6m2i@wSLxDkN zEwN2YWAD&AkjPUr2{^Sf0vcI}cXKPs+jTsG!-KSEetVn~&O4Gaf(I#=;4HP$1(Nin zF&_*UZe>Z;BhTPuaez;7GCQJU^YS+7mg#RzxzU{rslP;V+XdV=Qf0i4JcAP=y@G@> z52`GB>=YNg0gh<0l|@hB(p27W22r^fGDo%vv$!J zJ|@wyr6#1he~m6amC3uM0iu{=#4L6b1WJdkjhKg{RFA6oXPSARX@V&AB#l&Di$Kc2 znNaMc6Ik|iGtd+V^-SjD%t>egNc^VYjbVD`N(B6pij`V4v1?1_ z7#}(znO~U|jw+K}E-^SyM;D|O^Sg&=tg+y-o&?q6JF%HSm7S%xp2poU{i>)b-P7t9 zx%X*4zyyh#2~>ZQIUY6>s7iwN9*$Z~ruUvj!TMkp&vzAg- z0G)UqzZU^2NBsy;*Z>WE4XkmrSOiFuk-naGHI4wep_vEJb@r-8fOOTI2PxtohS5s0 zEjO5)<(7Ac&s-c(RI;Kwr#xP3CCGN)e|D~0w%uq z1$kHZBWJt=L@KH*NRNhRjdr=CGRsKd4QmjE(AAR?)3%~|5q%CG`!aFh5Cs3!M`r*L z^X@#jxm(U&xz0dHj~#291o?WNoKF&NY;L2Q-9&I22~y{SfzvpUIv)_6MuB9y!>%ph zWUl^Q=#w3bF`mX^E1fVLkV}S0;nY*H3l3jfEo@`qrkBS$PlE2 zvICzzGW{3!Uthv^Z33rMCV}(rCam}&7_VDRxKn;-jyyqR^i7t!QEW+RBsfk0l7LjW z4~QzOSpw9Qu%&iWkXRLg)L3ww0VDuPxk=08nWa2PjRwak4$@#8s+uXQ`QhZ;IS$*V zgX2_!EF{j01htLggKi^0ks?4XraB+4kuvo$l#wDuiWDhQq?+ho0R{j&NyjJox1tRI O0000YTJ~qcU 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 literal 0 HcmV?d00001 diff --git a/B4A/Files/folioabono.bal b/B4A/Files/folioabono.bal new file mode 100644 index 0000000000000000000000000000000000000000..0cac5951602fad6c9eb2ab1394266712ad6aa7b2 GIT binary patch literal 2431 zcmc&#&2Jk;6dw~iV46}sS_q&007BZjCQ11$AZo=%4Y&@trja<%PIkxfz-HIloj9bY zNL)|>DX0?S%AG3*4xG5qC^tB9g8u+++|2LyHoFOJih2NHX=dMh^XAR({ob2#Nhvj6 zQ0i`c%NTcI)I4Vg)~($Oxtb{pvF`Uxd?#$drEV11Xg`;mdeH>iYb6*&Pn{AS_|YhA zZ|l$m)8a1TE_cz3@Zk?ISF%Th-0Va2A|D<)(6QB_n_{TIbRA3SqCPjTTHo~;x@YWC&v9chfXx8PB7<1VZuEL zKnA91LqpmVw-!k0Tl4MnwWhST`N$EM!&m5GiP`U6?HOXLH{Phd+w3sdAO~;&+BSfT zjdo{lw$@}dr_*HQl}K;?`s-&Q{F*AN%rBpUa(4d<8!!)FI7S}lM78_`CV_q!!cIm~lUOQ@(+DIw>ELI799b10^Mf zf~+3{YB`%n=4kRr^t+LmN!Wy#;}C9(7<%7=m=jnkpTx9_m0nA;lJxj|J zrW~c}IpOi(TDS)z!7!x_jn{aCc={lzDyT<{l@`$>ruP=0W1(+|0AY;^t=d*=L_QbMv@) z+&o^`hr781H;Jt4rTzd#{_J>TnJ^m9*FlE+=EP5=Do z+g(Q3Y@gq@xAKal>vS(K*2$#nab5=)q`mSBo?gIvZFhR$^PHaDwYIL?&iC9SQhPZc zc$I6^UK@klH}$p8`x2f1z1;=w=xYMt>m244=X(W5YcFSAUV*o<&-ET%b7!l;oy$AN z&hA-=6k-OS(?xYOmJv(8)-jm*i9zywJsNC04G6)$`A%m-}3dcDDhiU5>@9 zs7ba0<^`8%FLQD1+(hiD>+I!#W9V%AKJ9h??23zc&YJVZhS~PY-?&%AYY%grhSl+Zr`Zm z{J7b{*~q~u>tWtIoo@>`0IRTvF3^1~*{(x6>}vDAf;jm+c!XWVu2RjA4v0j~dHc*h zjlFBjNOnaCec1kYo;!Mg>pLKSKEUDcEd1DAxyH`8cTMwFY9}(SqfNVjpPdo7T@l4x zxNWbmv@NVdw|@!Eu5-Kx1e^O_gzmzx??T+K@ASoP;peRD?#qkb*JHcdiMti|*sj~= z?XELgIAB-%Oo2X?Zd%`HSKreEHo+? z52{!CF1vp~xH3Ahiz{9OEopxPu$Oti%=tpC<Co(V&4!zH-JtG5a@TYb z$9;J>?0`M!qC&3=tfN*U|lJX?18|_s?AH#VtJBjv({_ zbQh9B*h{`u<|3@?0!{G(Pw=96h3gae*6UkH)%iWlrDnp*tMsr1ydD|8a2D{sutK-y z>Ripfd-c}!93#35tje4}+FxJBOuHQWUY_ur=Zg&Cw9g$`6ZvDr;jUyST6xNLF9W_Z z^Y{Wh)__>{njP)3v)zjs_FQPvX;&_gR;*zw+uF@OJ>lkR@2}m<1EuJ?{z3fs?ZC_aRI`k*3OoMlJ8sP$V?IiR0TI|k8cOIL$45Z;=Q=s*j&{c*Z>m^r~ z`-<0`(RGfV&glcv>NwLhib-g_SCidbkpZWDuHExRj}Nxwv}f{mQRU_J8KAAXg|z1x z9d>uFMos>bL`ZBSN7zYvvoDU_E*WsT&>N7h%5)F=qI7OoV0Za}mFi-LVHnHXgnfS2 z^&CC$$}QfmE)-pB1Ga~bJ2+1!e3)!s+UMS+b^CO>pATjB%V@s@i_^=-Gv+=rrOIf>@}Hrx~?{yURd~K&3UEgdI0+_ z=`Vr-oBcaoo{P&`xl>&K4CjkCSA7ln>54DxwW1zfx&fPgaM9&}@CA*IF1xaAuWP7$ z+1Kzg?$kw9Jzvl}(zPgN3%^+os_pYwD;K*m_U-1``9@n4Uiv#_x;x#&C26dG@j{_W zGlSigGh9YKd~I!bCE=+GgWDH>eO%?@TTcG%ig_p(GGFF}xI6o)QrZ{rv|IXn=jkci z%Reu(2yP7cfFP)E>%Xzyo5vT-dJ7kINfGkS zmo1;W-DTL_%@VnJ+&nJUbnQXetf|!w#|`H;?H7r}N_NWWL zoTotOpFn>K^b_S<4xG$z*@|#Ck1yov-?wa&uKX;_o=1qYSC)lqQakpx;At&SW{&i; zrGGUu+^sZVYpq$f-jvQ>^y$BQL>_y-{^oIQGeBM*pDl^@Z50b?_1(AdHi6%yboQ5Y zzE$)&7mB_lDYsPpeA{43Ei>dl519Fc&OY3;(f0hBGg}?mbam!j{i1Hk%+?I8m=7pl z=LLJlTUfki{?q*4g(trrLx9%a^w?6HAci`q03fn1v;K6sf_Tk#zJ~M3j z6&1NSI*f$@8d)awY}YxnH-EPKu<0gtvpGn%4LnS5AD{i^=y}I2m$=L>j%t(IpPbJ3 zr3*ZnD<_vlXktgb*XL5d9DnS&q-3UjT|_sBzd;jo}UClp#o!3W*@di z(jK@t|LPT4`J|O3r$ym~<=33w>h`s$oeS=OQ(nHREi1aR@vcefKc^KdVa>U(d3*8g zwtY2Btvz@pJHo0D!3_5N2d|IH^G|-)S%mylN|(FEy{vVcgaNk-&^mOnjTg7X)0bbf z@X0%2vvWRKMq;Y(YVFo*y7t%XiR(Z4GO)weO!~c83U<#YR$caD!?KMNx2x}RT75ch z*EV64VsY`C{P1K~o)gsB(@vb+T4}d??aNjfNVg^gHFASYjdNJ8KF`02wN(;p!KZES z!KOC)wR&Ji9kXdaU$|}6tFhOL-?^r3+bWVY@)sBRFAT35wCiQCJX^zoT1EAyBz0}| zGG1`I*)w#vZJfMY`A&T%%jVj8jcpTCQX9cD?aR09 z0Tz6VX#`ZJJ?C17d24piH358TT#CIy#A|D`1(vfAtW|fh!Y${B*R6mgs!PSTeed#2 z^D1-0v$O4)VsQcmTP*o_c@b zNxf!y=GOaN_1Q4k5#6dFTUHwi!kbq%R!~74fswq3_0_n1~#F&@Uvxq zi^;8nb1#B?FTHVbJS`85&O9ZJ+SMJh25+NpO1>Q1!G3&6)O=zcM>$g$WBa z`Zd_tPG!s&ozUha@xaN|Y$Vx6^7!eIcDryE5&C&yUKDByi47 z-HcSr8d4jFxVF>Gl1w;b&C4Ztg5K4&;r$}aac$4Jm-5?6bbUF1_k2i}jCRg!dnP2G z{XAl_RL9nBw;56eZYvb)JTKZ;7<$X zBKv|Et&=s6DB;uM5}^fpX~s^OWrBvdHORARZ+vzac4gZa->J7-sM#LTzZ;H+PuOlp zK#%OM+0?C-HuvssX^+T2SI_%eU=TZAD+AUiS!`VavW_V8CC%|Dg0xtRify~JVAnCj zOf3Xxab==hyGbpP7sb;iKu7X*wl!E$XF6V9bM$zw4d)&vUA%rT#^Oz=x!l8m`qpmC9EpPvN{Z55s zwvmyVc4=CB<5Ww_y>v}4P=u_V;hfP0#im?{^g4i}3hX0EPn8Eao=+{cV6=l;HYeR?u)Ty+ckb*P=1=QzCB?&pg$G{RCNi&FDr zx+aPosdj5MUb1i1ci96MH$E!k_lh^?V8?l}!ed>8(5ot+OO(bL{+iu* z_ktE7Q_Ze!9vXA9e7^?Ltf9=fI>^l}1J{B(W94&YJ8xPnOK0hb;+;#H4-aKC1M^3SlgnunSBRNQ3kV@>Y zE4L&w5IqMA82RUOIpX~GHvP<5ZlWOhC**RsEMap5>C#T*rMS*T{L;xM3Gi)<<2vSk z;9C-)xtdlP77wPgau>Oz0O|a3)Q!GI>vCm!Ef!imKq;LHTRfyyNxj8f8|$?yi|P1K zi_&g3$eujynbF?mQ2Fdke__mrsDq9eQ6*p7;m>O=7B!sbaP9mSI#!i2o54t%q0 zEtIgT)DjrZ=;k+XLAugFMJLpZC&A({vcTKIEsFN#(0EO1-$k#U-^9sDIs}dDBH$e1 zx{Z?LXs_#eS(S?GbL`n@H)OGAHhhosh5Lj~eav<{Kr-nR+Tv>#>tGX{Rx4)sLtj(< zWdH~*JKCOkGF{@$I7rJx{%VF^2fh%NtKM_@d&5vc&tZduM5TiZ7y0v(%*f}n+H&9X zjOm~9&)izM<)6s4@1#)H7U=RtGFl56R8iJSGJmU9$hvFhW{Xpcu#{b`r{BO*?8tO) zv%j5z=T+yEQvs;Ya zIj)s;9IrdRxFg%xQ#R~uV~@dy=i@$wD>z@T4c`gRRrP_xj5~laO#Eq)jroLvqGv=; zeZZCXr}PumCGa)U@-;{4oLo#6G=ZJ!PsXi1N|tg)Wv<;}v&Hap`gsIB21V7dlVM8%jI~m>YD9n`eXhMFNN03T8&ykik~W!YYz@<{ zb$@yQ{{>xz4d3G#(|Sh6FvnUS(-k?T7o5&*i1blxxWMmqzHUoqxY zI^ewZ&H@ODj{hV2c|gg}eX{CNUa#&N!|zr`k^vTaP)bf27nvmfY-Fx@#VE0FBQKai(y*=E3f(&3*1?`=0h!mQ=HQeu zXDI+`C&8-X9FxpzBA7ss__m0rPH2@s0pGP{LrqZr3b2P2{O?VhQx+S^@ET5XetTqO z^(mz^`q9(voc;Ehg}+8O_zh#e#eaR3Z1@S?<9ErVKV~!%WdXbA9eZPhj4e=J^?4`7 z2a1w=>{J|hHFk?Rs;yOSh*y&Zi*9F)c+K(DKzq|5L($LPc$>52f?ZU!u!nX| zg;p2k3TuhuT}Tj%tqxJaX@pm@rBEol< zGeQ>k+Njb$y!eyiu>?S3r<%b3a|!Yj#E@neAzb^VB1_Dn@*R$o&;I=q+3g%Ezefe3 zkDywEi?-V}Bmw*EkyDlA?++k{Y08jQA_RNoafP3sWFhd=|GvB{mJ4!QUB8+`W8X?O z9&)%$!PKoh?147&Z_r-;4``Ll?3_6aIa?X;(7zuuN5^tbZqI!rei7Tq;pNJX2&_h4 zrQLe<-?-xXEHgtA-{Brd-^1P#X(vu{5h146!7;aHdJd z5j)p>FLN0SZIuQB_+0!8^1BL}bb{heHJ;sJz@}Xgn$%XBpGUzg$6Gp{x*UIh|wUZLpDF(9GTeQ8-cjPYp^(;90u|%gj2_Uy_x|6n%opad5VP3;k zF2E-T-NF-WYNmz|6}hgduilOQhoppO;XMm2EJ2`<~QFPHiAb_jOI@H()eN2Sug`2U?A z7nY+{1dJ=gz+Ei@^s*eHebLTCO(1%{p`SZk2YQvV+`B|newU)2pHs-=p*_eh_Wj!$ z=B$qpUlSmZE_NkF7NhW=tt63fEvm{wUaBz1cBS8t3ct^5riJ9J?0wQ3I;VO~#tXNOGSu z`wYBleWQgv&qI*21tQcjEx~V6nEmUNLVrS$_V*YJd%|$bkt`=%heuL`%B0%#Ef-Xh z++Mp~^$4`*xg{v$Quin^d6O=eBk=!w6fJ+qM&)Y_bVf?~6znJ+9{a{G*MREP9KO1= zyed8$Hrfe<0gOyA9kig2jHr!^5OUMJ?_KR?kD?9JpnWkUPDO#j{^Tm2~oBY#8H^}slmZ3M}tQ7E#i zuAAB<7EEiA{nFRG#ZEY?;{)!v!Df(Dg$2Y<$}$|m zUqhZe@V8R!$iiZE!N|@j51dLPO9DZ8m`T;Hux{=^Cjs4iHtY`KTMPJSg57Q6uz8g6 zxoL0w^NVLg{VK6X&cf`klc#z}=+|G8F+bv{th)$Li)(jU5k}fQ!Ggp`d(3pVyA*f4 zOm_PQ{pJ~+*IyD`|Iy;vIo@SV!xSxWgX3aIk0Lt>b^+a6s{`gF*H2_Qo(+H0Q!uRs zF%0yGx*TQNm8vyNM@&CIHQ*=*&m?H(O0bl%RBOPMSJf`#;&M4GCf7J8nzvEY0}=!w z2FeCn;uvef#XU%%)1P1ucF<6D%Dd9UwwhE`EMs`NTkBO?<^O;I?TJ9I?=Zjj1c-sY z9Sj?_4zR5!@cz{|#CP{XyfyFQn9|yp$j!dSF83As_J2qI_6OW!aEmXR#)tBhgS03m zZy|=#OpH#+gQB^*#gpn_J!e6`ffE78-ER}rc-PP&V*~9=YMyRk8sk0@xP7Am`FcRT z6S$xPe0s4YwbDW2X;oA#S2%h$>?0V=kwM7Z;XFbuA!8C-z8QC@B6XH6|3k8b2OMMn zh+^!Sp}k?G$0;cVC(Gjodh|L;-*dYNObgC7ksZ#h1+S2&o$EkncKb{8%ctyb|AOo` zaD%F@)_9rO>dn0flKtYiz$E9nB*+o$A{K!Bg4~%i_qQ4D$(v*oTU5dM`5%+qf}>KO zZRs}}G~l9kj7jO#;IiC^Y3a+FYxl=c5y=&)yqBLSS+iNRz>@+0DjD-PX(f$h$=@T) z_7l3hN0NA872cK?eNaNp>-h;Nc`_5PQ{`;z1h-OKXeIwt z3^;<6VG*14azk>BT=ehq!@*@V+zaMteONiUV++lj6MN(Q8&9F>E0ist#n``0HuE-{ z%FoG5=isx4Fw(BeK6aK5W~rKEW+uNzKWF~-YxM6cbdY~V&h{_KZcjKy=xRf#Gin%> zpDgC@w9cZJl$b%)CXy^?cr{|%DlLJ5t6X!4^o-jibSNHGm)<0?%%JExttZ(;*K72c zM&&hD4Y=jv1DBhTuQSP6I7q#^wyx6D=+-FVJu2yjX%U-sfFRh$)yM18v4y+@U97V` zKjV!0go_h_p|!7)G5;o&rXG_GzeV+!pOG1VdpHz`Pdh5q!6 zGTT2Q>wTXW){**N+fW|2GUjg)r>nx?PNFcb78N^*T3MNSTJCnb#gdfI=sKTrw9-p5 zMlZ3FL)fm^|%0+E%_oneD5TnZHhl{Q-T&cgX+0M~86>xS~bu>g7c?O2&C1 zr1w(zwo2_N!eb|?ok>NURjcyVOYA)+m03%D$}?^jiZNsuO(*w&t3A(l#bJ1+^1rc301C zu;&8C#2RC>{MZRu>71dxPM-N!D9rvcecF$y)|#R0kr#)SV%=~BXqGX#M|S%redgC` zYq0bo|JIm4rjPxQGw_YUx z`qvWkru}PR%s!aBWc==titmp5+IgF-C34bG|{A{Oe?pBbnS!h-UmQm0{=f=PrHDtL$&TLjS%=Uj1b# z-hS7ZKcSTS35V84YHFF2VxW3xNKt^*43kc>H9Hxv7TR&P238fl)&mDJFL8jdrM>S7 zuT>BGvX|UmWO|J4{>^DcYiCg_LIP5fNobTFJ1L_mde@3(A^Rryld#CTT$xH0b?Qlq zj9Uo|7}=IIH9{uWh=FaR&D}Tn00k3kfdXNbIIBJ?-FBzVJILK(eSI&=_Qn7?>M_?R z2TtB*OMc8T;Vk<5D}-bJ8n+NUCVT#X-10H4@0oP*HTto{51T0^-=VzvF$3vCE!MzZ zxgz-VwW*v%6jR7ACpETnXS{8tg!+a%oNlqT%%Y_aBm)ooQfy<9T)_jSbE`%d7O5R# zTIx6CAB>DS!=Y}uKw@3Zq>~J*ut4t`<$j}%(ANT5D~+(22bcY!SIrDw4(Y%xu&a4* zw<~g9NS+Htt4T3oG&G34X&%P^95eQo1ME}g1H43L{7rJpzd~sCG1F0IKl4*#{=k@j zO)mE%?%X(Le`{0;#5Y80JE*2s1>dTgZ&rOWQYniKwBxIk!M2$JcAHQC3CoW@1Dp4I zP9$@xXu8*vbDE4*WMK_i3)!8o*MQRuSZnIiVU=quiMXR`p*B+JxRX(nkp|;y^#fPi zwu{~)FTcpjY0HI+NGg#_wbf}QE^1-Vs&1U7Cc&E^fUD*rP5%zt`HIqeT9c%A{OQ=(oxARGRK2%b-2LwCU7cj_7%aBE$y=&E64qZF!& zx!cGc$`scl9-DHHZ8#7X^^pF>1_0aWWT?vAr&@1AYRJMYye6%~M53ey+ZFCw<7A&N z!f&*M{Kr|^kl2Q35>I;D{8<;ZhAb{OYS>KkcPcGQZlQThnM ztpMqbZzK7!0VPyloIOvWCz`+$9x=W;t2cg$8~0}Iff+7-OuVi?rwI9P*=XlMLEog; ze}fEThH7W^sZYqNAJNZ84F4FJvU&)ojY1!++)u0MAhHbd+@rbDlLw~U0@msb%Rhig z+sMwrUj_miI(QhKV>jIB)(7c88sf-U>K9M+Ets15GK+N`v)uVH zFOg3uvz>c@-lP9|Hv78_XnVGb$4mta5VZ!`pzC=I!iG%xH9p{(R+*R?dcv2kV>8Q3 zCCDB|&xmnkv}vRde@sU^Z!V8vfJ44J1Fsg{^ow9hZguuxa>&L(UXIPvW}mNDCnp=xHm;vzgPTzFZYq+is%GsfTp%WQ`@RW#XQv!`Msk=Yf=sR z%Bfx6bR)>G zo^qMgNa>~t-kzX{noHJ^Z`=_d?M9|;4pvlTy5b41;39qKVI`!tMhEuHdBD#iz>^j< zPd${`Bi!X6A@K<9r6X9*#07a@(?3YHiR#rZ!rX7vLkJnAZCj}X>N(bnT+Qw<3H{ct z#B~JtCn;UbtdVWx?|rRE+bI^iQ*PGrkC(0+WssbN3OlyF7FcRk?BT)rcaUsH7D=-z zUocXywC8R681D3zKWBt=$btBdhZrfhOb-w&Wcc?kxZJz+*BQBaiO>BRIjbL$xxP&~ z?IYglH?U06Hu3>X+&htLFdHCgM+%SUfptmAl;Xt7O-~cdKlG0*MZcnL3QizhIVPMci zF*O2Z$&Tsw^XA($;G`4}ilwZ1Fnx_I;g#JQZi}<>exSK-;Nn{Fw>f?&I>L@5bG3uL zpp&6~F3AoM1$pp(UU4%zIeyMdki)gpjY+aBog9qPf$%DncV-FTkXbLi8w+YQIO=T z%=02*EV>kWFoRBZ7gcBZV!MB*s&U1_)`%_=B&=-N!~T|R(j70D;x!f=LrcH0pfh1` z>XbF*`MVu#E}tvx|ArJ{x3V_lC7rbhkDbDtJ6RwdYMyp}94p_xkxm|!Cgzw~OGSC`WgIDfIlk0a%>b@qBs({sS3V*&1!7m-q^zubl#o zjKmC+WakWE@L2ol;g=a393Uy}VWk?lRXMHiAQIcikTpB}z^@-9niavfC#8CaR8yzw zA~~t+As4vAhcWxr03NvK*9Qi5p0J_bXBQWx0FvXd4atK6u;SUCd!|YEYGyh2O0Kv@L~%gyHE z|5?dfDi#EiweL5|=_isRA2yjTwvcx2032~FXN2Zq6rcpm`EuyViK^12GLyl-KbK@9v9 zUX!O2I@o8mfI)<0KJ#I-a?3M*W6r{ygo-?PCi}l}A+G0DmGQ}^d}~M8!XqEwDA$cu zJy|_yc3R$7JOrh;WbyMBUpot^Y=YIlfnYU<(*yWn2irsk9t`7x4)$OJOt1Wz`S%^f z5ji(LmKj0Mr_+OcoPiMQ8B>&J2E`MO^G_ucy9d*9HBw&A)lc~pMm2_O0;OW3reh_U zE$6#%%DyWP5IbS`*RYH5Y`P=g`V7L45d99E*k`n6qE$3;V2@@~kWU?`Kt^^o7E-NF z*4Qk3%dyNF0_cHFa^P6rK>{SJ0jez{T(Pa`jkY}6EIBVdwJtKu3 zGq)pbA{`j2XQwqmy!rV`ewS8N;QHPP6V@iFv3LSo^&G7|g1HhSAM}>j;+8Yj0^+i= z9@DG6aKj(C;R`px&BNLAgX}=)WoC=@o(@1x^l}3@*a6l=t|u9As^~Y0UiloSjGV+i zW%bD*<1}=t4u}c{qB|>5im8@87XGuSRRrl{C)t`(u;fR@X9~P(PodWB__l6%G32R^ z8*YlqQBO9iBZgs~F(x;1smVxGuj6H%u{|$keVrs-oI>E5*w_qkY$iCKAUiYzbZ;%RLER)lobkd>+ErQ*JGa&|~zB%itYB z20f$excod9kb`Vm-0*1*u(?|Z)Q{jU3=9NBHa5@uU4SejgCkogKn(D813qV;>8DPn58Dz>i$q0ha6VwKh6iJ() zJP=_&nt))~NsKB$>=31}c9L$S=sI)&x;S3nj&Tty`HWG@`c#{2G7Y0pH9J*#c#=GA z3+1a*z6Be=BL z)bY%)OSZkpfiAKv^I?yGERMWYO=LS0)R|9U2kbc*wo>rGF-&y|uDIYh8Azc&Tgm?w zf1+2#kGaeAWhT((t3S{$d;X1uSf~dEUs%*1j?%N`O=aYdn&9-pIffNP=}EBmI7uuw zK@;T&th!zjBs)2!X5f$NdDox7-twMu%F$Gi=7HS3tOe1*`a{&Gz;!LGOVllLV1yIo zt9l}wWgW~y-NL|vONy{<;246U_jGKx#|%Jrx#q!U`Irk)&p3qX0g}ir?i83+C+q_} zL;z~9RqR?W1ZqSa81d~kkJrP(? z8T&nwy>t!`6U=LJIMZ>!pI?yog`%~_ODx?>MO(*r=R*=C{Y4I;u_lfjsa{6gUhV-= za)S%78!NpI7>f>mdME|uVs8Yr8NV0HYrPW6in5%GHc;@%df4+ukZ2y{erzR1+NrS> z765`%zExXBo@W66KCj(Vb~W?(ufRZ80tLyLDfv3RX5zZQHz4WyC4PR7L$yH?Gb41y zSkB)9c;+DC(;z#`4fHeTfFg1DU}Sr}Wh>217ropOK4FVJh2ecg6I+1n6gTA{;{^mD zEw}+hZLr1`09JHTOd?38x`BiXTdcLXR{*F#0TJzlKViOuw?W?*Cn1i!-4t_MjU2_$ zOA=^a$pfnz{*;KcPr<^wm(=t?EBk32Y>f^&MKagqNVX_B)r920?7ft>G0+W@n>;7z zF0|5|P#w-nzNmxXB)i8>(vJ-UGYJYFJsh5gebjOltmwfZ-7Z)c%K$n{eGE46zXb~AW#t9ry^emd4fu0iy!35xP43dD^LtOnK&CPlj z$grPx<8CC^6w6Q!NF;fJ>yZ*7^b$RDl0bvJB@52e0|(2&n6eHGsnG679A72%u|dvB zw6ZzbLQ%m>wn@)0)$9@<(E59ySjV#%#fPNu_K3A0o&t@*LPS)wD;bz@ZQC*+Mm0`& z$@(g&NQO3x$MoNa(m@#@ht28FZH6cB@>G<0>gOGLK9E?)e1sF!RMEWzPKyGwuRLtu zo(qs4gBX22i$V6gPOtzBfY^mdYNli&w5uU>BeRU4`gJE&2uQL+)e@(lq?7#TtmDx!E|6IUC$N<#CGj&W7TzbX`vDJ>?xjA|r^oz1L3EzGYQ0n; z=_G+^BPrJdrp|%sg55j?QjFz^9Bl`9q_IuC6SfXC`U~Ctt=O3Aa`!W`-JRs z?(F$FU8awq2EK(f*hz9#(Nk$^s$B(9p*33BN*RM#Yy2ucP%9ibrMBh43?{hFS!;T3 z&7aNq6?(p*0Df*ZPCzx=00fm7lzztA)LXElzLq_Eqdi)KNMrYIgIw?iZ1CYMXZONw~BJq?RH5RlwXn`=ybMEA8qU;>@5@3&# z8;l5FRGw2Cwvit)!Jb%56w&h&B48+SQD|1nKgC+tt*t3(=&mee(Qo)_JS4k)hZ{M2 zpom1s`7)jqaxiZF*mE{BiKl96F3333VbfEU<7`z z1OB?9Sod!!@R+rren@-R15RQ`&VhRc9c%GAv#4%Y%*$GMXq7zQm?~0LnJ_BKa!R8s zs%FowrtQ$FZf(n@gn5G5E98Xlu|u9XJb8~ty38thcj@P4z+j`osDfkyM&KB3B^4|{ zWhkTQSV$kC@Z$kHG_sv@lIfCF#KzR_{X9%T*0nn&jk1^6Xlcy#$d7r6KI0RNFagg% z8rTDK#{M=pwG~OD1Cz!`xR8K5l2vstHMlZJ;270BhB~KL{l)Ov0OUk z+wqf)q+!fa^gN&8%Vf8+*wtLH`65cbPuVXGv#3X3`guC*RMr0ugs^+~EtN((t+6WAbW4mpdQC!Wta z@Fx@=e$3E@1O2lsdopr$qhpiKxSIWa*;j-%JThG--;9|@bqwBbk`h}R$r*Ms>aaC2 zx=zN)2EH*s^PORS`6IH@Kc^EubFhC(k;W+E&*et}T3Fdfoz(3w zRQ`(l-PZ=;75XxTV1*w0)XUw$N+81k5_!zy%kEOB{5sifN3rqGNDA*Aj*~m+ddoZb zC>dZGlANVHUL}z1%OFyX)cjM>011F&8Hjrw*jUddYQV`m30xbgzdOQQr3l(_Ms@!> z*$Iz5Ax?^!;WX2zn*Md$u$7?HBy}lrsQf_2~Ysf2zCd2@5rRx+`M4F18cXa zqdKU~4p9Eas*(q)pjWD5MbQ}R-L|HjZa9fWsg(Pq`Scd?PJTqr;XR&?i-h>g8-Q3a zer#@CUqxas!qZoR&HKcd#euJvnm)ac0;S;RDgc3L1yexJ;`owlKCo92|efmp3v&e`o6i%?kPlkQAYR~>&~0V zmWkq@p6Oo!*~rOs)W`@EW4uW!V0j=^4DkCX(J!lnEG<-Y40JI6jL@btH~Vd})t{3Y zpUPf;t6XAL0-`n3(X^dyF`PC?gt@5Y#@et_qb3qWC4PWtS?1*ql1ZW=YpoDga1si= zi;kS(Yg8Q0cKa$_&!6zD@Q?ZJgX9KbCr|*T-Yu{l0!&WG%{K@mMIhUDOu~H)s$6$? z*^De~WMz~zNjh35!&I*Z=tXD-O5k{soW7fT=>pvA5$-t3J4gAhUcC!{gTh^j+rJ+Y znlM7x@1%Z6fMQ{gb%X?E+6{EDeQFUu0t!JfHN(qUk67Y&DrI+axjPBCqpuj`C(MtZ z)9JlMOX~aN6CQE2klFC4w2&mK9%ZhT;P{JSOUUbtvUkG5ZS&Bv*s1K-%9zE<{!*+l zIvA>uV0n3vRyVRV6=mLKp=riQ@=(#IVr1vPx16SM1 zp1a(h)dM3Ro4p5Mi8zS)o!q2QqNryKWp19i#~n+zfVGlo2!UGy1}QUes%Ym9WF@0C zRAfPS&`Rau;FD}V8D%9UD+D;m-UC20ndmxe-#??x@e!xH2Kw-foE(;gK2N!yp$EOe z9QdG*oJE@K+fd8tK>SeKs-*M#In{cPSQ?!0rgN` zKIIPhY#|f(au%d+%b35BHMTj$oss0PlB1hVcfQ)+C)521n8v0?9xNygorHe|NHUN3 zbda5&BTp|!=M?;(phT5DE9qrw{Ty$jaAyxRZ!5ih0+v+(PKX6@zoPfRKsnk;nzU&Q zWH10*AiSKIrS}P2>@&W_19Vv!xkoq&={e}AH>%1tf~n@Bo&7}v*Dew^TZ3VobVT{Y z^jxxRv>#Dm{38N6e@KDcBdJ+wCA`$L;K-cN-(ji5kwuc{4f`P=#yQ2$OoPZz0&oVR zWal|aqtlAMM$!z7s%cwUD#VHo68(@sim_#eo$@JrplZJaqef2I5j|zw-ZH1^HL~6} z>E~5?*V+C33%cNM^X7P)Z`P(ZjoM56!pMF%WY?jnqL&sMrGDtdSaD%gugwa9qskc%ugN!=+!8SL4f^gUWe-{IkR z^Zs!M$YnFcGGFnzfzeA9=%+k8^OQZ+Bk1*7uCicAA)i_J~782Yp%|Z2OqK{V2tZkb>rAC-w-}+{mVj z0D&}ifP5C^JysxRQiN$EHJOtduu#w~J|Pt9EIj^eLP|cO6Q0*u&s^M@*nOAJYRgX^ z^H7}GRx=4XLjQDO1D%|R-BJM7u+X@!&A33Ji?G?%C>iLRQHk5UaB~CwmS>tpXywbUubAHvWoa4(hH^Gh46+FT0|Dpo41o^kl0umu%(8dL~)t(l##4Lk}-LUYQ~zA^Bgr7x^T;;M&9zW-LiW8 zS@APVmrS(ly+)hhHz~h;lb(M}IKm7ioPt2#ynK%&nf{2a^qBk9=JoLev`3ERFi{U7 zagq|Hxt$}+rvwnY$erG!?6{5+-^!`%ksJZ<<c&(TPe13 zLKyPfJV^E-ixT8`;}n`g1DISv4@8rw&OV-`;%?gY#6X6YR6v`Qf~k=ct3$&ki>$a9 zm@=tyj#Hfp2I43yYsC?uudL#|mgOK##ppc&jcyD#XM&t z`x%VVQE+lSM9F8KB;RI~&}>fiM_Jl6Fu!h6AhU-CV=Id(7My?f`B}l@a|2%HeBxv7 zPJBR1=VL0^K4t9msqEP7piUT+K5$a{2?b#_s{GTgn}BQ@oQhCO4UBT3q2`~B>TR&K zF{MuBy#@7BgF^;9RW3!~?2DPQ{?zs2g{ zEjI5XMvrD)s4VPs0-*p!K)Sy;3Y|Jxp6KOtr~pExMj}r}Zq0>R79u2#I14dGQq>?VnOY^P5S7owIa*#S=oZ~u0h(YmTh%Id zhn2E`MZr+N%PKmwmwc%phkz%g0cPdo_+Aoyu~Bxz9lT$qIC*xtj$nm9rrq-s(6R|o zVfOOatZZp=a^{0&M0!#gQv?t=Gy6tH9}SFsNNnCGa%Mt~PB(JTD)>x=v|v$f@^UVr zQQLhdZ%}G;&O@!Ytmv>W#tTjmuX@?Blq;I23Md(6%^4>=BG1Ii8y5kT#tzvLxHMZC zr`QGR?-O#iKcVpKeX`pT810iBii^kO0mn1&f~W?!rJ5dUL5MSQ;)zw$E3IN#RVT`t z26M|u?uTyZYmuUooOxOOieiCwpc!Ohfn3Y++M5g;Svfgh}-usY{{O{6@Fj9s- z0^>ERBOI9^8D#X1a}Ne70oMUxAi@QiAX(_yya#9-o?rHq8`g8Frem<$N}#l$5L-C| z#noz@$z0;2;4tE01Swi#qzboDDxcVxkyK*rVP=g5xz!;}#KAz6$;I^21LlF#8x97@X84w2~OOl{hU@SQDr* z8fcit+5_tSMra&qnX!&w3%z2y+JMupFgq%U%SyVHM#YgN7*!!XM~@SO&s&)M@Cqfm zXBPV{`uA0W0KaFvi##9?%jCcp>G%{hG>QNcxsE#D*zFD8p1F6VD$5@`B zW98)QB$Z-&IUB{oyp^Z`j@as<1TF0@)3^B^APRg|?&KRk^ z=p|L&0z0jf<>NVpzFtL_3{qi%W81F!uK%0nkg>6E!q)KZ=vuPDZLpdnQiJ z;x*r(uz94+Pp zb*i_yia{h`gKwZmI+t4}U=(9+X;;({TTa!;>P}LPN(P|&YR9huG|S5Ae}%BlC?^z3*E90NI#jB-2eaEdXjRLU&LdW|nwTTjfuP9%s9i2kSqLMO6hoMl z7wYBEDwM+NAX(27LpLDX7oi&_$an*%V07@|$PC>;3rCRgVS*~iRw+>vKGiU>8B9l2cfG9poDZI+cVn}4IM7jOh23TdKo-Teu2N6VqK7PmTdq&FZ zV)~Qht`XE^R(yh8eo2~T%O~R^_mt@NGV+?_sMyDLw)8HA+2NTT>LXl8%Pc8=YKE5k#jl zD9`~KmouYKo6Ks!Po_4Kj1W(f7PXA31ey0~I#7iCG=g52SLU6hG;f5QKW~LIMs5EW zIUzCv>&-JV+{^iN0n$+e9x}-)HjaKCB}H+PQ>Tj7f1_%}#km?C0z%9@astOE!5hmnH%SXG`~?rW6j&MkgNRL=c2dEF17UlN(mID63nvK=6H z%{2WYgGIat>53b91u|>pND6@Te7m(|S0}rLt#qnRGHp8r<`qp~1!dJi3&bSj|3b{j zC^eNr=b)GZJ@VT}u!;omudT8D3a#lNH=VF6K98V=UD)tbKto5^OpTJPao{+Ow7$Gh zKefvLSw@eetl6Tu_wd(A4lh4}nL~K310384H+zJj*UQ4-sf1FUL==!m>SQHZ3(Do% zV=q%3WX5_$i**3ucpx^8Dz5f&ARxk_FS8oPSIFhQPOo`~vE|3y2^gU!oFvybr?N=E zK+Z76yATqFQvDaaoB2?~-%vRD#; z=NZ07VUPe3qpqPF8NxZGL>ZKJOl0us4MM8E$;ucHh=2MWYWWBp$`(SF84>Vms#BCG zebIFsq^4h|r~Y`55L4mrM6p^pC2R)i%T%&>e7$tAdHu}jf^+}L1s+Cv< z2Gx^{z@s7;Oj0y6)YzI)0`mEjpRlIt36H;fN?ZBd(|*cbKmimdgKVKSGNSx!meTB< zj-U_{Wm1$IkrUuxMK73xnL4+C`?%v3blODWl4=`^8vA#kOypthck{RPYC=0zpj`x@>_WvcJ)@OXQxA;0BeYfLo zfhZemldNqjdVP1*UmenZx7ojY1C6G)6saq#RdXNfFe=Q9jMep2})B z=&~J}6;BpE&^I_gMsDc&Opm~@vm3zb$tYDHurDn#Nd5`+bv`CC@*`@neL&0L3BP6w zYc0}!;W~L%5hCj8hbSX$HHawlKJ4-4pFqF(An>#4OF>k zR$e7klj~G(mQ|h7M$U!8x&zkg2bpCQ78{_y$0-VZ(c`TH^<1r;WI?#d{Eq-+xeFNQ zJpK41LNwkbHq?>f5_m1iKZm!v85bPdRnW7(n0{+XMD<3JAdj zmOR3SbRt#!a)=&f5aJ-+jgr5G6-6r%xk3p=w=VUvr!3VtdO<2Sry42RNg2KT`7e|G z&&~92@`!_Sn|X(m8k3=|PF@8v!l z>MwYT<-;tq&dy^12IT}PqydO~0+)~)F}bM?&@-^*btw5;WO|8@d!AKkINeVm3fajF z*?}GQe9n_B5?WbIcfblB0c)9LlWNibaI9*!SXJIg#X}V4>{Qob2l1zoRckBpSi_l7Qi)@^~i;LKa-*hO>+y5gN1yy)`(s zI65g!?&Ow{B)hHvrL|!4t<;VVFvEA{jUdpwmfpZWqwBgY?ig zq&&QAc+6qrDOu@HNVVc8JjL<}c!gdOR8M7DE(P`x2oFC4M=VFM z=z)9L=$u<0j^J)>r5do8b;T3eqwJK5zn87mJtS;7_Uj}=!^@1?%Nvj5+Y!3Jz7Q|# z6DSj7r5>G?g1we!g}g#W`!x!ck15sp0nsqtaLMr$z9fvK*K+0_Z1C)h&+56f9 zDJs{TyvzuU^wq95IVnlAw6bPflw`d`&WwsVi%LGC(5)J;k)oUdcx*{h9W&Uw0R%ql zJoZwMd5~kY^5B7}1{W?fIx|Ci&IIqX(f%#{d_YO;2+MM)oo@tL;+*##$w8;Kc5!UG z(Y4hE``Ixc%iU`Pybd|&Bjg(aHkBO9O)@OpaBaB*nNLJG1}X4^Gg%C{aW9G44n&MQ zsd$En8ulAF#)mvW=*8vB{0C$RY}u}6eb!eg#eIWpxTBiTpRzKp=T6tW#BWJVBEs^; zjIjsAsG!jfK;ayqUohZTm-D7k=b$>>tB?WKf~4rmkcaG~ zNK+xKVL)KO$~mb)HHsT4Y@7px4U}gbR53cK`EI}(17S|@&^>*Ngm~YlJ$K}lGt@Mv zszeT)EY|@-QMBAlHT&PU+qpB)&}X6iILWG4&n1~8CuMtpJ#$aYDFAvAxV5?Zx|O0+ zI1&-H?7CX9*8oDkRZ~R_nBt_E1`$Nwu#*|Lm>jF$W0CaNU!A!q?gb&?Kl6|rWJvc?G_)g$N@oRQvnQtoT4MD-f|>0_c{ zyiNH}$GAX{Ie&l~fwtC=!`99d9I0txbJOd!@X$z05U9DI~>=VyKV z+2lSVbNw5l#Jx>7H$az2zbM{P5H`~4qBLq{8Pz9y*yGdjqCrBn4kQ$uENV}(fTp|c zgH*=BZjS&Ro(Vb=dO*<%L0vDYogD}QPVh>sTNd3UK`Ms~;IxBmRF33J@6bK|5}EEi zu;&>MC3&A#?Xhg7D%7pU+UTta5!3)jTh!7DUa?m@dKI74eS9qxx)taeNmOphl3=OR zDD}T2wIH)C9m#2(UQ(Tl-voKgPBO`g5>b!>EJZ+vx~++mn#W|fv$n|(3AT79Lz}(& z$)|RmR;Rl`a&K|&`8gk*g)P>|_9!Q*UI>sRuvMcvwynCO5r$c9IYV}AQ5#U(vd}h& zm4F_4394TE)8(q;lAf;-P7|gI3{QZgvx}6g!B3HUvJsN72(?kk|c?@B0zd`PRC- zM!;NkxfTFatzjO_#XRgE!RRL|r3tXit%LO_YtYp{8QH*;VY}KbM!iG)0Vc zk#cC{RE{nGX$zgJIfmIXyX!U&p`HP%c{JWbstNs&3>c}xgXAY}q1In?3nW>xk2M)u zFJD##8=b2DdFelsgba#{(4r{e1aL&NI$%T;vlJ}^HCW#3l{#N1hZ0VJITt~eQM1A@ zK+rvaIHSw}Y+)3iY2NxD6P@PUERgVkU(nY&qITMCRHW$TfEndxdpZ5^Vjo>*BO@Z3 zTT({gwHC$0NmllZ6wXABagrUaNs5DcNpN%0y%6e@$DpyA?S&2ev(AcQ@p_B1^ zUxS6bqBLe*=tjs$i7T7p* z-1LaJtKVTJ+yf5Qj@$K^osZZEn5%5Z00xY`%A>jXhn`Anto*EK)|GESO~vI2*`Ui!b0z-7Out?!~g~;8Ae%J zA5`eu0csFc>!Ow52)3qpdGHg233`l1k#?ci3W~oqAKr#9@-r$8{0V6Q{w>w^3=f^i zlfKPr&BFr%W?d%_`%AU$_4w@8Sg4LppoW7Z>bz{Kj?x_&;2{)Y^8l{6gH*N{q!y*` z>fjKMWEXw{!h@68kCPE^u9wUMW^XaJe3uM3aftOJLLi^eYmUM2Itk?BT^!^vbg#-S zR^9bt7#c3t0n!jBXSG>b&2}oNjmptgFz z+Jeu7Gf=f+riE`YAP}4Jo(@W>PG0a1@GZlxYzr}ktD#n1ZC0QK#@GbgYbT?viKAZ& z7omglgl;qF;If~>W;Cai^HBIdqEPu0z5*NB))Q;QkIM*{O=IB0Ma9XXjeB(iG`=74 zmCEDoad5Z?i^{6P9Y}!|-PN7y-5DT=iqeG|H6f~?>4e(VNwO7T;I(**Lgm}!a(iCf zpRf+bGw3nw6;H@0Lb#LJBRbMvDi058xlgiB$OC)UNO`9oWO`b~i6qh21Y%tVcrTrl z<3-<90K!gAPO{QdSs2|=3=<9tHnXrW97J$~q|@RIH{>d9B~8Ukm6aoAwtQsFzcJ1Z@l%h@Qs|&)CvE<}J_k<4-8LeUIP`55);n z3y?I&-PQ(t7#R|~T2faSs+Y-sR+$^*heRcqY8AWP$ue&T-C#H%H%JCZ2jcHe1`fy; z!hm*=%FHOlg?fEfjzo8m!eE@=b7QTQ{UHW4qJ!j_%ru(~Rp9@cO!p5dfI4OWd{@rR zm;kQd%kf6&mP@;s7*++$_Coz_RH>+yR5n{sDWgnaEQDm)6{C3vMPSJN^m9;p3&aFE z(7!c6%1_V(X(Xe)xPp_Ej4*t&9goB8*x$|_^Bbnx{DL>>`O@E2ak5c8q6J4EBgU4_ zu#tLzRvHX;+j$wDphReHGm4TAXe8^qAQ(rG?C9a@^*{{9=7FT>`$_d$1+LPc%5OI? zh$G1+Dx(mMWvE$GwI}&Go+a-cA<5r1=J#k0<3rw7j-`((c$Z<3U!e_VlJmq&t&2EI z!4;ie=|aQipya8wx`-{hmu_)LS>&H6K$Ew|NjAGAxrQ)E!sZ;QTjhuntB#}D;JJ-r$ zPgFaFg+TO3YJhB@;@>w2#=VRYIw_~_B_j=)&xNjtkwe%AXnrVUoIBaHoK&c3qyTzS z^FE7g#Y;MuXPWvWa<>1{m_MT%Iy;ZMN?$HX7;oA?K-I&j7wYGZk+Ta&r-G!QE^IfZ z;Q7DHt$#@>$0P3V0c<#h*~C^Jfmgx+LDuoNP=9h#aW6>1fKkKgX74(%k3ELs-ZSp8 ze!!9?o$~6ot?L_LxjV@XL^nGsG2tk?0*tIxST*VrRjdjLJEu|xOnQSX!bjPnlt38| zx!E1?C6EV#(03s>9VAB*eJnOz7in`)1hoLeyB$PZot${!;WY!GQ@>Bm)qlg4d4bA5uG*9dfI=#O?LYybXy(kX@{EAn-pWj9278{Hpo25sqW@N zD?_2igkKI5G=!E(3ZMC2gz}G|jE>1V&UEU4^g96T86__oJAqD^9&Di6jB;7Cx!&f5 za>N#U1XQ8>%u3IiL%p18od6}mIk!obPm}EPvNFN5s<5Gpa$Y9YNGu-!v9t1uSx7pp ztQ>B@t8~z?>7Xi;q?pD8sPDw%>55{$0l`YEIspoldy<9jPI8{`*ieBWCs{ohZP9F$ z0F&=Hlsk(7f13cR?=gY=7RaC{six$V+YILjm|G%y_JVr-w98G>F%&A$UcK1J2q>sw z4qbxyxr6-V2%JM6I~G867W-fV_=7m03?TnlVivnsV%p407R#ETW|PBrC5Ic6?^q)rETW)A}HiId@}rdeU+ zK=2M!0Sc79my}}zY#F0Kbq5~aO5NE4{5<9@I1`~U;lhF75%y>!XV&yAJb1Pd|9_;~ z`NxDcI+iQSyW0qHI1XwpbiDTpm{S9w(oIh3;{0urA8wTpuU36CvXB{7;9Yhjoic_z z!1!>>rsA3Uzf}=wk=USAWv)VDi_C`KJ8+ofKxVP$#dJcpIt%AMQo0`A@%5_wcG+Ow3n=JFKM9#!DE1m zlx-|ZUmIbC6|Y=v_CP5gRS4r{aAbj-g$3j!$u?0oHb=>RpT!SGsssI=G5cgfkuC;hMgNJ6lOq^1?7|@Gn`SJ05xtR#Dr1KUa^vW zg+>x&6O!eY_v}CdXp&@A17tD{5STd0dDuX`-O8CyQ6|6z3AvN45uVTeM9OR8v{Va- zqg4|X#s<9srD`YHiyNRlD3O!+ePjM9<+?v(XycAtxW&0lO3`+`G6Gsg zr;J?HPIA1KKcvIf77J>C10WEn7=}}@HlR6fn4Y=;q$JaWIz_jPEWY!MEOtw4D+11u zXIoB6p4NiIM9-Azt(-Q9^u}Hm2|e^GVyv4aBgIRqbA*)6wdqw=vmln`eW!;q3^EWVDLq%PBa&?A%3XCm?5$3U zU>zyJP$LN;2E1I7Id)Rz6Ia7BgNy=lQgfSZ^-rmm`}-6&Cvdq&PRb6A_|wW6xhq{? zk~vP*@kYtVIA_2dq*7lI@P}HcY!w0FFwfuJQ5r}Sls5u63a^NuErMaz-#KAfT|==k zDs(5vkb}%lgM?BeV4g*9isg90$uR{HG|Cpm$hsFB#Ug9{O*GFBd3+Dl+PsgVv=@kleh z=?I!doorW3a@JlC`5w|g@}%kPzK%H6j8ereg0pf`uCW;ZRRrfzMLiSjfTOI4V!LIM zlPo(m;KEDMLfo(dOiMow4Yi&ty|Bb`0$jMzDppx$G+aCj`^Y6C-L z^TPNN)r9_nvfMu+fXYioO{&G5x@mUWhu(nwL%ufm2ywUxuEzN>ssKd_S4*0rYKbv> zif`>#+-v{sWIHVfe>zWT6EFog_3I%WbY0jSY z$(43a4)Y}Ecm;XoqwK!MM%PQ~H2fTec8VJq)kNkbb;FEo_cy>R=s<;MfD`LwC>X$6 z(4kGTOcJF|$n3#RAm%i(-^xjx1`8_KD-)${XEZJVjAUeEDkd{n7V;n&i*nW*#_cu` zgimlJz3fo4ib>*`GZR7KWCEUZ5Bux}+>wLqbdW>UM%mQebAjgw~2 zkksyPQ#to7-iGchqCrVAE3K-RhJC_U%!#5DzQefMDKUuyqGb!AoRPgZn$uQTY%rJm z=)Bs@P_HyVFo2nco^6q!;@1Oa>!eroFxnf_ut{oSc{xL9fW$R%*qmfD9jaAD*|utA zu@`B&0~C;uCecAFED}Wm)X6)5e2d-3!-Pi*f~l?Ml7cIr*X0IwoQ)iqx`oloWg2rW#~~#z#FLUxZ0vLvL|Uy%m&~RpUQ33gHW(e zIU+EzQF_jRrX_9)!t0|beWqjh9T1Rp_ zOAxco0q`k@#~To-2{3ot$vP+MIrcK6Hi|~(rHVje9gKMceVhF4?@~GUWS!}1y}KmK z+G$aNq#7`{v@$M=l7aYeT!eD14DrHcO4u!h&_+rwU}|1;!+AMF*nxYru+EGm`WskP z15`Wmlg*#;NCzH>!ijNW`vHFHJmG?L%T>{8MW2 zdqf9$R}I-|)pc6jj3_Vi&ic>)67oB|Tzo|xPHkYg#yM{FK>FJ}`yvCf9 znjNkMXrfGG@C$-0({BNGLZGOqo^`N&IMu3V$S-YRM)3rLVYe_5#sk?1TNez>5C|Y) z-@|KyL}hWDQUJBYBnwwT2}DKSCKANG5r~$k9;}BO75ckLR=JG|%Z<7_LH0$O1~E8S zmFF1YC&v6=Wb~Q5ZO!x)hyQ3Ly%eFO|73Pz#5nh`vml^W_qsyCQ__z6IT-+n>M}d^Vi3=s#{QHx+sZ3%Rry4h2na3 z>bjqmUv1=2VqLONa_8=3y`-SaBw$nFf-B^>qI_|zjS+;F4xy=egUVc7G^D|GKF3KHgH_ivx-Ac z|K5hwDeIy}mQTtO@R9$j!$u7fT-J)8F_>?u2=@$-krdl-CZOU@Vn zM%4{l^mBv;Ol=jrwaRqG83;)>+!lkLV~rqb7b}oSRVFNkyujol)g) zNu}0F5d*AhK(nfn;Z>uVX$0p+ey^+1T2d`v@{*uyWYZ6Jd-uu+Cm49`WdooC&9Ewc zZ<5`)MSe8!*Zq_PF@Bf&4IZkWMa8BTu4uNmY3w4)--Xfw1(0KEN|9LdS0Jg1)#M?GRXsW@=OKAj{Fvj?d3fLNP{8~achwgS^g(s-?8J(r^a0q)I~T5x z$zorke{+BTGu9-0Bt?;>3g#=_Bqe_L#>gTrBlWi4ox{9xaMrzkWP)%)sSdfju8Z{}R5v^(F zpk?Pdyvu1cN1Is3T*b!2DYDSWxT6SH5AIOK_J%qQ%kC(e@cWlT~O zK^O3=ruW(Nv@QtoG7`{pG<9_C<#ukN92WtY(e6}(+jxNrP{i&dl4Mt82d0tM8dVXo z%KxwboaGm%_9ts$H?3ba*T&~zLjQt>l04>a`)Ww66(sDgRhw9)^oRoE*Qu#+j*XuY zdFul*-BVzXAV)y2$Rt|@4(NBs=_h*iM!Av?rb$mQg(FAN9Z2(M=Q&ArmpQ)M0*A+| zBh==woMy&a7`21HVpRdXfR~eMOg9n+Fmiu&YB=x-H2N92n!O|v2IZDxBbwdU$WsH! zEa0drPs{8|_}A<&3-`h+u>=b$Vh>2g=66Vj>Rq~4$2^pzY86QeM5Xp%#8Z%xze^VT z23MgTk;Q&QJH;tv85>9rEu_i|(izi1NY&I<-oa``zplAY2iQG#Vr^7`ZDe$M1bjCt zzD>^+?8u?@D4TPgocMzhD+|YL(*;ElcHR8))DYL~pwYysk4n2j13gI>w0dvc4*Vq6;aVQViaXWg}SID-S3(jNh0@}uL zMwmk|fKc2PT=xRLdnpENY9Mx%iMHm6lVE0Q1QJy@vK$__;<2~_g=)FeHQUo(FZPPT zVw8l?1g#n~DE)nMw!cSnz#j4d8XUIV3YcAcmV97R>MaV7zf9J9i)UhdNdEQ-D1NlO z;(|YqYQ^t`B((zOl_#j_eH(5pLE+BGwdkZ&JNIo@EEp3WhN|Z7>+Sx-N-w~GHHaPC z0=!kek*SSNPBkFc$@_u*t5G_!>Opoj%fXJ>D2IR+RWU?0&Ek`)Pi`SzMgdVt&9E{s zH*`Mck0@0B1G3xqxa)WT^GFRPD%;Te56~X`iZQ=LraSY@enCHne8&_0g>6Ww*RDicYdip_)wC>J`u0c{s`1(>7PAPD;5`(W*w((^>@Nh=BYxe35cx5Sd;lG-aX05fkTgf@Vn+SIP7+5g6v|J0cOoI)ml`KBA&YSKnhK^A;+Y>ek_ znTJuC`2wP5RqWb2{!}ZTrACdX`gN`rDc~%nPpCcUUs5giEkdd+nQlS7UasF}{&2>k z&SK+l8uJ>XUq2_j`XiRz$FUMPAbKU|Dc1DmOd~Yd>CmQ{AS-&>0ELN;snnUWw&nCP zlPl~ll-t5+^`g_R7?PN3a!7cK^RXRJb55{}qB^yhA0QuMmd(68-)?qCo!XSC?I|JR+=w=BAaUrp5r64)va;}3x zhaQIJZF!u)D8GGYKVVY3VYLA}0B%>r$>!Xw&jm}y$wWxfvi}KRlzDQ(*_}Q!>EANu z9~$$I=w@H#1NA!g3dNlqjFNU0W0%W6J0p3!u8g$ibMV;yntuM2aH*frLOfPdWD5av zz5-j8{`wj_+gZEsBMOh-B`hicmmnxE^j=MEqbi@o2K8mH+9Zx^%4t!a7oA1RPPst+ zOh)hfHatx0!p10V)ipNdOMM8q=eIb~N{oQb@y1JZ~}d&GY}W$sQ7)~@l=y#nS|lyMk`xhU0SMS;6)y@6?oTlTToT6jR0QmD03>)D7= z!IK!FJeNRqwq*OCabt9V$pg6(IHS9-l0!Z-<9|Y!$1CPVeZ*bawKlwcVYXHXjp7(v zGSnX#^M`~>{e^n?mM8bUnG1>y4#@6e!B2b!Y zx$Xf0^CU-IcTke;S*7%p9qbmqqy&3mlPza@MAggnC|4!r_r8gsSkbpoz` z&6t0m?D@@=yy|QGNVUFDt8hivZm!f_fse@3{uv2hyhSPK69#66T3OYCz{LnY;Vxb9 zuh4aVgI@52EcOG=X&(bW!PdN-Q`T$u33NkSQ^CqknyRl$;KzDSVtdvhjV!@&!tn(b zKQAhGn-m2Ad%O$n5i8rvZQ}%=*W+{I`ac3Te8PqVF_u$0HB)Qg;)tb4G( zjf)m@GWe z$~!aWUnl4MEn|L#JjUHGuEi!Y(Vvjf{)mF)w+T9W$_(58pSmmCvEw$PMK)(-*@|ri zP85H?7kTG-8AW@KFmgFBQvRKsZ-sa zE7(~o=07TT__K1~Uew3)y4=`*l|#I$nasP@3S{EMay$)~#a^Q$UbM7D;v+yS(p`3ex+|zMk9d)f@>>-YvELc~G<>pN6{7!qy)xwg|N9RvL7KVLOY8h>{MJXs8ebNx z{ESLNSxuHO1#z226{;+x`KzbUOh-T$p<>Mlid*v!W- zBJI?U@=*Hpd)vVN#V&iD~H+gBVckPYiZAkL@#`j4i7DL{Gu5EyQ12 zi$D-LO{f(aNC&cg&x;wqELi$?1@$ex-9MHi{iimsysk5K{!j>*KNrLPWBK3`gn#lI zv(=@$^@no)-xk;U&jMm!70~gZDyTfPu((>y_pDsk=e6?bF9nh;${0VFd-Ct%!2es! z^#*wn-wqs`CxN=D^3uFQyvJOJ7@!F>W!^Q{Q;T*!~}-O`_$b|-Mn3xQjWooCfiFTVQs6(uf9VG&q) zR~$~R;x9{S?joV|vUsFV>&IU_W|`+hIhiFESQMMSt0www`TAWoSE@5UCoq^9_?W3! z>C56^zpSz{FUq$|>T>y0KNh2HaclYIl?;e;g_XLR#6iRJY_k~!KBV-j|k(@vg?Zy;otRGW>d8E!!6zwcz5L@paUR3=_M z*K{|jZrh)frMzT8KCP0XpVyZ3RPpEA;_;r$r9W2%iADV7b$RoB-BaGx{+l*n@uNx_-`9kPE5`X{xr+Pp^^1yKmu|Zs zYV+OqH8b~9#UlwOq&hIO0F}Lir4*?z+LkQGo2_&%)yr(tVV~8X#OhAbVzX+IaUCR& zAoj);k-|mPuGk>fJu{sifOZBRdx&VX0pn21eGvL@90XFo0BGcH1~}NHq~SBDkYw27 zeKp9YKl)jD^P+t9wLJa4vOcZCWEr>lQ;k1cH7wN`8OyqPQ+vm5wL&<+d|+%1ZE6Y6 z%Q}8h(;m5w)olX=-&82^x(2R`mACju=;m@R;RygBv& zkA`YG$MIX&Y?Yu1M)V=NEr{4^4{s0!8%o z(R0vSoxu2!mw(Hpx|fQdUuq@O0s$V1JAGFy76*JJu4df)>NC}t+DO648XF%ikxkQX zg^p+D%O%u1JOT8jdP<2;A^EWubqNJid{|zMK^TOH37TUCc0D{F3=?2U6(6@Sjd8sNQoMrWd^&=ku(hL5C(07;1!pw`ux(Pq;|YXw9ZW?CI9;NC z@S&3oYYyR^(vcD2!vt~-dEn|WCdqv~X)5{>kJyPX1rPUOss=gn;;^@{Ge(fk5OXkY ze2ARm4mPVX*+OG*ko6_5e2{rKM<(l}oUhP+7h135MxhJ!h@Yh6OuO$V)y1bY z@=uD-Pt5}pf3&&Zb3ZG$naB9y-2XcQwk58^Zhl0Z16rW4kcrRo!dy#$35H~iL`(x4 zq>wVEe%HQOPf^KAi&Cfd?K_x`hd@_gX>+}1K(^kRfaTQFcObU72^xEm`Bi{9ssYr# z6OFquQQoU)WH$_kX%B=>ypc2VOnzJQh>^oemW+5X?5wOKaTWYC<^eShlTXen(Q~uLU#+uTJrfIYC-l|L&}j^Bdo|E7b~W2^m!2$wJHP8-cm}gwmsjbV;~D{NM+e03CKBx^}!aNQa$S zVg00H;LEGqoSI{l72}<)-_)Wrf?plq^0HN99QhEve01q&C{591kEl8xS2n$Y_|D~k zxrfPf=U5JAkz8oBLQPH21f*36?Uc4oQiqsUFHj&F%)MvM;d!O+^J^L@sAKzKhFNdG zlgd~)6?RU2RN$}nz*!NSUg1D9`9vzg7WeELD>b^2W0`4ntc1CTCLWt;Gs}>EBR*$f z@SJ_88}SmrJXpHyPVftx{C4ZCa0Bkq{I4{&{LD1L%x6A3&bE-6m_=6L7I575q*loc zeswzZY%r6Npin7V%t7eG*Ui~QE1%LA9|4UBmnfWb+_`{+l(FOGaA^TFpP*3ix^KZ5DH0ZXI4D~?u>7=~A-gN`84v#ni@vwk93=&VQ` zvJ`{7f&_lxVK^%iKzB{N<__oCZGK$5yd{sQkC;I`Sv=ZZl(LvlPfCS6LN!t==-)+| zW{7X8GrH099M#^@*hv2h78D7BGp4KCq|)lK+@)R@)6v-~4qX|mt)q{$I$KZMm{U{5 zT?ZRuuqjHL9e4WjFLmTPD6&E3VD7{Ypm~6Enm_@}K{Hq4W`9-6H=W)N=xRwc zJvb{vx$?|2{!U4p55C$=vl|qR=(#Y&Y02B6OP&EK=wUHu>^86dg{%_PqICJ>gUg&x zF)1i>Ao~hV9tY>UG|6)xv6?501*9Q&6q`uRckw)R)V`fn?pt>wJY_}4Rdkmw4@eej zYI(TE+2*6iMdvv~e&4B0!SlrRnbFvyv8gG`r4uHE#EMx()OP%!0&jQ4rl0w=ds3}J zD-gN|+{~-c{DltOMBNz9bH_$P+G2U2NQT+MDOv$@7?>Y=y1Hw z)~VuwO?FglaPy&hpdL;(Nz26R?A%uS;ku*18Oy>)%~u%Dio?f;eqjYwRLd!^GR&Ht z+NECNc&E2HeVO3Q{mE9cTBveRmpY{uJCm$xErbhGwu7M@>`5XU%kIWy-(dJezkIiG-7 z&Yg%_Bx#b8x$ALMi5D{Xt@uc+uDBKM9Wh{RG(#|Ovzp!3eR}42`&P|Q&&W+x>}Il% zy?8TUAyY{F0uwxjtZXK8bUIn^CLcNtkqnCUwr&!YS4|G;VyUt>dO$a@YE#R#B*vvyvXCm~|XypaZ#mzF$(dA)KJ-)CqPc1|% zyW>5l<0^|vRX*kB(*n*Qh~#f0+v|fR^rd?3nRULj`IcAqUB_PSOLyW z2%TUTo0MzCk0+~qKtPNYef;+_IVoh7Q6!amHpi|vr=12!>`O@Fao6`Wuc(Yuw{)7! zXH@rj@4TW-0yaUG;v~0B9l<(MP?=QS!X;~Zwnja={u^=H*@AK=1Fxy+UT66G?Sy3p zZ0;gv*L$!+4kQD{N$d~wnBWFZr(>D->4AHEa^`cQnq-`A{YjjR5v933Of~H^DtF@7OwvpE9IT89 zW8f`W%r^dlKe4`@D&!F0d4|0D`OpBv$Y=rD$17cqJk+F)9x|?+)EUAiwmjFN5=m(T z(|`{4Zv_?p>BJ^|p)Xy(S-wtAp*my1q!8|S)koUWtXtVr_BOJ)N87Dk)po|)o*#!k zdEicI<#zeUxn2#43F-(){cr|vnV}Rvf`dWANhk2k#g^!UdHqj-0RX$c!`qfxqoDu* N002ovPDHLkV1l*Gg!=#h literal 0 HcmV?d00001 diff --git a/B4A/Files/gps20.png b/B4A/Files/gps20.png new file mode 100644 index 0000000000000000000000000000000000000000..23bea1a92b9cbd34ea47ee8ef3e6171580324523 GIT binary patch literal 8326 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 QhyVZp07*qoM6N<$f{fjFRR910 literal 0 HcmV?d00001 diff --git a/B4A/Files/hacer pedido.jpg b/B4A/Files/hacer pedido.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eee236f9ea60413695065d48946360a0f5f7796d GIT binary patch literal 609560 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