From 97e92b1b2d09ec631b7c5041c42f37378655fa52 Mon Sep 17 00:00:00 2001 From: cvaldes1201 Date: Thu, 8 Feb 2024 11:15:54 -0600 Subject: [PATCH] commit inicial. --- .gitignore | 2 + B4A/B4XMainPage.bas | 388 ++++++++ B4A/B4XUpdateAvailable.bas | 24 + B4A/BatteryUtilities.bas | 125 +++ B4A/C_Buscar.bas | 109 +++ B4A/C_Cliente.bas | 492 ++++++++++ B4A/C_Clientes.bas | 570 ++++++++++++ B4A/C_DetalleVenta.bas | 611 +++++++++++++ B4A/C_Detalle_Promo.bas | 112 +++ B4A/C_Foto.bas | 167 ++++ B4A/C_Historico.bas | 609 +++++++++++++ B4A/C_Mapas.bas | 24 + B4A/C_NoVenta.bas | 177 ++++ B4A/C_NuevoCliente.bas | 24 + B4A/C_Pedidos.bas | 24 + B4A/C_Principal.bas | 1334 ++++++++++++++++++++++++++++ B4A/C_Productos.bas | 1140 ++++++++++++++++++++++++ B4A/C_TicketsDia.bas | 24 + B4A/C_UpdateAvailable.bas | 74 ++ B4A/C_tabulador.bas | 134 +++ B4A/CameraExClass.bas | 290 ++++++ B4A/DBRequestManager.bas | 272 ++++++ B4A/Files/alert2.png | Bin 0 -> 632 bytes B4A/Files/alerta.jpg | Bin 0 -> 1459 bytes B4A/Files/buscar.bal | Bin 0 -> 2653 bytes B4A/Files/cliente.bal | Bin 0 -> 18350 bytes B4A/Files/clientes.bal | Bin 0 -> 6851 bytes B4A/Files/dbc.png | Bin 0 -> 53433 bytes B4A/Files/detalle_promo.bal | Bin 0 -> 2682 bytes B4A/Files/detalleventa.bal | Bin 0 -> 7732 bytes B4A/Files/durakelo1.png | Bin 0 -> 5896 bytes B4A/Files/engrane.jpg | Bin 0 -> 4132 bytes B4A/Files/fondo_kmt.jpg | Bin 0 -> 33689 bytes B4A/Files/foto.bal | Bin 0 -> 2561 bytes B4A/Files/guardagestion.bal | Bin 0 -> 12858 bytes B4A/Files/guna_viejo.png | Bin 0 -> 20988 bytes B4A/Files/guna_viejo2.png | Bin 0 -> 3543 bytes B4A/Files/historico.bal | Bin 0 -> 7732 bytes B4A/Files/infonavit1.jpg | Bin 0 -> 30576 bytes B4A/Files/itembuttonblue.png | Bin 0 -> 2647 bytes B4A/Files/kelloggs.png | Bin 0 -> 4718 bytes B4A/Files/keymon_logo.png | Bin 0 -> 10983 bytes B4A/Files/kmt.db | Bin 0 -> 40960 bytes B4A/Files/kmt2.db | Bin 0 -> 2891776 bytes B4A/Files/kmt3.db | Bin 0 -> 2279424 bytes B4A/Files/login.bal | Bin 0 -> 9872 bytes B4A/Files/logo sanfer.jpg | Bin 0 -> 7991 bytes B4A/Files/logo-guna-18.png | Bin 0 -> 31580 bytes B4A/Files/logo_exitus1.jpg | Bin 0 -> 30576 bytes B4A/Files/logo_mariana.jpg | Bin 0 -> 7295 bytes B4A/Files/mainpage.bal | Bin 0 -> 1584 bytes B4A/Files/malo.jpg | Bin 0 -> 8764 bytes B4A/Files/mapa.bal | Bin 0 -> 3010 bytes B4A/Files/mapa_cliente.bal | Bin 0 -> 4929 bytes B4A/Files/mapa_rutas.bal | Bin 0 -> 5798 bytes B4A/Files/mariana_logo_192x192.jpg | Bin 0 -> 6004 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-azul1-0.png | Bin 0 -> 3424 bytes B4A/Files/marker-azul1-1.png | Bin 0 -> 3032 bytes B4A/Files/marker-azul1-10.png | Bin 0 -> 3643 bytes B4A/Files/marker-azul1-100.png | Bin 0 -> 4202 bytes B4A/Files/marker-azul1-101.png | Bin 0 -> 3661 bytes B4A/Files/marker-azul1-102.png | Bin 0 -> 4165 bytes B4A/Files/marker-azul1-103.png | Bin 0 -> 4263 bytes B4A/Files/marker-azul1-104.png | Bin 0 -> 4026 bytes B4A/Files/marker-azul1-105.png | Bin 0 -> 4218 bytes B4A/Files/marker-azul1-106.png | Bin 0 -> 4293 bytes B4A/Files/marker-azul1-107.png | Bin 0 -> 4029 bytes B4A/Files/marker-azul1-108.png | Bin 0 -> 4310 bytes B4A/Files/marker-azul1-109.png | Bin 0 -> 4330 bytes B4A/Files/marker-azul1-11.png | Bin 0 -> 3255 bytes B4A/Files/marker-azul1-110.png | Bin 0 -> 3859 bytes B4A/Files/marker-azul1-111.png | Bin 0 -> 3301 bytes B4A/Files/marker-azul1-112.png | Bin 0 -> 3635 bytes B4A/Files/marker-azul1-113.png | Bin 0 -> 3756 bytes B4A/Files/marker-azul1-114.png | Bin 0 -> 3496 bytes B4A/Files/marker-azul1-115.png | Bin 0 -> 3878 bytes B4A/Files/marker-azul1-116.png | Bin 0 -> 3797 bytes B4A/Files/marker-azul1-117.png | Bin 0 -> 3633 bytes B4A/Files/marker-azul1-118.png | Bin 0 -> 3976 bytes B4A/Files/marker-azul1-119.png | Bin 0 -> 3978 bytes B4A/Files/marker-azul1-12.png | Bin 0 -> 3596 bytes B4A/Files/marker-azul1-120.png | Bin 0 -> 4153 bytes B4A/Files/marker-azul1-121.png | Bin 0 -> 3814 bytes B4A/Files/marker-azul1-122.png | Bin 0 -> 4124 bytes B4A/Files/marker-azul1-123.png | Bin 0 -> 4228 bytes B4A/Files/marker-azul1-124.png | Bin 0 -> 3958 bytes B4A/Files/marker-azul1-125.png | Bin 0 -> 4194 bytes B4A/Files/marker-azul1-126.png | Bin 0 -> 4271 bytes B4A/Files/marker-azul1-127.png | Bin 0 -> 3970 bytes B4A/Files/marker-azul1-128.png | Bin 0 -> 4266 bytes B4A/Files/marker-azul1-129.png | Bin 0 -> 4229 bytes B4A/Files/marker-azul1-13.png | Bin 0 -> 3737 bytes B4A/Files/marker-azul1-130.png | Bin 0 -> 4271 bytes B4A/Files/marker-azul1-131.png | Bin 0 -> 3752 bytes B4A/Files/marker-azul1-132.png | Bin 0 -> 4215 bytes B4A/Files/marker-azul1-133.png | Bin 0 -> 4344 bytes B4A/Files/marker-azul1-134.png | Bin 0 -> 4060 bytes B4A/Files/marker-azul1-135.png | Bin 0 -> 4320 bytes B4A/Files/marker-azul1-136.png | Bin 0 -> 4396 bytes B4A/Files/marker-azul1-137.png | Bin 0 -> 4064 bytes B4A/Files/marker-azul1-138.png | Bin 0 -> 4402 bytes B4A/Files/marker-azul1-139.png | Bin 0 -> 4416 bytes B4A/Files/marker-azul1-14.png | Bin 0 -> 3455 bytes B4A/Files/marker-azul1-140.png | Bin 0 -> 4034 bytes B4A/Files/marker-azul1-141.png | Bin 0 -> 3488 bytes B4A/Files/marker-azul1-142.png | Bin 0 -> 3982 bytes B4A/Files/marker-azul1-143.png | Bin 0 -> 4115 bytes B4A/Files/marker-azul1-144.png | Bin 0 -> 3504 bytes B4A/Files/marker-azul1-145.png | Bin 0 -> 4008 bytes B4A/Files/marker-azul1-146.png | Bin 0 -> 4139 bytes B4A/Files/marker-azul1-147.png | Bin 0 -> 3796 bytes B4A/Files/marker-azul1-148.png | Bin 0 -> 4142 bytes B4A/Files/marker-azul1-149.png | Bin 0 -> 4112 bytes B4A/Files/marker-azul1-15.png | Bin 0 -> 3669 bytes B4A/Files/marker-azul1-150.png | Bin 0 -> 4212 bytes B4A/Files/marker-azul1-16.png | Bin 0 -> 3757 bytes B4A/Files/marker-azul1-17.png | Bin 0 -> 3420 bytes B4A/Files/marker-azul1-18.png | Bin 0 -> 3773 bytes B4A/Files/marker-azul1-19.png | Bin 0 -> 3772 bytes B4A/Files/marker-azul1-2.png | Bin 0 -> 3376 bytes B4A/Files/marker-azul1-20.png | Bin 0 -> 3965 bytes B4A/Files/marker-azul1-21.png | Bin 0 -> 3585 bytes B4A/Files/marker-azul1-22.png | Bin 0 -> 3920 bytes B4A/Files/marker-azul1-23.png | Bin 0 -> 4037 bytes B4A/Files/marker-azul1-24.png | Bin 0 -> 3769 bytes B4A/Files/marker-azul1-25.png | Bin 0 -> 3991 bytes B4A/Files/marker-azul1-26.png | Bin 0 -> 4062 bytes B4A/Files/marker-azul1-27.png | Bin 0 -> 3783 bytes B4A/Files/marker-azul1-28.png | Bin 0 -> 4096 bytes B4A/Files/marker-azul1-29.png | Bin 0 -> 4071 bytes B4A/Files/marker-azul1-3.png | Bin 0 -> 3500 bytes B4A/Files/marker-azul1-30.png | Bin 0 -> 4076 bytes B4A/Files/marker-azul1-31.png | Bin 0 -> 3726 bytes B4A/Files/marker-azul1-32.png | Bin 0 -> 4038 bytes B4A/Files/marker-azul1-33.png | Bin 0 -> 4176 bytes B4A/Files/marker-azul1-34.png | Bin 0 -> 3884 bytes B4A/Files/marker-azul1-35.png | Bin 0 -> 4138 bytes B4A/Files/marker-azul1-36.png | Bin 0 -> 4196 bytes B4A/Files/marker-azul1-37.png | Bin 0 -> 3896 bytes B4A/Files/marker-azul1-38.png | Bin 0 -> 4227 bytes B4A/Files/marker-azul1-39.png | Bin 0 -> 4238 bytes B4A/Files/marker-azul1-4.png | Bin 0 -> 3220 bytes B4A/Files/marker-azul1-40.png | Bin 0 -> 3796 bytes B4A/Files/marker-azul1-41.png | Bin 0 -> 3445 bytes B4A/Files/marker-azul1-42.png | Bin 0 -> 3791 bytes B4A/Files/marker-azul1-43.png | Bin 0 -> 3898 bytes B4A/Files/marker-azul1-44.png | Bin 0 -> 3627 bytes B4A/Files/marker-azul1-45.png | Bin 0 -> 3835 bytes B4A/Files/marker-azul1-46.png | Bin 0 -> 3936 bytes B4A/Files/marker-azul1-47.png | Bin 0 -> 3601 bytes B4A/Files/marker-azul1-48.png | Bin 0 -> 3949 bytes B4A/Files/marker-azul1-49.png | Bin 0 -> 3935 bytes B4A/Files/marker-azul1-5.png | Bin 0 -> 3445 bytes B4A/Files/marker-azul1-50.png | Bin 0 -> 4033 bytes B4A/Files/marker-azul1-51.png | Bin 0 -> 3647 bytes B4A/Files/marker-azul1-52.png | Bin 0 -> 3991 bytes B4A/Files/marker-azul1-53.png | Bin 0 -> 4126 bytes B4A/Files/marker-azul1-54.png | Bin 0 -> 3812 bytes B4A/Files/marker-azul1-55.png | Bin 0 -> 4065 bytes B4A/Files/marker-azul1-56.png | Bin 0 -> 4145 bytes B4A/Files/marker-azul1-57.png | Bin 0 -> 3844 bytes B4A/Files/marker-azul1-58.png | Bin 0 -> 4148 bytes B4A/Files/marker-azul1-59.png | Bin 0 -> 4157 bytes B4A/Files/marker-azul1-6.png | Bin 0 -> 3531 bytes B4A/Files/marker-azul1-60.png | Bin 0 -> 4110 bytes B4A/Files/marker-azul1-61.png | Bin 0 -> 3762 bytes B4A/Files/marker-azul1-62.png | Bin 0 -> 4077 bytes B4A/Files/marker-azul1-63.png | Bin 0 -> 4195 bytes B4A/Files/marker-azul1-64.png | Bin 0 -> 3937 bytes B4A/Files/marker-azul1-65.png | Bin 0 -> 4161 bytes B4A/Files/marker-azul1-66.png | Bin 0 -> 4267 bytes B4A/Files/marker-azul1-67.png | Bin 0 -> 3920 bytes B4A/Files/marker-azul1-68.png | Bin 0 -> 4263 bytes B4A/Files/marker-azul1-69.png | Bin 0 -> 4247 bytes B4A/Files/marker-azul1-7.png | Bin 0 -> 3194 bytes B4A/Files/marker-azul1-70.png | Bin 0 -> 3790 bytes B4A/Files/marker-azul1-71.png | Bin 0 -> 3412 bytes B4A/Files/marker-azul1-72.png | Bin 0 -> 3784 bytes B4A/Files/marker-azul1-73.png | Bin 0 -> 3878 bytes B4A/Files/marker-azul1-74.png | Bin 0 -> 3599 bytes B4A/Files/marker-azul1-75.png | Bin 0 -> 3844 bytes B4A/Files/marker-azul1-76.png | Bin 0 -> 3916 bytes B4A/Files/marker-azul1-77.png | Bin 0 -> 3596 bytes B4A/Files/marker-azul1-78.png | Bin 0 -> 3927 bytes B4A/Files/marker-azul1-79.png | Bin 0 -> 3924 bytes B4A/Files/marker-azul1-8.png | Bin 0 -> 3541 bytes B4A/Files/marker-azul1-80.png | Bin 0 -> 4102 bytes B4A/Files/marker-azul1-81.png | Bin 0 -> 3750 bytes B4A/Files/marker-azul1-82.png | Bin 0 -> 4099 bytes B4A/Files/marker-azul1-83.png | Bin 0 -> 4228 bytes B4A/Files/marker-azul1-84.png | Bin 0 -> 3934 bytes B4A/Files/marker-azul1-85.png | Bin 0 -> 4198 bytes B4A/Files/marker-azul1-86.png | Bin 0 -> 4253 bytes B4A/Files/marker-azul1-87.png | Bin 0 -> 3916 bytes B4A/Files/marker-azul1-88.png | Bin 0 -> 4264 bytes B4A/Files/marker-azul1-89.png | Bin 0 -> 4261 bytes B4A/Files/marker-azul1-9.png | Bin 0 -> 3540 bytes B4A/Files/marker-azul1-90.png | Bin 0 -> 4121 bytes B4A/Files/marker-azul1-91.png | Bin 0 -> 3760 bytes B4A/Files/marker-azul1-92.png | Bin 0 -> 4074 bytes B4A/Files/marker-azul1-93.png | Bin 0 -> 4207 bytes B4A/Files/marker-azul1-94.png | Bin 0 -> 3925 bytes B4A/Files/marker-azul1-95.png | Bin 0 -> 4162 bytes B4A/Files/marker-azul1-96.png | Bin 0 -> 4232 bytes B4A/Files/marker-azul1-97.png | Bin 0 -> 3923 bytes B4A/Files/marker-azul1-98.png | Bin 0 -> 4269 bytes B4A/Files/marker-azul1-99.png | Bin 0 -> 4240 bytes B4A/Files/marker-azul2-0.png | Bin 0 -> 3741 bytes B4A/Files/marker-azul2-1.png | Bin 0 -> 3421 bytes B4A/Files/marker-azul2-10.png | Bin 0 -> 3999 bytes B4A/Files/marker-azul2-100.png | Bin 0 -> 4514 bytes B4A/Files/marker-azul2-101.png | Bin 0 -> 4023 bytes B4A/Files/marker-azul2-102.png | Bin 0 -> 4521 bytes B4A/Files/marker-azul2-103.png | Bin 0 -> 4605 bytes B4A/Files/marker-azul2-104.png | Bin 0 -> 4349 bytes B4A/Files/marker-azul2-105.png | Bin 0 -> 4515 bytes B4A/Files/marker-azul2-106.png | Bin 0 -> 4644 bytes B4A/Files/marker-azul2-107.png | Bin 0 -> 4359 bytes B4A/Files/marker-azul2-108.png | Bin 0 -> 4632 bytes B4A/Files/marker-azul2-109.png | Bin 0 -> 4635 bytes B4A/Files/marker-azul2-11.png | Bin 0 -> 3632 bytes B4A/Files/marker-azul2-110.png | Bin 0 -> 4191 bytes B4A/Files/marker-azul2-111.png | Bin 0 -> 3681 bytes B4A/Files/marker-azul2-112.png | Bin 0 -> 4003 bytes B4A/Files/marker-azul2-113.png | Bin 0 -> 4101 bytes B4A/Files/marker-azul2-114.png | Bin 0 -> 3842 bytes B4A/Files/marker-azul2-115.png | Bin 0 -> 4226 bytes B4A/Files/marker-azul2-116.png | Bin 0 -> 4142 bytes B4A/Files/marker-azul2-117.png | Bin 0 -> 3990 bytes B4A/Files/marker-azul2-118.png | Bin 0 -> 4328 bytes B4A/Files/marker-azul2-119.png | Bin 0 -> 4296 bytes B4A/Files/marker-azul2-12.png | Bin 0 -> 3959 bytes B4A/Files/marker-azul2-120.png | Bin 0 -> 4497 bytes B4A/Files/marker-azul2-121.png | Bin 0 -> 4150 bytes B4A/Files/marker-azul2-122.png | Bin 0 -> 4447 bytes B4A/Files/marker-azul2-123.png | Bin 0 -> 4567 bytes B4A/Files/marker-azul2-124.png | Bin 0 -> 4278 bytes B4A/Files/marker-azul2-125.png | Bin 0 -> 4516 bytes B4A/Files/marker-azul2-126.png | Bin 0 -> 4615 bytes B4A/Files/marker-azul2-127.png | Bin 0 -> 4303 bytes B4A/Files/marker-azul2-128.png | Bin 0 -> 4584 bytes B4A/Files/marker-azul2-129.png | Bin 0 -> 4563 bytes B4A/Files/marker-azul2-13.png | Bin 0 -> 4076 bytes B4A/Files/marker-azul2-130.png | Bin 0 -> 4585 bytes B4A/Files/marker-azul2-131.png | Bin 0 -> 4092 bytes B4A/Files/marker-azul2-132.png | Bin 0 -> 4560 bytes B4A/Files/marker-azul2-133.png | Bin 0 -> 4657 bytes B4A/Files/marker-azul2-134.png | Bin 0 -> 4406 bytes B4A/Files/marker-azul2-135.png | Bin 0 -> 4623 bytes B4A/Files/marker-azul2-136.png | Bin 0 -> 4702 bytes B4A/Files/marker-azul2-137.png | Bin 0 -> 4418 bytes B4A/Files/marker-azul2-138.png | Bin 0 -> 4693 bytes B4A/Files/marker-azul2-139.png | Bin 0 -> 4709 bytes B4A/Files/marker-azul2-14.png | Bin 0 -> 3819 bytes B4A/Files/marker-azul2-140.png | Bin 0 -> 4363 bytes B4A/Files/marker-azul2-141.png | Bin 0 -> 3861 bytes B4A/Files/marker-azul2-142.png | Bin 0 -> 4326 bytes B4A/Files/marker-azul2-143.png | Bin 0 -> 4429 bytes B4A/Files/marker-azul2-144.png | Bin 0 -> 3894 bytes B4A/Files/marker-azul2-145.png | Bin 0 -> 4343 bytes B4A/Files/marker-azul2-146.png | Bin 0 -> 4487 bytes B4A/Files/marker-azul2-147.png | Bin 0 -> 4145 bytes B4A/Files/marker-azul2-148.png | Bin 0 -> 4475 bytes B4A/Files/marker-azul2-149.png | Bin 0 -> 4449 bytes B4A/Files/marker-azul2-15.png | Bin 0 -> 4019 bytes B4A/Files/marker-azul2-150.png | Bin 0 -> 4497 bytes B4A/Files/marker-azul2-16.png | Bin 0 -> 4107 bytes B4A/Files/marker-azul2-17.png | Bin 0 -> 3776 bytes B4A/Files/marker-azul2-18.png | Bin 0 -> 4116 bytes B4A/Files/marker-azul2-19.png | Bin 0 -> 4100 bytes B4A/Files/marker-azul2-2.png | Bin 0 -> 3720 bytes B4A/Files/marker-azul2-20.png | Bin 0 -> 4296 bytes B4A/Files/marker-azul2-21.png | Bin 0 -> 3930 bytes B4A/Files/marker-azul2-22.png | Bin 0 -> 4260 bytes B4A/Files/marker-azul2-23.png | Bin 0 -> 4359 bytes B4A/Files/marker-azul2-24.png | Bin 0 -> 4102 bytes B4A/Files/marker-azul2-25.png | Bin 0 -> 4310 bytes B4A/Files/marker-azul2-26.png | Bin 0 -> 4410 bytes B4A/Files/marker-azul2-27.png | Bin 0 -> 4130 bytes B4A/Files/marker-azul2-28.png | Bin 0 -> 4401 bytes B4A/Files/marker-azul2-29.png | Bin 0 -> 4367 bytes B4A/Files/marker-azul2-3.png | Bin 0 -> 3844 bytes B4A/Files/marker-azul2-30.png | Bin 0 -> 4399 bytes B4A/Files/marker-azul2-31.png | Bin 0 -> 4066 bytes B4A/Files/marker-azul2-32.png | Bin 0 -> 4344 bytes B4A/Files/marker-azul2-33.png | Bin 0 -> 4491 bytes B4A/Files/marker-azul2-34.png | Bin 0 -> 4226 bytes B4A/Files/marker-azul2-35.png | Bin 0 -> 4441 bytes B4A/Files/marker-azul2-36.png | Bin 0 -> 4504 bytes B4A/Files/marker-azul2-37.png | Bin 0 -> 4227 bytes B4A/Files/marker-azul2-38.png | Bin 0 -> 4533 bytes B4A/Files/marker-azul2-39.png | Bin 0 -> 4514 bytes B4A/Files/marker-azul2-4.png | Bin 0 -> 3592 bytes B4A/Files/marker-azul2-40.png | Bin 0 -> 4138 bytes B4A/Files/marker-azul2-41.png | Bin 0 -> 3794 bytes B4A/Files/marker-azul2-42.png | Bin 0 -> 4118 bytes B4A/Files/marker-azul2-43.png | Bin 0 -> 4235 bytes B4A/Files/marker-azul2-44.png | Bin 0 -> 3950 bytes B4A/Files/marker-azul2-45.png | Bin 0 -> 4162 bytes B4A/Files/marker-azul2-46.png | Bin 0 -> 4289 bytes B4A/Files/marker-azul2-47.png | Bin 0 -> 3935 bytes B4A/Files/marker-azul2-48.png | Bin 0 -> 4269 bytes B4A/Files/marker-azul2-49.png | Bin 0 -> 4239 bytes B4A/Files/marker-azul2-5.png | Bin 0 -> 3796 bytes B4A/Files/marker-azul2-50.png | Bin 0 -> 4342 bytes B4A/Files/marker-azul2-51.png | Bin 0 -> 3989 bytes B4A/Files/marker-azul2-52.png | Bin 0 -> 4307 bytes B4A/Files/marker-azul2-53.png | Bin 0 -> 4440 bytes B4A/Files/marker-azul2-54.png | Bin 0 -> 4154 bytes B4A/Files/marker-azul2-55.png | Bin 0 -> 4386 bytes B4A/Files/marker-azul2-56.png | Bin 0 -> 4471 bytes B4A/Files/marker-azul2-57.png | Bin 0 -> 4169 bytes B4A/Files/marker-azul2-58.png | Bin 0 -> 4507 bytes B4A/Files/marker-azul2-59.png | Bin 0 -> 4466 bytes B4A/Files/marker-azul2-6.png | Bin 0 -> 3894 bytes B4A/Files/marker-azul2-60.png | Bin 0 -> 4431 bytes B4A/Files/marker-azul2-61.png | Bin 0 -> 4106 bytes B4A/Files/marker-azul2-62.png | Bin 0 -> 4431 bytes B4A/Files/marker-azul2-63.png | Bin 0 -> 4526 bytes B4A/Files/marker-azul2-64.png | Bin 0 -> 4292 bytes B4A/Files/marker-azul2-65.png | Bin 0 -> 4457 bytes B4A/Files/marker-azul2-66.png | Bin 0 -> 4560 bytes B4A/Files/marker-azul2-67.png | Bin 0 -> 4291 bytes B4A/Files/marker-azul2-68.png | Bin 0 -> 4588 bytes B4A/Files/marker-azul2-69.png | Bin 0 -> 4562 bytes B4A/Files/marker-azul2-7.png | Bin 0 -> 3568 bytes B4A/Files/marker-azul2-70.png | Bin 0 -> 4143 bytes B4A/Files/marker-azul2-71.png | Bin 0 -> 3771 bytes B4A/Files/marker-azul2-72.png | Bin 0 -> 4119 bytes B4A/Files/marker-azul2-73.png | Bin 0 -> 4240 bytes B4A/Files/marker-azul2-74.png | Bin 0 -> 3962 bytes B4A/Files/marker-azul2-75.png | Bin 0 -> 4181 bytes B4A/Files/marker-azul2-76.png | Bin 0 -> 4279 bytes B4A/Files/marker-azul2-77.png | Bin 0 -> 3952 bytes B4A/Files/marker-azul2-78.png | Bin 0 -> 4286 bytes B4A/Files/marker-azul2-79.png | Bin 0 -> 4252 bytes B4A/Files/marker-azul2-8.png | Bin 0 -> 3880 bytes B4A/Files/marker-azul2-80.png | Bin 0 -> 4441 bytes B4A/Files/marker-azul2-81.png | Bin 0 -> 4105 bytes B4A/Files/marker-azul2-82.png | Bin 0 -> 4443 bytes B4A/Files/marker-azul2-83.png | Bin 0 -> 4560 bytes B4A/Files/marker-azul2-84.png | Bin 0 -> 4284 bytes B4A/Files/marker-azul2-85.png | Bin 0 -> 4532 bytes B4A/Files/marker-azul2-86.png | Bin 0 -> 4608 bytes B4A/Files/marker-azul2-87.png | Bin 0 -> 4271 bytes B4A/Files/marker-azul2-88.png | Bin 0 -> 4558 bytes B4A/Files/marker-azul2-89.png | Bin 0 -> 4550 bytes B4A/Files/marker-azul2-9.png | Bin 0 -> 3886 bytes B4A/Files/marker-azul2-90.png | Bin 0 -> 4428 bytes B4A/Files/marker-azul2-91.png | Bin 0 -> 4101 bytes B4A/Files/marker-azul2-92.png | Bin 0 -> 4406 bytes B4A/Files/marker-azul2-93.png | Bin 0 -> 4521 bytes B4A/Files/marker-azul2-94.png | Bin 0 -> 4252 bytes B4A/Files/marker-azul2-95.png | Bin 0 -> 4475 bytes B4A/Files/marker-azul2-96.png | Bin 0 -> 4576 bytes B4A/Files/marker-azul2-97.png | Bin 0 -> 4259 bytes B4A/Files/marker-azul2-98.png | Bin 0 -> 4582 bytes B4A/Files/marker-azul2-99.png | Bin 0 -> 4547 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-rojo1-0.png | Bin 0 -> 4723 bytes B4A/Files/marker-rojo1-1.png | Bin 0 -> 3615 bytes B4A/Files/marker-rojo1-10.png | Bin 0 -> 5038 bytes B4A/Files/marker-rojo1-100.png | Bin 0 -> 6326 bytes B4A/Files/marker-rojo1-101.png | Bin 0 -> 5374 bytes B4A/Files/marker-rojo1-102.png | Bin 0 -> 6218 bytes B4A/Files/marker-rojo1-103.png | Bin 0 -> 6524 bytes B4A/Files/marker-rojo1-104.png | Bin 0 -> 5680 bytes B4A/Files/marker-rojo1-105.png | Bin 0 -> 6373 bytes B4A/Files/marker-rojo1-106.png | Bin 0 -> 6738 bytes B4A/Files/marker-rojo1-107.png | Bin 0 -> 5718 bytes B4A/Files/marker-rojo1-108.png | Bin 0 -> 6699 bytes B4A/Files/marker-rojo1-109.png | Bin 0 -> 6773 bytes B4A/Files/marker-rojo1-11.png | Bin 0 -> 3969 bytes B4A/Files/marker-rojo1-110.png | Bin 0 -> 5072 bytes B4A/Files/marker-rojo1-111.png | Bin 0 -> 4042 bytes B4A/Files/marker-rojo1-112.png | Bin 0 -> 4900 bytes B4A/Files/marker-rojo1-113.png | Bin 0 -> 5244 bytes B4A/Files/marker-rojo1-114.png | Bin 0 -> 4309 bytes B4A/Files/marker-rojo1-115.png | Bin 0 -> 5025 bytes B4A/Files/marker-rojo1-116.png | Bin 0 -> 5458 bytes B4A/Files/marker-rojo1-117.png | Bin 0 -> 4416 bytes B4A/Files/marker-rojo1-118..png | Bin 0 -> 5450 bytes B4A/Files/marker-rojo1-119.png | Bin 0 -> 5416 bytes B4A/Files/marker-rojo1-12.png | Bin 0 -> 4851 bytes B4A/Files/marker-rojo1-120.png | Bin 0 -> 6243 bytes B4A/Files/marker-rojo1-121.png | Bin 0 -> 5194 bytes B4A/Files/marker-rojo1-122.png | Bin 0 -> 6014 bytes B4A/Files/marker-rojo1-123.png | Bin 0 -> 6328 bytes B4A/Files/marker-rojo1-124.png | Bin 0 -> 5487 bytes B4A/Files/marker-rojo1-125.png | Bin 0 -> 6124 bytes B4A/Files/marker-rojo1-126.png | Bin 0 -> 6569 bytes B4A/Files/marker-rojo1-127.png | Bin 0 -> 5559 bytes B4A/Files/marker-rojo1-128.png | Bin 0 -> 6530 bytes B4A/Files/marker-rojo1-129.png | Bin 0 -> 6558 bytes B4A/Files/marker-rojo1-13.png | Bin 0 -> 5164 bytes B4A/Files/marker-rojo1-130.png | Bin 0 -> 6527 bytes B4A/Files/marker-rojo1-131.png | Bin 0 -> 5541 bytes B4A/Files/marker-rojo1-132.png | Bin 0 -> 6350 bytes B4A/Files/marker-rojo1-133.png | Bin 0 -> 6668 bytes B4A/Files/marker-rojo1-134.png | Bin 0 -> 5837 bytes B4A/Files/marker-rojo1-135.png | Bin 0 -> 6514 bytes B4A/Files/marker-rojo1-136.png | Bin 0 -> 6919 bytes B4A/Files/marker-rojo1-137.png | Bin 0 -> 5908 bytes B4A/Files/marker-rojo1-138.png | Bin 0 -> 6877 bytes B4A/Files/marker-rojo1-139.png | Bin 0 -> 6912 bytes B4A/Files/marker-rojo1-14.png | Bin 0 -> 4286 bytes B4A/Files/marker-rojo1-140.png | Bin 0 -> 5664 bytes B4A/Files/marker-rojo1-141.png | Bin 0 -> 4584 bytes B4A/Files/marker-rojo1-142.png | Bin 0 -> 5454 bytes B4A/Files/marker-rojo1-143.png | Bin 0 -> 5795 bytes B4A/Files/marker-rojo1-144.png | Bin 0 -> 4687 bytes B4A/Files/marker-rojo1-145.png | Bin 0 -> 5609 bytes B4A/Files/marker-rojo1-146.png | Bin 0 -> 6033 bytes B4A/Files/marker-rojo1-147.png | Bin 0 -> 4999 bytes B4A/Files/marker-rojo1-148.png | Bin 0 -> 6011 bytes B4A/Files/marker-rojo1-149.png | Bin 0 -> 5986 bytes B4A/Files/marker-rojo1-15.png | Bin 0 -> 4988 bytes B4A/Files/marker-rojo1-150.png | Bin 0 -> 6364 bytes B4A/Files/marker-rojo1-16.png | Bin 0 -> 5425 bytes B4A/Files/marker-rojo1-17.png | Bin 0 -> 4384 bytes B4A/Files/marker-rojo1-18.png | Bin 0 -> 5381 bytes B4A/Files/marker-rojo1-19.png | Bin 0 -> 5385 bytes B4A/Files/marker-rojo1-2.png | Bin 0 -> 4559 bytes B4A/Files/marker-rojo1-20.png | Bin 0 -> 5918 bytes B4A/Files/marker-rojo1-21.png | Bin 0 -> 4884 bytes B4A/Files/marker-rojo1-22.png | Bin 0 -> 5700 bytes B4A/Files/marker-rojo1-23.png | Bin 0 -> 6011 bytes B4A/Files/marker-rojo1-24.png | Bin 0 -> 5179 bytes B4A/Files/marker-rojo1-25.png | Bin 0 -> 5807 bytes B4A/Files/marker-rojo1-26.png | Bin 0 -> 6265 bytes B4A/Files/marker-rojo1-27.png | Bin 0 -> 5234 bytes B4A/Files/marker-rojo1-28.png | Bin 0 -> 6224 bytes B4A/Files/marker-rojo1-29.png | Bin 0 -> 6235 bytes B4A/Files/marker-rojo1-3.png | Bin 0 -> 4889 bytes B4A/Files/marker-rojo1-30.png | Bin 0 -> 6213 bytes B4A/Files/marker-rojo1-31.png | Bin 0 -> 5204 bytes B4A/Files/marker-rojo1-32.png | Bin 0 -> 6031 bytes B4A/Files/marker-rojo1-33.png | Bin 0 -> 6399 bytes B4A/Files/marker-rojo1-34.png | Bin 0 -> 5524 bytes B4A/Files/marker-rojo1-35.png | Bin 0 -> 6192 bytes B4A/Files/marker-rojo1-36.png | Bin 0 -> 6631 bytes B4A/Files/marker-rojo1-37.png | Bin 0 -> 5627 bytes B4A/Files/marker-rojo1-38.png | Bin 0 -> 6590 bytes B4A/Files/marker-rojo1-39.png | Bin 0 -> 6606 bytes B4A/Files/marker-rojo1-4.png | Bin 0 -> 3915 bytes B4A/Files/marker-rojo1-40.png | Bin 0 -> 5342 bytes B4A/Files/marker-rojo1-41.png | Bin 0 -> 4266 bytes B4A/Files/marker-rojo1-42.png | Bin 0 -> 5142 bytes B4A/Files/marker-rojo1-43.png | Bin 0 -> 5488 bytes B4A/Files/marker-rojo1-44.png | Bin 0 -> 4350 bytes B4A/Files/marker-rojo1-45.png | Bin 0 -> 5277 bytes B4A/Files/marker-rojo1-46.png | Bin 0 -> 5736 bytes B4A/Files/marker-rojo1-47.png | Bin 0 -> 4674 bytes B4A/Files/marker-rojo1-48.png | Bin 0 -> 5678 bytes B4A/Files/marker-rojo1-49.png | Bin 0 -> 5661 bytes B4A/Files/marker-rojo1-5.png | Bin 0 -> 4668 bytes B4A/Files/marker-rojo1-50.png | Bin 0 -> 6040 bytes B4A/Files/marker-rojo1-51.png | Bin 0 -> 4989 bytes B4A/Files/marker-rojo1-52.png | Bin 0 -> 5792 bytes B4A/Files/marker-rojo1-53.png | Bin 0 -> 6190 bytes B4A/Files/marker-rojo1-54.png | Bin 0 -> 5294 bytes B4A/Files/marker-rojo1-55.png | Bin 0 -> 5978 bytes B4A/Files/marker-rojo1-56.png | Bin 0 -> 6365 bytes B4A/Files/marker-rojo1-57.png | Bin 0 -> 5408 bytes B4A/Files/marker-rojo1-58.png | Bin 0 -> 6410 bytes B4A/Files/marker-rojo1-59.png | Bin 0 -> 6397 bytes B4A/Files/marker-rojo1-6.png | Bin 0 -> 5108 bytes B4A/Files/marker-rojo1-60.png | Bin 0 -> 6475 bytes B4A/Files/marker-rojo1-61.png | Bin 0 -> 5420 bytes B4A/Files/marker-rojo1-62.png | Bin 0 -> 6264 bytes B4A/Files/marker-rojo1-63.png | Bin 0 -> 6585 bytes B4A/Files/marker-rojo1-64.png | Bin 0 -> 5781 bytes B4A/Files/marker-rojo1-65.png | Bin 0 -> 6374 bytes B4A/Files/marker-rojo1-66.png | Bin 0 -> 6766 bytes B4A/Files/marker-rojo1-67.png | Bin 0 -> 5827 bytes B4A/Files/marker-rojo1-68.png | Bin 0 -> 6762 bytes B4A/Files/marker-rojo1-69.png | Bin 0 -> 6843 bytes B4A/Files/marker-rojo1-7.png | Bin 0 -> 4042 bytes B4A/Files/marker-rojo1-70.png | Bin 0 -> 5419 bytes B4A/Files/marker-rojo1-71.png | Bin 0 -> 4399 bytes B4A/Files/marker-rojo1-72.png | Bin 0 -> 5241 bytes B4A/Files/marker-rojo1-73.png | Bin 0 -> 5573 bytes B4A/Files/marker-rojo1-74.png | Bin 0 -> 4687 bytes B4A/Files/marker-rojo1-75.png | Bin 0 -> 5387 bytes B4A/Files/marker-rojo1-76.png | Bin 0 -> 5810 bytes B4A/Files/marker-rojo1-77.png | Bin 0 -> 4776 bytes B4A/Files/marker-rojo1-78.png | Bin 0 -> 5792 bytes B4A/Files/marker-rojo1-79.png | Bin 0 -> 5770 bytes B4A/Files/marker-rojo1-8.png | Bin 0 -> 5093 bytes B4A/Files/marker-rojo1-80.png | Bin 0 -> 6370 bytes B4A/Files/marker-rojo1-81.png | Bin 0 -> 5412 bytes B4A/Files/marker-rojo1-82.png | Bin 0 -> 6220 bytes B4A/Files/marker-rojo1-83.png | Bin 0 -> 6553 bytes B4A/Files/marker-rojo1-84.png | Bin 0 -> 5701 bytes B4A/Files/marker-rojo1-85.png | Bin 0 -> 6378 bytes B4A/Files/marker-rojo1-86.png | Bin 0 -> 6833 bytes B4A/Files/marker-rojo1-87.png | Bin 0 -> 5808 bytes B4A/Files/marker-rojo1-88.png | Bin 0 -> 6696 bytes B4A/Files/marker-rojo1-89.png | Bin 0 -> 6783 bytes B4A/Files/marker-rojo1-9.png | Bin 0 -> 5065 bytes B4A/Files/marker-rojo1-90.png | Bin 0 -> 6418 bytes B4A/Files/marker-rojo1-91.png | Bin 0 -> 5390 bytes B4A/Files/marker-rojo1-92.png | Bin 0 -> 6199 bytes B4A/Files/marker-rojo1-93.png | Bin 0 -> 6614 bytes B4A/Files/marker-rojo1-94.png | Bin 0 -> 5661 bytes B4A/Files/marker-rojo1-95.png | Bin 0 -> 6371 bytes B4A/Files/marker-rojo1-96.png | Bin 0 -> 6820 bytes B4A/Files/marker-rojo1-97.png | Bin 0 -> 5740 bytes B4A/Files/marker-rojo1-98.png | Bin 0 -> 6735 bytes B4A/Files/marker-rojo1-99.png | Bin 0 -> 6726 bytes B4A/Files/marker-rojo2-0.png | Bin 0 -> 3026 bytes B4A/Files/marker-rojo2-1.png | Bin 0 -> 2644 bytes B4A/Files/marker-rojo2-10.png | Bin 0 -> 3238 bytes B4A/Files/marker-rojo2-100.png | Bin 0 -> 3808 bytes B4A/Files/marker-rojo2-101.png | Bin 0 -> 3276 bytes B4A/Files/marker-rojo2-102.png | Bin 0 -> 3796 bytes B4A/Files/marker-rojo2-103.png | Bin 0 -> 3918 bytes B4A/Files/marker-rojo2-104.png | Bin 0 -> 3648 bytes B4A/Files/marker-rojo2-105.png | Bin 0 -> 3860 bytes B4A/Files/marker-rojo2-106.png | Bin 0 -> 3933 bytes B4A/Files/marker-rojo2-107.png | Bin 0 -> 3646 bytes B4A/Files/marker-rojo2-108.png | Bin 0 -> 3929 bytes B4A/Files/marker-rojo2-109.png | Bin 0 -> 3952 bytes B4A/Files/marker-rojo2-11.png | Bin 0 -> 2861 bytes B4A/Files/marker-rojo2-110.png | Bin 0 -> 3457 bytes B4A/Files/marker-rojo2-111.png | Bin 0 -> 2897 bytes B4A/Files/marker-rojo2-112.png | Bin 0 -> 3259 bytes B4A/Files/marker-rojo2-113.png | Bin 0 -> 3390 bytes B4A/Files/marker-rojo2-114.png | Bin 0 -> 3102 bytes B4A/Files/marker-rojo2-115.png | Bin 0 -> 3526 bytes B4A/Files/marker-rojo2-116.png | Bin 0 -> 3414 bytes B4A/Files/marker-rojo2-117.png | Bin 0 -> 3263 bytes B4A/Files/marker-rojo2-118.png | Bin 0 -> 3624 bytes B4A/Files/marker-rojo2-119.png | Bin 0 -> 3631 bytes B4A/Files/marker-rojo2-12.png | Bin 0 -> 3229 bytes B4A/Files/marker-rojo2-120.png | Bin 0 -> 3788 bytes B4A/Files/marker-rojo2-121.png | Bin 0 -> 3448 bytes B4A/Files/marker-rojo2-122.png | Bin 0 -> 3791 bytes B4A/Files/marker-rojo2-123.png | Bin 0 -> 3895 bytes B4A/Files/marker-rojo2-124.png | Bin 0 -> 3615 bytes B4A/Files/marker-rojo2-125.png | Bin 0 -> 3842 bytes B4A/Files/marker-rojo2-126.png | Bin 0 -> 3954 bytes B4A/Files/marker-rojo2-127.png | Bin 0 -> 3611 bytes B4A/Files/marker-rojo2-128.png | Bin 0 -> 3904 bytes B4A/Files/marker-rojo2-129.png | Bin 0 -> 3900 bytes B4A/Files/marker-rojo2-13.png | Bin 0 -> 3368 bytes B4A/Files/marker-rojo2-130.png | Bin 0 -> 3895 bytes B4A/Files/marker-rojo2-131.png | Bin 0 -> 3369 bytes B4A/Files/marker-rojo2-132.png | Bin 0 -> 3868 bytes B4A/Files/marker-rojo2-133.png | Bin 0 -> 4014 bytes B4A/Files/marker-rojo2-134.png | Bin 0 -> 3712 bytes B4A/Files/marker-rojo2-135.png | Bin 0 -> 3954 bytes B4A/Files/marker-rojo2-136.png | Bin 0 -> 4033 bytes B4A/Files/marker-rojo2-137.png | Bin 0 -> 3708 bytes B4A/Files/marker-rojo2-138.png | Bin 0 -> 4070 bytes B4A/Files/marker-rojo2-139.png | Bin 0 -> 4031 bytes B4A/Files/marker-rojo2-14.png | Bin 0 -> 3060 bytes B4A/Files/marker-rojo2-140.png | Bin 0 -> 3651 bytes B4A/Files/marker-rojo2-141.png | Bin 0 -> 3084 bytes B4A/Files/marker-rojo2-142.png | Bin 0 -> 3617 bytes B4A/Files/marker-rojo2-143.png | Bin 0 -> 3740 bytes B4A/Files/marker-rojo2-144.png | Bin 0 -> 3101 bytes B4A/Files/marker-rojo2-145.png | Bin 0 -> 3634 bytes B4A/Files/marker-rojo2-146.png | Bin 0 -> 3777 bytes B4A/Files/marker-rojo2-147.png | Bin 0 -> 3412 bytes B4A/Files/marker-rojo2-148.png | Bin 0 -> 3770 bytes B4A/Files/marker-rojo2-149.png | Bin 0 -> 3735 bytes B4A/Files/marker-rojo2-15.png | Bin 0 -> 3293 bytes B4A/Files/marker-rojo2-150.png | Bin 0 -> 3831 bytes B4A/Files/marker-rojo2-16.png | Bin 0 -> 3395 bytes B4A/Files/marker-rojo2-17.png | Bin 0 -> 3037 bytes B4A/Files/marker-rojo2-18.png | Bin 0 -> 3398 bytes B4A/Files/marker-rojo2-19.png | Bin 0 -> 3398 bytes B4A/Files/marker-rojo2-2.png | Bin 0 -> 2991 bytes B4A/Files/marker-rojo2-20.png | Bin 0 -> 3597 bytes B4A/Files/marker-rojo2-21.png | Bin 0 -> 3206 bytes B4A/Files/marker-rojo2-22.png | Bin 0 -> 3612 bytes B4A/Files/marker-rojo2-23.png | Bin 0 -> 3715 bytes B4A/Files/marker-rojo2-24.png | Bin 0 -> 3402 bytes B4A/Files/marker-rojo2-25.png | Bin 0 -> 3631 bytes B4A/Files/marker-rojo2-26.png | Bin 0 -> 3737 bytes B4A/Files/marker-rojo2-27.png | Bin 0 -> 3426 bytes B4A/Files/marker-rojo2-28.png | Bin 0 -> 3755 bytes B4A/Files/marker-rojo2-29.png | Bin 0 -> 3729 bytes B4A/Files/marker-rojo2-3.png | Bin 0 -> 3143 bytes B4A/Files/marker-rojo2-30.png | Bin 0 -> 3707 bytes B4A/Files/marker-rojo2-31.png | Bin 0 -> 3338 bytes B4A/Files/marker-rojo2-32.png | Bin 0 -> 3699 bytes B4A/Files/marker-rojo2-33.png | Bin 0 -> 3839 bytes B4A/Files/marker-rojo2-34.png | Bin 0 -> 3511 bytes B4A/Files/marker-rojo2-35.png | Bin 0 -> 3781 bytes B4A/Files/marker-rojo2-36.png | Bin 0 -> 3875 bytes B4A/Files/marker-rojo2-37.png | Bin 0 -> 3526 bytes B4A/Files/marker-rojo2-38.png | Bin 0 -> 3865 bytes B4A/Files/marker-rojo2-39.png | Bin 0 -> 3905 bytes B4A/Files/marker-rojo2-4.png | Bin 0 -> 2841 bytes B4A/Files/marker-rojo2-40.png | Bin 0 -> 3434 bytes B4A/Files/marker-rojo2-41.png | Bin 0 -> 3067 bytes B4A/Files/marker-rojo2-42.png | Bin 0 -> 3433 bytes B4A/Files/marker-rojo2-43.png | Bin 0 -> 3559 bytes B4A/Files/marker-rojo2-44.png | Bin 0 -> 3231 bytes B4A/Files/marker-rojo2-45.png | Bin 0 -> 3467 bytes B4A/Files/marker-rojo2-46.png | Bin 0 -> 3597 bytes B4A/Files/marker-rojo2-47.png | Bin 0 -> 3228 bytes B4A/Files/marker-rojo2-48.png | Bin 0 -> 3611 bytes B4A/Files/marker-rojo2-49.png | Bin 0 -> 3584 bytes B4A/Files/marker-rojo2-5.png | Bin 0 -> 3080 bytes B4A/Files/marker-rojo2-50.png | Bin 0 -> 3650 bytes B4A/Files/marker-rojo2-51.png | Bin 0 -> 3274 bytes B4A/Files/marker-rojo2-52.png | Bin 0 -> 3640 bytes B4A/Files/marker-rojo2-53.png | Bin 0 -> 3775 bytes B4A/Files/marker-rojo2-54.png | Bin 0 -> 3443 bytes B4A/Files/marker-rojo2-55.png | Bin 0 -> 3715 bytes B4A/Files/marker-rojo2-56.png | Bin 0 -> 3792 bytes B4A/Files/marker-rojo2-57.png | Bin 0 -> 3460 bytes B4A/Files/marker-rojo2-58.png | Bin 0 -> 3837 bytes B4A/Files/marker-rojo2-59.png | Bin 0 -> 3810 bytes B4A/Files/marker-rojo2-6.png | Bin 0 -> 3178 bytes B4A/Files/marker-rojo2-60.png | Bin 0 -> 3712 bytes B4A/Files/marker-rojo2-61.png | Bin 0 -> 3365 bytes B4A/Files/marker-rojo2-62.png | Bin 0 -> 3742 bytes B4A/Files/marker-rojo2-63.png | Bin 0 -> 3848 bytes B4A/Files/marker-rojo2-64.png | Bin 0 -> 3556 bytes B4A/Files/marker-rojo2-65.png | Bin 0 -> 3814 bytes B4A/Files/marker-rojo2-66.png | Bin 0 -> 3891 bytes B4A/Files/marker-rojo2-67.png | Bin 0 -> 3570 bytes B4A/Files/marker-rojo2-68.png | Bin 0 -> 3920 bytes B4A/Files/marker-rojo2-69.png | Bin 0 -> 3875 bytes B4A/Files/marker-rojo2-7.png | Bin 0 -> 2817 bytes B4A/Files/marker-rojo2-70.png | Bin 0 -> 3393 bytes B4A/Files/marker-rojo2-71.png | Bin 0 -> 3024 bytes B4A/Files/marker-rojo2-72.png | Bin 0 -> 3418 bytes B4A/Files/marker-rojo2-73.png | Bin 0 -> 3516 bytes B4A/Files/marker-rojo2-74.png | Bin 0 -> 3190 bytes B4A/Files/marker-rojo2-75.png | Bin 0 -> 3457 bytes B4A/Files/marker-rojo2-76.png | Bin 0 -> 3546 bytes B4A/Files/marker-rojo2-77.png | Bin 0 -> 3226 bytes B4A/Files/marker-rojo2-78.png | Bin 0 -> 3558 bytes B4A/Files/marker-rojo2-79.png | Bin 0 -> 3566 bytes B4A/Files/marker-rojo2-8.png | Bin 0 -> 3178 bytes B4A/Files/marker-rojo2-80.png | Bin 0 -> 3713 bytes B4A/Files/marker-rojo2-81.png | Bin 0 -> 3377 bytes B4A/Files/marker-rojo2-82.png | Bin 0 -> 3763 bytes B4A/Files/marker-rojo2-83.png | Bin 0 -> 3874 bytes B4A/Files/marker-rojo2-84.png | Bin 0 -> 3565 bytes B4A/Files/marker-rojo2-85.png | Bin 0 -> 3820 bytes B4A/Files/marker-rojo2-86.png | Bin 0 -> 3882 bytes B4A/Files/marker-rojo2-87.png | Bin 0 -> 3575 bytes B4A/Files/marker-rojo2-88.png | Bin 0 -> 3913 bytes B4A/Files/marker-rojo2-89.png | Bin 0 -> 3901 bytes B4A/Files/marker-rojo2-9.png | Bin 0 -> 3187 bytes B4A/Files/marker-rojo2-90.png | Bin 0 -> 3773 bytes B4A/Files/marker-rojo2-91.png | Bin 0 -> 3376 bytes B4A/Files/marker-rojo2-92.png | Bin 0 -> 3765 bytes B4A/Files/marker-rojo2-93.png | Bin 0 -> 3882 bytes B4A/Files/marker-rojo2-94.png | Bin 0 -> 3557 bytes B4A/Files/marker-rojo2-95.png | Bin 0 -> 3802 bytes B4A/Files/marker-rojo2-96.png | Bin 0 -> 3893 bytes B4A/Files/marker-rojo2-97.png | Bin 0 -> 3573 bytes B4A/Files/marker-rojo2-98.png | Bin 0 -> 3929 bytes B4A/Files/marker-rojo2-99.png | Bin 0 -> 3918 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/no_venta.bal | Bin 0 -> 6116 bytes B4A/Files/nuevocliente.bal | Bin 0 -> 3195 bytes B4A/Files/pedido.bal | Bin 0 -> 11335 bytes B4A/Files/planfia_logo.png | Bin 0 -> 22355 bytes B4A/Files/planfia_logo_old.png | Bin 0 -> 34019 bytes B4A/Files/planfia_logo_old2.png | Bin 0 -> 40821 bytes B4A/Files/principal.bal | Bin 0 -> 20180 bytes B4A/Files/proditem.bal | Bin 0 -> 5136 bytes B4A/Files/productos.bal | Bin 0 -> 21460 bytes B4A/Files/profina.jpg | Bin 0 -> 4738 bytes B4A/Files/profina.png | Bin 0 -> 5080 bytes B4A/Files/sync.png | Bin 0 -> 763 bytes B4A/Files/tabulador.bal | Bin 0 -> 18660 bytes B4A/Files/telefonos.bal | Bin 0 -> 8167 bytes B4A/GUNA_Reparto.b4a | 188 ++++ B4A/GUNA_Reparto.b4a.meta | 87 ++ B4A/MAPA_CLIENTE.bas | 115 +++ B4A/MAPA_RUTAS.bas | 333 +++++++ B4A/Mariana_Reparto.b4a.meta | 87 ++ B4A/Starter.bas | 161 ++++ B4A/Subs.bas | 873 ++++++++++++++++++ B4A/Tracker.bas | 236 +++++ B4A/appUpdater.bas | 284 ++++++ B4A/foto.bas | 190 ++++ 1137 files changed, 9280 insertions(+) create mode 100644 .gitignore create mode 100644 B4A/B4XMainPage.bas create mode 100644 B4A/B4XUpdateAvailable.bas create mode 100644 B4A/BatteryUtilities.bas create mode 100644 B4A/C_Buscar.bas create mode 100644 B4A/C_Cliente.bas create mode 100644 B4A/C_Clientes.bas create mode 100644 B4A/C_DetalleVenta.bas create mode 100644 B4A/C_Detalle_Promo.bas create mode 100644 B4A/C_Foto.bas create mode 100644 B4A/C_Historico.bas create mode 100644 B4A/C_Mapas.bas create mode 100644 B4A/C_NoVenta.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_TicketsDia.bas create mode 100644 B4A/C_UpdateAvailable.bas create mode 100644 B4A/C_tabulador.bas create mode 100644 B4A/CameraExClass.bas create mode 100644 B4A/DBRequestManager.bas create mode 100644 B4A/Files/alert2.png create mode 100644 B4A/Files/alerta.jpg create mode 100644 B4A/Files/buscar.bal create mode 100644 B4A/Files/cliente.bal create mode 100644 B4A/Files/clientes.bal create mode 100644 B4A/Files/dbc.png create mode 100644 B4A/Files/detalle_promo.bal create mode 100644 B4A/Files/detalleventa.bal create mode 100644 B4A/Files/durakelo1.png create mode 100644 B4A/Files/engrane.jpg create mode 100644 B4A/Files/fondo_kmt.jpg create mode 100644 B4A/Files/foto.bal create mode 100644 B4A/Files/guardagestion.bal create mode 100644 B4A/Files/guna_viejo.png create mode 100644 B4A/Files/guna_viejo2.png create mode 100644 B4A/Files/historico.bal create mode 100644 B4A/Files/infonavit1.jpg create mode 100644 B4A/Files/itembuttonblue.png create mode 100644 B4A/Files/kelloggs.png create mode 100644 B4A/Files/keymon_logo.png create mode 100644 B4A/Files/kmt.db create mode 100644 B4A/Files/kmt2.db create mode 100644 B4A/Files/kmt3.db create mode 100644 B4A/Files/login.bal create mode 100644 B4A/Files/logo sanfer.jpg create mode 100644 B4A/Files/logo-guna-18.png create mode 100644 B4A/Files/logo_exitus1.jpg create mode 100644 B4A/Files/logo_mariana.jpg create mode 100644 B4A/Files/mainpage.bal create mode 100644 B4A/Files/malo.jpg create mode 100644 B4A/Files/mapa.bal create mode 100644 B4A/Files/mapa_cliente.bal create mode 100644 B4A/Files/mapa_rutas.bal create mode 100644 B4A/Files/mariana_logo_192x192.jpg 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-azul1-0.png create mode 100644 B4A/Files/marker-azul1-1.png create mode 100644 B4A/Files/marker-azul1-10.png create mode 100644 B4A/Files/marker-azul1-100.png create mode 100644 B4A/Files/marker-azul1-101.png create mode 100644 B4A/Files/marker-azul1-102.png create mode 100644 B4A/Files/marker-azul1-103.png create mode 100644 B4A/Files/marker-azul1-104.png create mode 100644 B4A/Files/marker-azul1-105.png create mode 100644 B4A/Files/marker-azul1-106.png create mode 100644 B4A/Files/marker-azul1-107.png create mode 100644 B4A/Files/marker-azul1-108.png create mode 100644 B4A/Files/marker-azul1-109.png create mode 100644 B4A/Files/marker-azul1-11.png create mode 100644 B4A/Files/marker-azul1-110.png create mode 100644 B4A/Files/marker-azul1-111.png create mode 100644 B4A/Files/marker-azul1-112.png create mode 100644 B4A/Files/marker-azul1-113.png create mode 100644 B4A/Files/marker-azul1-114.png create mode 100644 B4A/Files/marker-azul1-115.png create mode 100644 B4A/Files/marker-azul1-116.png create mode 100644 B4A/Files/marker-azul1-117.png create mode 100644 B4A/Files/marker-azul1-118.png create mode 100644 B4A/Files/marker-azul1-119.png create mode 100644 B4A/Files/marker-azul1-12.png create mode 100644 B4A/Files/marker-azul1-120.png create mode 100644 B4A/Files/marker-azul1-121.png create mode 100644 B4A/Files/marker-azul1-122.png create mode 100644 B4A/Files/marker-azul1-123.png create mode 100644 B4A/Files/marker-azul1-124.png create mode 100644 B4A/Files/marker-azul1-125.png create mode 100644 B4A/Files/marker-azul1-126.png create mode 100644 B4A/Files/marker-azul1-127.png create mode 100644 B4A/Files/marker-azul1-128.png create mode 100644 B4A/Files/marker-azul1-129.png create mode 100644 B4A/Files/marker-azul1-13.png create mode 100644 B4A/Files/marker-azul1-130.png create mode 100644 B4A/Files/marker-azul1-131.png create mode 100644 B4A/Files/marker-azul1-132.png create mode 100644 B4A/Files/marker-azul1-133.png create mode 100644 B4A/Files/marker-azul1-134.png create mode 100644 B4A/Files/marker-azul1-135.png create mode 100644 B4A/Files/marker-azul1-136.png create mode 100644 B4A/Files/marker-azul1-137.png create mode 100644 B4A/Files/marker-azul1-138.png create mode 100644 B4A/Files/marker-azul1-139.png create mode 100644 B4A/Files/marker-azul1-14.png create mode 100644 B4A/Files/marker-azul1-140.png create mode 100644 B4A/Files/marker-azul1-141.png create mode 100644 B4A/Files/marker-azul1-142.png create mode 100644 B4A/Files/marker-azul1-143.png create mode 100644 B4A/Files/marker-azul1-144.png create mode 100644 B4A/Files/marker-azul1-145.png create mode 100644 B4A/Files/marker-azul1-146.png create mode 100644 B4A/Files/marker-azul1-147.png create mode 100644 B4A/Files/marker-azul1-148.png create mode 100644 B4A/Files/marker-azul1-149.png create mode 100644 B4A/Files/marker-azul1-15.png create mode 100644 B4A/Files/marker-azul1-150.png create mode 100644 B4A/Files/marker-azul1-16.png create mode 100644 B4A/Files/marker-azul1-17.png create mode 100644 B4A/Files/marker-azul1-18.png create mode 100644 B4A/Files/marker-azul1-19.png create mode 100644 B4A/Files/marker-azul1-2.png create mode 100644 B4A/Files/marker-azul1-20.png create mode 100644 B4A/Files/marker-azul1-21.png create mode 100644 B4A/Files/marker-azul1-22.png create mode 100644 B4A/Files/marker-azul1-23.png create mode 100644 B4A/Files/marker-azul1-24.png create mode 100644 B4A/Files/marker-azul1-25.png create mode 100644 B4A/Files/marker-azul1-26.png create mode 100644 B4A/Files/marker-azul1-27.png create mode 100644 B4A/Files/marker-azul1-28.png create mode 100644 B4A/Files/marker-azul1-29.png create mode 100644 B4A/Files/marker-azul1-3.png create mode 100644 B4A/Files/marker-azul1-30.png create mode 100644 B4A/Files/marker-azul1-31.png create mode 100644 B4A/Files/marker-azul1-32.png create mode 100644 B4A/Files/marker-azul1-33.png create mode 100644 B4A/Files/marker-azul1-34.png create mode 100644 B4A/Files/marker-azul1-35.png create mode 100644 B4A/Files/marker-azul1-36.png create mode 100644 B4A/Files/marker-azul1-37.png create mode 100644 B4A/Files/marker-azul1-38.png create mode 100644 B4A/Files/marker-azul1-39.png create mode 100644 B4A/Files/marker-azul1-4.png create mode 100644 B4A/Files/marker-azul1-40.png create mode 100644 B4A/Files/marker-azul1-41.png create mode 100644 B4A/Files/marker-azul1-42.png create mode 100644 B4A/Files/marker-azul1-43.png create mode 100644 B4A/Files/marker-azul1-44.png create mode 100644 B4A/Files/marker-azul1-45.png create mode 100644 B4A/Files/marker-azul1-46.png create mode 100644 B4A/Files/marker-azul1-47.png create mode 100644 B4A/Files/marker-azul1-48.png create mode 100644 B4A/Files/marker-azul1-49.png create mode 100644 B4A/Files/marker-azul1-5.png create mode 100644 B4A/Files/marker-azul1-50.png create mode 100644 B4A/Files/marker-azul1-51.png create mode 100644 B4A/Files/marker-azul1-52.png create mode 100644 B4A/Files/marker-azul1-53.png create mode 100644 B4A/Files/marker-azul1-54.png create mode 100644 B4A/Files/marker-azul1-55.png create mode 100644 B4A/Files/marker-azul1-56.png create mode 100644 B4A/Files/marker-azul1-57.png create mode 100644 B4A/Files/marker-azul1-58.png create mode 100644 B4A/Files/marker-azul1-59.png create mode 100644 B4A/Files/marker-azul1-6.png create mode 100644 B4A/Files/marker-azul1-60.png create mode 100644 B4A/Files/marker-azul1-61.png create mode 100644 B4A/Files/marker-azul1-62.png create mode 100644 B4A/Files/marker-azul1-63.png create mode 100644 B4A/Files/marker-azul1-64.png create mode 100644 B4A/Files/marker-azul1-65.png create mode 100644 B4A/Files/marker-azul1-66.png create mode 100644 B4A/Files/marker-azul1-67.png create mode 100644 B4A/Files/marker-azul1-68.png create mode 100644 B4A/Files/marker-azul1-69.png create mode 100644 B4A/Files/marker-azul1-7.png create mode 100644 B4A/Files/marker-azul1-70.png create mode 100644 B4A/Files/marker-azul1-71.png create mode 100644 B4A/Files/marker-azul1-72.png create mode 100644 B4A/Files/marker-azul1-73.png create mode 100644 B4A/Files/marker-azul1-74.png create mode 100644 B4A/Files/marker-azul1-75.png create mode 100644 B4A/Files/marker-azul1-76.png create mode 100644 B4A/Files/marker-azul1-77.png create mode 100644 B4A/Files/marker-azul1-78.png create mode 100644 B4A/Files/marker-azul1-79.png create mode 100644 B4A/Files/marker-azul1-8.png create mode 100644 B4A/Files/marker-azul1-80.png create mode 100644 B4A/Files/marker-azul1-81.png create mode 100644 B4A/Files/marker-azul1-82.png create mode 100644 B4A/Files/marker-azul1-83.png create mode 100644 B4A/Files/marker-azul1-84.png create mode 100644 B4A/Files/marker-azul1-85.png create mode 100644 B4A/Files/marker-azul1-86.png create mode 100644 B4A/Files/marker-azul1-87.png create mode 100644 B4A/Files/marker-azul1-88.png create mode 100644 B4A/Files/marker-azul1-89.png create mode 100644 B4A/Files/marker-azul1-9.png create mode 100644 B4A/Files/marker-azul1-90.png create mode 100644 B4A/Files/marker-azul1-91.png create mode 100644 B4A/Files/marker-azul1-92.png create mode 100644 B4A/Files/marker-azul1-93.png create mode 100644 B4A/Files/marker-azul1-94.png create mode 100644 B4A/Files/marker-azul1-95.png create mode 100644 B4A/Files/marker-azul1-96.png create mode 100644 B4A/Files/marker-azul1-97.png create mode 100644 B4A/Files/marker-azul1-98.png create mode 100644 B4A/Files/marker-azul1-99.png create mode 100644 B4A/Files/marker-azul2-0.png create mode 100644 B4A/Files/marker-azul2-1.png create mode 100644 B4A/Files/marker-azul2-10.png create mode 100644 B4A/Files/marker-azul2-100.png create mode 100644 B4A/Files/marker-azul2-101.png create mode 100644 B4A/Files/marker-azul2-102.png create mode 100644 B4A/Files/marker-azul2-103.png create mode 100644 B4A/Files/marker-azul2-104.png create mode 100644 B4A/Files/marker-azul2-105.png create mode 100644 B4A/Files/marker-azul2-106.png create mode 100644 B4A/Files/marker-azul2-107.png create mode 100644 B4A/Files/marker-azul2-108.png create mode 100644 B4A/Files/marker-azul2-109.png create mode 100644 B4A/Files/marker-azul2-11.png create mode 100644 B4A/Files/marker-azul2-110.png create mode 100644 B4A/Files/marker-azul2-111.png create mode 100644 B4A/Files/marker-azul2-112.png create mode 100644 B4A/Files/marker-azul2-113.png create mode 100644 B4A/Files/marker-azul2-114.png create mode 100644 B4A/Files/marker-azul2-115.png create mode 100644 B4A/Files/marker-azul2-116.png create mode 100644 B4A/Files/marker-azul2-117.png create mode 100644 B4A/Files/marker-azul2-118.png create mode 100644 B4A/Files/marker-azul2-119.png create mode 100644 B4A/Files/marker-azul2-12.png create mode 100644 B4A/Files/marker-azul2-120.png create mode 100644 B4A/Files/marker-azul2-121.png create mode 100644 B4A/Files/marker-azul2-122.png create mode 100644 B4A/Files/marker-azul2-123.png create mode 100644 B4A/Files/marker-azul2-124.png create mode 100644 B4A/Files/marker-azul2-125.png create mode 100644 B4A/Files/marker-azul2-126.png create mode 100644 B4A/Files/marker-azul2-127.png create mode 100644 B4A/Files/marker-azul2-128.png create mode 100644 B4A/Files/marker-azul2-129.png create mode 100644 B4A/Files/marker-azul2-13.png create mode 100644 B4A/Files/marker-azul2-130.png create mode 100644 B4A/Files/marker-azul2-131.png create mode 100644 B4A/Files/marker-azul2-132.png create mode 100644 B4A/Files/marker-azul2-133.png create mode 100644 B4A/Files/marker-azul2-134.png create mode 100644 B4A/Files/marker-azul2-135.png create mode 100644 B4A/Files/marker-azul2-136.png create mode 100644 B4A/Files/marker-azul2-137.png create mode 100644 B4A/Files/marker-azul2-138.png create mode 100644 B4A/Files/marker-azul2-139.png create mode 100644 B4A/Files/marker-azul2-14.png create mode 100644 B4A/Files/marker-azul2-140.png create mode 100644 B4A/Files/marker-azul2-141.png create mode 100644 B4A/Files/marker-azul2-142.png create mode 100644 B4A/Files/marker-azul2-143.png create mode 100644 B4A/Files/marker-azul2-144.png create mode 100644 B4A/Files/marker-azul2-145.png create mode 100644 B4A/Files/marker-azul2-146.png create mode 100644 B4A/Files/marker-azul2-147.png create mode 100644 B4A/Files/marker-azul2-148.png create mode 100644 B4A/Files/marker-azul2-149.png create mode 100644 B4A/Files/marker-azul2-15.png create mode 100644 B4A/Files/marker-azul2-150.png create mode 100644 B4A/Files/marker-azul2-16.png create mode 100644 B4A/Files/marker-azul2-17.png create mode 100644 B4A/Files/marker-azul2-18.png create mode 100644 B4A/Files/marker-azul2-19.png create mode 100644 B4A/Files/marker-azul2-2.png create mode 100644 B4A/Files/marker-azul2-20.png create mode 100644 B4A/Files/marker-azul2-21.png create mode 100644 B4A/Files/marker-azul2-22.png create mode 100644 B4A/Files/marker-azul2-23.png create mode 100644 B4A/Files/marker-azul2-24.png create mode 100644 B4A/Files/marker-azul2-25.png create mode 100644 B4A/Files/marker-azul2-26.png create mode 100644 B4A/Files/marker-azul2-27.png create mode 100644 B4A/Files/marker-azul2-28.png create mode 100644 B4A/Files/marker-azul2-29.png create mode 100644 B4A/Files/marker-azul2-3.png create mode 100644 B4A/Files/marker-azul2-30.png create mode 100644 B4A/Files/marker-azul2-31.png create mode 100644 B4A/Files/marker-azul2-32.png create mode 100644 B4A/Files/marker-azul2-33.png create mode 100644 B4A/Files/marker-azul2-34.png create mode 100644 B4A/Files/marker-azul2-35.png create mode 100644 B4A/Files/marker-azul2-36.png create mode 100644 B4A/Files/marker-azul2-37.png create mode 100644 B4A/Files/marker-azul2-38.png create mode 100644 B4A/Files/marker-azul2-39.png create mode 100644 B4A/Files/marker-azul2-4.png create mode 100644 B4A/Files/marker-azul2-40.png create mode 100644 B4A/Files/marker-azul2-41.png create mode 100644 B4A/Files/marker-azul2-42.png create mode 100644 B4A/Files/marker-azul2-43.png create mode 100644 B4A/Files/marker-azul2-44.png create mode 100644 B4A/Files/marker-azul2-45.png create mode 100644 B4A/Files/marker-azul2-46.png create mode 100644 B4A/Files/marker-azul2-47.png create mode 100644 B4A/Files/marker-azul2-48.png create mode 100644 B4A/Files/marker-azul2-49.png create mode 100644 B4A/Files/marker-azul2-5.png create mode 100644 B4A/Files/marker-azul2-50.png create mode 100644 B4A/Files/marker-azul2-51.png create mode 100644 B4A/Files/marker-azul2-52.png create mode 100644 B4A/Files/marker-azul2-53.png create mode 100644 B4A/Files/marker-azul2-54.png create mode 100644 B4A/Files/marker-azul2-55.png create mode 100644 B4A/Files/marker-azul2-56.png create mode 100644 B4A/Files/marker-azul2-57.png create mode 100644 B4A/Files/marker-azul2-58.png create mode 100644 B4A/Files/marker-azul2-59.png create mode 100644 B4A/Files/marker-azul2-6.png create mode 100644 B4A/Files/marker-azul2-60.png create mode 100644 B4A/Files/marker-azul2-61.png create mode 100644 B4A/Files/marker-azul2-62.png create mode 100644 B4A/Files/marker-azul2-63.png create mode 100644 B4A/Files/marker-azul2-64.png create mode 100644 B4A/Files/marker-azul2-65.png create mode 100644 B4A/Files/marker-azul2-66.png create mode 100644 B4A/Files/marker-azul2-67.png create mode 100644 B4A/Files/marker-azul2-68.png create mode 100644 B4A/Files/marker-azul2-69.png create mode 100644 B4A/Files/marker-azul2-7.png create mode 100644 B4A/Files/marker-azul2-70.png create mode 100644 B4A/Files/marker-azul2-71.png create mode 100644 B4A/Files/marker-azul2-72.png create mode 100644 B4A/Files/marker-azul2-73.png create mode 100644 B4A/Files/marker-azul2-74.png create mode 100644 B4A/Files/marker-azul2-75.png create mode 100644 B4A/Files/marker-azul2-76.png create mode 100644 B4A/Files/marker-azul2-77.png create mode 100644 B4A/Files/marker-azul2-78.png create mode 100644 B4A/Files/marker-azul2-79.png create mode 100644 B4A/Files/marker-azul2-8.png create mode 100644 B4A/Files/marker-azul2-80.png create mode 100644 B4A/Files/marker-azul2-81.png create mode 100644 B4A/Files/marker-azul2-82.png create mode 100644 B4A/Files/marker-azul2-83.png create mode 100644 B4A/Files/marker-azul2-84.png create mode 100644 B4A/Files/marker-azul2-85.png create mode 100644 B4A/Files/marker-azul2-86.png create mode 100644 B4A/Files/marker-azul2-87.png create mode 100644 B4A/Files/marker-azul2-88.png create mode 100644 B4A/Files/marker-azul2-89.png create mode 100644 B4A/Files/marker-azul2-9.png create mode 100644 B4A/Files/marker-azul2-90.png create mode 100644 B4A/Files/marker-azul2-91.png create mode 100644 B4A/Files/marker-azul2-92.png create mode 100644 B4A/Files/marker-azul2-93.png create mode 100644 B4A/Files/marker-azul2-94.png create mode 100644 B4A/Files/marker-azul2-95.png create mode 100644 B4A/Files/marker-azul2-96.png create mode 100644 B4A/Files/marker-azul2-97.png create mode 100644 B4A/Files/marker-azul2-98.png create mode 100644 B4A/Files/marker-azul2-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-rojo1-0.png create mode 100644 B4A/Files/marker-rojo1-1.png create mode 100644 B4A/Files/marker-rojo1-10.png create mode 100644 B4A/Files/marker-rojo1-100.png create mode 100644 B4A/Files/marker-rojo1-101.png create mode 100644 B4A/Files/marker-rojo1-102.png create mode 100644 B4A/Files/marker-rojo1-103.png create mode 100644 B4A/Files/marker-rojo1-104.png create mode 100644 B4A/Files/marker-rojo1-105.png create mode 100644 B4A/Files/marker-rojo1-106.png create mode 100644 B4A/Files/marker-rojo1-107.png create mode 100644 B4A/Files/marker-rojo1-108.png create mode 100644 B4A/Files/marker-rojo1-109.png create mode 100644 B4A/Files/marker-rojo1-11.png create mode 100644 B4A/Files/marker-rojo1-110.png create mode 100644 B4A/Files/marker-rojo1-111.png create mode 100644 B4A/Files/marker-rojo1-112.png create mode 100644 B4A/Files/marker-rojo1-113.png create mode 100644 B4A/Files/marker-rojo1-114.png create mode 100644 B4A/Files/marker-rojo1-115.png create mode 100644 B4A/Files/marker-rojo1-116.png create mode 100644 B4A/Files/marker-rojo1-117.png create mode 100644 B4A/Files/marker-rojo1-118..png create mode 100644 B4A/Files/marker-rojo1-119.png create mode 100644 B4A/Files/marker-rojo1-12.png create mode 100644 B4A/Files/marker-rojo1-120.png create mode 100644 B4A/Files/marker-rojo1-121.png create mode 100644 B4A/Files/marker-rojo1-122.png create mode 100644 B4A/Files/marker-rojo1-123.png create mode 100644 B4A/Files/marker-rojo1-124.png create mode 100644 B4A/Files/marker-rojo1-125.png create mode 100644 B4A/Files/marker-rojo1-126.png create mode 100644 B4A/Files/marker-rojo1-127.png create mode 100644 B4A/Files/marker-rojo1-128.png create mode 100644 B4A/Files/marker-rojo1-129.png create mode 100644 B4A/Files/marker-rojo1-13.png create mode 100644 B4A/Files/marker-rojo1-130.png create mode 100644 B4A/Files/marker-rojo1-131.png create mode 100644 B4A/Files/marker-rojo1-132.png create mode 100644 B4A/Files/marker-rojo1-133.png create mode 100644 B4A/Files/marker-rojo1-134.png create mode 100644 B4A/Files/marker-rojo1-135.png create mode 100644 B4A/Files/marker-rojo1-136.png create mode 100644 B4A/Files/marker-rojo1-137.png create mode 100644 B4A/Files/marker-rojo1-138.png create mode 100644 B4A/Files/marker-rojo1-139.png create mode 100644 B4A/Files/marker-rojo1-14.png create mode 100644 B4A/Files/marker-rojo1-140.png create mode 100644 B4A/Files/marker-rojo1-141.png create mode 100644 B4A/Files/marker-rojo1-142.png create mode 100644 B4A/Files/marker-rojo1-143.png create mode 100644 B4A/Files/marker-rojo1-144.png create mode 100644 B4A/Files/marker-rojo1-145.png create mode 100644 B4A/Files/marker-rojo1-146.png create mode 100644 B4A/Files/marker-rojo1-147.png create mode 100644 B4A/Files/marker-rojo1-148.png create mode 100644 B4A/Files/marker-rojo1-149.png create mode 100644 B4A/Files/marker-rojo1-15.png create mode 100644 B4A/Files/marker-rojo1-150.png create mode 100644 B4A/Files/marker-rojo1-16.png create mode 100644 B4A/Files/marker-rojo1-17.png create mode 100644 B4A/Files/marker-rojo1-18.png create mode 100644 B4A/Files/marker-rojo1-19.png create mode 100644 B4A/Files/marker-rojo1-2.png create mode 100644 B4A/Files/marker-rojo1-20.png create mode 100644 B4A/Files/marker-rojo1-21.png create mode 100644 B4A/Files/marker-rojo1-22.png create mode 100644 B4A/Files/marker-rojo1-23.png create mode 100644 B4A/Files/marker-rojo1-24.png create mode 100644 B4A/Files/marker-rojo1-25.png create mode 100644 B4A/Files/marker-rojo1-26.png create mode 100644 B4A/Files/marker-rojo1-27.png create mode 100644 B4A/Files/marker-rojo1-28.png create mode 100644 B4A/Files/marker-rojo1-29.png create mode 100644 B4A/Files/marker-rojo1-3.png create mode 100644 B4A/Files/marker-rojo1-30.png create mode 100644 B4A/Files/marker-rojo1-31.png create mode 100644 B4A/Files/marker-rojo1-32.png create mode 100644 B4A/Files/marker-rojo1-33.png create mode 100644 B4A/Files/marker-rojo1-34.png create mode 100644 B4A/Files/marker-rojo1-35.png create mode 100644 B4A/Files/marker-rojo1-36.png create mode 100644 B4A/Files/marker-rojo1-37.png create mode 100644 B4A/Files/marker-rojo1-38.png create mode 100644 B4A/Files/marker-rojo1-39.png create mode 100644 B4A/Files/marker-rojo1-4.png create mode 100644 B4A/Files/marker-rojo1-40.png create mode 100644 B4A/Files/marker-rojo1-41.png create mode 100644 B4A/Files/marker-rojo1-42.png create mode 100644 B4A/Files/marker-rojo1-43.png create mode 100644 B4A/Files/marker-rojo1-44.png create mode 100644 B4A/Files/marker-rojo1-45.png create mode 100644 B4A/Files/marker-rojo1-46.png create mode 100644 B4A/Files/marker-rojo1-47.png create mode 100644 B4A/Files/marker-rojo1-48.png create mode 100644 B4A/Files/marker-rojo1-49.png create mode 100644 B4A/Files/marker-rojo1-5.png create mode 100644 B4A/Files/marker-rojo1-50.png create mode 100644 B4A/Files/marker-rojo1-51.png create mode 100644 B4A/Files/marker-rojo1-52.png create mode 100644 B4A/Files/marker-rojo1-53.png create mode 100644 B4A/Files/marker-rojo1-54.png create mode 100644 B4A/Files/marker-rojo1-55.png create mode 100644 B4A/Files/marker-rojo1-56.png create mode 100644 B4A/Files/marker-rojo1-57.png create mode 100644 B4A/Files/marker-rojo1-58.png create mode 100644 B4A/Files/marker-rojo1-59.png create mode 100644 B4A/Files/marker-rojo1-6.png create mode 100644 B4A/Files/marker-rojo1-60.png create mode 100644 B4A/Files/marker-rojo1-61.png create mode 100644 B4A/Files/marker-rojo1-62.png create mode 100644 B4A/Files/marker-rojo1-63.png create mode 100644 B4A/Files/marker-rojo1-64.png create mode 100644 B4A/Files/marker-rojo1-65.png create mode 100644 B4A/Files/marker-rojo1-66.png create mode 100644 B4A/Files/marker-rojo1-67.png create mode 100644 B4A/Files/marker-rojo1-68.png create mode 100644 B4A/Files/marker-rojo1-69.png create mode 100644 B4A/Files/marker-rojo1-7.png create mode 100644 B4A/Files/marker-rojo1-70.png create mode 100644 B4A/Files/marker-rojo1-71.png create mode 100644 B4A/Files/marker-rojo1-72.png create mode 100644 B4A/Files/marker-rojo1-73.png create mode 100644 B4A/Files/marker-rojo1-74.png create mode 100644 B4A/Files/marker-rojo1-75.png create mode 100644 B4A/Files/marker-rojo1-76.png create mode 100644 B4A/Files/marker-rojo1-77.png create mode 100644 B4A/Files/marker-rojo1-78.png create mode 100644 B4A/Files/marker-rojo1-79.png create mode 100644 B4A/Files/marker-rojo1-8.png create mode 100644 B4A/Files/marker-rojo1-80.png create mode 100644 B4A/Files/marker-rojo1-81.png create mode 100644 B4A/Files/marker-rojo1-82.png create mode 100644 B4A/Files/marker-rojo1-83.png create mode 100644 B4A/Files/marker-rojo1-84.png create mode 100644 B4A/Files/marker-rojo1-85.png create mode 100644 B4A/Files/marker-rojo1-86.png create mode 100644 B4A/Files/marker-rojo1-87.png create mode 100644 B4A/Files/marker-rojo1-88.png create mode 100644 B4A/Files/marker-rojo1-89.png create mode 100644 B4A/Files/marker-rojo1-9.png create mode 100644 B4A/Files/marker-rojo1-90.png create mode 100644 B4A/Files/marker-rojo1-91.png create mode 100644 B4A/Files/marker-rojo1-92.png create mode 100644 B4A/Files/marker-rojo1-93.png create mode 100644 B4A/Files/marker-rojo1-94.png create mode 100644 B4A/Files/marker-rojo1-95.png create mode 100644 B4A/Files/marker-rojo1-96.png create mode 100644 B4A/Files/marker-rojo1-97.png create mode 100644 B4A/Files/marker-rojo1-98.png create mode 100644 B4A/Files/marker-rojo1-99.png create mode 100644 B4A/Files/marker-rojo2-0.png create mode 100644 B4A/Files/marker-rojo2-1.png create mode 100644 B4A/Files/marker-rojo2-10.png create mode 100644 B4A/Files/marker-rojo2-100.png create mode 100644 B4A/Files/marker-rojo2-101.png create mode 100644 B4A/Files/marker-rojo2-102.png create mode 100644 B4A/Files/marker-rojo2-103.png create mode 100644 B4A/Files/marker-rojo2-104.png create mode 100644 B4A/Files/marker-rojo2-105.png create mode 100644 B4A/Files/marker-rojo2-106.png create mode 100644 B4A/Files/marker-rojo2-107.png create mode 100644 B4A/Files/marker-rojo2-108.png create mode 100644 B4A/Files/marker-rojo2-109.png create mode 100644 B4A/Files/marker-rojo2-11.png create mode 100644 B4A/Files/marker-rojo2-110.png create mode 100644 B4A/Files/marker-rojo2-111.png create mode 100644 B4A/Files/marker-rojo2-112.png create mode 100644 B4A/Files/marker-rojo2-113.png create mode 100644 B4A/Files/marker-rojo2-114.png create mode 100644 B4A/Files/marker-rojo2-115.png create mode 100644 B4A/Files/marker-rojo2-116.png create mode 100644 B4A/Files/marker-rojo2-117.png create mode 100644 B4A/Files/marker-rojo2-118.png create mode 100644 B4A/Files/marker-rojo2-119.png create mode 100644 B4A/Files/marker-rojo2-12.png create mode 100644 B4A/Files/marker-rojo2-120.png create mode 100644 B4A/Files/marker-rojo2-121.png create mode 100644 B4A/Files/marker-rojo2-122.png create mode 100644 B4A/Files/marker-rojo2-123.png create mode 100644 B4A/Files/marker-rojo2-124.png create mode 100644 B4A/Files/marker-rojo2-125.png create mode 100644 B4A/Files/marker-rojo2-126.png create mode 100644 B4A/Files/marker-rojo2-127.png create mode 100644 B4A/Files/marker-rojo2-128.png create mode 100644 B4A/Files/marker-rojo2-129.png create mode 100644 B4A/Files/marker-rojo2-13.png create mode 100644 B4A/Files/marker-rojo2-130.png create mode 100644 B4A/Files/marker-rojo2-131.png create mode 100644 B4A/Files/marker-rojo2-132.png create mode 100644 B4A/Files/marker-rojo2-133.png create mode 100644 B4A/Files/marker-rojo2-134.png create mode 100644 B4A/Files/marker-rojo2-135.png create mode 100644 B4A/Files/marker-rojo2-136.png create mode 100644 B4A/Files/marker-rojo2-137.png create mode 100644 B4A/Files/marker-rojo2-138.png create mode 100644 B4A/Files/marker-rojo2-139.png create mode 100644 B4A/Files/marker-rojo2-14.png create mode 100644 B4A/Files/marker-rojo2-140.png create mode 100644 B4A/Files/marker-rojo2-141.png create mode 100644 B4A/Files/marker-rojo2-142.png create mode 100644 B4A/Files/marker-rojo2-143.png create mode 100644 B4A/Files/marker-rojo2-144.png create mode 100644 B4A/Files/marker-rojo2-145.png create mode 100644 B4A/Files/marker-rojo2-146.png create mode 100644 B4A/Files/marker-rojo2-147.png create mode 100644 B4A/Files/marker-rojo2-148.png create mode 100644 B4A/Files/marker-rojo2-149.png create mode 100644 B4A/Files/marker-rojo2-15.png create mode 100644 B4A/Files/marker-rojo2-150.png create mode 100644 B4A/Files/marker-rojo2-16.png create mode 100644 B4A/Files/marker-rojo2-17.png create mode 100644 B4A/Files/marker-rojo2-18.png create mode 100644 B4A/Files/marker-rojo2-19.png create mode 100644 B4A/Files/marker-rojo2-2.png create mode 100644 B4A/Files/marker-rojo2-20.png create mode 100644 B4A/Files/marker-rojo2-21.png create mode 100644 B4A/Files/marker-rojo2-22.png create mode 100644 B4A/Files/marker-rojo2-23.png create mode 100644 B4A/Files/marker-rojo2-24.png create mode 100644 B4A/Files/marker-rojo2-25.png create mode 100644 B4A/Files/marker-rojo2-26.png create mode 100644 B4A/Files/marker-rojo2-27.png create mode 100644 B4A/Files/marker-rojo2-28.png create mode 100644 B4A/Files/marker-rojo2-29.png create mode 100644 B4A/Files/marker-rojo2-3.png create mode 100644 B4A/Files/marker-rojo2-30.png create mode 100644 B4A/Files/marker-rojo2-31.png create mode 100644 B4A/Files/marker-rojo2-32.png create mode 100644 B4A/Files/marker-rojo2-33.png create mode 100644 B4A/Files/marker-rojo2-34.png create mode 100644 B4A/Files/marker-rojo2-35.png create mode 100644 B4A/Files/marker-rojo2-36.png create mode 100644 B4A/Files/marker-rojo2-37.png create mode 100644 B4A/Files/marker-rojo2-38.png create mode 100644 B4A/Files/marker-rojo2-39.png create mode 100644 B4A/Files/marker-rojo2-4.png create mode 100644 B4A/Files/marker-rojo2-40.png create mode 100644 B4A/Files/marker-rojo2-41.png create mode 100644 B4A/Files/marker-rojo2-42.png create mode 100644 B4A/Files/marker-rojo2-43.png create mode 100644 B4A/Files/marker-rojo2-44.png create mode 100644 B4A/Files/marker-rojo2-45.png create mode 100644 B4A/Files/marker-rojo2-46.png create mode 100644 B4A/Files/marker-rojo2-47.png create mode 100644 B4A/Files/marker-rojo2-48.png create mode 100644 B4A/Files/marker-rojo2-49.png create mode 100644 B4A/Files/marker-rojo2-5.png create mode 100644 B4A/Files/marker-rojo2-50.png create mode 100644 B4A/Files/marker-rojo2-51.png create mode 100644 B4A/Files/marker-rojo2-52.png create mode 100644 B4A/Files/marker-rojo2-53.png create mode 100644 B4A/Files/marker-rojo2-54.png create mode 100644 B4A/Files/marker-rojo2-55.png create mode 100644 B4A/Files/marker-rojo2-56.png create mode 100644 B4A/Files/marker-rojo2-57.png create mode 100644 B4A/Files/marker-rojo2-58.png create mode 100644 B4A/Files/marker-rojo2-59.png create mode 100644 B4A/Files/marker-rojo2-6.png create mode 100644 B4A/Files/marker-rojo2-60.png create mode 100644 B4A/Files/marker-rojo2-61.png create mode 100644 B4A/Files/marker-rojo2-62.png create mode 100644 B4A/Files/marker-rojo2-63.png create mode 100644 B4A/Files/marker-rojo2-64.png create mode 100644 B4A/Files/marker-rojo2-65.png create mode 100644 B4A/Files/marker-rojo2-66.png create mode 100644 B4A/Files/marker-rojo2-67.png create mode 100644 B4A/Files/marker-rojo2-68.png create mode 100644 B4A/Files/marker-rojo2-69.png create mode 100644 B4A/Files/marker-rojo2-7.png create mode 100644 B4A/Files/marker-rojo2-70.png create mode 100644 B4A/Files/marker-rojo2-71.png create mode 100644 B4A/Files/marker-rojo2-72.png create mode 100644 B4A/Files/marker-rojo2-73.png create mode 100644 B4A/Files/marker-rojo2-74.png create mode 100644 B4A/Files/marker-rojo2-75.png create mode 100644 B4A/Files/marker-rojo2-76.png create mode 100644 B4A/Files/marker-rojo2-77.png create mode 100644 B4A/Files/marker-rojo2-78.png create mode 100644 B4A/Files/marker-rojo2-79.png create mode 100644 B4A/Files/marker-rojo2-8.png create mode 100644 B4A/Files/marker-rojo2-80.png create mode 100644 B4A/Files/marker-rojo2-81.png create mode 100644 B4A/Files/marker-rojo2-82.png create mode 100644 B4A/Files/marker-rojo2-83.png create mode 100644 B4A/Files/marker-rojo2-84.png create mode 100644 B4A/Files/marker-rojo2-85.png create mode 100644 B4A/Files/marker-rojo2-86.png create mode 100644 B4A/Files/marker-rojo2-87.png create mode 100644 B4A/Files/marker-rojo2-88.png create mode 100644 B4A/Files/marker-rojo2-89.png create mode 100644 B4A/Files/marker-rojo2-9.png create mode 100644 B4A/Files/marker-rojo2-90.png create mode 100644 B4A/Files/marker-rojo2-91.png create mode 100644 B4A/Files/marker-rojo2-92.png create mode 100644 B4A/Files/marker-rojo2-93.png create mode 100644 B4A/Files/marker-rojo2-94.png create mode 100644 B4A/Files/marker-rojo2-95.png create mode 100644 B4A/Files/marker-rojo2-96.png create mode 100644 B4A/Files/marker-rojo2-97.png create mode 100644 B4A/Files/marker-rojo2-98.png create mode 100644 B4A/Files/marker-rojo2-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/no_venta.bal create mode 100644 B4A/Files/nuevocliente.bal create mode 100644 B4A/Files/pedido.bal create mode 100644 B4A/Files/planfia_logo.png create mode 100644 B4A/Files/planfia_logo_old.png create mode 100644 B4A/Files/planfia_logo_old2.png create mode 100644 B4A/Files/principal.bal create mode 100644 B4A/Files/proditem.bal create mode 100644 B4A/Files/productos.bal create mode 100644 B4A/Files/profina.jpg create mode 100644 B4A/Files/profina.png create mode 100644 B4A/Files/sync.png create mode 100644 B4A/Files/tabulador.bal create mode 100644 B4A/Files/telefonos.bal create mode 100644 B4A/GUNA_Reparto.b4a create mode 100644 B4A/GUNA_Reparto.b4a.meta create mode 100644 B4A/MAPA_CLIENTE.bas create mode 100644 B4A/MAPA_RUTAS.bas create mode 100644 B4A/Mariana_Reparto.b4a.meta 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/foto.bas diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..af94e9d --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +**/Objects +**/AutoBackups \ No newline at end of file diff --git a/B4A/B4XMainPage.bas b/B4A/B4XMainPage.bas new file mode 100644 index 0000000..974cce9 --- /dev/null +++ b/B4A/B4XMainPage.bas @@ -0,0 +1,388 @@ +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 + '########################################################################################################### + '###################### 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 to export as zip: ide://run?File=%B4X%\Zipper.jar&Args=Project.zip + +Sub Class_Globals + Dim rp As RuntimePermissions + Private Root As B4XView + Private xui As XUI + Private Root As B4XView + Public rp As RuntimePermissions + Public login As B4XMainPage + Public principal As C_Principal + Public clientes As C_Clientes + Public cliente As C_Cliente +' Public foto As C_Foto + 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 pedidos As C_Pedidos + Public buscar As C_Buscar +' Public historico As C_Historico + Public detalleVenta As C_DetalleVenta + Public detalle_promo As C_Detalle_Promo + Dim reqManager As DBRequestManager +' Dim ruta As String + Dim usuario As String + Dim logger As Boolean = True + Dim lat_gps, lon_gps As String +' Dim skmt As SQL + Dim usuario As String + Dim server As String + Dim montoActual, clientesTotal, clientesVenta, clientesRechazo, clientesVisitados, almacen, rutaPreventa, CANTIDADPROD As String + Dim ultimaActualizacionGPS As String = 235959 + Dim fechaRuta As String +' Public wsServerLink As String = "ws://187.189.244.154:51042/push/b4a_ws2" +' Public wsServerLink As String = "ws://10.0.0.214:51042/push/b4a_ws2" + Dim srvIp As String + Dim phn As Phone + Dim user As EditText + Dim pass As EditText + Dim c As Cursor + Dim existe As String + Dim paso1 As String + Private IMEN As Label + Dim IMEI As String + Private Label1 As Label + Dim server As String + Private p_principal As Panel + Private Entrar As Button + Public tabulador As C_tabulador + Dim batt As Int + Dim porVisitar, entregas, rechazos, montoEntregado, montoRechazado As String + Private p_appUpdate As Panel + Private i_engrane As ImageView + Private b_server As Button + Private b_apk As Button + Private b_envioBD As Button + Private b_regesar As Button + Private et_server As EditText + Private p_serverList As Panel + Private lv_server As ListView + Public Provider As FileProvider + Public rutaBDBackup As String = "" +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) + Root = Root1 + B4XPages.GetManager.LogEvents = True + Root.LoadLayout("login") + B4XPages.SetTitle(Me, "Guna Reparto") + login.Initialize + B4XPages.AddPage("Login", login) + principal.Initialize + B4XPages.AddPage("Principal", principal) + clientes.Initialize + B4XPages.AddPage("Clientes", clientes) + cliente.Initialize + B4XPages.AddPage("Cliente", cliente) +' foto.Initialize +' B4XPages.AddPage("Foto", foto) + 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) + pedidos.Initialize + B4XPages.AddPage("Pedidos", pedidos) + buscar.Initialize + B4XPages.AddPage("Buscar", buscar) +' historico.Initialize +' B4XPages.AddPage("Historico", historico) + detalleVenta.Initialize + B4XPages.AddPage("DetalleVenta", detalleVenta) + detalle_promo.Initialize + B4XPages.AddPage("Detalle_Promo", detalle_promo) + tabulador.Initialize + B4XPages.AddPage("tabulador", tabulador) + 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 TABULADOR_BILLETES(MIL TEXT, QUINIENTOS TEXT, DOCIENTOS TEXT, CIEN TEXT, CINCUENTA TEXT, VEINTE TEXT)") + Starter.skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS HIST_VENTAS2 (HVD_PARCIAL TEXT, HVD_RECHAZO TEXT, HVD_NUM_REGISTRO TEXT, HVD_NUM_TICKET TEXT, HVD_PROID TEXT, HVD_CODPROMO TEXT, HVD_FECHA TEXT, HVD_ESTATUS TEXT, HVD_CLIENTE TEXT, HVD_PRONOMBRE TEXT, HVD_CANT TEXT, HVD_COSTO_TOT TEXT)") +' Starter.skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS VENTAS (V_FECHA TEXT, V_CLIENTE TEXT, V_CLIENTE_ORIG TEXT, V_PRODNOMBRE TEXT, V_PRODID TEXT, V_CANTIDAD TEXT, V_PRECIO TEXT, V_TOTAL TEXT, V_PRODREGISTRO TEXT)") + Starter.skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS RECHAZOS (R_FECHA TEXT, R_CLIENTE TEXT, R_CLI_ORIG TEXT, R_PRODID TEXT, R_CANT TEXT, R_RECHAZO INT)") + Starter.skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS VENTAS (V_FECHA TEXT, V_CLIENTE TEXT, V_CLI_ORIG TEXT, V_PRODID TEXT, V_CANT TEXT, V_RECHAZO INT)") + Subs.agregaColumna("REPARTO", "REP_PRODREGISTRO", "TEXT") + Subs.agregaColumna("kmt_info", "SECUENCIA", "INT") + Subs.agregaColumna("REPARTO", "REP_PRODID", "TEXT") + Subs.agregaColumna("REPARTO", "REP_CLI_ORIG", "TEXT") + Subs.agregaColumna("REPARTO", "REP_PRECIO", "TEXT") + Subs.agregaColumna("REPARTO", "REP_RECHAZO", "INTEGER") + Subs.agregaColumna("RECHAZOS", "R_PRECIO", "TEXT") + Subs.agregaColumna("VENTAS", "V_PRECIO", "TEXT") + Starter.skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS RUTAA (RUTAA TEXT)") + Starter.skmt.ExecNonQuery("CREATE TABLE IF NOT EXISTS wayPoints (codigo TEXT, indice INT)") +' Dim server As String = "http://11.0.0.151:1782" + Dim server As String = "http://187.189.244.154:1782" +' Dim server As String = "http://11.0.0.253:1782" +' server = "http://10.0.0.205:1782" +' server = "http://11.0.0.44:1782" + reqManager.Initialize(Me, B4XPages.MainPage.server) + LogColor($"ReqServer = ${B4XPages.MainPage.server}"$, Colors.red) + Label1.Text = Application.VersionName +' Dim P As PhoneId + Log("provider") + Provider.Initialize + +' Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_READ_PHONE_STATE) +' Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) +' If Result Then +' IMEN.Text = "" 'P.GetDeviceId +' IMEI = "" 'P.GetDeviceId +' End If +End Sub + +Sub B4XPage_Appear + If Starter.muestraProgreso = 1 Then + muestraProgreso("Descargando actualización") + Starter.muestraProgreso = 0 + End If + Subs.centraPanel(p_principal, Root.Width) + Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_ACCESS_FINE_LOCATION) +' LogColor("Start Tracker1", Colors.red) + Wait For B4XPage_PermissionResult (Permission As String, Result As Boolean) + If Result Then + StartService(Tracker) +' LogColor("Start Tracker", Colors.red) + Else + ToastMessageShow("No permission", True) + Log("Sin permisos") + End If +' LogColor("Start Tracker3", Colors.red) + c=Starter.skmt.ExecQuery("select USUARIO from usuarioa") + If c.RowCount > 0 Then +' c.Position=0 +' c=skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + End If + c.Close + 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 de escritura externa") + 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 + If pass.Text = "YA" Then + Starter.skmt.ExecNonQuery("delete from usuarioa") + Starter.skmt.ExecNonQuery("delete from VERSION") + Starter.skmt.ExecNonQuery2("INSERT INTO USUARIOA VALUES (?,?)", Array As Object("ROOT", "ROOT")) + Starter.skmt.ExecNonQuery("delete from cat_almacen") + Starter.skmt.ExecNonQuery2("INSERT INTO CAT_ALMACEN(ID_ALMACEN) VALUES (?)", Array As Object (user.Text)) + Starter.skmt.ExecNonQuery2("INSERT INTO VERSION(NOVERSION) VALUES (?)", Array As Object ("2.1")) +' principal.B_REGRESA_Click +' B4XPages.MainPage.principal.Subir.Visible = True + B4XPages.ShowPage("Principal") + Else + c=Starter.skmt.ExecQuery2("select count(*) as EXISTE1 from usuarioa where usuario = ?", Array As String(user.Text)) + c.Position=0 + existe = c.GetString("EXISTE1") + c.Close + 'existe = 1 + If existe = 0 Then + 'skmt.ExecNonQuery("delete from usuarioa") + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "select_usuario_guna_REPG2" + cmd.Parameters = Array As Object(user.Text, pass.Text) + reqManager.ExecuteQuery(cmd , 0, "usuario") + + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "select_version_GUNA2" + reqManager.ExecuteQuery(cmd , 0, "version") + Else +' principal.B_REGRESA_Click + B4XPages.ShowPage("Principal") + End If + End If +End Sub + +Sub JobDone(Job As HttpJob) + If Job.Success = False Then + ToastMessageShow("Error: " & Job.ErrorMessage, True) + Else + 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 + Starter.skmt.ExecNonQuery("delete from VERSION") + Dim CAT_VE_VERSION As String = records(result.Columns.Get("CAT_VE_VERSION")) + Starter.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 = "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 = "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")) + Next + paso1 = 1 + End If + End If + Job.Release + End If + + If paso1 = 1 Then + If name = "OKActivo" Then + Starter.skmt.ExecNonQuery("delete from usuarioa") + Starter.skmt.ExecNonQuery2("INSERT INTO USUARIOA VALUES (?,?)", Array As Object(user.Text, pass.Text)) + Starter.skmt.ExecNonQuery("delete from cat_almacen") + Starter.skmt.ExecNonQuery2("INSERT INTO CAT_ALMACEN(ID_ALMACEN) VALUES (?)", Array As Object (ID_ALMACEN)) + B4XPages.ShowPage("Principal") + 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 + End If +End Sub + +Private Sub i_engrane_Click + p_appUpdate.Width = Root.Width + p_appUpdate.Height = Root.Height + Subs.centraPanel(p_serverList, Root.Width) + Subs.centraBoton(b_server, Root.Width) + Subs.centraBoton(b_apk, Root.Width) + Subs.centraBoton(b_envioBD, Root.Width) + Subs.centraBoton(b_regesar, Root.Width) + Subs.centraBoton(b_server, p_serverList.Width) + lv_server.Clear + lv_server.AddSingleLine("http://keymon.lat:1782") + If user.Text = "KMTS1" Then lv_server.AddSingleLine("http://11.0.0.151:1782") +' l_server.Text = Starter.server + et_server.Text = server + Subs.panelVisible(p_appUpdate, 0, 0) +End Sub + +Private Sub B4XPage_CloseRequest As ResumableSub +' Log("closreq") + If p_appUpdate.Visible Then + p_appUpdate.Visible = False + Else + Sleep(0) + ExitApplication + End If + Return False +End Sub + +Private Sub b_regesar_Click + p_principal.Visible = True + p_appUpdate.Visible = False +End Sub + +'Enviamos la base de datos por correo o Whatsapp +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 = "Base de datos para revisión" + 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_apk_Click + StartService(appUpdater) +End Sub + +Private Sub b_server_Click + Log("Guardar servidor") + Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES where CAT_VA_DESCRIPCION = ?", Array As Object ("SERVER")) + Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES(CAT_VA_DESCRIPCION, CAT_VA_VALOR) VALUES (?,?)", Array As Object ("SERVER",et_server.text)) + B4XPages.MainPage.server = et_server.text + Starter.server = B4XPages.MainPage.server + If logger Then Log("Inicializamos reqManager con " & B4XPages.MainPage.server) + reqManager.Initialize(Me, B4XPages.MainPage.server) + LogColor($"ReqServer = ${B4XPages.MainPage.server}"$, Colors.red) + reinicializaReqManager + p_appUpdate.Visible = False +' Entrar.Visible = True +End Sub + +Private Sub lv_server_ItemClick (Position As Int, Value As Object) + server = Value +' l_server.Text = Value + et_server.Text = Value + reqManager.Initialize(Me, Value) + LogColor($"ReqServer = ${Value}"$, Colors.red) + ToastMessageShow("Servidor modificado", False) +End Sub + +Sub reinicializaReqManager + reqManager.Initialize(Me, B4XPages.MainPage.server) + If logger Then Log(B4XPages.MainPage.server) + LogColor($"ReqServer = ${B4XPages.MainPage.server}"$, Colors.red) +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 \ No newline at end of file diff --git a/B4A/B4XUpdateAvailable.bas b/B4A/B4XUpdateAvailable.bas new file mode 100644 index 0000000..36fa8d1 --- /dev/null +++ b/B4A/B4XUpdateAvailable.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/BatteryUtilities.bas b/B4A/BatteryUtilities.bas new file mode 100644 index 0000000..b80fd5a --- /dev/null +++ b/B4A/BatteryUtilities.bas @@ -0,0 +1,125 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=9.95 +@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: +'0 - EXTRA_LEVEL = current battery level, from 0 To EXTRA_SCALE. +'1 - EXTRA_SCALE = the maximum battery level possible. +'2 - EXTRA_HEALTH = the current health constant. +'3 - EXTRA_ICON_SMALL = the resource ID of a small status bar icon indicating the current battery state. +'4 - 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. +'5 - EXTRA_STATUS = the current status constant. +'6 - EXTRA_TEMPERATURE = the current battery temperature. +'7 - EXTRA_VOLTAGE = the current battery voltage level. +'8 - A value indicating if the battery is being charged or fully charged (If neither it returns 0 Else it returns 1) +'9 - A value indicating if it is charging via USB (0 = Not USB, 2 = USB) +'10 - 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_Buscar.bas b/B4A/C_Buscar.bas new file mode 100644 index 0000000..7c45872 --- /dev/null +++ b/B4A/C_Buscar.bas @@ -0,0 +1,109 @@ +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 c As Cursor + Dim ListView1 As ListView + Dim b_noventa As Button + Private p_principal 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("buscar") + c=Starter.skmt.ExecQuery("select REP_CLIENTE, REP_PRONOMBRE, REP_CANT, REP_COSTO_TOT FROM REPARTO") + 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 = 10 + label2.TextColor = Colors.Blue + ListView1.AddTwoLines(c.GetString("REP_CLIENTE"),c.GetString("REP_PRONOMBRE") &" Cantidad #"& c.GetString("REP_CANT")& " SubTotal $"& c.GetString("REP_COSTO_TOT")) + Next + End If + c.Close +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Sub B4XPage_Appear + p_principal.Width = Root.Width + p_principal.Height = Root.Height + Subs.centraPanel(p_principal, Root.Width) + + c=Starter.skmt.ExecQuery("select REP_CLIENTE, REP_PRONOMBRE, REP_CANT, REP_COSTO_TOT FROM REPARTO") + 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 = 10 + label2.TextColor = Colors.Blue + ListView1.AddTwoLines(c.GetString("REP_CLIENTE"),c.GetString("REP_PRONOMBRE") &" Cantidad #"& c.GetString("REP_CANT")& " SubTotal $"& c.GetString("REP_COSTO_TOT")) + Next + End If + c.Close +End Sub + +Sub Regresar_Click + B4XPages.ShowPage("Cliente") +End Sub + +Private Sub B4XPage_CloseRequest As ResumableSub + ' BACK key pressed + ' I want to capture the key here so I return True + B4XPages.ShowPage("Principal") + 'Return True + ' Returning False signals the system to handle the key + Return False +End Sub + +Sub ListView1_ItemLongClick (Position As Int, Value As Object) + Starter.skmt.ExecNonQuery("delete from CUENTAA") + Starter.skmt.ExecNonQuery2("INSERT INTO CUENTAA VALUES (?)", Array As Object(Value)) + B4XPages.ShowPage("Cliente") +End Sub + +Sub b_noventa_Click + c=Starter.skmt.ExecQuery("select NV_CLIENTE,NV_MOTIVO,NV_COMM 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 = 10 + 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"),"Motivo #"& c.GetString("NV_MOTIVO")& " Comentario $"& c.GetString("NV_COMM")) + Next + End If +End Sub \ No newline at end of file diff --git a/B4A/C_Cliente.bas b/B4A/C_Cliente.bas new file mode 100644 index 0000000..f1eda05 --- /dev/null +++ b/B4A/C_Cliente.bas @@ -0,0 +1,492 @@ +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 g As GPS + Dim clie_id As String + Dim sDate,sTime As String + Dim usuario As String + Dim cuenta 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 LONGITUD As String + Dim LATITUD As String + Dim NOMBRE As String + Dim c As Cursor + Dim s 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 reqManager As DBRequestManager + Dim b_noEntrega As Button + Dim Label10 As Label + Dim Label11 As Label + Dim d As Cursor + Dim Tar As Button + Private L_QR As Label + Private BT_QR As Button + + 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 + Private l_total As Label + Private HIST As Button + Dim PASA_IMP As String + Private B_IMP As Button + Dim total_cliente As String + Dim CREDITO As String + Private p_principal As Panel + Private B_PASO2 As Button + Private L_CANT 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 + g.Initialize("GPS") +' Activity.LoadLayout("info_gral") + Root.LoadLayout("cliente") + c=Starter.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 from kmt_info where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + s=Starter.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)") + s.Position=0 + 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") + la_cp.Text = c.GetString("CAT_CL_CP") + l_entre1.Text = c.GetString("CAT_CL_CALLE1") + l_entre2.Text = c.GetString("CAT_CL_CALLE2") + If c.GetString("CAT_CL_ATIENDE1") <> Null And c.GetString("CAT_CL_ATIENDE1") <> "null" Then + l_atiende.Text = c.GetString("CAT_CL_ATIENDE1") + Else + l_atiende.Text = " " + End If + If c.GetString("CAT_CL_ATIENTE2") <> Null And c.GetString("CAT_CL_ATIENTE2") <> "NULL" Then + l_atiende2.Text = c.GetString("CAT_CL_ATIENTE2") + Log("|"&c.GetString("CAT_CL_ATIENTE2")&"|") + Else + l_atiende2.Text = " " + End If + la_saldotot.Text = c.GetString("CAT_CL_TELEFONO") + la_saldooper.Text = c.GetString("CAT_CL_EMAIL") +' l_total.Text = s.GetString("TOTAL_CLIE") + btAdmin.Initialize("BlueTeeth") + cmp20.Initialize("Printer") + reqManager.Initialize(Me, B4XPages.MainPage.SERVER) +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Sub B4XPage_Appear + Subs.centraPanel(p_principal, Root.Width) + Starter.skmt.Initialize(Starter.ruta,"kmt.db", True) + reqManager.Initialize(Me, B4XPages.MainPage.SERVER) + c=Starter.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_BCREDITO from kmt_info where CAT_CL_CODIGO In (Select cuenta from cuentaa)") + s=Starter.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)") + s.Position=0 + c.Position=0 + la_cuenta.Text = c.GetString("CAT_CL_CODIGO") + La_nombre.Text = c.GetString("CAT_CL_NOMBRE") + NOMBRE = c.GetString("CAT_CL_NOMBRE") + LONGITUD = c.GetString("CAT_CL_LONG") + LATITUD = c.GetString("CAT_CL_LAT") + 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") + If c.GetString("CAT_CL_ATIENDE1") <> Null And c.GetString("CAT_CL_ATIENDE1") <> "null" Then + l_atiende.Text = c.GetString("CAT_CL_ATIENDE1") + Else + l_atiende.Text = " " + End If + If c.GetString("CAT_CL_ATIENTE2") <> Null And c.GetString("CAT_CL_ATIENTE2") <> "NULL" Then + l_atiende2.Text = c.GetString("CAT_CL_ATIENTE2") + Else + l_atiende2.Text = " " + End If + la_saldotot.Text = c.GetString("CAT_CL_TELEFONO") + la_saldooper.Text = c.GetString("CAT_CL_EMAIL") +' l_total.Text = s.GetString("TOTAL_CLIE") + CREDITO = C.GetString("CAT_CL_BCREDITO") + + + Private cym As Map = Subs.traeCantYMonto2(Subs.traeCliente) + L_CANT.Text = cym.Get("cantidad") + l_total.Text = Round2(cym.Get("monto"), 2) + + If CREDITO = "1" Then + Msgbox("AVISO","SE TIENE QUE IMPRIMIR PAGARÉ") 'ignore + End If +' Private cym As Map = Subs.traemosCantYMonto(clv_pedido) +' L_CANT.Text = cym.Get("cantidad") +' l_total.Text = cym.Get("monto") +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) + Dim sDate,sTime As String + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + Starter.skmt.ExecNonQuery("DELETE FROM HIST_GPS") + Starter.skmt.ExecNonQuery2("INSERT INTO HIST_GPS (HGDATE, HGLAT, HGLON) VALUES(?,?,?) ", Array As Object (sDate & sTime, B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps)) +End Sub + +Sub ListView1_ItemLongClick (Position As Int, Value As Object) + +End Sub + +Sub gest_Click + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=Starter.skmt.ExecQuery("select CUENTA from cuentaa") + c.Position = 0 + cuenta = c.GetString("CUENTA") + c=Starter.skmt.ExecQuery("select usuario from usuarioa") + c.Position = 0 + usuario = c.GetString("USUARIO") + c.Close + d = Starter.skmt.ExecQuery("SELECT RUTAA FROM RUTAA") + d.Position = 0 + Dim ruta As String = d.GetString("RUTAA") + d.Close + d = Starter.skmt.ExecQuery("SELECT CAT_CL_RUTA FROM kmt_info WHERE CAT_CL_CODIGO IN (SELECT CUENTA FROM CUENTAA)") + d.Position = 0 + Dim rutapre As String = d.GetString("CAT_CL_RUTA") + d.Close + d = Starter.skmt.ExecQuery("SELECT HVD_FECHA FROM HIST_VENTAS WHERE HVD_CLIENTE IN (SELECT CUENTA FROM CUENTAA)") + d.Position = 0 + Dim fechaprev As String = d.GetString("HVD_FECHA") + d.Close + + Starter.skmt.ExecNonQuery("DELETE FROM NOVENTA WHERE NV_CLIENTE IN (select cuenta from cuentaa)") + Starter.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, "ENTREGA","ENTREGA COMPLETA", B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps)) + Starter.skmt.ExecNonQuery2("INSERT INTO REPARTO_GEO (CLIENTE, USUARIO, FECHA_PUNTEO, LATITUD, LONGITUD, ALMACEN, RUTA_REPARTO, RUTA_PREV, FECHA_PREVENTA, TIPO,ENVIO) VALUES(?,?,?,?,?,?,?,?,?,?,0)",Array As String (la_cuenta.Text, usuario, sDate &" "&sTime, B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps,B4XPages.MainPage.almacen,ruta,rutapre,fechaprev, "ENTREGADO")) + Starter.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa) ") + Starter.skmt.ExecNonQuery("update HIST_VENTAS SET HVD_ESTATUS = 1 WHERE HVD_CLIENTE IN (SELECT CUENTA FROM CUENTAA)") + mandaPendientesreparto + B4XPages.ShowPage("Principal") +End Sub + +Sub b_noEntrega_Click + ' skmt.ExecNonQuery("delete from PEDIDO") + B4XPages.ShowPage("noVenta") +End Sub + +Private Sub B4XPage_CloseRequest As ResumableSub + ' BACK key pressed + ' I want to capture the key here so I return True + B4XPages.ShowPage("Clientes") + Return False +End Sub + +Sub Tar_Click +' StartActivity(colonia2) + B4XPages.ShowPage("Productos") +End Sub + +Sub DATOS_Click +' StartActivity(telefonos) +End Sub + +Sub Guardar_Click + B4XPages.ShowPage("Principal") +End Sub + +Sub NUEVO_Click + StartActivity(MAPA_CLIENTE) +End Sub + +Sub HIST_Click +' B4XPages.MainPage.historico.prodsMap.Initialize +'' B4XPages.MainPage.historico.clv_pedido.Clear +' B4XPages.ShowPage("Historico") + B4XPages.MainPage.detalleVenta.prodsMap.Initialize +' B4XPages.MainPage.historico.clv_pedido.Clear + B4XPages.ShowPage("DetalleVenta") +End Sub + +Sub B_IMP_Click + c=Starter.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) + TAMANO = 0 + ESPACIO = 21 + BLANCO = " " + CREDITO ="1" + If CREDITO = "1" Then + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + printer.Initialize(cmp20.OutputStream) + printer.WriteLine("DBC.") + printer.WriteLine("RFC: ") + printer.WriteLine(sDate) + printer.WriteLine(sTime) + printer.WriteLine("Tienda: " & La_nombre.Text) + s=Starter.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)") + s.Position=0 + printer.WriteLine("Debo (emos) y pagare (mos) incondicionamelte a la orden de DBC a la cantidad de $" & s.GetString("PC_MONTO") & " PESOS _______________________________________________________________________________________________________________ ") + printer.WriteLine("en esta ciudad o en cualquier otra que se requiera de pago, valor recibido a mi entera satisfaccion y que me obligo a cumplir el dia______________________.") + printer.WriteLine(" ") + printer.WriteLine("Si este pagare no fuera cubiertoa su vencimiento Me (nos) obligo (amos) a pagar intereses moratorios a razon de 3 % mensual") + printer.WriteLine(" ") + printer.WriteLine(" ") + printer.WriteLine(" ") + printer.WriteLine(" ") + printer.WriteLine(" ") + printer.WriteLine(" ") + printer.WriteLine(" ") + printer.WriteLine("------------------------------") + printer.WriteLine(" NOMBRE Y FIRMA ") + printer.WriteLine("------------------------------") + printer.WriteLine(" ") + printer.Flush + End If + + printer.Initialize(cmp20.OutputStream) + printer.WriteLine("PROFINA") + printer.WriteLine("RFC: ") + printer.WriteLine("Tel.:") + printer.WriteLine(sDate) + printer.WriteLine(sTime) + printer.WriteLine("Vendedor:" & usuario) + printer.WriteLine("Tienda: " & La_nombre.Text) + s=Starter.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)") + s.Position=0 + c=Starter.skmt.ExecQuery("select SUM(PE_CANT) AS PE_CANT, SUM(PE_COSTO_TOT) AS PE_COSTO_TOT FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + C.Position=0 + + printer.WriteLine("Total : $" & (s.GetString("PC_MONTO") + c.GetString("PE_COSTO_TOT"))) + s.Close + printer.WriteLine("-----------ENTREGA------------") + S=Starter.skmt.ExecQuery("select HVD_CLIENTE,HVD_PRONOMBRE,HVD_CANT,length(HVD_cant) as L_CANT,HVD_COSTO_TOT,length(HVD_COSTO_TOT) as L_COSTO_TOT from HIST_VENTAS WHERE HVD_CLIENTE IN (Select CUENTA from cuentaa) ") + + 's=skmt.ExecQuery2("select PE_PRONOMBRE, PE_CANT, length(pe_cant) as L_CANT, PE_COSTOU, length(PE_COSTOU) as L_COSTOU, PE_COSTO_TOT, length(PE_COSTO_TOT) as L_COSTO_TOT, PE_PROID, PE_CEDIS FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)", 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 + ' printer.WriteLine(s.GetString("PE_PRONOMBRE")) + + 'Else + + printer.WriteLine(s.GetString("HVD_CANT") & " " & s.GetString("HVD_PRONOMBRE")) + TAMANO = s.GetLong("L_CANT") + TAMANO + 'TAMANO = s.GetLong("L_COSTOU") + TAMANO + TAMANO = s.GetLong("L_COSTO_TOT") + TAMANO + + ESPACIO = ESPACIO - TAMANO + + For E=0 To ESPACIO -1 + BLANCO = " " & BLANCO + Next + printer.WriteLine("$" & s.GETSTRING("HVD_COSTO_TOT") ) + TAMANO = 0 + ESPACIO = 21 + BLANCO = " " + 'End If + Next + End If + s.Close + + s=Starter.skmt.ExecQuery2("select PE_PRONOMBRE, PE_CANT, length(pe_cant) as L_CANT, PE_COSTOU, length(PE_COSTOU) as L_COSTOU, PE_COSTO_TOT, length(PE_COSTO_TOT) as L_COSTO_TOT, PE_PROID, PE_CEDIS FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)", 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 + ' printer.WriteLine(s.GetString("PE_PRONOMBRE")) + + 'Else + + printer.WriteLine(s.GetString("PE_CANT") & " " & s.GetString("PE_PRONOMBRE")) + TAMANO = s.GetLong("L_CANT") + TAMANO + 'TAMANO = s.GetLong("L_COSTOU") + TAMANO + TAMANO = s.GetLong("L_COSTO_TOT") + TAMANO + + ESPACIO = ESPACIO - TAMANO + + For E=0 To ESPACIO -1 + BLANCO = " " & BLANCO + Next + printer.WriteLine("$" & s.GETSTRING("PE_COSTO_TOT") ) + TAMANO = 0 + ESPACIO = 21 + BLANCO = " " + 'End If + Next + End If + s.Close + printer.WriteLine("------------------------------") + printer.WriteLine("---NO ES UN COMPROBANTE ------") + printer.WriteLine("---------FISCAL---------------") + printer.WriteLine("---COMPROBANTE DE ENTREGA-----") + printer.WriteLine("------------------------------") + + printer.Flush + ' printer.Close +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 L 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 + 'FLEOS + cmp20.ConnectInsecure(btAdmin,PairedDevices.Get(PairedDevices.GetKeyAt(0)),1) + 'cmp20.Connect(PairedDevices.Get(PairedDevices.GetKeyAt(0))) + Catch + Msgbox("Connecting","Printer Error") 'ignore + printer.Close + cmp20.Disconnect + End Try + Else + L.Initialize + For i = 0 To PairedDevices.Size - 1 + L.Add(PairedDevices.GetKeyAt(i)) + Next + resimp = InputList(L, "Choose device", -1) 'ignore + If resimp <> DialogResponse.CANCEL Then + cmp20.Connect(PairedDevices.Get(L.Get(resimp))) + End If + End If +End Sub + +Sub B_PASO2_Click + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=Starter.skmt.ExecQuery("select CUENTA from cuentaa") + c.Position = 0 + cuenta = c.GetString("CUENTA") + c=Starter.skmt.ExecQuery("select usuario from usuarioa") + c.Position = 0 + usuario = c.GetString("USUARIO") + c.Close + Starter.skmt.ExecNonQuery("DELETE FROM NOVENTA WHERE NV_CLIENTE IN (select cuenta from cuentaa)") + Starter.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, "PASO","PASO ESPERA", B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps)) + + B4XPages.ShowPage("Principal") +End Sub + + +Sub mandaPendientesreparto + c=Starter.skmt.ExecQuery("SELECT CLIENTE, USUARIO, FECHA_PUNTEO, LATITUD, LONGITUD, ALMACEN, RUTA_REPARTO, RUTA_PREV, FECHA_PREVENTA, MOTIVO, COMENTARIO,TIPO FROM REPARTO_GEO where ENVIO <> 1") + Log($"REPARTO_Cliente 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_REPARTO_GUNA2" + cmd.Parameters = Array As Object(c.GetString("CLIENTE"), c.GetString("USUARIO"), c.GetString("FECHA_PUNTEO"), c.GetString("LATITUD"), c.GetString("LONGITUD"), c.GetString("ALMACEN"), c.GetString("RUTA_REPARTO"), c.GetString("RUTA_PREV"), c.GetString("FECHA_PREVENTA"), c.GetString("MOTIVO"), c.GetString("COMENTARIO"),c.GetString("TIPO")) + reqManager.ExecuteCommand(cmd , $"ins_REPARTOPendientes_head_${c.GetString("CLIENTE")}"$) + + Next + End If + c.Close +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_REPARTOPendientes_head_") > -1 Then + Private cliente As String= resultado.Tag + cliente = cliente.SubString(cliente.IndexOf("_")+24) + Log($"Cliente1:${cliente}"$) + Starter.skmt.ExecNonQuery2("update REPARTO_GEO SET ENVIO = ? WHERE CLIENTE = ? AND ENVIO <> ?",Array As String ("1", cliente,"1")) + 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_Clientes.bas b/B4A/C_Clientes.bas new file mode 100644 index 0000000..704bda2 --- /dev/null +++ b/B4A/C_Clientes.bas @@ -0,0 +1,570 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=12.2 +@EndOfDesignText@ +Sub Mods + 'Los clientes con rechazo se estan mostrando en la lista ... se DEBEN de mostrar??? +End Sub + +Sub Class_Globals + Private Root As B4XView 'ignore + Private xui As XUI 'ignore + Dim q_buscar As String +' Dim skmt As SQL + Dim entro As String + Dim c As Cursor + Dim c2 As Cursor + Dim ListView1 As ListView +' Dim gest As Button + Dim lfila As Label + Dim busca As EditText + Private p_colonia As Panel +' Dim distList As List +' Dim distMap As Map + Dim laRuta As String + Private b_GetDirs As Button + Private distOrderedMap, clientesMapaO As B4XOrderedMap + Private img_getDirs As ImageView + Private l_rutaInfo As Label + Private b_getRutaInfo As Button + Private conMapa As Boolean = False + Dim listaWayPoints As List + Dim lv1Top As String + Private b_limpiarRuta As Button + Dim secuenciao As Int + Dim SECIENDA 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("clientes") + entro ="2" + lv1Top = ListView1.Top + clientesMapaO.Initialize + Starter.skmt.ExecNonQuery("delete from waypoints") + Log("Coordenadas del almacen: " & Starter.cedisLocation.Longitude & "," & Starter.cedisLocation.Latitude) +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Sub B4XPage_Appear + busca.Text = "" + b_GetDirs.Visible = False +' skmt.Initialize(Starter.ruta,"kmt.db", True) + entro ="2" + ' esto es para rutas se quito por colonia + 'SE COMENTA EL SIGUIENTE CODIGO PARA QUE TODAS LAS TIENDAS APAREZCAN. + 'c=skmt.ExecQuery("select CAT_CL_COLONIA, count(*) as cuantos from kmt_info where gestion = 0 group by CAT_CL_COLONIA order by CAT_CL_COLONIA asc") + p_colonia.Width = Root.Width + p_colonia.Height = Root.Height + p_colonia.Top = 0 + p_colonia.Left = 0 + Subs.centraListView(ListView1, p_colonia.Width) + ListView1.Height = p_colonia.Height * 0.75 + Subs.SetDivider(ListView1, Colors.LightGray, 2) + If Not(l_rutaInfo.Visible) Then + ListView1.Top = lv1Top + Else + ListView1.Top = lv1Top + 100 + End If + c=Starter.skmt.ExecQuery("select codigo, indice, CAT_CL_NOMBRE, CAT_CL_CALLE, CAT_CL_NOEXT from waypoints inner join kmt_info on waypoints.codigo = kmt_info.CAT_CL_CODIGO where gestion = 0 order by indice") + If c.RowCount > 0 Then 'Ya hay waypoints en la base de datos + c.Position = 0 +' Log("Ya hay waypoints.") + conMapa = True +' Private t1 As Map + ListView1.Clear + Dim cs, cs2 As CSBuilder + entro = 3 +' Log("Generamos ListView1 en Activity_Resume") + For i=0 To c.RowCount -1 'Generamos el listView con la lista ordenada. + c.Position=i + cs.Initialize + cs2.Initialize +' t1 = Starter.waypointsOrdered.Get(k) +' c.GetString("codigo") + Log(c.GetString("indice")) + ListView1.AddTwoLines(cs.Color(Colors.RGB(100,149,237)).Append(c.GetString("codigo")).PopAll, cs2.append(c.GetString("CAT_CL_NOMBRE")).Color(Colors.RGB(100,149,237)).Append(" Calle: ").Pop.Append(c.GetString("CAT_CL_CALLE").Trim & " " & c.GetString("CAT_CL_NOEXT")).PopAll ) + Next + Else + generaListViewRutas + End If + c.Close + p_colonia.Width = Root.Width + p_colonia.Height = Root.Height + Subs.centraEtiqueta(l_rutaInfo, Root.Width) + Subs.centraListView(ListView1, p_colonia.Width) + ListView1.Height = p_colonia.Height * 0.70 + Subs.centraEtiqueta(lfila, Root.Width) + b_getRutaInfo.Visible = True + b_getRutaInfo.BringToFront +End Sub + + +Sub ListView1_ItemClick (Position As Int, Value As Object) +' Log($"Entro= ${entro}"$) + ListView1.Clear + Sleep(50) + Subs.SetDivider(ListView1, Colors.LightGray, 2) + If Not(l_rutaInfo.Visible) Then + ListView1.Top = lv1Top + Else + ListView1.Top = lv1Top + 100 + End If + l_rutaInfo.Visible = False + b_GetDirs.Visible = False + If entro = "2" Then + b_GetDirs.Visible = True + img_getDirs.Visible = True + b_getRutaInfo.Visible = False + Private lrt As String + lrt = Value + laRuta = lrt.SubString(6) 'Quitamos el texto "Ruta: " para obtener el numero de la ruta. +' Log($"Original: ${Value} - Mod: |${lrt.SubString(6)}| - laRuta: ${laRuta}"$) + c2=Starter.skmt.ExecQuery2("select CAT_CL_NOMBRE, CAT_CL_CALLE, CAT_CL_CODIGO, CAT_CL_LAT, CAT_CL_LONG from kmt_info where CAT_CL_RUTA = ? and gestion = 0 order by CAT_CL_NOMBRE ", Array As String(laRuta)) + Private thisLoc As Location + Private label1 As Label + Private label2 As Label + label1 = ListView1.TwoLinesLayout.Label + label1.TextSize = 15 + label1.TextColor = Colors.black + label2 = ListView1.TwoLinesLayout.SecondLabel + label2.TextSize = 15 + label2.TextColor = Colors.black + label2.Height = 38dip + thisLoc.Initialize + If entro = 2 Then ListView1.TwoLinesLayout.ItemHeight = 75dip + lfila.text = "Nombre y Calle" + distOrderedMap.Initialize + If c2.RowCount>0 Then + For i=0 To c2.RowCount -1 'Generamos mapa de clientes + c2.Position=i + thisLoc.Latitude = c2.GetString("CAT_CL_LAT") + thisLoc.Longitude = c2.GetString("CAT_CL_LONG") +' Log(Tracker.UUGCoords) + Private distancia As Int = Tracker.UUGCoords.DistanceTo(thisLoc) 'Calculamos la distancia de la posicion ACTUAL a la tienda. + Private esteCliente As Map = CreateMap("distancia": distancia, "ubicacion": thisLoc.Longitude&","&thisLoc.Latitude, "codigo": c2.GetString("CAT_CL_CODIGO"), "nomDirDist": $"${c2.GetString("CAT_CL_NOMBRE")} CALLE: ${c2.GetString("CAT_CL_CALLE")} ${CRLF}Distancia: $1.1{(distancia/1000)} kms"$) + distOrderedMap.Put(distancia, esteCliente) + Next + distOrderedMap.Keys.Sort(True) 'Ordenamos la mapa de clientes por distancia. + ListView1.Clear + Private m1 As Map + For Each k As Object In distOrderedMap.Keys 'Generamos el listView con el mapa ordenada. + m1 = distOrderedMap.Get(k) + m1.Get("codigo") + ListView1.AddTwoLines(m1.Get("codigo"), m1.Get("nomDirDist")) + Next + End If + c2.Close + entro = "3" + Else If entro = "3" Then + Starter.skmt.ExecNonQuery("delete from CUENTAA") + Starter.skmt.ExecNonQuery2("INSERT INTO CUENTAA VALUES (?)", Array As Object(Value)) + B4XPages.ShowPage("Cliente") + End If +End Sub + +'Genera el listview que muestra las rutas y clientes a visitar por ruta. +Sub generaListViewRutas + ListView1.Clear + Sleep(110) + lfila.Text = "RUTA PREVENTA" + 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 = 15 + label2.TextColor = Colors.Black + ListView1.TwoLinesLayout.ItemHeight = 60dip + c=Starter.skmt.ExecQuery("select CAT_CL_RUTA, count(*) as cuantos from kmt_info where gestion = 0 group by CAT_CL_RUTA order by CAT_CL_RUTA asc") + If c.RowCount>0 Then + ListView1.Clear + For i=0 To c.RowCount -1 + c.Position=i + ListView1.AddTwoLines("Ruta: " & c.GetString("CAT_CL_RUTA"), "Por visitar: " & c.GetString("cuantos")) + Next + End If + c.Close +End Sub + +Sub Activity_KeyPress (key As Int) As Boolean 'ignore + ' BACK key pressed + If key=KeyCodes.KEYCODE_BACK Then + If entro = 3 And Not(conMapa) Then + b_GetDirs.Visible = False +' StartActivity(Activity_Create(False)) + B4XPage_Created(Root) + Return True + End If + B4XPages.ShowPage("Principal") + Return False + 'End If + End If + ' Returning False signals the system to handle the key +End Sub + +Sub BUSCA_TextChanged (Old As String, New As String) + q_buscar = "%" & busca.Text & "%" + c2=Starter.skmt.ExecQuery2("select CAT_CL_NOMBRE, CAT_CL_CALLE, CAT_CL_CODIGO from kmt_info where CAT_CL_NOMBRE like ? and gestion = 0 order by CAT_CL_CODIGO ", Array As String(q_buscar)) + ListView1.Clear + lfila.text = "Nombre y Calle" + Subs.SetDivider(ListView1, Colors.LightGray, 2) + 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 = 15 + label1.TextColor = Colors.Black + Dim label2 As Label + label2 = ListView1.TwoLinesLayout.SecondLabel + label2.TextSize = 15 + label2.TextColor = Colors.Black + ListView1.AddTwoLines(c2.GetString("CAT_CL_CODIGO"), c2.GetString("CAT_CL_NOMBRE") &" CALLE: "& c2.GetString("CAT_CL_CALLE")) + Next + End If + entro = "3" + c2.Close +End Sub + +'Regresa la distancia y tiempo de la ruta entre dos puntos, usa el API del projecto OSRM. (Parte de la funcionalidad OSRM) +'Para mas información ir a esta liga: +'http://project-osrm.org/docs/v5.24.0/api/?language=cURL#route-service +Sub distanciaEntreCoords(id As String, coords1 As String, coords2 As String) As ResumableSub 'ignore + Sleep(1050) + Private distanciaTotal As String = "0" + Private tiempo As String = "0" + Dim j As HttpJob + j.Initialize("", Me) + j.Download("https://router.project-osrm.org/route/v1/driving/"&coords1&";"&coords2&"?overview=false") + Wait For (j) JobDone(j As HttpJob) + If j.Success Then + Dim jp As JSONParser + jp.Initialize(j.GetString) + Dim m As Map = jp.NextObject + Log($"Respuesta: ${m.Get("code")}"$) + If m.Get("code") = "Ok" Then +' Log(m) + Dim rutas As List = m.Get("routes") + Dim rutas2 As Map = rutas.Get(0) +' Log(rutas2) +' Dim legs As List = rutas2.Get("legs") +' Log(legs) + distanciaTotal = rutas2.Get("distance") + tiempo = rutas2.Get("duration") + Log($"Distancia total: ${distanciaTotal}, Tiempo: ${tiempo}"$ ) + End If + Else + Log("Error!") + End If + j.Release + Private r As List + r.Initialize + r.Add(id) + r.Add(distanciaTotal) + r.Add(tiempo) + Return r +End Sub + +'Regresa la distancia y tiempo estimado de la ruta del repartidor, utiliza el API del projecto OSRM +'para calcular la distancia y tiempo de la ruta de un mapa de coordenadas a visitar dado. (Parte de la funcionalidad OSRM) +Sub traeRutaDia(aVisitar As B4XOrderedMap) + Private coordsInicio As String = $"${Starter.cedisLocation.Longitude},${Starter.cedisLocation.Latitude}"$ + Log($"Coordenadas de inicio: ${Starter.cedisLocation.Longitude},${Starter.cedisLocation.Latitude}"$) + Private rutaCompleta As String = coordsInicio + Private preRuta As String = coordsInicio + Private distanciaTotal, distanciaTotal0, tiempo0, tiempo As Double + Private masDe100 As Boolean + Private m4 As Map + Private visitaActual As Int = 0 + Private cuantosAntes As Int = 0 + listaWayPoints.Initialize + If aVisitar.Keys.Size > 98 Then 'Si los clientes a visitar son mas de 100 entonces hacemos 2 rutas, una inicial con pocas visitas (las que pasen de 100) y la final con el resto ... + cuantosAntes = aVisitar.Keys.Size - 98 'Definimos de cuantos clientes va a ser la ruta inicial. + preRuta = coordsInicio 'Ponemos las coordenadas de inicio (Las del CEDIS). + rutaCompleta = "" + masDe100 = True + End If + Log($"a visitar: ${aVisitar.Keys.Size}"$) + For Each k As Object In aVisitar.Keys + visitaActual = visitaActual + 1 + m4 = aVisitar.Get(k) +' Log($"visitaActual: ${visitaActual} - cuantosAntes: ${cuantosAntes}"$) + If visitaActual < cuantosAntes + 2 Then 'Si estas coordenadas son de la ruta inicial las agregamos ... + preRuta = preRuta & ";" & m4.Get("coords") +' LogColor($"PreRuta - visitaActual: ${visitaActual} - coords: ${m4.Get("coords")}"$, Colors.Magenta) + End If + If visitaActual >= cuantosAntes + 2 Then 'Si estas coordenadas son de la ruta final las agregamos ... + rutaCompleta = rutaCompleta & ";" & m4.Get("coords") +' LogColor($"RutaCompleta - visitaActual: ${visitaActual} - coords: ${m4.Get("coords")} - testRuta Size: ${testRutaCompleta.size}"$, Colors.Green) + End If + Next + rutaCompleta = rutaCompleta & ";" & coordsInicio 'Agregamos las coordenadas del CEDIS al final para que sea viaje ida y vuelta. +' rutaCompleta = rutaCompleta & ";" & coordsInicio + If rutaCompleta.StartsWith(";") Then rutaCompleta = rutaCompleta.SubString(1) 'Si las cooredenadas tienen ";" al principio se lo quitamos. +' LogColor(preRuta, Colors.magenta) +' LogColor(rutaCompleta, Colors.Green) + ProgressDialogShow2("Calculando distancia y tiempo, un momento por favor.", False) + Private tiempoVisitas As Double 'TIMEPO DE 4 MINUTOS PROMEDIO POR TIENDA ESTO SE CAMBIA SEGUN EL CLIENTE + tiempoVisitas = aVisitar.Keys.Size * 4 * 60 'Aqui se calcula el tiempo que duran las visitas x 4 mins cada una en segundos. + tiempo0 = 0 + distanciaTotal0 = 0 + If masDe100 Then 'Si son mas de 100, entonces primero calculamos la ruta inicial. + Dim j0 As HttpJob + j0.Initialize("trip0", Me) + j0.Download("https://router.project-osrm.org/trip/v1/driving/"&preRuta&"?source=first&destination=last&roundtrip=false&geometries=geojson") +' LogColor("https://router.project-osrm.org/trip/v1/driving/"&preRuta&"?source=first&destination=last&roundtrip=false&geometries=geojson", Colors.Magenta) + Wait For (j0) JobDone(j0 As HttpJob) + If j0.Success Then + Dim jp0 As JSONParser + jp0.Initialize(j0.GetString) + Dim m0 As Map = jp0.NextObject + If m0.Get("code") = "Ok" Then + Dim puntos0 As List = m0.Get("waypoints") + Private esteWayPoint0 As Map + For p = 0 To puntos0.Size -1 + esteWayPoint0 = puntos0.Get(p) +' LogColor("WP:" & esteWayPoint0, Colors.magenta) +' LogColor("WP: " & esteWayPoint0.Get("waypoint_index") & ", loc: " & esteWayPoint0.Get("location") & ", name: " & esteWayPoint0.Get("name"), Colors.Magenta) + esteWayPoint0.Remove("hint") + esteWayPoint0.Remove("distance") + esteWayPoint0.Remove("trips_index") + listaWayPoints.Add(esteWayPoint0) +' LogColor("estewaypoint: "&esteWayPoint0, Colors.Magenta) + Next + Dim rutas0 As List = m0.Get("trips") + Dim rutas20 As Map = rutas0.Get(0) +' Dim geometry0 As Map = rutas20.Get("geometry") +' Private coords0 As List = geometry0.Get("coordinates") + distanciaTotal0 = rutas20.Get("distance") + tiempo0 = rutas20.Get("duration") + tiempo0 = ((tiempo0 * 2) ) 'Tiempo X 2 (es muy corto porque no toma encuenta el trafico). + Log($"Distancia total ruta inicial: $1.1{distanciaTotal0/1000} kms, tiempo aprox: $1.1{tiempo0/60} mins. ($1.1{tiempo0/60/60} hrs)"$) +' l_rutaInfo.Text = $"Distancia total: $1.1{distanciaTotal0/1000} kms, tiempo aprox: $1.1{tiempo0/60/60} hrs"$ + End If + Else + Log("Error!") + End If + j0.Release + End If + + Dim j As HttpJob + j.Initialize("trip", Me) 'Calculamos el resto de la ruta. + Log(rutaCompleta) + j.Download("https://router.project-osrm.org/trip/v1/driving/"&rutaCompleta&"?source=first&destination=last&roundtrip=false&geometries=geojson") +' LogColor("https://router.project-osrm.org/trip/v1/driving/"&rutaCompleta&"?source=first&destination=last&roundtrip=false&geometries=geojson", Colors.Green) + Wait For (j) JobDone(j As HttpJob) + If j.Success Then + Dim jp As JSONParser + jp.Initialize(j.GetString) + Dim m As Map = jp.NextObject + If m.Get("code") = "Ok" Then + Dim puntos As List = m.Get("waypoints") + Private esteWayPoint As Map + Dim twpi As Int + For p = 0 To puntos.Size -1 + esteWayPoint = puntos.Get(p) +' LogColor("WP:" & esteWayPoint, Colors.green) +' LogColor("WP: " & esteWayPoint.Get("waypoint_index") & ", loc: " & esteWayPoint.Get("location") & ", name: " & esteWayPoint.Get("name"), Colors.Green) + esteWayPoint.Remove("hint") + esteWayPoint.Remove("distance") + esteWayPoint.Remove("trips_index") + twpi = esteWayPoint.Get("waypoint_index") + esteWayPoint.Remove("waypoint_index") + esteWayPoint.Put("waypoint_index", (twpi + cuantosAntes + 2)) + listaWayPoints.Add(esteWayPoint) +' LogColor("estewaypoint: "&esteWayPoint, Colors.Green) + Next + Dim rutas As List = m.Get("trips") + Dim rutas2 As Map = rutas.Get(0) + distanciaTotal = rutas2.Get("distance") + Log("distancia ruta 2:" & (distanciaTotal) & "|" & rutas2.Get("distance")) + distanciaTotal = distanciaTotal + distanciaTotal0 + tiempo = rutas2.Get("duration") + tiempo = (((tiempo + tiempo0) * 2) + tiempoVisitas) 'Tiempo X 2 (es muy corto porque no toma encuenta el trafico) + tiempoVisitas. + Log($"Distancia total: $1.1{distanciaTotal/1000} kms, tiempo aprox: $1.1{tiempo/60} mins. ($1.1{tiempo/60/60} hrs)"$) + l_rutaInfo.Text = $"Distancia: $1.1{distanciaTotal/1000} kms, tiempo aprox: $1.1{tiempo/60/60} hrs${CRLF}Visitas restantes: ${aVisitar.Keys.Size}"$ + l_rutaInfo.Width = Root.Width * 0.9 + Subs.centraEtiqueta(l_rutaInfo, Root.Width) + l_rutaInfo.Visible = True + l_rutaInfo.BringToFront + ListView1.Top = lv1Top + 100 + End If + Else + LogColor("**************** Error! ******************", Colors.red) + End If + j.Release + ProgressDialogHide +' LogColor("clientesMapaO size: " & clientesMapaO.Size & "|" & listaWayPoints.Size, Colors.Blue) + Private r As Int = 1 + Private r1, wps As Map + Starter.skmt.ExecNonQuery("delete from waypoints") + For Each k As Object In clientesMapaO.Keys 'Guardamos en la BD el orden de los waypoints para luego generar el listview. + r1 = clientesMapaO.Get(k) + r1.Get("codigo") +' Log(listaWayPoints.Get(r) & "|" & r1.Get("coords") & "|" & r1.Get("calle")) + wps = listaWayPoints.Get(r) + Starter.skmt.ExecNonQuery2("insert into waypoints values (?,?)", Array As Object(r1.Get("codigo"), wps.get("waypoint_index"))) + r = r + 1 + Next + ListView1.Clear + Sleep(100) + Dim label2 As Label + label2 = ListView1.TwoLinesLayout.SecondLabel + label2.TextSize = 15 + label2.Height = 100dip + ListView1.TwoLinesLayout.ItemHeight = 70dip + Dim cs, cs2 As CSBuilder + entro = 3 + + Log("Generamos ListView1 en traeRutaDia") + 'Traemos las visitas restantes ordenadas por el indice de waypoints (este indice nos indica el orden en la ruta calculada). + c=Starter.skmt.ExecQuery("select codigo, indice, CAT_CL_NOMBRE, CAT_CL_CALLE, CAT_CL_NOEXT from waypoints inner join kmt_info on waypoints.codigo = kmt_info.CAT_CL_CODIGO where gestion = 0 order by indice") + If c.RowCount > 0 Then + For i=0 To c.RowCount -1 'Generamos el listView con la lista ordenada. + secuenciao = i + 1 + c.Position=i + cs.Initialize + cs2.Initialize + ListView1.AddTwoLines(cs.Color(Colors.RGB(100,149,237)).Append(c.GetString("codigo")).PopAll, cs2.append(c.GetString("CAT_CL_NOMBRE")).Color(Colors.RGB(100,149,237)).Append(" Calle: ").Pop.Append(c.GetString("CAT_CL_CALLE").Trim & " " & c.GetString("CAT_CL_NOEXT")).PopAll ) + Starter.skmt.ExecNonQuery2("UPDATE kmt_info SET SECUENCIA = ? where CAT_CL_NOMBRE = ? ", Array As String(secuenciao, c.GetString("CAT_CL_NOMBRE"))) + Next + End If + c.Close +End Sub + +'Calcula distancia y tiempo de la ubicacion ACTUAL a las 8 primeras tiendas de la lista usando el API de OSRM. (Parte de la funcionalidad OSRM) +Private Sub b_GetDirs_Click + ProgressDialogShow("Calculando distancias y tiempos ...") + Private m2 As Map + Private f As Int = 0 + For Each k As Object In distOrderedMap.Keys 'Traemos la distancia y tiempo desde OSRM (2 puntos) + m2 = distOrderedMap.Get(k) + Private distancia2 As String = m2.Get("distancia") + Private thisLoc1 As String = m2.Get("ubicacion") + Private locActual As String = Tracker.UUGCoords.Longitude&","&Tracker.UUGCoords.Latitude + If locActual = "0,0" Then 'Si no tenemos ubicacion actual de GPS, buscamos la ultima guardada en la base de datos. + c = Starter.skmt.ExecQuery("select * from hist_gps") + If c.RowCount > 0 Then + c.Position = 0 + locActual = c.GetString("hglon") & "," & c.GetString("hglat") + End If + c.Close + End If + f = f+1 + If f < 8 Then + If locActual = "0,0" Then 'Si todavia no tenemos ubicacion actual, entonces avisamos. + ToastMessageShow("No se pudo obtener la ubicacion actual!!", True) + f = 8 + End If + Log($"locActual: ${locActual}, thisLoc1: ${thisLoc1}"$) + Wait For(distanciaEntreCoords(distancia2, locActual, thisLoc1)) Complete (r As List) + LogColor($"R: ${r.Get(0)} - ${r.Get(1)} - ${r.Get(2)}"$, Colors.Green) + Private tId As Int = r.Get(0) + Private tMap As Map = distOrderedMap.Get(tId) + LogColor("|" & tId & "| - " &distOrderedMap.Get(tId), Colors.Blue) + Private tempNDD As String = tMap.Get("nomDirDist") + Private indexD As Int = tempNDD.IndexOf("Distancia:") + If indexD > -1 Then tempNDD = tempNDD.SubString2(0, indexD) + Log(tempNDD) + tempNDD = tempNDD & $"Dist: $1.1{(r.Get(1)/1000)} kms, Tiempo aprox: $1.0{((r.Get(2)*2)/60)} min."$ 'Multiplicamos el tiempo X 2 porque el tiempo estimado siempre es muy corto, X2 es mucho mas real con trafico. + Private esteCliente As Map = CreateMap("distancia": distancia2, "ubicacion": tMap.Get("ubicacion"), "codigo": tMap.Get("codigo"), "nomDirDist": tempNDD) + distOrderedMap.Put(tId, esteCliente) + ListView1.Clear + Private m3 As Map + For Each k As Object In distOrderedMap.Keys 'Generamos el listView con la lista ordenada. + m3 = distOrderedMap.Get(k) + m3.Get("codigo") + ListView1.AddTwoLines(m3.Get("codigo"), m3.Get("nomDirDist")) + Next + End If + Next + ProgressDialogHide +End Sub + +'Regresa un mapa (B4XOrderedMap) con todos los clientes que tiene que visitar el repartidor. (Parte de la funcionalidad OSRM) +Sub traeTodosAVisitar As B4XOrderedMap 'ignore + Log("Iniciamos traeTodosAVisitar") +' If Starter.waypointsOrdered.isInitialized Then Log(Starter.waypointsOrdered.Size) +' Private rutaCompleta As String = "" + Private thisLoc, ubicacionInicial As Location + ubicacionInicial = Starter.cedisLocation + LogColor(ubicacionInicial, Colors.Gray) + c=Starter.skmt.ExecQuery("select sum(gestion) as hayVisitados from kmt_info") + If c.RowCount > 0 Then + c.Position = 0 +' Log(c.GetString("hayVisitados")) + If c.GetString("hayVisitados") > 0 Then ubicacionInicial = Tracker.UUGCoords 'Si ya hay clientes visitados, entonces ya no estamos en el CEDIS y la ubicacion inicial debe de ser la ACTUAL. + End If + c.Close + LogColor(ubicacionInicial, Colors.Red) + thisLoc.Initialize + clientesMapaO.Clear + 'Traemos las rutas asignadas al repartidor. + c=Starter.skmt.ExecQuery("select CAT_CL_RUTA, count(*) as cuantos from kmt_info where gestion = 0 group by CAT_CL_RUTA order by CAT_CL_RUTA asc") + If c.RowCount>0 Then + 'Traemos los clientes de cada ruta. + For i=0 To c.RowCount -1 + c.Position=i +' Log($"Renglones ruta: ${c.RowCount} - i=${i} - Ruta: ${c.GetString("CAT_CL_RUTA")}"$) + c2=Starter.skmt.ExecQuery2("select CAT_CL_NOMBRE, CAT_CL_CALLE, CAT_CL_CODIGO, CAT_CL_LAT, CAT_CL_LONG from kmt_info where CAT_CL_RUTA = ? and gestion = 0 order by CAT_CL_NOMBRE ", Array As String(c.GetString("CAT_CL_RUTA"))) + If c2.RowCount>0 Then + For j=0 To c2.RowCount -1 'Generamos lista de clientes + c2.Position=j +' Log($"Renglones clientes: ${c2.RowCount} - j=${j} - Ruta: ${c2.GetString("CAT_CL_CODIGO")}"$) + thisLoc.Latitude = c2.GetString("CAT_CL_LAT") + thisLoc.Longitude = c2.GetString("CAT_CL_LONG") + If Not(thisLoc.Latitude = 0.0) And Not(thisLoc.Latitude = 0) Then 'Este IF es para que si las coordenadas no son válidas, entonces no las agregue al mapeo, porque el API de OSRM nos manda error. + Private distancia As Int = ubicacionInicial.DistanceTo(thisLoc) 'Calculamos la distancia del cedis a la tienda. + If clientesMapaO.ContainsKey(distancia) Then distancia = distancia + 1 'Si por alguna extraña razon hay dos tiendas a la misma distancia del CEDIS, le sumamos 1 para que sea diferente. + Private esteCliente As Map = CreateMap("distancia": distancia, "ordenDist": j, "coords": c2.GetString("CAT_CL_LONG")&","&c2.GetString("CAT_CL_LAT"), "codigo": c2.GetString("CAT_CL_CODIGO"), "nombre": c2.GetString("CAT_CL_NOMBRE"), "calle": c2.GetString("CAT_CL_CALLE")) + clientesMapaO.Put(distancia, esteCliente) + Else + ToastMessageShow("Hay tiendas SIN coordenadas, fueron excluidas!!", False) + End If +' Log($"${thisLoc}"$) +' rutaCompleta = rutaCompleta & ";" & c2.GetString("CAT_CL_LONG")&","&c2.GetString("CAT_CL_LAT") + Next + End If + Next + End If + clientesMapaO.Keys.Sort(True) 'Ordenamos la lista de clientes por distancia. + c.Close + c2.Close + Log(c.RowCount & " rutas, " & clientesMapaO.Size & " clientes") +' LogColor(rutaCompleta, Colors.Magenta) +' Log(clientesMapaO) + Return clientesMapaO +End Sub + +'Traemos la ruta de visitas via el API de OSRM usando el sub "traeRutaDia(traeTodosAVisitar)". +Private Sub b_getRutaInfo_Click + traeRutaDia(traeTodosAVisitar) +End Sub + +'Mostramos u ocultamos el boton para borrar los waypoints de la ruta. +Private Sub b_getRutaInfo_LongClick + If b_limpiarRuta.Visible Then + b_limpiarRuta.Visible = False + Else + b_limpiarRuta.Visible = True + End If +End Sub + +'Borramos los waypoints de la ruta. +Private Sub b_limpiarRuta_Click + Starter.skmt.ExecNonQuery("delete from waypoints") + b_limpiarRuta.Visible = False + B4XPage_Appear +End Sub \ No newline at end of file diff --git a/B4A/C_DetalleVenta.bas b/B4A/C_DetalleVenta.bas new file mode 100644 index 0000000..0820616 --- /dev/null +++ b/B4A/C_DetalleVenta.bas @@ -0,0 +1,611 @@ +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 b_regresar As Button + Dim ListView1 As ListView + Dim L_CANT As Label + Dim L_TOTAL As Label + Dim b_borra As Button + Dim Existe As String + Dim result As String + ' Dim lat_gps, lon_gps As String + Dim cuantos As String + Dim nombre_prod As String + Dim cuantos_pedido As String + Private Titulo As Label + Private P1 As Panel + Private lv2 As ListView + Private p_principal As Panel + Dim clv_pedido As CustomListView + Private p_prods As Panel + Private l_prodX As Label + Private l_pCant As Label + Private et_pCant As EditText + Dim bmp As Bitmap + Dim etCantHasFocus As Boolean = False + Dim totalProds As Int = 0 + Dim totalCompra As Int = 0 + Dim prodsMap As Map + Dim reconstruirPedido As Boolean = False + Dim promoABorrar As String + Private b_guardar As Button + Private b_prodMas As Button + Private b_prodMenos 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 + B4XPages.SetTitle(Me, "Detalle de venta") + 'load the layout to Root + g.Initialize("GPS") + Root.LoadLayout("detalleVenta") + b_borra.Visible = False + Titulo.Text = "Pedido" +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Sub B4XPage_Appear + Subs.centraPanel(p_principal, Root.Width) +' b_guardar.Visible = False + +' Titulo.Left = Round(p_principal.Width/2)-(Titulo.Width/2) + L_CANT.Text ="" + L_TOTAL.Text="" + c=Starter.skmt.ExecQuery("select count(*) as EXISTE from HIST_VENTAS WHERE HVD_CLIENTE IN (Select CUENTA from cuentaa) and HVD_RECHAZO = 0 ") + C.Position=0 + Existe = C.GetString("EXISTE") + C.Close +' c=Starter.skmt.ExecQuery("select distinct hist_ventas.hvd_num_registro, HIST_VENTAS.HVD_CLIENTE, HIST_VENTAS.HVD_PRONOMBRE, HIST_VENTAS.HVD_PROID, HIST_VENTAS.HVD_CANT, HIST_VENTAS2.HVD_CANT as HVD_CANT2, HIST_VENTAS.HVD_COSTO_TOT, HIST_VENTAS.HVD_CODPROMO from HIST_VENTAS inner join HIST_VENTAS2 on HIST_VENTAS.HVD_PROID = HIST_VENTAS2.HVD_PROID and HIST_VENTAS.HVD_CLIENTE = HIST_VENTAS2.HVD_CLIENTE WHERE HIST_VENTAS.HVD_CLIENTE IN (Select CUENTA from cuentaa) and HIST_VENTAS.HVD_RECHAZO = 0 order by HIST_VENTAS.HVD_CODPROMO desc, HIST_VENTAS.HVD_PRONOMBRE asc") + c=Starter.skmt.ExecQuery("select hvd_num_registro, HVD_CLIENTE, HVD_PRONOMBRE, HVD_PROID, HVD_CANT, HVD_COSTO_TOT, HVD_CODPROMO from HIST_VENTAS WHERE HVD_CLIENTE IN (Select CUENTA from cuentaa) and HVD_RECHAZO = 0 and hvd_cant > 0 order by HVD_CODPROMO desc, HVD_PRONOMBRE asc") + ListView1.Clear + clv_pedido.Clear + Subs.SetDivider(ListView1, Colors.LightGray, 2) + clv_pedido.GetBase.SetLayoutAnimated(100, 0dip, 60dip, Root.Width - 50, Root.Height * 0.62) 'Cambiamos el tamaño y posición de la lista de productos + clv_pedido.Base_Resize(clv_pedido.GetBase.Width, clv_pedido.GetBase.Height) 'Cambiamos el tamaño del panel interno de la lista para que ajuste al nuevo tamaño. +' Log("RC1:"&c.RowCount) + If c.RowCount>0 Then +' Log("Usamos HV") + For i=0 To c.RowCount -1 + c.Position=i + 'Traemos cantidad de hvd2 + Private oc As Cursor = Starter.skmt.ExecQuery($"select HVD_CANT from HIST_VENTAS2 WHERE HVD_CLIENTE IN (Select CUENTA from cuentaa) and hvd_proid = '${c.GetString("HVD_PROID")}' and HVD_NUM_REGISTRO = '${c.GetString("HVD_NUM_REGISTRO")}'"$) + Private cant2 As Int = 0 + If oc.RowCount > 0 Then + oc.Position = 0 + cant2 = oc.GetString("HVD_CANT") + End If + oc.Close + Dim label1 As Label + label1 = ListView1.TwoLinesLayout.Label + label1.TextSize = 12 + label1.TextColor = Colors.black + Dim label2 As Label + label2 = ListView1.TwoLinesLayout.SecondLabel + label2.TextSize = 12 + label2.TextColor = Colors.black + Private bgColor, textColor As Int + bgColor = Colors.RGB(177, 200, 249)'azul + textColor = Colors.black + If c.GetString("HVD_CODPROMO") <> "1" Then +' bgColor = Colors.RGB(255, 212, 163) 'naranja + bgColor = Colors.White + End If +' Log($"Agregamos prod a lista1 | ${c.GetString("HVD_CANT")} - ${c.GetString("HVD_CANT2")}"$) 'HVD_CANT2 es la original de la orden. +' ListView1.AddTwoLines(c.GetString("HVD_PRONOMBRE"),"Cantidad #"& c.GetString("HVD_CANT")& " SubTotal $"& c.GetString("HVD_COSTO_TOT")) + clv_pedido.Add(CreateListItem(c.GetString("HVD_PRONOMBRE"), Subs.traePrecio(c.GetString("HVD_PROID"), c.GetString("HVD_CODPROMO")), c.GetString("HVD_CANT"), 0, clv_pedido.AsView.Width, 50dip, bmp, c.GetString("HVD_PROID"), bgColor, textColor, c.GetString("HVD_CODPROMO"),Subs.traeCliente), c.GetString("HVD_PRONOMBRE")) + Next +' cuentaProds("") + End If + 'Traemos lo vendido + Private vc As Cursor = Starter.skmt.ExecQuery("select * from REPARTO where REP_CLIENTE in (select cuenta from cuentaa) and REP_RECHAZO = '0' and REP_CANT > 0 order by REP_PRONOMBRE") +' Log($"VENTA: ${vc.RowCount}"$) + If vc.RowCount > 0 Then +' Log("Usamos REPARTO") +' bgColor = Colors.RGB(248,113,113) + textColor = Colors.RGB(0,87,142) + For i=0 To vc.RowCount -1 + vc.Position = i + Private cantCO As Int = 0 + 'Traemos la cantidad disponible del cliente original + Private cco As Cursor = Starter.skmt.ExecQuery($"select * from REPARTO where REP_CLIENTE = '${vc.GetString("REP_CLI_ORIG")}' and REP_CLI_ORIG = '${vc.GetString("REP_CLI_ORIG")}' and REP_PRODID='${vc.GetString("REP_PRODID")}' and REP_RECHAZO = '1' and REP_CANT > 0"$) + + If cco.RowCount > 0 Then + cco.Position = 0 + cantCO = cco.GetString("REP_CANT") + vc.GetString("REP_CANT") + End If + cantCO = Subs.traeCantidadRechazada(vc.GetString("REP_CLI_ORIG"), vc.GetString("REP_PRODID")) + +' Log($"${vc.GetString("REP_CLI_ORIG")}, ${vc.GetString("REP_CLIENTE")}, ${vc.GetString("REP_PRODID")}, ${vc.GetString("REP_PRONOMBRE")}, ${vc.GetString("REP_RECHAZO")}, ${vc.GetString("REP_CANT")}, ${vc.GetString("REP_PRECIO")}, ${cantCO}, ${cco.GetString("REP_CANT")}, ${vc.GetString("REP_CANT")}"$) + clv_pedido.Add(CreateListItem(vc.GetString("REP_PRONOMBRE"), Subs.traePrecio(vc.GetString("REP_PRODID"), 1), vc.GetString("REP_CANT"), cantCO, clv_pedido.AsView.Width, 50dip, bmp, vc.GetString("REP_PRODID"), bgColor, textColor, 1, vc.GetString("REP_CLI_ORIG")), vc.GetString("REP_PRONOMBRE")) + Next + cco.Close + vc.Close + End If + + If Existe <> 0 Then + c = Starter.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) and HVD_RECHAZO = 0 ") + C.Position=0 + L_CANT.Text = c.GetString("PC_NOART") + L_TOTAL.Text = Round2(c.GetString("PC_MONTO"), 2) + End If + c=Starter.skmt.ExecQuery("select count(*) as EXISTE from PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + Existe = C.GetString("EXISTE") + c.Close +' c=Starter.skmt.ExecQuery("select PE_PRONOMBRE,PE_COSTO_TOT, PE_CANT FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) order by PE_PRONOMBRE asc") + 'ListView1.Clear + Subs.SetDivider(ListView1, Colors.LightGray, 2) +' Log("RC2:" & c.RowCount) +' 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 = 12 +' label1.TextColor = Colors.White +' Dim label2 As Label +' label2 = ListView1.TwoLinesLayout.SecondLabel +' label2.TextSize = 12 +' label2.TextColor = Colors.White +' Log("Agegamos prod a lista 2") +' ListView1.AddTwoLines("VENTA" & c.GetString("PE_PRONOMBRE"),"Cantidad #"& c.GetString("PE_CANT")& " SubTotal $"& c.GetString("PE_COSTO_TOT")) +' 'folio = c.GetString("PE_FOLIO") +' Next +' End If + If Existe <> 0 Then + c=Starter.skmt.ExecQuery("select SUM(PE_CANT) AS PE_CANT, SUM(PE_COSTO_TOT) AS PE_COSTO_TOT FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + C.Position=0 + L_CANT.Text = L_CANT.Text + c.GetString("PE_CANT") + L_TOTAL.Text = Round2(L_TOTAL.Text + c.GetString("PE_COSTO_TOT"), 2) + End If + 'la_no_ird.Text = c.GetString("PR_CF_SALDO_ACORT") +' cuentaProds("") + Private cym As Map = Subs.traemosCantYMonto(clv_pedido) + L_CANT.Text = cym.Get("cantidad") + L_TOTAL.Text = Round2(cym.Get("monto"), 2) +End Sub + +Sub GPS_LocationChanged (Location1 As Location) +' lat_gps=Location1.ConvertToSeconds(Location1.Latitude) +' lon_gps=Location1.ConvertToSeconds(Location1.Longitude) +End Sub + +Sub b_regresar_Click + B4XPages.ShowPage("Cliente") +End Sub + +Private Sub B4XPage_CloseRequest As ResumableSub + ' BACK key pressed + ' I want to capture the key here so I return True + B4XPages.ShowPage("Cliente") + ' Returning False signals the system to handle the key + Return False +End Sub + +Sub ListView1_ItemLongClick (Position As Int, Value As Object) 'BORRAR +' nombre_prod = Value +' result = Msgbox2("Seguro que desa borrar este articulo?","Borrar Articulo", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore +' If result = DialogResponse.POSITIVE Then +' c=Starter.skmt.ExecQuery2("select HVD_CANT FROM hist_ventas where HVD_pronombre = ? and HVD_cliente in (Select CUENTA from cuentaa) and HVD_RECHAZO = 0 ", Array As String(Value)) +' c.Position=0 +' If c.GetString("HVD_CANT") > 1 Then +' b_regresar.Visible =False +' b_borra.Visible=False +' P1.Visible =True +' cuantos_pedido = c.GetString("HVD_CANT") +' lv2.Clear +' lv2.SingleLineLayout.Label.TextColor = Colors.Black +' For i=1 To c.GetString("HVD_CANT") +' lv2.AddSingleLine(i) +' Next +' Else +' ' skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen + ? where cat_gp_nombre = ?", Array As Object(c.GetString("HVD_CANT"),Value)) +' c.Close +' Starter.skmt.ExecNonQuery2("insert into reparto(REP_CLIENTE, REP_PRONOMBRE, REP_CANT, REP_COSTO_TOT,REP_FECHA, REP_CLI_ORIG) select HVD_CLIENTE, HVD_PRONOMBRE, HVD_CANT, HVD_COSTO_TOT, HVD_FECHA, HVD_CLIENTE from hist_ventas where HVD_PRONOMBRE = ? and HVD_cliente in (Select CUENTA from cuentaa) ", Array As String(Value)) +' c=Starter.skmt.ExecQuery2("select HVD_CANT FROM hist_ventas where HVD_pronombre = ? and HVD_cliente in (Select CUENTA from cuentaa) and HVD_RECHAZO = 0 ", Array As String(Value)) +' c.Position=0 +' Starter.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen + ? where cat_gp_nombre = ?", Array As Object(c.GetString("HVD_CANT"),Value)) +' c.Close +' +' 'skmt.ExecNonQuery2("delete FROM HIST_VENTAS WHERE HVD_PRONOMBRE = ? and HVD_cliente in (Select CUENTA from cuentaa) ", Array As String(Value)) +' ' se cambia por update para no borrarlo y tener todos los registros. +' Starter.skmt.ExecNonQuery2("update HIST_VENTAS set HVD_RECHAZO = 1 WHERE HVD_PRONOMBRE = ? and HVD_cliente in (Select CUENTA from cuentaa) ", Array As String(Value)) + ' +' DateTime.DateFormat = "MM/dd/yyyy" +' sDate=DateTime.Date(DateTime.Now) +' sTime=DateTime.Time(DateTime.Now) +' c=Starter.skmt.ExecQuery("Select CUENTA from cuentaa") +' c.Position=0 +' clie_id = c.GetString("CUENTA") +' c=Starter.skmt.ExecQuery("select USUARIO from usuarioa") +' c.Position=0 +' usuario = c.GetString("USUARIO") +' 'quitar esta mamada no es ahi +' Starter.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 3 where CAT_CL_CODIGO In (select cuenta from cuentaa)") +' B4XPage_Appear +' End If +' +' End If +End Sub + +Sub lv2_ItemClick (Position As Int, Value As Object) 'BORRAR +' ' If Value = "Todos" Then +' ' cuantos = c.GetString("HVD_CANT") +' 'Else +' cuantos = Value +' ' End If +' If cuantos = cuantos_pedido Then +' 'Starter.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen + ? where cat_gp_nombre = ?", Array As Object(c.GetString("HVD_CANT"),nombre_prod)) +' c.Close +' Starter.skmt.ExecNonQuery2("insert into reparto(REP_CLIENTE, REP_PRONOMBRE, REP_CANT, REP_COSTO_TOT, REP_FECHA, REP_CLI_ORIG) select HVD_CLIENTE, HVD_PRONOMBRE, HVD_CANT, HVD_COSTO_TOT, HVD_FECHA, HVD_CLIENTE from hist_ventas where HVD_PRONOMBRE = ? and HVD_cliente in (Select CUENTA from cuentaa) ", Array As String(nombre_prod)) +' c=Starter.skmt.ExecQuery2("select HVD_CANT FROM hist_ventas where HVD_pronombre = ? and HVD_cliente in (Select CUENTA from cuentaa) and HVD_RECHAZO = 0 ", Array As String(nombre_prod)) +' c.Position=0 +' Starter.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen + ? where cat_gp_nombre = ?", Array As Object(c.GetString("HVD_CANT"),nombre_prod)) +' c.Close +' 'Starter.skmt.ExecNonQuery2("delete FROM HIST_VENTAS WHERE HVD_PRONOMBRE = ? and HVD_cliente in (Select CUENTA from cuentaa) ", Array As String(Value)) +' ' se cambia por update para no borrarlo y tener todos los registros. +' Starter.skmt.ExecNonQuery2("update HIST_VENTAS set HVD_RECHAZO = 1 WHERE HVD_PRONOMBRE = ? and HVD_cliente in (Select CUENTA from cuentaa) and HVD_RECHAZO = 0 ", Array As String(Value)) +' DateTime.DateFormat = "MM/dd/yyyy" +' sDate=DateTime.Date(DateTime.Now) +' sTime=DateTime.Time(DateTime.Now) +' c=Starter.skmt.ExecQuery("Select CUENTA from cuentaa") +' c.Position=0 +' clie_id = c.GetString("CUENTA") +' c=Starter.skmt.ExecQuery("select USUARIO from usuarioa") +' c.Position=0 +' usuario = c.GetString("USUARIO") +' 'quitar esta m*m*d* no es ahi +' Starter.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 3 where CAT_CL_CODIGO In (select cuenta from cuentaa)") +' Starter.skmt.ExecNonQuery2("update hist_Ventas set HVD_RECHAZO = 1, HVD_PARCIAL = 0, HVD_CANT = HVD_CANT - ? where HVD_pronombre = ? and HVD_cliente in (Select CUENTA from cuentaa) and HVD_RECHAZO = 0 ", Array As Object(cuantos, nombre_prod)) +' b_regresar.Visible =True +' b_borra.Visible=True +' P1.Visible =False +' B4XPage_Appear +' Else +' ' skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen + ? where cat_gp_nombre = ?", Array As Object(cuantos,nombre_prod)) +' c.Close + ' +' 'modificar tambien esto +' 'Modificaciones para que solo quite una parte. +' Starter.skmt.ExecNonQuery2("insert into reparto(REP_CLIENTE, REP_PRONOMBRE, REP_CANT, REP_COSTO_TOT, REP_FECHA, REP_CLI_ORIG) select HVD_CLIENTE, HVD_PRONOMBRE, ?, ? * (HVD_COSTO_TOT/?), HVD_FECHA, HVD_CLIENTE from hist_ventas where HVD_PRONOMBRE = ? and HVD_cliente in (Select CUENTA from cuentaa) ", Array As Object(cuantos,cuantos,cuantos_pedido, nombre_prod)) +' Starter.skmt.ExecNonQuery2("insert into hist_ventas(HVD_CLIENTE,HVD_PRONOMBRE,HVD_CANT,HVD_COSTO_TOT, HVD_FECHA, HVD_CODPROMO, HVD_PROID,HVD_NUM_TICKET, HVD_NUM_REGISTRO, HVD_RECHAZO, HVD_ESTATUS, HVD_PARCIAL) select HVD_CLIENTE,HVD_PRONOMBRE,?,HVD_COSTO_TOT, HVD_FECHA, HVD_CODPROMO, HVD_PROID,HVD_NUM_TICKET, HVD_NUM_REGISTRO, 1, HVD_ESTATUS, 1 from hist_ventas where HVD_PRONOMBRE = ? and HVD_cliente in (Select CUENTA from cuentaa) ", Array As Object(cuantos, nombre_prod)) +' Starter.skmt.ExecNonQuery2("update hist_Ventas set HVD_RECHAZO = 0, HVD_PARCIAL = 1, HVD_CANT = HVD_CANT - ? where HVD_pronombre = ? and HVD_cliente in (Select CUENTA from cuentaa) and HVD_RECHAZO = 0 ", Array As Object(cuantos, nombre_prod)) +' Starter.skmt.ExecNonQuery2("update hist_Ventas set HVD_COSTO_TOT = HVD_CANT * (HVD_COSTO_TOT/?) where HVD_pronombre = ? and HVD_cliente in (Select CUENTA from cuentaa) and HVD_RECHAZO = 0 ", Array As Object(cuantos_pedido, nombre_prod)) +' Starter.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen + ? where cat_gp_nombre = ?", Array As Object(cuantos,nombre_prod)) +' 'crear nueva tabla para que guarde el resto. + '' skmt.ExecNonQuery2("delete FROM HIST_VENTAS WHERE HVD_PRONOMBRE = ? and HVD_cliente in (Select CUENTA from cuentaa) ", Array As String(Value)) +' DateTime.DateFormat = "MM/dd/yyyy" +' sDate=DateTime.Date(DateTime.Now) +' sTime=DateTime.Time(DateTime.Now) +' c=Starter.skmt.ExecQuery("Select CUENTA from cuentaa") +' c.Position=0 +' clie_id = c.GetString("CUENTA") +' c=Starter.skmt.ExecQuery("select USUARIO from usuarioa") +' c.Position=0 +' usuario = c.GetString("USUARIO") +' Starter.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 3 where CAT_CL_CODIGO In (select cuenta from cuentaa)") +' B4XPage_Appear +' b_regresar.Visible =True +' b_borra.Visible=True +' P1.Visible =False +' End If +End Sub + +'**************************************************************************** +'***************** PARA EL MAS/MENOS ************************************* +'**************************************************************************** + +Sub CreateListItem(Text As String, precioU As String, inv As Int, inv2 As Int, Width As Int, Height As Int, img As Bitmap, prodId As String, bc As Int, tc As Int, promo As String, cliente_original As String) As Panel + Dim p As B4XView = xui.CreatePanel("") + Private cs As CSBuilder + cs.Initialize + p.SetLayoutAnimated(0, 0, 0, Width, Height) + p.LoadLayout("prodItem") + p_prods.Color = bc + l_prodX.TextColor = tc + precioU = $"$1.2{precioU}"$ + l_prodX.Text = Text&CRLF&"Cant: " & inv2 & " $" & precioU + If promo <> "1" And precioU = 0 Then + l_prodX.Text = cs.Color(Colors.RGB(123,0,0)).append(Text&CRLF&"Cant: " & inv2 & " $" & precioU).PopAll + End If + l_prodX.Tag = $"ID: ${prodId}${CRLF}${Text}${CRLF}Precio: $$1.2{precioU}${CRLF}Inv: ${inv} pzs"$ +' l_pCant.Text = 0 + l_pCant.Tag = Round2(precioU,2)&"|"&inv&"|"&prodId&"|"&promo&"|"&inv2&"|"&cliente_original + et_pCant.Tag = Round2(precioU,2)&"|"&inv&"|"&prodId&"|"&promo&"|"&inv2&"|"&cliente_original + p_prods.Tag = l_pCant.tag +' Log($"Ponemos la cant en ${inv}"$) + l_pCant.Text = inv +' et_pCant.Text = inv +' et_pCant.BringToFront + + l_pCant.BringToFront + et_pCant.SendToBack + +' i_prod.Bitmap = img + Return p +End Sub + +Sub b_prodMenos_Click + etCantHasFocus = False + Log("etCantHasFocus=" & etCantHasFocus) + LogColor("b_prodMenos_Click", Colors.Magenta) + Dim index As Int = clv_pedido.GetItemFromView(Sender) + Dim pnl0 As B4XView = clv_pedido.GetPanel(index) + Dim pnl As B4XView = pnl0.GetView(0) + Dim laCant As B4XView = pnl.GetView(2).GetView(3) +' Log(pnl.GetView(2).GetView(0) & "|" & pnl.GetView(2).GetView(1) & "|" & pnl.GetView(2).GetView(2)) + Dim esteTag As List = Regex.Split("\|", laCant.Tag) + Log("LC_TEXT:"&laCant.Text&"|PROMO:"&esteTag.Get(3)&"|LC_TAG:"&laCant.Tag&"|ET:"&esteTag) + If esteTag.Get(3) <> "1" Then 'Si es PROMO entonces ... + Log("ES PROMO") + result = Msgbox2("Si se modifica una promoción, la promoción se rompe y solo quedarán los productos sueltos, ¿seguro que desea continuar?","Modificar Promoción", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore + If result = DialogResponse.POSITIVE Then 'Quitamos esta promo + prodsMap.Remove(esteTag.Get(3)) + Starter.skmt.ExecNonQuery($"update HIST_VENTAS set HVD_RECHAZO = 1 WHERE HVD_PROID = '${esteTag.Get(3)}' and HVD_cliente in (Select CUENTA from cuentaa)"$) + Starter.skmt.ExecNonQuery($"update HIST_VENTAS set HVD_CODPROMO = 1 WHERE HVD_cliente in (Select CUENTA from cuentaa)"$) + LogColor(prodsMap, Colors.red) + reconstruirPedido = True + promoABorrar = esteTag.Get(3) + B4XPage_Appear + End If + Else + If laCant.Text = "" Then laCant.Text = 0 + laCant.Text = $"$1.0{laCant.Text-1}"$ + If laCant.Text < 0 Then laCant.Text = 0 + Starter.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen + 1 where cat_gp_id = ?", Array As Object(esteTag.Get(2))) + End If + Dim preciou As Float = esteTag.Get(0)/esteTag.Get(1) + Log("PU: " & preciou) +' LogColor("estamos aqui mmenos " & laCant.Text& " , " & (preciou * laCant.Text),Colors.Green ) +' If L_CANT.Text - 1 >= 0 Then +' L_CANT.Text = L_CANT.Text - 1 +' End If +' b_guardar.Visible = True + Subs.prodRechazo(esteTag.Get(5), esteTag.Get(2)) + Private cym As Map = Subs.traemosCantYMonto(clv_pedido) + L_CANT.Text = cym.Get("cantidad") + L_TOTAL.Text = Round2(cym.Get("monto"), 2) +' cuentaProds("-") +End Sub + +Sub b_prodMas_Click + etCantHasFocus = False +' Log("etCantHasFocus=" & etCantHasFocus) + LogColor("b_prodMas_Click", Colors.Magenta) + Dim index As Int = clv_pedido.GetItemFromView(Sender) + Dim pnl0 As B4XView = clv_pedido.GetPanel(index) + Dim pnl As B4XView = pnl0.GetView(0) + Dim laCant As B4XView = pnl.GetView(2).GetView(3) +' Log(pnl.GetView(2).GetView(1).text&"|"&pnl.GetView(2).GetView(2)&"|"&pnl.GetView(2).GetView(4).text) +' Log($"precio|stock:${laCant.tag}"$) +' Log($"Indice: ${index}, cant:${laCant.Text+1}, precioU: ${laCant.tag}"$) + Dim esteTag As List = Regex.Split("\|", laCant.Tag) + Log("LC_TEXT:"&laCant.Text&"|LC_TAG:"&laCant.Tag&"|ET:"&esteTag) + If laCant.Text = "" Then laCant.Text = 0 + + Private maxProds = esteTag.Get(1) + esteTag.Get(4) 'Prods disponibles + prods comprados + + LogColor($"++++++++++++++++++++++++++ ${esteTag}"$, Colors.Green) +' Log(esteTag.get(4)) + If laCant.Text + 1 <= maxProds Then + Log($"NuevaCant = ${laCant.Text + 1}"$) + laCant.Text = $"$1.0{laCant.Text + 1}"$ + Starter.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen - 1 where cat_gp_id = ?", Array As Object(esteTag.Get(2))) + + Subs.prodVenta(esteTag.Get(5), esteTag.Get(2)) + Private cym As Map = Subs.traemosCantYMonto(clv_pedido) + L_CANT.Text = cym.Get("cantidad") + L_TOTAL.Text = Round2(cym.Get("monto"), 2) +' cuentaProds("+") + End If +' Dim preciou As Float = esteTag.Get(0)/esteTag.Get(1) +' Log(preciou) +' LogColor("estamos aquii mas " & laCant.Text& " , " & (preciou * laCant.Text) ,Colors.Green ) +' b_guardar.Visible = True +' Log($"Total Prods: ${totalProds}, Total Compra: $$1.2{totalCompra}"$) +' c = Starter.skmt.ExecQuery($"SELECT HVD_CANT FROM HIST_VENTAS2 WHERE HVD_CLIENTE IN (SELECT CUENTA FROM CUENTAA) AND HVD_PROID = '${esteTag.Get(2)}' "$) +' c.Position = 0 +' Dim cantoriginal As String = 0 +' If c.RowCount > 0 Then +' cantoriginal = c.GetString("HVD_CANT") +' End If +' If cantoriginal <= esteTag.Get(1) Then +' L_CANT.Text = L_CANT.Text + 1 +' End If +End Sub + +Sub cuentaProds(accion As String) +' Log("Entramos a cuentaProds") + Log("*******************************************************") + Private cantRechazada As Int = 0 + If Not(reconstruirPedido) Then + Log("*********** CUENTAPRODS - NO RECONSTRUIR") + prodsMap.Initialize + For i = 0 To clv_pedido.GetSize - 1 + Private p0 As B4XView = clv_pedido.GetPanel(i) + Private p As B4XView = p0.GetView(0) + Private cant1 As B4XView = p.GetView(2).GetView(3) + If cant1.Text = "" Then cant1.Text = 0 +' totalProds = totalProds + cant1.Text + Private esteTag As List = Regex.Split("\|", cant1.Tag) + Log("-------------------------------------") + Log($"ET: ${esteTag}"$) + Private esteProd As String = esteTag.Get(2) + Private estaCant As Int = cant1.Text + Private estaCantOriginal As Int = esteTag.Get(1) + Private esteCliente = Subs.traeCliente + Private esteProdNombre = Subs.traeNombre(esteProd) + Private esteClienteOriginal As Int = esteTag.Get(5) + Private fechaReparto As String = Subs.traeFechaReparto + Private maxProds = Subs.traeMaxCantidad(esteTag.Get(5), esteTag.Get(2)) + + If cant1.Text > maxProds Then cant1.Text = maxProds + + cantRechazada = esteTag.Get(4) - cant1.Text +' If accion = "-" Then cantRechazada = Subs.traeCantidadRechazada(esteClienteOriginal, esteProd) + 1 +' If accion = "+" Then cantRechazada = Subs.traeCantidadRechazada(esteClienteOriginal, esteProd) - 1 + Log($"${Subs.traeCantidadRechazada(esteClienteOriginal, esteProd)}, ${Subs.traeCantidadVendida(esteClienteOriginal, esteProd)}"$) + +' LogColor($"cantRechazada = ${esteTag.Get(4)} - ${cant1.Text}"$, Colors.Magenta) + LogColor($"cantRechazada = ${cantRechazada}"$, Colors.Magenta) + Private estePrecio As String = 0 + If Subs.traePrecio(esteProd, 1) <> Null Then estePrecio = Subs.traePrecio(esteProd, 1) * cantRechazada + +' LogColor(esteProd & "|" & cant1.Text & "|" & estaCantOriginal & "|" & cantRechazada & "|" & estePrecio, Colors.red) +' LogColor($"cantRechazada=${cantRechazada} | ${esteProdNombre}"$, Colors.Blue) +' Log($"Ponemos HVD_CANT ${esteProd} en ${cant1.text}"$) + Starter.skmt.ExecNonQuery2("update HIST_VENTAS set HVD_PARCIAL = 1, HVD_CANT = ? WHERE HVD_PROID = ? and HVD_CLIENTE in (Select CUENTA from cuentaa)", Array As String(cant1.Text ,esteProd)) + Private rr As Cursor = Starter.skmt.ExecQuery($"select count(REP_CLIENTE) as hayRechazo from REPARTO where rep_prodid = '${esteProd}' and REP_CLIENTE in (Select CUENTA from cuentaa)"$) + rr.Position = 0 +' Log($"HayRechazo=${rr.GetString("hayRechazo")}"$) + If rr.GetString("hayRechazo") = 0 Then + Log("INSERTAMOS EN REPARTO") + Starter.skmt.ExecNonQuery2("insert into reparto(REP_CLIENTE, REP_PRONOMBRE, REP_CANT, REP_COSTO_TOT, REP_FECHA, REP_RECHAZO, REP_PRODID, REP_PRECIO, REP_CLI_ORIG) VALUES (?,?,?,?,?,1,?,?,?) ", Array As String(esteCliente, esteProdNombre, 0, estePrecio, fechaReparto, esteProd, estePrecio, esteCliente)) + Starter.skmt.ExecNonQuery2("insert into reparto(REP_CLIENTE, REP_PRONOMBRE, REP_CANT, REP_COSTO_TOT, REP_FECHA, REP_RECHAZO, REP_PRODID, REP_PRECIO, REP_CLI_ORIG) VALUES (?,?,?,?,?,0,?,?,?) ", Array As String(esteCliente, esteProdNombre, cantRechazada, 0, fechaReparto, esteProd, estePrecio, esteCliente)) + Else if esteClienteOriginal = "0" Then 'Actualizamos el rechazo en el cliente actual. +' Log($"Actualizamos REP_CANT=${cantRechazada}"$) +' Starter.skmt.ExecNonQuery($"update reparto set REP_CANT = '${cantRechazada}', REP_PRECIO = '${estePrecio}', REP_COSTO_TOT = '${estePrecio * cantRechazada}' where REP_CLIENTE in (Select CUENTA from cuentaa) and REP_CLI_ORIG = '${esteClienteOriginal}' and REP_RECHAZO = 1 and REP_PRODID = '${esteProd}'"$) + Else 'Cliente original <> 0 entonces actualizamos el rechazo en el cliente original y NO en el actual. + Log($"Actualizamos REP_CANT RECHAZO = ${cantRechazada}"$) +' Starter.skmt.ExecNonQuery($"update reparto set REP_CANT = ${cantRechazada}, REP_PRECIO = '${estePrecio}', REP_COSTO_TOT = '${estePrecio * cantRechazada}' where REP_CLIENTE = '${esteClienteOriginal}' and REP_CLI_ORIG = '${esteClienteOriginal}' and REP_RECHAZO = 1 and REP_PRODID = '${esteProd}'"$) +' Starter.skmt.ExecNonQuery($"update reparto set REP_CANT = '${cant1.Text}', REP_PRECIO = '${estePrecio}', REP_COSTO_TOT = '${estePrecio * cantRechazada}' where REP_CLIENTE in (Select CUENTA from cuentaa) and REP_CLI_ORIG = '${esteClienteOriginal}' and REP_RECHAZO = 0 and REP_PRODID = '${esteProd}'"$) + End If + + If cant1.Text > 0 Then +' totalCompra = totalCompra + (esteTag.get(0) * cant1.text) +' Log($"Cant: ${cant1.Text}, Suma: ${totalCompra}"$) + Private m As Map + m=CreateMap("cant":cant1.Text, "cant2":esteTag.get(4), "precio":esteTag.get(0), "promo":esteTag.get(3), "nombre":Subs.traeNombre(esteTag.Get(2)), "cli_orig":esteTag.get(5)) +' LogColor("PUT:" & esteTag.Get(2), Colors.Red) + prodsMap.Put(esteTag.Get(2), m) + End If + Log("-------------------------------------") + Next + End If + Private bgColor, textColor As Int + + If reconstruirPedido Then + Log("*********** CUENTAPRODS - SI RECONSTRUIR") + Private newPromo, newPrecio As String + clv_pedido.Clear + Log("Usamos PRODSMAP") + For Each pr As String In prodsMap.Keys + Private pr1 As Map = prodsMap.Get(pr) + Log("PPP: " & pr & "|PromoABorrar=" & promoABorrar & "|" & pr1) + bgColor = Colors.RGB(177, 200, 249)'azul + textColor = Colors.black + newPromo = pr1.Get("promo") + newPrecio = pr1.Get("precio") + Log("AAA: " & newPromo & "|" & promoABorrar) + If newPromo = promoABorrar Then + newPromo = 1 + newPrecio = Subs.traePrecio(pr, False) * pr1.Get("cant") + 'Ponemos precio SIN promo y sacamos el producto de la promo. + Starter.skmt.ExecNonQuery($"update HIST_VENTAS set HVD_COSTO_TOT = ${newPrecio}, HVD_CODPROMO = 1 WHERE HVD_PRONOMBRE = '${pr1.Get("nombre")}' and HVD_cliente in (Select CUENTA from cuentaa)"$) + LogColor("CAMBIAMOS PROMO: " & newPromo, Colors.Magenta) + End If + If newPromo <> "1" Then +' bgColor = Colors.RGB(255, 212, 163) 'naranja + bgColor = Colors.White + End If + Log($"CLI: ${pr1.Get("nombre")}, ${newPrecio}, ${pr1.Get("cant")}, ${pr1.Get("cant2")}"$) + clv_pedido.Add(CreateListItem(pr1.Get("nombre"), newPrecio, pr1.Get("cant"), pr1.Get("cant2"), clv_pedido.AsView.Width, 50dip, bmp, pr, bgColor, textColor, newPromo, pr1.Get("cli_orig")), pr1.Get("nombre")) + reconstruirPedido = False + Next + promoABorrar = "" + End If + Log($"Total Prods: ${totalProds}, Total Compra: $$1.2{totalCompra}"$) + LogColor("prodsMap=" & prodsMap, Colors.Green) + + + LogColor(prodsMap, Colors.Blue) + c = Starter.skmt.ExecQuery($"SELECT sum(HVD_CANT) as CANTIDAD FROM HIST_VENTAS WHERE HVD_CLIENTE IN (SELECT CUENTA FROM CUENTAA)"$) + Dim cantidad1 As String = 0 + If c.RowCount > 0 Then + c.Position = 0 + cantidad1 = c.GetString("CANTIDAD") + L_CANT.Text = Round(cantidad1) + End If + c.Close + + Dim totalfinal As String = 0 + For Each pr As String In prodsMap.Keys + Private pr1 As Map = prodsMap.Get(pr) +' LogColor(pr,Colors.Red) + Dim x As Cursor = Starter.skmt.ExecQuery($"SELECT CAT_GP_PRECIO FROM CAT_GUNAPROD WHERE CAT_GP_ID = '${pr}'"$) + c = Starter.skmt.ExecQuery($"SELECT HVD_CANT FROM HIST_VENTAS WHERE HVD_CLIENTE IN (SELECT CUENTA FROM CUENTAA) AND HVD_PROID ='${pr}' "$) + Dim cantidady As String = 0 + If c.RowCount >0 Then + c.Position = 0 + cantidady = c.GetString("HVD_CANT") + End If +' Log(x.RowCount) + If x.RowCount > 0 Then + x.Position = 0 +' Log(x.GetString("CAT_GP_PRECIO")) + Dim preciou As String = x.GetString("CAT_GP_PRECIO") + Dim costototalhist As String = preciou * cantidady +' Log("Total ==== "&costototalhist) + End If + totalfinal = totalfinal + costototalhist + x.Close + Next + L_TOTAL.Text = Round2(totalfinal, 2) + c.Close + + c = Starter.skmt.ExecQuery("select COUNT(*) AS CUANTOS from REPARTO where REP_CLIENTE in (select cuenta from cuentaa) and REP_RECHAZO = '0' and REP_CANT > 0 order by REP_PRONOMBRE") + If c.RowCount > 0 Then + c.Position = 0 + If c.GetString("CUANTOS") > 0 Then + + Dim z As Cursor = Starter.skmt.ExecQuery($"select SUM(REP_CANT) AS CANTIDAD , SUM(REP_PRECIO) AS PRECIO from REPARTO where REP_CLIENTE in (select cuenta from cuentaa) and REP_RECHAZO = '0' and REP_CANT > 0 order by REP_PRONOMBRE"$) + Dim cantidad2 As String = 0 +' Log(z.RowCount) + If z.RowCount > 0 Then + z.Position = 0 + cantidad2= z.GetString("CANTIDAD") +' LogColor(z.GetString("PRECIO")&" , " & z.GetString("CANTIDAD"), Colors.Magenta) +' Log(cantidad1 &" , "& cantidad2) + L_CANT.Text = Round((cantidad1 + cantidad2)) + End If + z.Close + + + End If + End If + + + +End Sub + +Private Sub b_guardar_Click + +End Sub + + +Private Sub l_pCant_Click + +End Sub + +Sub p_prods_Click + Log(Sender.As(Panel).tag) +End Sub \ No newline at end of file diff --git a/B4A/C_Detalle_Promo.bas b/B4A/C_Detalle_Promo.bas new file mode 100644 index 0000000..0f98bdf --- /dev/null +++ b/B4A/C_Detalle_Promo.bas @@ -0,0 +1,112 @@ +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 c As Cursor +' Dim ruta As String + Dim Regresar As Button + Dim b As Cursor + Dim regalo As String + Dim ListView1 As ListView + Dim L_CANT As Label + Dim L_TOTAL As Label + Dim borra As Button + Dim Existe 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("detalle_promo") + c=Starter.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)") + ListView1.Clear + Subs.SetDivider(ListView1, Colors.LightGray, 2) + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + b=Starter.skmt.ExecQuery2("select CAT_GP_NOMBRE from cat_gunaprod where CAT_GP_ID = ?", Array As String(C.GetString("CAT_DP_IDPROD"))) + B.Position =0 + Dim label1 As Label + label1 = ListView1.TwoLinesLayout.Label + label1.TextSize = 10 + label1.TextColor = Colors.White + Dim label2 As Label + label2 = ListView1.TwoLinesLayout.SecondLabel + label2.TextSize = 10 + label2.TextColor = Colors.White + If c.GetString("CAT_DP_PRECIO") = 0 Then + regalo = "SI" + Else + regalo = "NO" + End If + ListView1.AddTwoLines(B.GetString("CAT_GP_NOMBRE"),"Cantidad # "& c.GetString("CAT_DP_PZAS")& " REGALO "& regalo) + b.Close + Next + 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 B4XPage_Appear + Starter.skmt.Initialize(Starter.ruta,"kmt.db", True) + c=Starter.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)") + ListView1.Clear + Subs.SetDivider(ListView1, Colors.LightGray, 2) + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + b=Starter.skmt.ExecQuery2("select CAT_GP_NOMBRE from cat_gunaprod where CAT_GP_ID = ?", Array As String(C.GetString("CAT_DP_IDPROD"))) + B.Position =0 + Dim label1 As Label + label1 = ListView1.TwoLinesLayout.Label + label1.TextSize = 10 + label1.TextColor = Colors.White + Dim label2 As Label + label2 = ListView1.TwoLinesLayout.SecondLabel + label2.TextSize = 10 + label2.TextColor = Colors.White + If c.GetString("CAT_DP_PRECIO") = 0 Then + regalo = "SI" + Else + regalo = "NO" + End If + ListView1.AddTwoLines(B.GetString("CAT_GP_NOMBRE"),"Cantidad # "& c.GetString("CAT_DP_PZAS")& " REGALO "& regalo) + b.Close + Next + c.Close + End If + 'la_no_ird.Text = c.GetString("PR_CF_SALDO_ACORT") +End Sub + +Sub Activity_Pause (UserClosed As Boolean) + +End Sub + +Sub Regresar_Click +' StartActivity(pedidos) + B4XPages.ShowPage("") +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 +' StartActivity(pedidos) + B4XPages.ShowPage("") + 'Return True + End If + ' Returning False signals the system to handle the key + Return False +End Sub diff --git a/B4A/C_Foto.bas b/B4A/C_Foto.bas new file mode 100644 index 0000000..ac473e2 --- /dev/null +++ b/B4A/C_Foto.bas @@ -0,0 +1,167 @@ +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 frontCamera As Boolean = False + Dim g As GPS + Private p_camara As Panel + Private camEx As CameraExClass + Dim btnTakePicture As Button + Dim c As Cursor + Dim cuenta As String + Dim lat_gps As String + Dim USUARIO As String + Dim MOTIVO 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 + g.Initialize("GPS") + Root.LoadLayout("foto") + c=Starter.skmt.ExecQuery("select cuenta from cuentaa") + c.Position = 0 + cuenta = c.GetString("CUENTA") +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Sub B4XPage_Appear + InitializeCamera +End Sub + +Private Sub InitializeCamera + camEx.Initialize(p_camara, frontCamera, Me, "Camera1") + frontCamera = camEx.Front +End Sub + +Sub Activity_Pause (UserClosed As Boolean) +' camEx.Release +End Sub + +Sub GPS_LocationChanged (Location1 As Location) + +End Sub + +Sub Camera1_Ready (Success As Boolean) + If Success Then + camEx.SetJpegQuality(90) + camEx.CommitParameters + camEx.StartPreview + Log(camEx.GetPreviewSize) + Else + ToastMessageShow("Cannot open camera.", True) + End If +End Sub + +Sub btnTakePicture_Click + Dim ps As CameraSize + ps.Width =640 + ps.Height =480 + camEx.SetPictureSize(ps.Width, ps.Height) + 'ToastMessageShow(ps.Width & "x" & ps.Height, False) + camEx.CommitParameters + camEx.TakePicture +End Sub + +Sub btnFocus_Click + camEx.FocusAndTakePicture +End Sub + +Sub Camera1_PictureTaken (Data() As Byte) + Dim filename As String = "1.jpg" + Dim dir As String = File.DirRootExternal + + camEx.SavePictureToFile(Data, dir, filename) + camEx.StartPreview 'restart preview + 'Dim out As OutputStream + Dim sDate,sTime As String + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=Starter.skmt.ExecQuery("select CUENTA from cuentaa") + c.Position = 0 + cuenta = c.GetString("CUENTA") + c=Starter.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position = 0 + USUARIO = c.GetString("USUARIO") + c.Close + Starter.skmt.ExecNonQuery("DELETE FROM NOVENTA WHERE NV_CLIENTE IN (select cuenta from cuentaa)") + c=Starter.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") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Starter.skmt.ExecNonQuery2("insert into reparto(REP_CLIENTE, REP_PRONOMBRE, REP_CANT, REP_COSTO_TOT) select HVD_CLIENTE, HVD_PRONOMBRE, HVD_CANT, HVD_COSTO_TOT from hist_ventas where HVD_PRONOMBRE = ? and HVD_cliente in (Select CUENTA from cuentaa) ", Array As String(c.GetString("HVD_PRONOMBRE"))) + Starter.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen + ? where cat_gp_nombre = ?", Array As Object(c.GetString("HVD_CANT"),c.GetString("HVD_PRONOMBRE"))) + ' ANTES DE MODIFCAR + Next + End If + Starter.skmt.ExecNonQuery2("INSERT INTO NOVENTA (NV_CLIENTE,NV_FECHA,NV_USER,NV_MOTIVO,NV_COMM,NV_LAT,NV_LON, NV_FOTO) VALUES(?,?,?,?,?,?,?,?) ", Array As Object (cuenta,sDate & sTime, USUARIO, "CERRADO", B4XPages.MainPage.noVenta.COMENTARIO, B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps, Data)) + Starter.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 3 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + Starter.skmt.ExecNonQuery("update HIST_VENTAS SET HVD_RECHAZO = 1 WHERE HVD_CLIENTE IN (SELECT CUENTA FROM CUENTAA)") + B4XPages.ShowPage("Cliente") +End Sub + +Sub ChangeCamera_Click + camEx.Release + frontCamera = Not(frontCamera) + InitializeCamera +End Sub + +Sub btnEffect_Click + Dim effects As List = camEx.GetSupportedColorEffects + If effects.IsInitialized = False Then + ToastMessageShow("Effects not supported.", False) + Return + End If + Dim effect As String = effects.Get((effects.IndexOf(camEx.GetColorEffect) + 1) Mod effects.Size) + camEx.SetColorEffect(effect) + ToastMessageShow(effect, False) + camEx.CommitParameters +End Sub + +Sub btnFlash_Click + Dim f() As Float = camEx.GetFocusDistances + Log(f(0) & ", " & f(1) & ", " & f(2)) + Dim flashModes As List = camEx.GetSupportedFlashModes + If flashModes.IsInitialized = False Then + ToastMessageShow("Flash not supported.", False) + Return + End If + Dim flash As String = flashModes.Get((flashModes.IndexOf(camEx.GetFlashMode) + 1) Mod flashModes.Size) + camEx.SetFlashMode(flash) + ToastMessageShow(flash, False) + camEx.CommitParameters +End Sub + +Sub btnPictureSize_Click + Dim pictureSizes() As CameraSize = camEx.GetSupportedPicturesSizes + Dim current As CameraSize = camEx.GetPictureSize + For i = 0 To pictureSizes.Length - 1 + If pictureSizes(i).Width = current.Width And pictureSizes(i).Height = current.Height Then Exit + Next + Dim ps As CameraSize = pictureSizes((i + 1) Mod pictureSizes.Length) + camEx.SetPictureSize(ps.Width, ps.Height) + ToastMessageShow(ps.Width & "x" & ps.Height & i, False) + camEx.CommitParameters +End Sub + +Private Sub B4XPage_CloseRequest As ResumableSub + ' BACK key pressed + ' I want to capture the key here so I return True + B4XPages.ShowPage("Cliente") + ' Returning False signals the system to handle the key + Return False +End Sub + diff --git a/B4A/C_Historico.bas b/B4A/C_Historico.bas new file mode 100644 index 0000000..e25f2a8 --- /dev/null +++ b/B4A/C_Historico.bas @@ -0,0 +1,609 @@ +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 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 b_regresar As Button + Dim ListView1 As ListView + Dim L_CANT As Label + Dim L_TOTAL As Label + Dim b_borra As Button + Dim Existe As String + Dim result As String + ' Dim lat_gps, lon_gps As String + Dim cuantos As String + Dim nombre_prod As String + Dim cuantos_pedido As String + Private Titulo As Label + Private P1 As Panel + Private lv2 As ListView + Private p_principal As Panel + Dim clv_pedido As CustomListView + Private p_prods As Panel + Private l_prodX As Label + Private l_pCant As Label + Private et_pCant As EditText + Dim bmp As Bitmap + Dim etCantHasFocus As Boolean = False + Dim totalProds As Int = 0 + Dim totalCompra As Int = 0 + Dim prodsMap As Map + Dim reconstruirPedido As Boolean = False + Dim promoABorrar As String + Private b_guardar As Button + Private b_prodMas As Button + Private b_prodMenos 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 + g.Initialize("GPS") + Root.LoadLayout("historico") + b_borra.Visible = False + Titulo.Text = "Pedido" +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Sub B4XPage_Appear + Subs.centraPanel(p_principal, Root.Width) +' b_guardar.Visible = False + +' Titulo.Left = Round(p_principal.Width/2)-(Titulo.Width/2) + L_CANT.Text ="" + L_TOTAL.Text="" + c=Starter.skmt.ExecQuery("select count(*) as EXISTE from HIST_VENTAS WHERE HVD_CLIENTE IN (Select CUENTA from cuentaa) and HVD_RECHAZO = 0 ") + C.Position=0 + Existe = C.GetString("EXISTE") + C.Close +' c=Starter.skmt.ExecQuery("select distinct hist_ventas.hvd_num_registro, HIST_VENTAS.HVD_CLIENTE, HIST_VENTAS.HVD_PRONOMBRE, HIST_VENTAS.HVD_PROID, HIST_VENTAS.HVD_CANT, HIST_VENTAS2.HVD_CANT as HVD_CANT2, HIST_VENTAS.HVD_COSTO_TOT, HIST_VENTAS.HVD_CODPROMO from HIST_VENTAS inner join HIST_VENTAS2 on HIST_VENTAS.HVD_PROID = HIST_VENTAS2.HVD_PROID and HIST_VENTAS.HVD_CLIENTE = HIST_VENTAS2.HVD_CLIENTE WHERE HIST_VENTAS.HVD_CLIENTE IN (Select CUENTA from cuentaa) and HIST_VENTAS.HVD_RECHAZO = 0 order by HIST_VENTAS.HVD_CODPROMO desc, HIST_VENTAS.HVD_PRONOMBRE asc") + c=Starter.skmt.ExecQuery("select hvd_num_registro, HVD_CLIENTE, HVD_PRONOMBRE, HVD_PROID, HVD_CANT, HVD_COSTO_TOT, HVD_CODPROMO from HIST_VENTAS WHERE HVD_CLIENTE IN (Select CUENTA from cuentaa) and HVD_RECHAZO = 0 and hvd_cant > 0 order by HVD_CODPROMO desc, HVD_PRONOMBRE asc") + ListView1.Clear + clv_pedido.Clear + Subs.SetDivider(ListView1, Colors.LightGray, 2) + clv_pedido.GetBase.SetLayoutAnimated(100, 0dip, 60dip, Root.Width - 50, Root.Height * 0.62) 'Cambiamos el tamaño y posición de la lista de productos + clv_pedido.Base_Resize(clv_pedido.GetBase.Width, clv_pedido.GetBase.Height) 'Cambiamos el tamaño del panel interno de la lista para que ajuste al nuevo tamaño. +' Log("RC1:"&c.RowCount) + If c.RowCount>0 Then +' Log("Usamos HV") + For i=0 To c.RowCount -1 + c.Position=i + 'Traemos cantidad de hvd2 + Private oc As Cursor = Starter.skmt.ExecQuery($"select HVD_CANT from HIST_VENTAS2 WHERE HVD_CLIENTE IN (Select CUENTA from cuentaa) and hvd_proid = '${c.GetString("HVD_PROID")}' and HVD_NUM_REGISTRO = '${c.GetString("HVD_NUM_REGISTRO")}'"$) + Private cant2 As Int = 0 + If oc.RowCount > 0 Then + oc.Position = 0 + cant2 = oc.GetString("HVD_CANT") + End If + oc.Close + Dim label1 As Label + label1 = ListView1.TwoLinesLayout.Label + label1.TextSize = 12 + label1.TextColor = Colors.black + Dim label2 As Label + label2 = ListView1.TwoLinesLayout.SecondLabel + label2.TextSize = 12 + label2.TextColor = Colors.black + Private bgColor, textColor As Int + bgColor = Colors.RGB(177, 200, 249)'azul + textColor = Colors.black + If c.GetString("HVD_CODPROMO") <> "1" Then +' bgColor = Colors.RGB(255, 212, 163) 'naranja + bgColor = Colors.White + End If +' Log($"Agregamos prod a lista1 | ${c.GetString("HVD_CANT")} - ${c.GetString("HVD_CANT2")}"$) 'HVD_CANT2 es la original de la orden. +' ListView1.AddTwoLines(c.GetString("HVD_PRONOMBRE"),"Cantidad #"& c.GetString("HVD_CANT")& " SubTotal $"& c.GetString("HVD_COSTO_TOT")) + clv_pedido.Add(CreateListItem(c.GetString("HVD_PRONOMBRE"), Subs.traePrecio(c.GetString("HVD_PROID"), c.GetString("HVD_CODPROMO")), c.GetString("HVD_CANT"), 0, clv_pedido.AsView.Width, 50dip, bmp, c.GetString("HVD_PROID"), bgColor, textColor, c.GetString("HVD_CODPROMO"),Subs.traeCliente), c.GetString("HVD_PRONOMBRE")) + Next +' cuentaProds("") + End If + 'Traemos lo vendido + Private vc As Cursor = Starter.skmt.ExecQuery("select * from REPARTO where REP_CLIENTE in (select cuenta from cuentaa) and REP_RECHAZO = '0' and REP_CANT > 0 order by REP_PRONOMBRE") + Log($"VENTA: ${vc.RowCount}"$) + If vc.RowCount > 0 Then +' Log("Usamos REPARTO") +' bgColor = Colors.RGB(248,113,113) + textColor = Colors.RGB(0,87,142) + For i=0 To vc.RowCount -1 + vc.Position = i + Private cantCO As Int = 0 + 'Traemos la cantidad disponible del cliente original + Private cco As Cursor = Starter.skmt.ExecQuery($"select * from REPARTO where REP_CLIENTE = '${vc.GetString("REP_CLI_ORIG")}' and REP_CLI_ORIG = '${vc.GetString("REP_CLI_ORIG")}' and REP_PRODID='${vc.GetString("REP_PRODID")}' and REP_RECHAZO = '1' and REP_CANT > 0"$) + + If cco.RowCount > 0 Then + cco.Position = 0 + cantCO = cco.GetString("REP_CANT") + vc.GetString("REP_CANT") + End If + cantCO = Subs.traeCantidadRechazada(vc.GetString("REP_CLI_ORIG"), vc.GetString("REP_PRODID")) + +' Log($"${vc.GetString("REP_CLI_ORIG")}, ${vc.GetString("REP_CLIENTE")}, ${vc.GetString("REP_PRODID")}, ${vc.GetString("REP_PRONOMBRE")}, ${vc.GetString("REP_RECHAZO")}, ${vc.GetString("REP_CANT")}, ${vc.GetString("REP_PRECIO")}, ${cantCO}, ${cco.GetString("REP_CANT")}, ${vc.GetString("REP_CANT")}"$) + clv_pedido.Add(CreateListItem(vc.GetString("REP_PRONOMBRE"), Subs.traePrecio(vc.GetString("REP_PRODID"), 1), vc.GetString("REP_CANT"), cantCO, clv_pedido.AsView.Width, 50dip, bmp, vc.GetString("REP_PRODID"), bgColor, textColor, 1, vc.GetString("REP_CLI_ORIG")), vc.GetString("REP_PRONOMBRE")) + Next + cco.Close + vc.Close + End If + + If Existe <> 0 Then + c = Starter.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) and HVD_RECHAZO = 0 ") + C.Position=0 + L_CANT.Text = c.GetString("PC_NOART") + L_TOTAL.Text = Round2(c.GetString("PC_MONTO"), 2) + End If + c=Starter.skmt.ExecQuery("select count(*) as EXISTE from PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + c.Position=0 + Existe = C.GetString("EXISTE") + c.Close +' c=Starter.skmt.ExecQuery("select PE_PRONOMBRE,PE_COSTO_TOT, PE_CANT FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa) order by PE_PRONOMBRE asc") + 'ListView1.Clear + Subs.SetDivider(ListView1, Colors.LightGray, 2) +' Log("RC2:" & c.RowCount) +' 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 = 12 +' label1.TextColor = Colors.White +' Dim label2 As Label +' label2 = ListView1.TwoLinesLayout.SecondLabel +' label2.TextSize = 12 +' label2.TextColor = Colors.White +' Log("Agegamos prod a lista 2") +' ListView1.AddTwoLines("VENTA" & c.GetString("PE_PRONOMBRE"),"Cantidad #"& c.GetString("PE_CANT")& " SubTotal $"& c.GetString("PE_COSTO_TOT")) +' 'folio = c.GetString("PE_FOLIO") +' Next +' End If + If Existe <> 0 Then + c=Starter.skmt.ExecQuery("select SUM(PE_CANT) AS PE_CANT, SUM(PE_COSTO_TOT) AS PE_COSTO_TOT FROM PEDIDO WHERE PE_CLIENTE IN (Select CUENTA from cuentaa)") + C.Position=0 + L_CANT.Text = L_CANT.Text + c.GetString("PE_CANT") + L_TOTAL.Text = Round2(L_TOTAL.Text + c.GetString("PE_COSTO_TOT"), 2) + End If + 'la_no_ird.Text = c.GetString("PR_CF_SALDO_ACORT") +' cuentaProds("") + Private cym As Map = Subs.traemosCantYMonto(clv_pedido) + L_CANT.Text = cym.Get("cantidad") + L_TOTAL.Text = Round2(cym.Get("monto"), 2) +End Sub + +Sub GPS_LocationChanged (Location1 As Location) +' lat_gps=Location1.ConvertToSeconds(Location1.Latitude) +' lon_gps=Location1.ConvertToSeconds(Location1.Longitude) +End Sub + +Sub b_regresar_Click + B4XPages.ShowPage("Cliente") +End Sub + +Private Sub B4XPage_CloseRequest As ResumableSub + ' BACK key pressed + ' I want to capture the key here so I return True + B4XPages.ShowPage("Cliente") + ' Returning False signals the system to handle the key + Return False +End Sub + +Sub ListView1_ItemLongClick (Position As Int, Value As Object) 'BORRAR +' nombre_prod = Value +' result = Msgbox2("Seguro que desa borrar este articulo?","Borrar Articulo", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore +' If result = DialogResponse.POSITIVE Then +' c=Starter.skmt.ExecQuery2("select HVD_CANT FROM hist_ventas where HVD_pronombre = ? and HVD_cliente in (Select CUENTA from cuentaa) and HVD_RECHAZO = 0 ", Array As String(Value)) +' c.Position=0 +' If c.GetString("HVD_CANT") > 1 Then +' b_regresar.Visible =False +' b_borra.Visible=False +' P1.Visible =True +' cuantos_pedido = c.GetString("HVD_CANT") +' lv2.Clear +' lv2.SingleLineLayout.Label.TextColor = Colors.Black +' For i=1 To c.GetString("HVD_CANT") +' lv2.AddSingleLine(i) +' Next +' Else +' ' skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen + ? where cat_gp_nombre = ?", Array As Object(c.GetString("HVD_CANT"),Value)) +' c.Close +' Starter.skmt.ExecNonQuery2("insert into reparto(REP_CLIENTE, REP_PRONOMBRE, REP_CANT, REP_COSTO_TOT,REP_FECHA, REP_CLI_ORIG) select HVD_CLIENTE, HVD_PRONOMBRE, HVD_CANT, HVD_COSTO_TOT, HVD_FECHA, HVD_CLIENTE from hist_ventas where HVD_PRONOMBRE = ? and HVD_cliente in (Select CUENTA from cuentaa) ", Array As String(Value)) +' c=Starter.skmt.ExecQuery2("select HVD_CANT FROM hist_ventas where HVD_pronombre = ? and HVD_cliente in (Select CUENTA from cuentaa) and HVD_RECHAZO = 0 ", Array As String(Value)) +' c.Position=0 +' Starter.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen + ? where cat_gp_nombre = ?", Array As Object(c.GetString("HVD_CANT"),Value)) +' c.Close +' +' 'skmt.ExecNonQuery2("delete FROM HIST_VENTAS WHERE HVD_PRONOMBRE = ? and HVD_cliente in (Select CUENTA from cuentaa) ", Array As String(Value)) +' ' se cambia por update para no borrarlo y tener todos los registros. +' Starter.skmt.ExecNonQuery2("update HIST_VENTAS set HVD_RECHAZO = 1 WHERE HVD_PRONOMBRE = ? and HVD_cliente in (Select CUENTA from cuentaa) ", Array As String(Value)) +' +' DateTime.DateFormat = "MM/dd/yyyy" +' sDate=DateTime.Date(DateTime.Now) +' sTime=DateTime.Time(DateTime.Now) +' c=Starter.skmt.ExecQuery("Select CUENTA from cuentaa") +' c.Position=0 +' clie_id = c.GetString("CUENTA") +' c=Starter.skmt.ExecQuery("select USUARIO from usuarioa") +' c.Position=0 +' usuario = c.GetString("USUARIO") +' 'quitar esta mamada no es ahi +' Starter.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 3 where CAT_CL_CODIGO In (select cuenta from cuentaa)") +' B4XPage_Appear +' End If +' +' End If +End Sub + +Sub lv2_ItemClick (Position As Int, Value As Object) 'BORRAR +' ' If Value = "Todos" Then +' ' cuantos = c.GetString("HVD_CANT") +' 'Else +' cuantos = Value +' ' End If +' If cuantos = cuantos_pedido Then +' 'Starter.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen + ? where cat_gp_nombre = ?", Array As Object(c.GetString("HVD_CANT"),nombre_prod)) +' c.Close +' Starter.skmt.ExecNonQuery2("insert into reparto(REP_CLIENTE, REP_PRONOMBRE, REP_CANT, REP_COSTO_TOT, REP_FECHA, REP_CLI_ORIG) select HVD_CLIENTE, HVD_PRONOMBRE, HVD_CANT, HVD_COSTO_TOT, HVD_FECHA, HVD_CLIENTE from hist_ventas where HVD_PRONOMBRE = ? and HVD_cliente in (Select CUENTA from cuentaa) ", Array As String(nombre_prod)) +' c=Starter.skmt.ExecQuery2("select HVD_CANT FROM hist_ventas where HVD_pronombre = ? and HVD_cliente in (Select CUENTA from cuentaa) and HVD_RECHAZO = 0 ", Array As String(nombre_prod)) +' c.Position=0 +' Starter.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen + ? where cat_gp_nombre = ?", Array As Object(c.GetString("HVD_CANT"),nombre_prod)) +' c.Close +' 'Starter.skmt.ExecNonQuery2("delete FROM HIST_VENTAS WHERE HVD_PRONOMBRE = ? and HVD_cliente in (Select CUENTA from cuentaa) ", Array As String(Value)) +' ' se cambia por update para no borrarlo y tener todos los registros. +' Starter.skmt.ExecNonQuery2("update HIST_VENTAS set HVD_RECHAZO = 1 WHERE HVD_PRONOMBRE = ? and HVD_cliente in (Select CUENTA from cuentaa) and HVD_RECHAZO = 0 ", Array As String(Value)) +' DateTime.DateFormat = "MM/dd/yyyy" +' sDate=DateTime.Date(DateTime.Now) +' sTime=DateTime.Time(DateTime.Now) +' c=Starter.skmt.ExecQuery("Select CUENTA from cuentaa") +' c.Position=0 +' clie_id = c.GetString("CUENTA") +' c=Starter.skmt.ExecQuery("select USUARIO from usuarioa") +' c.Position=0 +' usuario = c.GetString("USUARIO") +' 'quitar esta m*m*d* no es ahi +' Starter.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 3 where CAT_CL_CODIGO In (select cuenta from cuentaa)") +' Starter.skmt.ExecNonQuery2("update hist_Ventas set HVD_RECHAZO = 1, HVD_PARCIAL = 0, HVD_CANT = HVD_CANT - ? where HVD_pronombre = ? and HVD_cliente in (Select CUENTA from cuentaa) and HVD_RECHAZO = 0 ", Array As Object(cuantos, nombre_prod)) +' b_regresar.Visible =True +' b_borra.Visible=True +' P1.Visible =False +' B4XPage_Appear +' Else +' ' skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen + ? where cat_gp_nombre = ?", Array As Object(cuantos,nombre_prod)) +' c.Close +' +' 'modificar tambien esto +' 'Modificaciones para que solo quite una parte. +' Starter.skmt.ExecNonQuery2("insert into reparto(REP_CLIENTE, REP_PRONOMBRE, REP_CANT, REP_COSTO_TOT, REP_FECHA, REP_CLI_ORIG) select HVD_CLIENTE, HVD_PRONOMBRE, ?, ? * (HVD_COSTO_TOT/?), HVD_FECHA, HVD_CLIENTE from hist_ventas where HVD_PRONOMBRE = ? and HVD_cliente in (Select CUENTA from cuentaa) ", Array As Object(cuantos,cuantos,cuantos_pedido, nombre_prod)) +' Starter.skmt.ExecNonQuery2("insert into hist_ventas(HVD_CLIENTE,HVD_PRONOMBRE,HVD_CANT,HVD_COSTO_TOT, HVD_FECHA, HVD_CODPROMO, HVD_PROID,HVD_NUM_TICKET, HVD_NUM_REGISTRO, HVD_RECHAZO, HVD_ESTATUS, HVD_PARCIAL) select HVD_CLIENTE,HVD_PRONOMBRE,?,HVD_COSTO_TOT, HVD_FECHA, HVD_CODPROMO, HVD_PROID,HVD_NUM_TICKET, HVD_NUM_REGISTRO, 1, HVD_ESTATUS, 1 from hist_ventas where HVD_PRONOMBRE = ? and HVD_cliente in (Select CUENTA from cuentaa) ", Array As Object(cuantos, nombre_prod)) +' Starter.skmt.ExecNonQuery2("update hist_Ventas set HVD_RECHAZO = 0, HVD_PARCIAL = 1, HVD_CANT = HVD_CANT - ? where HVD_pronombre = ? and HVD_cliente in (Select CUENTA from cuentaa) and HVD_RECHAZO = 0 ", Array As Object(cuantos, nombre_prod)) +' Starter.skmt.ExecNonQuery2("update hist_Ventas set HVD_COSTO_TOT = HVD_CANT * (HVD_COSTO_TOT/?) where HVD_pronombre = ? and HVD_cliente in (Select CUENTA from cuentaa) and HVD_RECHAZO = 0 ", Array As Object(cuantos_pedido, nombre_prod)) +' Starter.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen + ? where cat_gp_nombre = ?", Array As Object(cuantos,nombre_prod)) +' 'crear nueva tabla para que guarde el resto. +'' skmt.ExecNonQuery2("delete FROM HIST_VENTAS WHERE HVD_PRONOMBRE = ? and HVD_cliente in (Select CUENTA from cuentaa) ", Array As String(Value)) +' DateTime.DateFormat = "MM/dd/yyyy" +' sDate=DateTime.Date(DateTime.Now) +' sTime=DateTime.Time(DateTime.Now) +' c=Starter.skmt.ExecQuery("Select CUENTA from cuentaa") +' c.Position=0 +' clie_id = c.GetString("CUENTA") +' c=Starter.skmt.ExecQuery("select USUARIO from usuarioa") +' c.Position=0 +' usuario = c.GetString("USUARIO") +' Starter.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 3 where CAT_CL_CODIGO In (select cuenta from cuentaa)") +' B4XPage_Appear +' b_regresar.Visible =True +' b_borra.Visible=True +' P1.Visible =False +' End If +End Sub + +'**************************************************************************** +'***************** PARA EL MAS/MENOS ************************************* +'**************************************************************************** + +Sub CreateListItem(Text As String, precioU As String, inv As Int, inv2 As Int, Width As Int, Height As Int, img As Bitmap, prodId As String, bc As Int, tc As Int, promo As String, cliente_original As String) As Panel + Dim p As B4XView = xui.CreatePanel("") + Private cs As CSBuilder + cs.Initialize + p.SetLayoutAnimated(0, 0, 0, Width, Height) + p.LoadLayout("prodItem") + p_prods.Color = bc + l_prodX.TextColor = tc + precioU = $"$1.2{precioU}"$ + l_prodX.Text = Text&CRLF&"Cant: " & inv2 & " $" & precioU + If promo <> "1" And precioU = 0 Then + l_prodX.Text = cs.Color(Colors.RGB(123,0,0)).append(Text&CRLF&"Cant: " & inv2 & " $" & precioU).PopAll + End If + l_prodX.Tag = $"ID: ${prodId}${CRLF}${Text}${CRLF}Precio: $$1.2{precioU}${CRLF}Inv: ${inv} pzs"$ +' l_pCant.Text = 0 + l_pCant.Tag = Round2(precioU,2)&"|"&inv&"|"&prodId&"|"&promo&"|"&inv2&"|"&cliente_original + et_pCant.Tag = Round2(precioU,2)&"|"&inv&"|"&prodId&"|"&promo&"|"&inv2&"|"&cliente_original + p_prods.Tag = l_pCant.tag +' Log($"Ponemos la cant en ${inv}"$) + l_pCant.Text = inv +' et_pCant.Text = inv +' et_pCant.BringToFront + + l_pCant.BringToFront + et_pCant.SendToBack + +' i_prod.Bitmap = img + Return p +End Sub + +Sub b_prodMenos_Click + etCantHasFocus = False + Log("etCantHasFocus=" & etCantHasFocus) + LogColor("b_prodMenos_Click", Colors.Magenta) + Dim index As Int = clv_pedido.GetItemFromView(Sender) + Dim pnl0 As B4XView = clv_pedido.GetPanel(index) + Dim pnl As B4XView = pnl0.GetView(0) + Dim laCant As B4XView = pnl.GetView(2).GetView(3) +' Log(pnl.GetView(2).GetView(0) & "|" & pnl.GetView(2).GetView(1) & "|" & pnl.GetView(2).GetView(2)) + Dim esteTag As List = Regex.Split("\|", laCant.Tag) + Log("LC_TEXT:"&laCant.Text&"|PROMO:"&esteTag.Get(3)&"|LC_TAG:"&laCant.Tag&"|ET:"&esteTag) + If esteTag.Get(3) <> "1" Then 'Si es PROMO entonces ... + Log("ES PROMO") + result = Msgbox2("Si se modifica una promoción, la promoción se rompe y solo quedarán los productos sueltos, ¿seguro que desea continuar?","Modificar Promoción", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore + If result = DialogResponse.POSITIVE Then 'Quitamos esta promo + prodsMap.Remove(esteTag.Get(3)) + Starter.skmt.ExecNonQuery($"update HIST_VENTAS set HVD_RECHAZO = 1 WHERE HVD_PROID = '${esteTag.Get(3)}' and HVD_cliente in (Select CUENTA from cuentaa)"$) + Starter.skmt.ExecNonQuery($"update HIST_VENTAS set HVD_CODPROMO = 1 WHERE HVD_cliente in (Select CUENTA from cuentaa)"$) + LogColor(prodsMap, Colors.red) + reconstruirPedido = True + promoABorrar = esteTag.Get(3) + B4XPage_Appear + End If + Else + If laCant.Text = "" Then laCant.Text = 0 + laCant.Text = $"$1.0{laCant.Text-1}"$ + If laCant.Text < 0 Then laCant.Text = 0 + Starter.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen + 1 where cat_gp_id = ?", Array As Object(esteTag.Get(2))) + End If + Dim preciou As Float = esteTag.Get(0)/esteTag.Get(1) + Log("PU: " & preciou) +' LogColor("estamos aqui mmenos " & laCant.Text& " , " & (preciou * laCant.Text),Colors.Green ) +' If L_CANT.Text - 1 >= 0 Then +' L_CANT.Text = L_CANT.Text - 1 +' End If +' b_guardar.Visible = True + Subs.prodRechazo(esteTag.Get(5), esteTag.Get(2)) + Private cym As Map = Subs.traemosCantYMonto(clv_pedido) + L_CANT.Text = cym.Get("cantidad") + L_TOTAL.Text = Round2(cym.Get("monto"), 2) +' cuentaProds("-") +End Sub + +Sub b_prodMas_Click + etCantHasFocus = False +' Log("etCantHasFocus=" & etCantHasFocus) + LogColor("b_prodMas_Click", Colors.Magenta) + Dim index As Int = clv_pedido.GetItemFromView(Sender) + Dim pnl0 As B4XView = clv_pedido.GetPanel(index) + Dim pnl As B4XView = pnl0.GetView(0) + Dim laCant As B4XView = pnl.GetView(2).GetView(3) +' Log(pnl.GetView(2).GetView(1).text&"|"&pnl.GetView(2).GetView(2)&"|"&pnl.GetView(2).GetView(4).text) +' Log($"precio|stock:${laCant.tag}"$) +' Log($"Indice: ${index}, cant:${laCant.Text+1}, precioU: ${laCant.tag}"$) + Dim esteTag As List = Regex.Split("\|", laCant.Tag) + Log("LC_TEXT:"&laCant.Text&"|LC_TAG:"&laCant.Tag&"|ET:"&esteTag) + If laCant.Text = "" Then laCant.Text = 0 + + Private maxProds as string = esteTag.Get(1) + esteTag.Get(4) 'Prods disponibles + prods comprados + + LogColor($"++++++++++++++++++++++++++ ${esteTag}"$, Colors.Green) +' Log(esteTag.get(4)) + If laCant.Text + 1 <= maxProds Then + Log($"NuevaCant = ${laCant.Text + 1}"$) + laCant.Text = $"$1.0{laCant.Text + 1}"$ + Starter.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen - 1 where cat_gp_id = ?", Array As Object(esteTag.Get(2))) + Subs.prodVenta(esteTag.Get(5), esteTag.Get(2)) + Private cym As Map = Subs.traemosCantYMonto(clv_pedido) + L_CANT.Text = cym.Get("cantidad") + L_TOTAL.Text = Round2(cym.Get("monto"), 2) +' cuentaProds("+") + End If +' Dim preciou As Float = esteTag.Get(0)/esteTag.Get(1) +' Log(preciou) +' LogColor("estamos aquii mas " & laCant.Text& " , " & (preciou * laCant.Text) ,Colors.Green ) +' b_guardar.Visible = True +' Log($"Total Prods: ${totalProds}, Total Compra: $$1.2{totalCompra}"$) +' c = Starter.skmt.ExecQuery($"SELECT HVD_CANT FROM HIST_VENTAS2 WHERE HVD_CLIENTE IN (SELECT CUENTA FROM CUENTAA) AND HVD_PROID = '${esteTag.Get(2)}' "$) +' c.Position = 0 +' Dim cantoriginal As String = 0 +' If c.RowCount > 0 Then +' cantoriginal = c.GetString("HVD_CANT") +' End If +' If cantoriginal <= esteTag.Get(1) Then +' L_CANT.Text = L_CANT.Text + 1 +' End If +End Sub + +Sub cuentaProds(accion As String) +' Log("Entramos a cuentaProds") +Log("*******************************************************") + Private cantRechazada As Int = 0 + If Not(reconstruirPedido) Then + Log("*********** CUENTAPRODS - NO RECONSTRUIR") + prodsMap.Initialize + For i = 0 To clv_pedido.GetSize - 1 + Private p0 As B4XView = clv_pedido.GetPanel(i) + Private p As B4XView = p0.GetView(0) + Private cant1 As B4XView = p.GetView(2).GetView(3) + If cant1.Text = "" Then cant1.Text = 0 +' totalProds = totalProds + cant1.Text + Private esteTag As List = Regex.Split("\|", cant1.Tag) + Log("-------------------------------------") + Log($"ET: ${esteTag}"$) + Private esteProd As String = esteTag.Get(2) + Private estaCant As Int = cant1.Text + Private estaCantOriginal As Int = esteTag.Get(1) + Private esteCliente = Subs.traeCliente + Private esteProdNombre = Subs.traeNombre(esteProd) + Private esteClienteOriginal As Int = esteTag.Get(5) + Private fechaReparto As String = Subs.traeFechaReparto + Private maxProds = Subs.traeMaxCantidad(esteTag.Get(5), esteTag.Get(2)) + + If cant1.Text > maxProds Then cant1.Text = maxProds + + cantRechazada = esteTag.Get(4) - cant1.Text +' If accion = "-" Then cantRechazada = Subs.traeCantidadRechazada(esteClienteOriginal, esteProd) + 1 +' If accion = "+" Then cantRechazada = Subs.traeCantidadRechazada(esteClienteOriginal, esteProd) - 1 + Log($"${Subs.traeCantidadRechazada(esteClienteOriginal, esteProd)}, ${Subs.traeCantidadVendida(esteClienteOriginal, esteProd)}"$) + +' LogColor($"cantRechazada = ${esteTag.Get(4)} - ${cant1.Text}"$, Colors.Magenta) + LogColor($"cantRechazada = ${cantRechazada}"$, Colors.Magenta) + Private estePrecio As String = 0 + If Subs.traePrecio(esteProd, 1) <> Null Then estePrecio = Subs.traePrecio(esteProd, 1) * cantRechazada + +' LogColor(esteProd & "|" & cant1.Text & "|" & estaCantOriginal & "|" & cantRechazada & "|" & estePrecio, Colors.red) +' LogColor($"cantRechazada=${cantRechazada} | ${esteProdNombre}"$, Colors.Blue) +' Log($"Ponemos HVD_CANT ${esteProd} en ${cant1.text}"$) + Starter.skmt.ExecNonQuery2("update HIST_VENTAS set HVD_PARCIAL = 1, HVD_CANT = ? WHERE HVD_PROID = ? and HVD_CLIENTE in (Select CUENTA from cuentaa)", Array As String(cant1.Text ,esteProd)) + Private rr As Cursor = Starter.skmt.ExecQuery($"select count(REP_CLIENTE) as hayRechazo from REPARTO where rep_prodid = '${esteProd}' and REP_CLIENTE in (Select CUENTA from cuentaa)"$) + rr.Position = 0 +' Log($"HayRechazo=${rr.GetString("hayRechazo")}"$) + If rr.GetString("hayRechazo") = 0 Then + Log("INSERTAMOS EN REPARTO") + Starter.skmt.ExecNonQuery2("insert into reparto(REP_CLIENTE, REP_PRONOMBRE, REP_CANT, REP_COSTO_TOT, REP_FECHA, REP_RECHAZO, REP_PRODID, REP_PRECIO, REP_CLI_ORIG) VALUES (?,?,?,?,?,1,?,?,?) ", Array As String(esteCliente, esteProdNombre, 0, estePrecio, fechaReparto, esteProd, estePrecio, esteCliente)) + Starter.skmt.ExecNonQuery2("insert into reparto(REP_CLIENTE, REP_PRONOMBRE, REP_CANT, REP_COSTO_TOT, REP_FECHA, REP_RECHAZO, REP_PRODID, REP_PRECIO, REP_CLI_ORIG) VALUES (?,?,?,?,?,0,?,?,?) ", Array As String(esteCliente, esteProdNombre, cantRechazada, 0, fechaReparto, esteProd, estePrecio, esteCliente)) + Else if esteClienteOriginal = "0" Then 'Actualizamos el rechazo en el cliente actual. +' Log($"Actualizamos REP_CANT=${cantRechazada}"$) +' Starter.skmt.ExecNonQuery($"update reparto set REP_CANT = '${cantRechazada}', REP_PRECIO = '${estePrecio}', REP_COSTO_TOT = '${estePrecio * cantRechazada}' where REP_CLIENTE in (Select CUENTA from cuentaa) and REP_CLI_ORIG = '${esteClienteOriginal}' and REP_RECHAZO = 1 and REP_PRODID = '${esteProd}'"$) + Else 'Cliente original <> 0 entonces actualizamos el rechazo en el cliente original y NO en el actual. + Log($"Actualizamos REP_CANT RECHAZO = ${cantRechazada}"$) +' Starter.skmt.ExecNonQuery($"update reparto set REP_CANT = ${cantRechazada}, REP_PRECIO = '${estePrecio}', REP_COSTO_TOT = '${estePrecio * cantRechazada}' where REP_CLIENTE = '${esteClienteOriginal}' and REP_CLI_ORIG = '${esteClienteOriginal}' and REP_RECHAZO = 1 and REP_PRODID = '${esteProd}'"$) +' Starter.skmt.ExecNonQuery($"update reparto set REP_CANT = '${cant1.Text}', REP_PRECIO = '${estePrecio}', REP_COSTO_TOT = '${estePrecio * cantRechazada}' where REP_CLIENTE in (Select CUENTA from cuentaa) and REP_CLI_ORIG = '${esteClienteOriginal}' and REP_RECHAZO = 0 and REP_PRODID = '${esteProd}'"$) + End If + + If cant1.Text > 0 Then +' totalCompra = totalCompra + (esteTag.get(0) * cant1.text) +' Log($"Cant: ${cant1.Text}, Suma: ${totalCompra}"$) + Private m As Map + m=CreateMap("cant":cant1.Text, "cant2":esteTag.get(4), "precio":esteTag.get(0), "promo":esteTag.get(3), "nombre":Subs.traeNombre(esteTag.Get(2)), "cli_orig":esteTag.get(5)) +' LogColor("PUT:" & esteTag.Get(2), Colors.Red) + prodsMap.Put(esteTag.Get(2), m) + End If + Log("-------------------------------------") + Next + End If + Private bgColor, textColor As Int + + If reconstruirPedido Then + Log("*********** CUENTAPRODS - SI RECONSTRUIR") + Private newPromo, newPrecio As String + clv_pedido.Clear + Log("Usamos PRODSMAP") + For Each pr As String In prodsMap.Keys + Private pr1 As Map = prodsMap.Get(pr) + Log("PPP: " & pr & "|PromoABorrar=" & promoABorrar & "|" & pr1) + bgColor = Colors.RGB(177, 200, 249)'azul + textColor = Colors.black + newPromo = pr1.Get("promo") + newPrecio = pr1.Get("precio") + Log("AAA: " & newPromo & "|" & promoABorrar) + If newPromo = promoABorrar Then + newPromo = 1 + newPrecio = Subs.traePrecio(pr, False) * pr1.Get("cant") + 'Ponemos precio SIN promo y sacamos el producto de la promo. + Starter.skmt.ExecNonQuery($"update HIST_VENTAS set HVD_COSTO_TOT = ${newPrecio}, HVD_CODPROMO = 1 WHERE HVD_PRONOMBRE = '${pr1.Get("nombre")}' and HVD_cliente in (Select CUENTA from cuentaa)"$) + LogColor("CAMBIAMOS PROMO: " & newPromo, Colors.Magenta) + End If + If newPromo <> "1" Then +' bgColor = Colors.RGB(255, 212, 163) 'naranja + bgColor = Colors.White + End If + Log($"CLI: ${pr1.Get("nombre")}, ${newPrecio}, ${pr1.Get("cant")}, ${pr1.Get("cant2")}"$) + clv_pedido.Add(CreateListItem(pr1.Get("nombre"), newPrecio, pr1.Get("cant"), pr1.Get("cant2"), clv_pedido.AsView.Width, 50dip, bmp, pr, bgColor, textColor, newPromo, pr1.Get("cli_orig")), pr1.Get("nombre")) + reconstruirPedido = False + Next + promoABorrar = "" + End If + Log($"Total Prods: ${totalProds}, Total Compra: $$1.2{totalCompra}"$) + LogColor("prodsMap=" & prodsMap, Colors.Green) + + + LogColor(prodsMap, Colors.Blue) + c = Starter.skmt.ExecQuery($"SELECT sum(HVD_CANT) as CANTIDAD FROM HIST_VENTAS WHERE HVD_CLIENTE IN (SELECT CUENTA FROM CUENTAA)"$) + Dim cantidad1 As String = 0 + If c.RowCount > 0 Then + c.Position = 0 + cantidad1 = c.GetString("CANTIDAD") + L_CANT.Text = Round(cantidad1) + End If + c.Close + + Dim totalfinal As String = 0 + For Each pr As String In prodsMap.Keys + Private pr1 As Map = prodsMap.Get(pr) +' LogColor(pr,Colors.Red) + Dim x As Cursor = Starter.skmt.ExecQuery($"SELECT CAT_GP_PRECIO FROM CAT_GUNAPROD WHERE CAT_GP_ID = '${pr}'"$) + c = Starter.skmt.ExecQuery($"SELECT HVD_CANT FROM HIST_VENTAS WHERE HVD_CLIENTE IN (SELECT CUENTA FROM CUENTAA) AND HVD_PROID ='${pr}' "$) + Dim cantidady As String = 0 + If c.RowCount >0 Then + c.Position = 0 + cantidady = c.GetString("HVD_CANT") + End If +' Log(x.RowCount) + If x.RowCount > 0 Then + x.Position = 0 +' Log(x.GetString("CAT_GP_PRECIO")) + Dim preciou As String = x.GetString("CAT_GP_PRECIO") + Dim costototalhist As String = preciou * cantidady +' Log("Total ==== "&costototalhist) + End If + totalfinal = totalfinal + costototalhist + x.Close + Next + L_TOTAL.Text = Round2(totalfinal, 2) + c.Close + + c = Starter.skmt.ExecQuery("select COUNT(*) AS CUANTOS from REPARTO where REP_CLIENTE in (select cuenta from cuentaa) and REP_RECHAZO = '0' and REP_CANT > 0 order by REP_PRONOMBRE") + If c.RowCount > 0 Then + c.Position = 0 + If c.GetString("CUANTOS") > 0 Then + + Dim z As Cursor = Starter.skmt.ExecQuery($"select SUM(REP_CANT) AS CANTIDAD , SUM(REP_PRECIO) AS PRECIO from REPARTO where REP_CLIENTE in (select cuenta from cuentaa) and REP_RECHAZO = '0' and REP_CANT > 0 order by REP_PRONOMBRE"$) + Dim cantidad2 As String = 0 +' Log(z.RowCount) + If z.RowCount > 0 Then + z.Position = 0 + cantidad2= z.GetString("CANTIDAD") +' LogColor(z.GetString("PRECIO")&" , " & z.GetString("CANTIDAD"), Colors.Magenta) +' Log(cantidad1 &" , "& cantidad2) + L_CANT.Text = Round((cantidad1 + cantidad2)) + End If + z.Close + + + End If + End If + + + +End Sub + +Private Sub b_guardar_Click + +End Sub + + +Private Sub l_pCant_Click + +End Sub + +Sub p_prods_Click + Log(Sender.As(Panel).tag) +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..8371da5 --- /dev/null +++ b/B4A/C_Mapas.bas @@ -0,0 +1,24 @@ +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 +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..67acbc8 --- /dev/null +++ b/B4A/C_NoVenta.bas @@ -0,0 +1,177 @@ +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 g As GPS + Dim c As Cursor + Dim COMENTARIO As String + 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 r_4 As RadioButton + Private p_principal As Panel + Dim d As Cursor + Dim reqManager As DBRequestManager +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("no_venta") + reqManager.Initialize(Me, B4XPages.MainPage.SERVER) +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Sub B4XPage_Appear + reqManager.Initialize(Me, B4XPages.MainPage.SERVER) + 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 PIDIO" + Else If r_3.Checked Then + motivo = "CANCELA" + Else + motivo = "NO ESTA EL ENCARGADO" + End If + If motivo <> "CERRADO" Or motivo = "CERRADO" Then + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=Starter.skmt.ExecQuery("select CUENTA from cuentaa") + c.Position = 0 + cuenta = c.GetString("CUENTA") + c=Starter.skmt.ExecQuery("select usuario from usuarioa") + c.Position = 0 + usuario = c.GetString("USUARIO") + c.Close + Starter.skmt.ExecNonQuery("DELETE FROM NOVENTA WHERE NV_CLIENTE IN (select cuenta from cuentaa)") + 'Traemos los productos del pedido. + c=Starter.skmt.ExecQuery("select HVD_NUM_REGISTRO, HVD_CLIENTE, HVD_PRONOMBRE, HVD_CANT, HVD_COSTO_TOT, HVD_FECHA, HVD_PROID, CAT_GP_PRECIO from HIST_VENTAS2 join CAT_GUNAPROD on CAT_GP_ID = HVD_PROID WHERE HVD_CLIENTE IN (Select CUENTA from cuentaa) order by HVD_PRONOMBRE asc") + If c.RowCount > 0 Then 'Si hay pedido en HIST_VENTAS ... + + 'Revisamos si se le ha agregado venta al pedido. + Private esteCliente As String = Subs.traeCliente + Private rv As Cursor = Starter.skmt.ExecQuery($"select * from REPARTO where REP_CLIENTE = '${esteCliente}' and REP_CLI_ORIG <> '${esteCliente}' and REP_RECHAZO = 0"$) + If rv.RowCount > 0 Then 'Si tenemos venta en el pedido ... + For i2=0 To rv.RowCount - 1 + rv.Position = i2 + Log($"Actualizamos REPARTO - cliente=${rv.GetString("REP_CLIENTE")}, cliente orignal=${rv.GetString("REP_CLI_ORIG")}, le agregamos ${rv.GetString("REP_CANT")}"$) + Starter.skmt.ExecNonQuery($"update REPARTO set REP_CANT = REP_CANT + ${rv.GetString("REP_CANT")} where REP_RECHAZO = '1' and REP_CLIENTE = '${rv.GetString("REP_CLI_ORIG")}' and REP_CLI_ORIG = '${rv.GetString("REP_CLI_ORIG")}'"$) + Next + End If + + Starter.skmt.ExecNonQuery("delete from reparto where REP_CLIENTE IN (Select CUENTA from cuentaa)") + For i=0 To c.RowCount - 1 'Insertamos los productos en REPARTO. + c.Position=i + Log($"REGISTRO= ${c.GetString("HVD_NUM_REGISTRO")}"$) + Starter.skmt.ExecNonQuery2("insert into reparto(REP_CLIENTE, REP_PRONOMBRE, REP_CANT, REP_COSTO_TOT, REP_FECHA, REP_RECHAZO, REP_PRODID, REP_PRECIO, REP_PRODREGISTRO, REP_CLI_ORIG) VALUES (?,?,?,?,?,1,?,?,?,?) ", Array As String(c.GetString("HVD_CLIENTE"),c.GetString("HVD_PRONOMBRE"),c.GetString("HVD_CANT"),c.GetString("HVD_COSTO_TOT"),c.GetString("HVD_FECHA"), c.GetString("HVD_PROID"), c.GetString("CAT_GP_PRECIO"), c.GetString("HVD_NUM_REGISTRO"), c.GetString("HVD_CLIENTE"))) + Starter.skmt.ExecNonQuery2("insert into reparto(REP_CLIENTE, REP_PRONOMBRE, REP_CANT, REP_COSTO_TOT, REP_FECHA, REP_RECHAZO, REP_PRODID, REP_PRECIO, REP_PRODREGISTRO, REP_CLI_ORIG) VALUES (?,?,?,?,?,0,?,?,?,?) ", Array As String(c.GetString("HVD_CLIENTE"),c.GetString("HVD_PRONOMBRE"),0,c.GetString("HVD_COSTO_TOT"),c.GetString("HVD_FECHA"), c.GetString("HVD_PROID"), c.GetString("CAT_GP_PRECIO"), c.GetString("HVD_NUM_REGISTRO"), c.GetString("HVD_CLIENTE"))) + Starter.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen + ? where cat_gp_nombre = ?", Array As Object(c.GetString("HVD_CANT"),c.GetString("HVD_PRONOMBRE"))) + Next + End If + + Starter.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)) + Starter.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 3 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + Starter.skmt.ExecNonQuery("update HIST_VENTAS SET HVD_RECHAZO = 1 WHERE HVD_CLIENTE IN (SELECT CUENTA FROM CUENTAA)") + + d = Starter.skmt.ExecQuery("SELECT RUTAA FROM RUTAA") + d.Position = 0 + Dim ruta As String = d.GetString("RUTAA") + d.Close + d = Starter.skmt.ExecQuery("SELECT CAT_CL_RUTA FROM kmt_info WHERE CAT_CL_CODIGO IN (SELECT CUENTA FROM CUENTAA)") + d.Position = 0 + Dim rutapre As String = d.GetString("CAT_CL_RUTA") + d.Close + d = Starter.skmt.ExecQuery("SELECT HVD_FECHA FROM HIST_VENTAS WHERE HVD_CLIENTE IN (SELECT CUENTA FROM CUENTAA)") + d.Position = 0 + Dim fechaprev As String = d.GetString("HVD_FECHA") + d.Close + d = Starter.skmt.ExecQuery("SELECT CUENTA FROM CUENTAA") + d.Position = 0 + Starter.skmt.ExecNonQuery2("INSERT INTO REPARTO_GEO (CLIENTE, USUARIO, FECHA_PUNTEO, LATITUD, LONGITUD, ALMACEN, RUTA_REPARTO, RUTA_PREV, FECHA_PREVENTA, MOTIVO, COMENTARIO,TIPO,ENVIO) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,0)",Array As String (cuenta, usuario, sDate &" "&sTime, B4XPages.MainPage.lat_gps, B4XPages.MainPage.lon_gps,B4XPages.MainPage.almacen,ruta,rutapre,fechaprev, motivo, e_comm.Text,"NO ENTREGADO")) + mandaPendientesreparto + B4XPages.ShowPage("Principal") + Else + COMENTARIO = e_comm.Text +' B4XPages.ShowPage("Foto") +' StartActivity(foto) + End If +End Sub + + +Sub mandaPendientesreparto + c=Starter.skmt.ExecQuery("SELECT CLIENTE, USUARIO, FECHA_PUNTEO, LATITUD, LONGITUD, ALMACEN, RUTA_REPARTO, RUTA_PREV, FECHA_PREVENTA, MOTIVO, COMENTARIO,TIPO FROM REPARTO_GEO where ENVIO <> 1") + Log($"REPARTO_Cliente 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_REPARTO_GUNA2" + cmd.Parameters = Array As Object(c.GetString("CLIENTE"), c.GetString("USUARIO"), c.GetString("FECHA_PUNTEO"), c.GetString("LATITUD"), c.GetString("LONGITUD"), c.GetString("ALMACEN"), c.GetString("RUTA_REPARTO"), c.GetString("RUTA_PREV"), c.GetString("FECHA_PREVENTA"), c.GetString("MOTIVO"), c.GetString("COMENTARIO"),c.GetString("TIPO")) + reqManager.ExecuteCommand(cmd , $"ins_REPARTOPendientes_head_${c.GetString("CLIENTE")}"$) + + Next + End If + c.Close +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_REPARTOPendientes_head_") > -1 Then + Private cliente As String= resultado.Tag + cliente = cliente.SubString(cliente.IndexOf("_")+24) + Log($"Cliente1:${cliente}"$) + Starter.skmt.ExecNonQuery2("update REPARTO_GEO SET ENVIO = ? WHERE CLIENTE = ? AND ENVIO <> ?",Array As String ("1", cliente,"1")) + 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_NuevoCliente.bas b/B4A/C_NuevoCliente.bas new file mode 100644 index 0000000..8371da5 --- /dev/null +++ b/B4A/C_NuevoCliente.bas @@ -0,0 +1,24 @@ +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 +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_Pedidos.bas b/B4A/C_Pedidos.bas new file mode 100644 index 0000000..8371da5 --- /dev/null +++ b/B4A/C_Pedidos.bas @@ -0,0 +1,24 @@ +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 +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_Principal.bas b/B4A/C_Principal.bas new file mode 100644 index 0000000..efb120e --- /dev/null +++ b/B4A/C_Principal.bas @@ -0,0 +1,1334 @@ +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 reqManager As DBRequestManager + Dim conectado As String + Dim t1 As Timer + Dim sb As StringBuilder + Dim PHONE As Phone + Dim trabajar As Button + Dim c As Cursor + Dim d As Cursor + Dim b As Cursor + Dim e As Cursor + Dim f As Cursor + Dim f1 As Cursor + Dim f2 As Cursor + Dim f3 As Cursor + Dim F4 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 As Cursor + Dim l_aLiquidar As Label + Dim l_cuantosc As Label + Dim l_montoSalida 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 + + Private inv As Button +' Private cambios As Label + Private L_MONTOE As Label + Private B_CLIEPROD As Button + Private ListView1 As ListView + Private B_REGRESA As Button + Private Panel1 As Panel + Dim ESTATUS As String + Dim batterystatus(11) As Int + Private bu As BatteryUtilities + Dim RUTA_T As String + Dim reqs As List + '''''' MAPA RUTAS + Private Btn_Ubicar_Ru As Button + Dim cargo As String + Private p_principal As Panel + Dim ime As IME + Private b_tabulador As Button + + Private l_rutasP As Label + Private l_rechazo As Label + Private Label9 As Label + Dim cp 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("principal") + EJECUTANDO=1 + reqManager.Initialize(Me, B4XPages.MainPage.server) +' LogColor($"ReqServer = ${B4XPages.MainPage.server}"$, Colors.red) +' Dim ruta As String + img2.Visible =False + + DateTime.DateFormat = "MM/dd/yyyy" + fecha=DateTime.Date(DateTime.Now) +' skmt.Initialize(Starter.ruta,"kmt.db", True) + b=Starter.skmt.ExecQuery("Select count(*) as CUANTOS from pedido_cliente") + b.Position=0 + Cuantos = b.GetString("CUANTOS") + d=Starter.skmt.ExecQuery("select count(*) as TOTAL_VISITAR from kmt_info where gestion = 0") + D.Position=0 + b.Close + e=Starter.skmt.ExecQuery("select count(*) as POR_VISITAR from kmt_info") + e.Position=0 + If Cuantos = 0 Then + l_aLiquidar.Text = 0 + l_cuantosc.Text = 0 + l_cuantosn.Text = 0 + drop = 0 + l_montoSalida.Text = 0 + efectiva = 0 +' l_efectiva.text = 0 + l_ctast.Text = d.GetString("TOTAL_VISITAR") + l_porvisitar.Text = e.GetString("POR_VISITAR") + Else +' c=Starter.skmt.ExecQuery("select sum(pc_monto) as MONTO_DIA, count(pc_cliente) AS CLIENTES_DIA from pedido_cliente") +' b=Starter.skmt.ExecQuery("select count(*) as CUANTOS from noventa") +' 'where pc_fecha = ?", Array As String(fecha) +' C.Position=0 +' b.Position=0 +' l_aLiquidar.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_montoSalida.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 + b=Starter.skmt.ExecQuery("select id_almacen from CAT_ALMACEN") + If b.RowCount > 0 Then +' Log("Traemos almacen ..." & B4XPages.MainPage.server) + b.Position = 0 +' Log(b.GetString("ID_ALMACEN")) + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "select_coords_almacen_GUNA2" + cmd.Parameters = Array As Object(b.GetString("ID_ALMACEN")) + reqManager.ExecuteQuery(cmd , 0, "coords_almacen") + End If + B4XPages.MainPage.usuario=Subs.dameUsuarioDeDB +End Sub + +Sub B4XPage_Appear + Subs.centraPanel(p_principal, Root.Width) +' c=Starter.skmt.ExecQuery("select noversion from version") +' c.Position=0 +' If c.RowCount > 0 And c.GetString("NOVERSION") <> "2.1" Then +' ToastMessageShow("EXISTE UNA NUEVA VERSION, ACTUALIZA POR FAVOR." , True) +' cargar.Visible = False +' Subir.Visible = False +' connecta.Visible = False +' trabajar.Visible = False +' BUSCA.Visible = False +' inv.Visible = False +' 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 + l_ruta.Text = 0 + f=Starter.skmt.ExecQuery("select rutaa from rutaa") + If f.RowCount > 0 Then + f.Position = 0 + l_ruta.Text = f.GetString("RUTAA") + End If + f.Close + If l_ruta.Text = 0 Then + l_ruta.Text = 0 + l_rutasP.Text = 0 + Else + f=Starter.skmt.ExecQuery("select distinct CAT_CL_RUTA from kmt_info order by CAT_CL_RUTA") +' f.Position=0 + l_rutasP.Text = "" + For i = 0 To f.RowCount - 1 + f.Position = i + If i = 0 Then + l_rutasP.Text = f.GetString("CAT_CL_RUTA") + Else + l_rutasP.Text = l_rutasP.Text & ", " & f.GetString("CAT_CL_RUTA") + End If + Next + f.Close + End If + DateTime.DateFormat = "MM/dd/yyyy" + fecha=DateTime.Date(DateTime.Now) + b=Starter.skmt.ExecQuery("Select count(*) as CUANTOS from kmt_info") + b.Position=0 + If b.RowCount > 0 Then Cuantos = b.GetString("CUANTOS") + d=Starter.skmt.ExecQuery("select count(*) as TOTAL_VISITAR from kmt_info where gestion = 0") + D.Position=0 + b.Close + e=Starter.skmt.ExecQuery("select count(*) as POR_VISITAR from kmt_info") + e.Position=0 +' f=Starter.skmt.ExecQuery("select count(*) as CAT_CL_RUTA from kmt_info") +' f.Position=0 +' l_ruta.Text = 0 +' If f.RowCount > 0 Then l_ruta.Text = f.GetString("CAT_CL_RUTA") +' f.Close +' f=Starter.skmt.ExecQuery("select CAT_CL_RUTA from kmt_info") +' f.Position=0 +' If f.RowCount > 0 Then l_ruta.Text = f.GetString("CAT_CL_RUTA") +' f.Close + + cargar.Visible = False + Subir.Visible = False + connecta.Visible = True + + If Cuantos = 0 Then + l_aLiquidar.Text = 0 + l_cuantosc.Text = 0 + l_cuantosn.Text = 0 + drop = 0 + l_montoSalida.Text = 0 + efectiva = 0 +' l_efectiva.text = 0 +' cambios.Text = 0 + L_MONTOE.Text = 0 + l_ctast.Text = 0 + If d.RowCount > 0 Then l_ctast.Text = d.GetString("TOTAL_VISITAR") + l_porvisitar.Text = 0 + If e.RowCount > 0 Then l_porvisitar.Text = e.GetString("POR_VISITAR") + d.Close + e.Close + Else + c=Starter.skmt.ExecQuery("select sum(hvd_costo_tot) as MONTO_DIA from hist_ventas where hvd_cliente in (select cat_cl_codigo from kmt_info ) AND HVD_ESTATUS = 1 ") + f1=Starter.skmt.ExecQuery("select sum(hvd_costo_tot) as MONTO_TOTAL_DIA from hist_ventas2 where hvd_cliente in (select cat_cl_codigo from kmt_info ) AND HVD_RECHAZO = 0") + f2=Starter.skmt.ExecQuery("select sum(REP_COSTO_TOT) as MONTO_REC_DIA FROM REPARTO where REP_cliente in (Select cat_cl_codigo from kmt_info)") +' b=Starter.skmt.ExecQuery("select count(*) as CUANTOS from noventa where nv_cliente in (select cat_cl_codigo from kmt_info where gestion = 3)") + b=Starter.skmt.ExecQuery("select count(*) as CUANTOS from noventa where nv_motivo <> 'ENTREGA'") +' L=Starter.skmt.ExecQuery("select count(*) as CLIENTES_DIA from noventa where nv_cliente in (select cat_cl_codigo from kmt_info where gestion = 2)") + L=Starter.skmt.ExecQuery("select count(*) as CLIENTES_DIA from noventa where nv_motivo = 'ENTREGA'") + f2.Position=0 +' F4=Starter.skmt.execqUery("select count(*) as CUANTOS FROM PEDIDO") +' F4.Position = 0 + Private MONTO_REC_DIA = 0 + If f2.GetString("MONTO_REC_DIA") <> Null Then MONTO_REC_DIA = f2.GetString("MONTO_REC_DIA") +' If F4.GetString("CUANTOS") > 0 Then +' f3=Starter.skmt.execqUery("select sum(pe_costo_tot) as MONTO_VENTA FROM PEDIDO") +' f3.Position=0 +'' Log(MONTO_REC_DIA & " - " & f3.GetString("MONTO_VENTA")) +' l_efectiva.text = to_number_vb(MONTO_REC_DIA - f3.GetString("MONTO_VENTA")) & "..." +' f3.Close +' Else +' l_efectiva.text = to_number_vb(MONTO_REC_DIA) & ".." +' End If +' F4.Close + C.Position = 0 + b.Position = 0 + L.Position = 0 + f1.Position = 0 + l_aLiquidar.Text = 0 + If f1.RowCount > 0 Then l_aLiquidar.Text = to_number_vb (f1.GetString("MONTO_TOTAL_DIA")) + L_MONTOE.Text = 0 +' If C.RowCount > 0 Then L_MONTOE.Text = to_number_vb (C.GetString("MONTO_DIA")) + l_cuantosc.Text = 0 + If L.RowCount > 0 Then l_cuantosc.Text = L.GetString("CLIENTES_DIA") + l_cuantosn.Text = 0 + If b.RowCount > 0 Then l_cuantosn.Text = b.GetString("CUANTOS") + 'drop = c.GetString("MONTO_DIA") / c.GetString("CLIENTES_DIA") + If f1.GetString("MONTO_TOTAL_DIA") <> Null Then l_montoSalida.Text = Round2(f1.GetString("MONTO_TOTAL_DIA"), 2) + 'efectiva = c.GetString("CLIENTES_DIA") / e.GetString("POR_VISITAR") + l_ctast.Text = 0 + If d.RowCount > 0 Then l_ctast.Text = d.GetString("TOTAL_VISITAR") + l_porvisitar.Text = 0 + If e.RowCount > 0 Then l_porvisitar.Text = e.GetString("POR_VISITAR") + c.Close + b.Close +' c=Starter.skmt.ExecQuery2("select count(*) as CUANTOS from CAT_VARIABLES where CAT_VA_DESCRIPCION = ? ", Array As String("CAMBIOS")) +' c.Position = 0 +' If c.GetString("CUANTOS") = 0 Then +'' cambios.Text = 0 +' Else +' B=Starter.skmt.ExecQuery("select CAT_VA_VALOR from CAT_VARIABLES where CAT_VA_DESCRIPCION = 'CAMBIOS'") +' B.Position = 0 +'' cambios.Text = b.GetString("CAT_VA_VALOR") +' b.Close +' End If + c.Close + End If + c=Starter.skmt.ExecQuery("select ID_ALMACEN from CAT_ALMACEN") + C.Position =0 + ALMACEN = 0 + If C.RowCount > 0 Then ALMACEN = C.GetString("ID_ALMACEN") + B4XPages.MainPage.almacen = ALMACEN + C.Close + c=Starter.skmt.ExecQuery("select HGDATE, HGLAT, HGLON from HIST_GPS") + ' HACER ESTO PARA EL FORANEO + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_gps_actual_REP" + cmd.Parameters = Array As Object(c.GetString("hgdate"),c.GetString("hglat"),c.GetString("hglon"),usuario ) + Next + End If + 'Para traer la bateria + bu.Initialize + batterystatus = bu.BatteryInformation +' LogColor($"Bateria STATUS=${batterystatus(0)}, ${batterystatus(1)}, ${batterystatus(4)}, BATT: ${Starter.batt}"$, Colors.Red) + B4XPages.MainPage.batt = batterystatus(0) + c=Starter.skmt.ExecQuery("select usuario from usuarioa") + c.Position = 0 + usuario = c.GetString("USUARIO") + c.Close + c=Starter.skmt.ExecQuery("select RUTAA from RUTAA") + c.Position = 0 + RUTA_T = 0 + If c.RowCount > 0 Then RUTA_T = c.GetString("RUTAA") + B4XPages.MainPage.rutaPreventa = RUTA_T + c.Close + reqs.Initialize + + Private rc As Cursor = Starter.skmt.ExecQuery($"select * from REPARTO where REP_RECHAZO = "1" and REP_CANT > 0"$) +' Log($"RECHAZOS=${rc.RowCount}"$) + If rc.RowCount > 0 Then + Starter.skmt.ExecNonQuery($"delete from RECHAZOS"$) + For i3=0 To rc.RowCount -1 'Copiamos los rechazos de REPARTO a RECHAZOS. + rc.Position = i3 +' Log($"delete from RECHAZOS where R_CLIENTE = '${rc.GetString("REP_CLIENTE")}' and R_CLI_ORIG = '${rc.GetString("REP_CLI_ORIG")}' and R_RECHAZO = '1' and R_PRODID = '${rc.GetString("REP_PRODID")}'"$) +' Starter.skmt.ExecNonQuery($"delete from RECHAZOS where R_CLIENTE = '${rc.GetString("REP_CLIENTE")}' and R_CLI_ORIG = '${rc.GetString("REP_CLI_ORIG")}' and R_RECHAZO = '1' and R_PRODID = '${rc.GetString("REP_PRODID")}'"$) + Starter.skmt.ExecNonQuery($"insert into RECHAZOS(R_FECHA, R_CLIENTE, R_CLI_ORIG, R_PRODID, R_CANT, R_RECHAZO, R_PRECIO) select REP_FECHA, REP_CLIENTE, REP_CLI_ORIG, REP_PRODID, REP_CANT, REP_RECHAZO, REP_PRECIO from REPARTO where REP_CLIENTE = '${rc.GetString("REP_CLIENTE")}' and REP_CLI_ORIG = '${rc.GetString("REP_CLI_ORIG")}' and REP_PRODID = '${rc.GetString("REP_PRODID")}' and REP_RECHAZO = '1' and REP_CANT > 0"$) + Next + End If + Private vc As Cursor = Starter.skmt.ExecQuery($"select * from REPARTO where REP_RECHAZO = "0" and REP_CANT > 0"$) +' Log($"VENTAS=${vc.RowCount}"$) + If vc.RowCount > 0 Then + Starter.skmt.ExecNonQuery($"delete from VENTAS"$) + For i4=0 To vc.RowCount -1 'Copiamos las ventas de REPARTO a VENTAS. + vc.Position = i4 +' Log($"delete from VENTAS where V_CLIENTE = '${vc.GetString("REP_CLIENTE")}' and V_CLI_ORIG = '${vc.GetString("REP_CLI_ORIG")}' and V_RECHAZO = '1' and V_PRODID = '${vc.GetString("REP_PRODID")}'"$) +' Starter.skmt.ExecNonQuery($"delete from VENTAS where V_CLIENTE = '${vc.GetString("REP_CLIENTE")}' and V_CLI_ORIG = '${vc.GetString("REP_CLI_ORIG")}' and V_RECHAZO = '0' and V_PRODID = '${vc.GetString("REP_PRODID")}'"$) + Starter.skmt.ExecNonQuery($"insert into VENTAS(V_FECHA, V_CLIENTE, V_CLI_ORIG, V_PRODID, V_CANT, V_RECHAZO, V_PRECIO) select REP_FECHA, REP_CLIENTE, REP_CLI_ORIG, REP_PRODID, REP_CANT, REP_RECHAZO, REP_PRECIO from REPARTO where REP_CLIENTE = '${vc.GetString("REP_CLIENTE")}' and REP_CLI_ORIG = '${vc.GetString("REP_CLI_ORIG")}' and REP_PRODID = '${vc.GetString("REP_PRODID")}' and REP_RECHAZO = '0' and REP_CANT > 0"$) + Next + End If + Starter.ENVIA_ULTIMA_GPS + +' Log($"ENTREGADOS: ${Subs.traeEntregados}"$) +' Log($"RECHAZADOS: ${Subs.traeRechazados}"$) +' Log($"VENDIDOS: ${Subs.traeVendidos}"$) + Dim entMap As Map = Subs.traeEntregados + Dim rechMap As Map = Subs.traeRechazados + Dim vendMap As Map = Subs.traeVendidos + l_aLiquidar.Text = entMap.Get("monto") + vendMap.Get("monto") + l_rechazo.text = rechMap.Get("monto") + L_MONTOE.Text = entMap.Get("monto") - vendMap.Get("monto") + B4XPages.MainPage.clientesVisitados = L_MONTOE.Text + B4XPages.MainPage.clientesVenta = l_cuantosc.Text + B4XPages.MainPage.clientesRechazo = l_cuantosn.Text + B4XPages.MainPage.clientestotal = l_porvisitar.Text + B4XPages.MainPage.montoActual = Round2(l_montoSalida.Text - rechMap.Get("monto"), 2) + L_MONTOE.Text = Round2(l_montoSalida.Text - rechMap.Get("monto"), 2) + B4XPages.MainPage.porVisitar = l_ctast.text + B4XPages.MainPage.entregas = l_cuantosc.text + B4XPages.MainPage.rechazos = l_cuantosn.text + B4XPages.MainPage.montoEntregado = L_MONTOE.text + B4XPages.MainPage.montoRechazado = l_rechazo.text + + reqManager.Initialize(Me, B4XPages.MainPage.server) +' LogColor($"ReqServer = ${B4XPages.MainPage.server}"$, Colors.red) + + If l_ctast.Text = 0 And l_porvisitar.Text <> 0 Then + Label9.Visible = True + L_MONTOE.Visible = True + Else + Label9.Visible = False + L_MONTOE.Visible = False + End If + +End Sub + +Sub IsConnectedToInternet As Boolean 'ignore + Dim r As Reflector + r.Target = r.GetContext + r.Target = r.RunMethod2("getSystemService", "connectivity", "java.lang.String") + r.Target = r.RunMethod("getActiveNetworkInfo") + If r.Target <> Null Then + Return r.RunMethod("isConnectedOrConnecting") + End If + Return False +End Sub + +Sub to_number_vb (valor As Object) As String + Dim valstring As Int + Dim valstring2 As String = valor + valstring2.Replace(":","") + Try + valstring =valstring2.Replace(":","") + Return valstring + Catch + Return 0 + End Try +End Sub + +Sub trabajar_Click + B4XPages.ShowPage("Clientes") +End Sub + +Sub Subir_Click + + + + If Not(IsConnectedToInternet) Then MsgboxAsync("No hay conexión a conexión a Internet", "Revisa tu conexión") + c=Starter.skmt.ExecQuery("select usuario from usuarioa") + c.Position = 0 + usuario = c.GetString("USUARIO") + c.Close + ' NOVENTA + c = Starter.skmt.ExecQuery("SELECT NV_CLIENTE,NV_FECHA,NV_USER,NV_MOTIVO,NV_COMM,NV_LAT,NV_LON, NV_FOTO FROM NOVENTA") + D=Starter.skmt.ExecQuery("SELECT COUNT(*) AS CUANTOS_NOVENTA FROM NOVENTA") + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + foto1 = c.GetBlob("NV_FOTO") + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_reparto_noventa_MARDS_REPG" + 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, l_ruta.Text) + reqManager.ExecuteQuery(cmd , 0, "inst_noventa") + Next + c.Close + End If + d.Position=0 + cuantos_noventa = D.GetString("CUANTOS_NOVENTA") + d.Close + c=Starter.skmt.ExecQuery("SELECT HVD_CLIENTE,HVD_PRONOMBRE,HVD_CANT,HVD_COSTO_TOT, HVD_FECHA, HVD_CODPROMO, HVD_PROID, HVD_NUM_TICKET, HVD_NUM_REGISTRO, HVD_RECHAZO, HVD_PARCIAL FROM hist_ventas WHERE HVD_RECHAZO = 1 OR HVD_PARCIAL = 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_rep_hist_ventas_GUNA_REPG2" + cmd.Parameters = Array As Object(C.GetString("HVD_CLIENTE"),C.GetString("HVD_PRONOMBRE"),C.GetString("HVD_CANT"),C.GetString("HVD_COSTO_TOT"),C.GetString("HVD_CODPROMO"),C.GetString("HVD_PROID"),C.GetString("HVD_NUM_TICKET"),C.GetString("HVD_NUM_REGISTRO"),C.GetString("HVD_RECHAZO"),C.GetString("HVD_PARCIAL"), ALMACEN) + reqManager.ExecuteQuery(cmd , 0, "inst_noventa") + Next + c.Close + End If +' pedido + c=Starter.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, 1 as PE_DESC 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_pedido_REPG" + 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"),"0","VENTA") + reqManager.ExecuteQuery(cmd , 0, "ins_pedido") + Next + c.Close + End If +' reqManager.Initialize(Me, "http://187.189.244.154:1787") 'Para el servidor de pruebas. + c = Starter.skmt.ExecQuery("SELECT * from reparto") + If c.RowCount > 0 Then + Private folio As String = Subs.hmsKMT + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insertGUNAReparto2" + cmd.Parameters = Array As Object(folio, C.GetString("REP_FECHA"), C.GetString("REP_CLIENTE"), C.GetString("REP_CLI_ORIG"), C.GetString("REP_PRODID"), C.GetString("REP_PRONOMBRE"), C.GetString("REP_PRODREGISTRO"), C.GetString("REP_CANT"), C.GetString("REP_PRECIO"), C.GetString("REP_COSTO_TOT"), C.GetString("REP_RECHAZO")) + reqManager.ExecuteCommand(cmd , "ins_reparto") + Next + c.Close + End If + c = Starter.skmt.ExecQuery("SELECT * from rechazos") + If c.RowCount > 0 Then + Private folio As String = Subs.hmsKMT + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insertGUNARechazos2" + cmd.Parameters = Array As Object(folio, C.GetString("R_FECHA"), C.GetString("R_CLIENTE"), C.GetString("R_CLI_ORIG"), C.GetString("R_PRODID"), C.GetString("R_CANT"), C.GetString("R_RECHAZO")) + reqManager.ExecuteCommand(cmd , "ins_rechazos") + Next + c.Close + End If + c = Starter.skmt.ExecQuery("SELECT * from ventas") + If c.RowCount > 0 Then + Private folio As String = Subs.hmsKMT + For i=0 To c.RowCount -1 + c.Position=i + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insertGUNAVentas2" + cmd.Parameters = Array As Object(folio, C.GetString("V_FECHA"), C.GetString("V_CLIENTE"), C.GetString("V_CLI_ORIG"), C.GetString("V_PRODID"), C.GetString("V_CANT"), C.GetString("V_RECHAZO")) + reqManager.ExecuteCommand(cmd , "ins_ventas") + Next + c.Close + End If + '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 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_GUNA2" + 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"),fechatabulador3) + 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 + 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_GUNA2" + 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"),fechatabulador3) + reqManager.ExecuteCommand(cmd , "ins_tabulador_bill") + Next + c.Close + d.Close + b.Close + f.Close + End If + 'FIN TABULADOR + ToastMessageShow("Se Actualizaran los datos, Este proceso podria tardar hasta un minuto, gracias "& l_ruta.text , True) +End Sub + +Sub cargar_Click + + + Dim pedidodiaanterior As Boolean = False + Dim cp As Cursor = Starter.skmt.ExecQuery("select * from NOVENTA") + If cp.RowCount > 0 Then + cp.Position = 0 + Private fecha As String = cp.GetString("NV_FECHA") + Log(cp.GetString("NV_FECHA")) + Dim fecha2() As String = Regex.Split(" ",fecha) + Log(fecha2(0)) + Dim fecha3() As String = Regex.Split("/",fecha2(0)) + DateTime.DateFormat = "yyyyMMdd" + DateTime.TimeFormat = "" + Dim dia As String = fecha3(2)&fecha3(0)&fecha3(1) + Log(dia) + Dim dia2 As String = DateTime.Date(DateTime.Now) + Log(dia & " , " & dia2) + If dia < dia2 Then + pedidodiaanterior = True + End If + End If + If Not (pedidodiaanterior) Then + Log("CUMPLE") + EJECUTANDO = 1 + reqs.Initialize + TOPE = 0 + LogColor($"ReqServer = ${B4XPages.MainPage.server}"$, Colors.red) + reqManager.Initialize(Me, B4XPages.MainPage.server) + + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "insert_drop_rep_GUNA2" + cmd.Parameters = Array As Object(Subs.dameUsuarioDeDB, l_ruta.Text, ALMACEN, l_ctast.text, Subs.traeEntregados, Subs.traeRechazados, "CARGA") + reqManager.ExecuteCommand(cmd , "inst_drop") +' reqs.Add("inst_noventa") + + Starter.skmt.ExecNonQuery("delete from kmt_info") + Starter.skmt.ExecNonQuery("delete from cod_result") + Starter.skmt.ExecNonQuery("delete from hist_gest") + Starter.skmt.ExecNonQuery("delete from CAT_DETALLES_PAQ") + Starter.skmt.ExecNonQuery("delete from telefonos") +' Starter.skmt.ExecNonQuery("delete from VENTAS") + Starter.skmt.ExecNonQuery("delete from PUNTEO_GPS") + If l_ruta.Text = "0" Then ' + Log("********************* No hay ruta, BORRAMOS TODO") + Starter.skmt.ExecNonQuery("delete from cat_gunaprod") + Starter.skmt.ExecNonQuery("delete from REPARTO") + Starter.skmt.ExecNonQuery("delete from HIST_VENTAS") + Starter.skmt.ExecNonQuery("delete from HIST_VENTAS2") + Starter.skmt.ExecNonQuery("delete from NOVENTA") + Else + Log("********************* Hay ruta, NO BORRAMOS TODO") + End If + + ' NUEVOS CLIENTES + c=Starter.skmt.ExecQuery("select usuario from usuarioa") + c.Position = 0 + usuario = c.GetString("USUARIO") + + cmd.Initialize + cmd.Name = "select_punteo_guna_re_REPG2" + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN,ALMACEN) + reqManager.ExecuteQuery(cmd , 0, "punteo") + Log($"Pedimos Punteo"$) + reqs.Add("punteo") + + If l_ruta.Text = "0" Then + cmd.Initialize + cmd.Name = "select_almacen_guna_re_REPG2" + cmd.Parameters = Array As Object(ALMACEN, e_ruta.text, ALMACEN) + reqManager.ExecuteQuery(cmd , 0, "gunaprod") + Log($"Pedimos gunaprod - ${ALMACEN}, ${e_ruta.text}"$) + reqs.Add("gunaprod") + End If + + + cmd.Initialize + cmd.Name = "select_cliente_guna_re_REPG2" + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN,ALMACEN,e_ruta.text, ALMACEN) + reqManager.ExecuteQuery(cmd , 0, "kmt_datos") + Log($"Pedimos kmt_datos"$) + reqs.Add("kmt_datos") + + cmd.Initialize + cmd.Name = "select_ventad_guna_re_REPG2" + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) + reqManager.ExecuteQuery(cmd , 0, "hist_datos") + Log($"Pedimos hist_datos"$) + reqs.Add("hist_datos") + + If ALMACEN = "32" Then + ALMACEN = "33" + cargo = 2 + cmd.Initialize + cmd.Name = "select_punteo_guna_re_REPG2" + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN,ALMACEN) + reqManager.ExecuteQuery(cmd , 0, "punteo") + reqs.Add("punteo") + + cmd.Initialize + cmd.Name = "select_almacen_guna_re_REPG2" + cmd.Parameters = Array As Object(ALMACEN, e_ruta.text, ALMACEN) + reqManager.ExecuteQuery(cmd , 0, "gunaprod") + reqs.Add("gunaprod") + + cmd.Initialize + cmd.Name = "select_cliente_guna_re_REPG2" + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN,ALMACEN,e_ruta.text, ALMACEN) + reqManager.ExecuteQuery(cmd , 0, "kmt_datos") + reqs.Add("kmt_datos") + + cmd.Initialize + cmd.Name = "select_ventad_guna_re_REPG2" + cmd.Parameters = Array As Object(e_ruta.text, ALMACEN) + reqManager.ExecuteQuery(cmd , 0, "hist_datos") + reqs.Add("hist_datos") + 'reparto rechazo REP_CLIENTE, REP_PRONOMBRE, REP_CANT, REP_COSTO_TOT + End If + +' c=Starter.skmt.ExecQuery("SELECT REP_CLIENTE, REP_PRONOMBRE, REP_CANT, REP_COSTO_TOT, REP_FECHA FROM REPARTO") +' If c.RowCount > 0 Then +' For i=0 To c.RowCount -1 +' c.Position=i +' Dim cmd As DBCommand +' cmd.Initialize +' cmd.Name = "insert_reparto_rechazo_REPG" +' cmd.Parameters = Array As Object(C.GetString("REP_CLIENTE"),C.GetString("REP_PRONOMBRE"),C.GetString("REP_CANT"),C.GetString("REP_COSTO_TOT"),C.GetString("REP_FECHA"), ALMACEN) +' reqManager.ExecuteCommand(cmd , "inst_noventa") +' reqs.Add("inst_noventa") +' Next +' End If +' c.Close + + ' NOVENTA +' c=Starter.skmt.ExecQuery("SELECT NV_CLIENTE, NV_FECHA, NV_USER,NV_MOTIVO,NV_COMM,NV_LAT,NV_LON, NV_FOTO FROM NOVENTA") +' If c.RowCount > 0 Then +' For i=0 To c.RowCount -1 +' c.Position=i +' foto1 = c.GetBlob("NV_FOTO") +' Dim cmd As DBCommand +' cmd.Initialize +' cmd.Name = "insert_reparto_REPG" +' 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, l_ruta.Text, foto1) +' reqManager.ExecuteCommand(cmd , "inst_noventa") +' reqs.Add("inst_noventa") +' Next +' End If +' c.Close + + D=Starter.skmt.ExecQuery("SELECT COUNT(*) AS CUANTOS_NOVENTA FROM NOVENTA") + d.Position=0 + cuantos_noventa = D.GetString("CUANTOS_NOVENTA") + d.Close + cargar.Visible = False + Subir.Visible = False + connecta.Visible = True + inv.Visible = False + ToastMessageShow("Se actualizarán los datos, este proceso podria tardar hasta un minuto, gracias" , True) + ProgressDialogShow2("Descargando rutas, espere un momento.", False) + If Not(IsConnectedToInternet) Then MsgboxAsync("No hay conexión a Internet", "Revisa tu conexión") + + + 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) +' Private r As DBResult = reqManager.HandleJob(Job) + If Job.Success = False Then + LogColor("** " & Job.Tag & " Error: " & Job.ErrorMessage, Colors.Red) ' Mod by CHV - 211023 + 'ToastMessageShow("Error: " & Job.ErrorMessage, True) + Else + LogColor("JobDone: '" & reqManager.HandleJob(Job).tag & "' - Registros: " & reqManager.HandleJob(Job).Rows.Size, Colors.Green) 'Mod por CHV - 211023 + If Job.JobName = "DBRequest" Then + Dim result As DBResult = reqManager.HandleJob(Job) + If result.Tag = "kmt_datos" Then 'query tag + If reqs.IndexOf("kmt_datos") > -1 Then + reqs.RemoveAt(reqs.IndexOf("kmt_datos")) +' Log(reqs.Size) + End If + Starter.skmt.BeginTransaction + 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_BCREDITO As String = records(result.Columns.Get("CAT_CL_BCREDITO")) +' Log(" ++ insert into kmt_info: "&CAT_CL_RUTA&","&CAT_CL_CODIGO&","&CAT_CL_RUTA&","&CAT_CL_NOMBRE) + 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_BCREDITO, gestion,SECUENCIA) 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_BCREDITO,"0")) + Next + Starter.skmt.TransactionSuccessful + Starter.skmt.EndTransaction + Listo1 = 1 + If Listo1 = 1 And Listo3 = 1 Then + ToastMessageShow("Datos Actualizados." , True) + 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 = "gunaprod" Then 'query tag + If reqs.IndexOf("gunaprod") > -1 Then + reqs.RemoveAt(reqs.IndexOf("gunaprod")) + Log(reqs.Size) + End If + Starter.skmt.BeginTransaction + 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")) + ' 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)) +' Log(" ++ insert into CAT_GUNAPROD: "&CAT_GP_ID&","&CAT_GP_NOMBRE&","&CAT_GP_IMP1) + Starter.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) 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, 0)) + Next + Starter.skmt.TransactionSuccessful + Starter.skmt.EndTransaction + Listo2=1 + If Listo1 = 1 And Listo2 =1 And Listo3 = 1 And Listo4 = 1 Then + ToastMessageShow("Datos Actualizados." , True) + 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 + If reqs.IndexOf("gunaprodp") > -1 Then + reqs.RemoveAt(reqs.IndexOf("gunaprodp")) + Log(reqs.Size) + End If + 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")) +' Log(" ++ insert into CAT_GUNAPROD: "&CAT_GP_ID&","&CAT_GP_NOMBRE&","&CAT_GP_IMP1) + Starter.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) 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, 0)) + Next + Listo4=1 + If Listo1 = 1 And Listo2 =1 And Listo3 = 1 And Listo4 = 1 Then + ToastMessageShow("Datos Actualizados." , True) + B4XPage_Appear + img2.Visible = False + EJECUTANDO=0 + Else If Listo4 = 1 And Listo3 = 1 And inve = 1 Then + ToastMessageShow("Datos Actualizados." , True) + 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 + If reqs.IndexOf("detallepaq") > -1 Then + reqs.RemoveAt(reqs.IndexOf("detallepaq")) + Log(reqs.Size) + End If + 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")) +' Log(" ++ insert into CAT_DETALLES_PAQ: "&CAT_DP_ALMACEN&","&CAT_DP_ID&","&CAT_DP_IDPROD) + Starter.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 + Listo3 =1 + If Listo1 = 1 And Listo2 = 1 And Listo3 = 1 And Listo4 = 1 Then + ToastMessageShow("Datos Actualizados." , True) + B4XPage_Appear + img2.Visible=False + EJECUTANDO = 0 + Else If Listo4 = 1 And Listo3 = 1 And inve = 1 Then + ToastMessageShow("Datos Actualizados." , True) + 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 = "punteo" Then 'query tag + If reqs.IndexOf("punteo") > -1 Then + reqs.RemoveAt(reqs.IndexOf("punteo")) +' Log(reqs.Size) + End If + If reqs.IndexOf("punteo") > 0 Then + reqs.RemoveAt(reqs.IndexOf("punteo")) + Log(reqs.Size) + End If + Starter.skmt.BeginTransaction + For Each records() As Object In result.Rows + Dim HV_CLIENTE As String = records(result.Columns.Get("HV_CLIENTE")) + Dim HV_LONG As String = records(result.Columns.Get("HV_LONG")) + Dim HV_LAT As String = records(result.Columns.Get("HV_LAT")) +' Log(" ++ insert into PUNTEO_GPS: "&HV_CLIENTE&","&HV_LONG) + Starter.skmt.ExecNonQuery2("INSERT INTO PUNTEO_GPS(HV_CLIENTE, HV_LONG, HV_LAT) VALUES (?,?,?)", Array As Object (HV_CLIENTE, HV_LONG, HV_LAT)) + Next + Starter.skmt.TransactionSuccessful + Starter.skmt.EndTransaction + End If + End If + + If Job.JobName = "DBRequest" Then + Dim result As DBResult = reqManager.HandleJob(Job) + If result.Tag = "hist_datos" Then 'query tag + If reqs.IndexOf("hist_datos") > -1 Then + reqs.RemoveAt(reqs.IndexOf("hist_datos")) +' Log(reqs.Size) + End If + Log(l_ruta.text) + Log($"******** Insertamos HV - ${result.Rows.Size}"$) + Starter.skmt.BeginTransaction + 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")) + Dim HVD_FECHA As String = records(result.Columns.Get("HVD_FECHA")) + Dim HVD_CODPROMO As String = records(result.Columns.Get("HVD_CODPROMO")) + Dim HVD_PROID As String = records(result.Columns.Get("HVD_PROID")) + Dim HVD_NUM_TICKET As String = records(result.Columns.Get("HVD_NUM_TICKET")) + Dim HVD_NUM_REGISTRO As String = records(result.Columns.Get("HVD_NUM_REGISTRO")) + Dim HVD_RECHAZO As String = records(result.Columns.Get("HVD_RECHAZO")) +' Log(" ++ insert into HIST_VENTAS: "&HVD_CLIENTE&","&HVD_PRONOMBRE&","&HVD_CANT) + + If l_ruta.Text = "0" Then 'Si no hay ruta cargada, guardamos todos los clientes + Log("No hay ruta, guardamos todos") + Starter.skmt.ExecNonQuery2("INSERT INTO HIST_VENTAS(HVD_CLIENTE,HVD_PRONOMBRE,HVD_CANT,HVD_COSTO_TOT, HVD_FECHA, HVD_CODPROMO, HVD_PROID,HVD_NUM_TICKET, HVD_NUM_REGISTRO, HVD_RECHAZO, HVD_ESTATUS, HVD_PARCIAL) VALUES (?,?,?,?,?,?,?,?,?,?,0,0)", Array As Object (HVD_CLIENTE,HVD_PRONOMBRE,HVD_CANT,HVD_COSTO_TOT,HVD_FECHA, HVD_CODPROMO, HVD_PROID,HVD_NUM_TICKET, HVD_NUM_REGISTRO, HVD_RECHAZO)) + Starter.skmt.ExecNonQuery2("INSERT INTO HIST_VENTAS2(HVD_CLIENTE,HVD_PRONOMBRE,HVD_CANT,HVD_COSTO_TOT, HVD_FECHA, HVD_CODPROMO, HVD_PROID,HVD_NUM_TICKET, HVD_NUM_REGISTRO, HVD_RECHAZO, HVD_ESTATUS, HVD_PARCIAL) VALUES (?,?,?,?,?,?,?,?,?,?,0,0)", Array As Object (HVD_CLIENTE,HVD_PRONOMBRE,HVD_CANT,HVD_COSTO_TOT,HVD_FECHA, HVD_CODPROMO, HVD_PROID,HVD_NUM_TICKET, HVD_NUM_REGISTRO, HVD_RECHAZO)) + Else 'Si ya hay ruta cargada, solo guardamos los clientes nuevos. +' Log("Hay ruta, guardamos los nuevos") + Private tc As Cursor = Starter.skmt.ExecQuery($"select HVD_CLIENTE from HIST_VENTAS where HVD_CLIENTE = '${HVD_CLIENTE}' and HVD_PROID = '${HVD_PROID}'"$) + If tc.RowCount = 0 Then + Log($"Guardamos ${HVD_CLIENTE}"$) + Starter.skmt.ExecNonQuery2("INSERT INTO HIST_VENTAS(HVD_CLIENTE,HVD_PRONOMBRE,HVD_CANT,HVD_COSTO_TOT, HVD_FECHA, HVD_CODPROMO, HVD_PROID,HVD_NUM_TICKET, HVD_NUM_REGISTRO, HVD_RECHAZO, HVD_ESTATUS, HVD_PARCIAL) VALUES (?,?,?,?,?,?,?,?,?,?,0,0)", Array As Object (HVD_CLIENTE,HVD_PRONOMBRE,HVD_CANT,HVD_COSTO_TOT,HVD_FECHA, HVD_CODPROMO, HVD_PROID,HVD_NUM_TICKET, HVD_NUM_REGISTRO, HVD_RECHAZO)) + Starter.skmt.ExecNonQuery2("INSERT INTO HIST_VENTAS2(HVD_CLIENTE,HVD_PRONOMBRE,HVD_CANT,HVD_COSTO_TOT, HVD_FECHA, HVD_CODPROMO, HVD_PROID,HVD_NUM_TICKET, HVD_NUM_REGISTRO, HVD_RECHAZO, HVD_ESTATUS, HVD_PARCIAL) VALUES (?,?,?,?,?,?,?,?,?,?,0,0)", Array As Object (HVD_CLIENTE,HVD_PRONOMBRE,HVD_CANT,HVD_COSTO_TOT,HVD_FECHA, HVD_CODPROMO, HVD_PROID,HVD_NUM_TICKET, HVD_NUM_REGISTRO, HVD_RECHAZO)) + End If + End If + Next + Starter.skmt.TransactionSuccessful + Starter.skmt.EndTransaction + Log($"******** Terminamos HV - ${result.Rows.Size}"$) +' f2=Starter.skmt.ExecQuery2("select COUNT(*) as CAMBIOS from hist_ventas where SUBSTR(HVD_PRONOMBRE,1,6) =?", Array As String("CAMBIO")) +' f2.Position = 0 +' If f2.GetString("CAMBIOS") > 0 Then +' f1=Starter.skmt.ExecQuery2("select sum(HVD_CANT) as CAMBIOS from hist_ventas where SUBSTR(HVD_PRONOMBRE,1,6) =?", Array As String("CAMBIO")) +' f1.Position = 0 +' Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION =?", Array As Object("CAMBIOS")) +' Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES VALUES(?,?)", Array As Object("CAMBIOS",f1.GetString("CAMBIOS"))) +' f1.Close +' Else +' Starter.skmt.ExecNonQuery2("delete from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION =?", Array As Object("CAMBIOS")) +' Starter.skmt.ExecNonQuery2("INSERT INTO CAT_VARIABLES VALUES(?,?)", Array As Object("CAMBIOS","0")) +' End If +' f2.Close + Listo3 =1 + If Listo1 = 1 And Listo3 = 1 Then + ToastMessageShow("Datos Actualizados." , True) + 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")) +' Log(" ++ insert into CAT_VARIABLES: "&Cat_Va_Descripcion&","&Cat_Va_Valor) + Starter.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 = "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" + Else + ToastMessageShow("No se cargo bien la info P. Sync Nuevamente" & CUANTOSP & " " & cuantos_pedido, True) + 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 + 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 + 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 = "insert_pedido" Then 'query tag + ToastMessageShow("Datos Actualizados." , True) + 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 + Starter.skmt.ExecNonQuery("delete from VERSION") + Dim CAT_VE_VERSION As String = records(result.Columns.Get("CAT_VE_VERSION")) +' Log(" ++ insert into VERSION: "&CAT_VE_VERSION) + Starter.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 + If reqs.IndexOf("ruta") > -1 Then + reqs.RemoveAt(reqs.IndexOf("ruta")) + Log(reqs.Size) + End If + For Each records() As Object In result.Rows + Dim VALIDO As String = records(result.Columns.Get("VALIDO")) +' Log("VALIDO= " & VALIDO) + If VALIDO = "OK" Then + If l_ctast.Text = "0" Then + Subir.Visible = True + End If + cargar.Visible = True + If Subs.dameUsuarioDeDB = "ROOT" Then Subir.Visible = True + connecta.Visible = False + Starter.skmt.ExecNonQuery("DELETE FROM RUTAA") +' Log(" ++ insert into RUTAA: "&e_ruta.Text) + Starter.skmt.ExecNonQuery2("INSERT INTO RUTAA(RUTAA) VALUES (?)", Array As Object (e_ruta.TEXT)) + B4XPages.MainPage.rutaPreventa = e_ruta.TEXT + 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 + End If + Next + End If + End If + + If Job.JobName = "DBRequest" Then 'Traemos las coordenadas del CEDIS. (Parte de la funcionalidad OSRM) + Dim result As DBResult = reqManager.HandleJob(Job) + If result.Tag = "coords_almacen" Then 'query tag + For Each records() As Object In result.Rows + Log("Coordenadas del almacen: " & records(result.Columns.Get("CAT_AL_LATITUD")) & "," & records(result.Columns.Get("CAT_AL_LONGITUD"))) + Private lat, lon As Double + lat = 0.0 + lon = 0.0 + If IsNumber(records(result.Columns.Get("CAT_AL_LATITUD"))) And IsNumber(records(result.Columns.Get("CAT_AL_LONGITUD"))) Then + lat = records(result.Columns.Get("CAT_AL_LATITUD")) + lon = records(result.Columns.Get("CAT_AL_LONGITUD")) + End If + Starter.cedisLocation.Latitude = lat + Starter.cedisLocation.Longitude = lon + '19.48118148992086,-99.15295579261536 + Next + End If + End If + + If Job.JobName = "DBRequest" Then + Dim result As DBResult = reqManager.HandleJob(Job) + If result.Tag = "ins_reparto" Then 'query tag + For Each records() As Object In result.Rows + For Each k As String In result.Columns.Keys + Log(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 = "ins_rechazos" Then 'query tag + For Each records() As Object In result.Rows + For Each k As String In result.Columns.Keys + Log(k & ": " & records(result.Columns.Get(k))) + Next + Next + End If + End If + Job.Release + End If + If reqs.Size = 0 Then + ProgressDialogHide +' Log(reqs.size) +' Log("Terminamos lo descarga de ruta!") + End If +End Sub + +Private Sub B4XPage_CloseRequest As ResumableSub + ' BACK key pressed + If Panel1.visible Then + Log("PANEL1 VISIBLE") + B_REGRESA_Click + Else + B4XPages.ShowPage("Login") + End If + ' Returning False signals the system to handle the key + Return False +End Sub + +Sub connecta_Click + LogColor($"ReqServer = ${B4XPages.MainPage.server}"$, Colors.red) + If Not(IsConnectedToInternet) Then MsgboxAsync("No hay conexión a conexión a Internet", "Revisa tu conexión") + If e_ruta.Text <> "" Then + imei = "" 'p.GetDeviceId + conn = "1" + ime.HideKeyboard + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "select_version_GUNA2" + reqManager.ExecuteQuery(cmd , 0, "version") + Dim cmd As DBCommand + cmd.Initialize + cmd.Name = "select_ruta_re_REPG_GUNA2" + cmd.Parameters = Array As Object(ALMACEN, e_ruta.text, imei) +' Log($"${ALMACEN}, ${e_ruta.text}, ${imei}"$) + reqManager.ExecuteQuery(cmd , 0, "ruta") + ToastMessageShow("Validando Conexión." , True) + Starter.skmt.ExecNonQuery("DELETE FROM RUTAA") + Starter.skmt.ExecNonQuery2("INSERT INTO RUTAA(RUTAA) VALUES (?)", Array As Object (e_ruta.TEXT)) + B4XPages.MainPage.rutaPreventa = e_ruta.TEXT + End If +End Sub + +Sub BUSCA_Click +' StartActivity(BUSCAR) + B4XPages.ShowPage("Buscar") +End Sub + +Sub b_mapa_Click +' StartActivity(mapas) + B4XPages.ShowPage("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 pedido_cliente") + Starter.skmt.ExecNonQuery("delete from pedido") + Starter.skmt.ExecNonQuery("delete from noventa") + Starter.skmt.ExecNonQuery("delete from clie_act") + Starter.skmt.ExecNonQuery("delete from kmt_info") + Starter.skmt.ExecNonQuery("delete from cat_gunaprod") + Starter.skmt.ExecNonQuery("delete from CAT_DETALLES_PAQ") + Starter.skmt.ExecNonQuery("delete from HIST_VENTAS") + Starter.skmt.ExecNonQuery("delete from REPARTO") + Starter.skmt.ExecNonQuery("DELETE FROM TABULADOR_MONEDAS") + Starter.skmt.ExecNonQuery("DELETE FROM TABULADOR_BILLETES") + Starter.skmt.ExecNonQuery("DELETE FROM RUTAA") + B4XPage_Appear + End If +' Starter.waypointsOrdered.Clear + Starter.skmt.ExecNonQuery("delete from waypoints") + End If +End Sub + +Sub inv_Click + 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" + cmd.Parameters = Array As Object(ALMACEN,l_ruta.text) + reqManager.ExecuteQuery(cmd , 0, "valida_pedido") + + cmd.Initialize + cmd.Name = "select_cuantos_noventa_guna2" + cmd.Parameters = Array As Object(ALMACEN,l_ruta.text) + reqManager.ExecuteQuery(cmd , 0, "valida_noventa") + + cmd.Initialize + cmd.Name = "select_cuantos_pedidoc_guna2" + cmd.Parameters = Array As Object(ALMACEN,l_ruta.text) + reqManager.ExecuteQuery(cmd , 0, "valida_pedidoc") + img2.Visible=False + t1.Enabled = False +End Sub + +Sub B_CLIEPROD_Click + BUSCA.Visible = False + connecta.Visible = False + trabajar.Visible = False + B_CLIEPROD.Visible = False + Panel1.Visible = True + Panel1.BringToFront + Btn_Ubicar_Ru.Visible=False + c=Starter.skmt.ExecQuery("select HVD_PRONOMBRE, SUM(HVD_CANT) AS HVD_CANT, HVD_RECHAZO from HIST_VENTAS GROUP BY HVD_PRONOMBRE, HVD_RECHAZO ORDER BY HVD_PRONOMBRE") + Subs.SetDivider(ListView1, Colors.LightGray, 2) + ListView1.Clear + 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 = 10 + label2.TextColor = Colors.Black + + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + If c.GetString("HVD_RECHAZO") = "0" Then + ESTATUS = " " + ELSE IF c.GetString("HVD_RECHAZO") = "1" Then + ESTATUS = "RECHAZADO" + Else + ESTATUS = "SIN ESTATUS" + End If + ListView1.AddTwoLines(c.GetString("HVD_PRONOMBRE") , c.GetString("HVD_CANT") & " " & ESTATUS ) + Next + End If + + + +' c=skmt.ExecQuery("select HVD_CLIENTE, HVD_PRONOMBRE, HVD_CANT, HVD_ESTATUS from HIST_VENTAS ORDER BY HVD_PRONOMBRE") +' +' ListView1.Clear +' 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 = 10 +' label2.TextColor = Colors.Black +' +' If c.RowCount>0 Then +' For i=0 To c.RowCount -1 +' c.Position=i +' If c.GetString("HVD_ESTATUS") = "0" Then +' ESTATUS = "SIN ENTREGAR" +' ELSE IF c.GetString("HVD_ESTATUS") = "1" Then +' ESTATUS = "ENTREGADO" +' ELSE IF c.GetString("HVD_ESTATUS") = "2" Then +' ESTATUS = "RECHAZADO" +' Else +' ESTATUS = "SIN ESTATUS" +' End If +' ListView1.AddTwoLines(c.GetString("HVD_PRONOMBRE") & " " & c.GetString("HVD_CLIENTE") , c.GetString("HVD_CANT") & " " & ESTATUS ) +' Next +' End If +End Sub + +Sub B_REGRESA_Click + Log("B_REGRESA_Click") + BUSCA.Visible = True + connecta.Visible = True + trabajar.Visible = True + B_CLIEPROD.Visible = True + Panel1.Visible = False + Btn_Ubicar_Ru.Visible=True +End Sub + +''''''''''''''''''''''''''''MAPA RUTAS +Sub Btn_Ubicar_Ru_Click + StartActivity(MAPA_RUTAS) +End Sub +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Private Sub b_tabulador_Click + B4XPages.ShowPage("tabulador") +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..cc1bd35 --- /dev/null +++ b/B4A/C_Productos.bas @@ -0,0 +1,1140 @@ +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 g As GPS + Dim q_buscar As String + + Dim c As Cursor + Dim c2 As Cursor + Dim ListView1 As ListView + Dim entro As String + Dim lfila As Label + Dim marca As String + Dim tipo As String + Private BUSCA As EditText + Dim ya_entro As String + Dim bmp As Bitmap + + 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 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 + Private Panel1 As Panel + Dim query As String + Private t_precio As Label + Private LV_PRECIOS As ListView + Private PERFIL As String + Private EXISTE_CAMBIO As String + Private QUERY2 As String + Dim CAMBIOS As String + Dim precio2 As String + Private B_MENOS As Button + Private B_MAS As Button + Private p_prods As Panel + Private l_prodX As Label + Private l_pCant As Label + Private et_pCant As EditText + Private clv_productos As CustomListView + Dim etCantHasFocus As Boolean = False + Dim totalProds As Int = 0 + Dim totalCompra As Int = 0 + Dim prodsMap As Map + Dim prodsListId, prodsList, prodsListCliOrig As List + Private l_totProds As Label + Private l_total As Label + Private b_terminar1 As Button + Private p_botonesVenta As Panel + Private l_vendido 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 + g.Initialize("GPS") + 'Do not forget to load the layout file created with the visual designer. For example: + 'Activity.LoadLayout("Layout1") + Root.RemoveAllViews + Root.LoadLayout("productos") + Panel1.Visible= False +End Sub + +'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. + +Sub B4XPage_Appear + query = "cat_gunaprod" + QUERY2 = "CAT_GUNAPROD" + prodsMap.Initialize + prodsList.Initialize + prodsListId.Initialize + prodsListCliOrig.Initialize + If ya_entro <> "1" Then + 'BUSCA.Text ="" + 'SE COMENTO LA LINEA DE ARRIBA YA QUE DISPARA EL EVENTO DEL TEXTCHANGE Y PUEDE HACER LENTO EL SISTEMA + Starter.skmt.Initialize(Starter.ruta,"kmt.db", True) + entro ="1" + ya_entro ="1" + c=Starter.skmt.ExecQuery("select CAT_GP_CLASIF, COUNT(*) AS CUANTOS from " & query & " WHERE CAT_GP_ALMACEN > 0 GROUP BY CAT_GP_CLASIF order by CAT_GP_CLASIF asc") + + 'ESTO ES PARA NO VER PROCTER + 'c=skmt.ExecQuery2("select CAT_GP_CLASIF, count(*) as cuantos from cat_gunaprod where CAT_GP_ALMACEN > 0 and cat_gp_clasif NOT IN (?,?,?,?,?,?,?,?,?,?) group by CAT_GP_CLASIF order by CAT_GP_CLASIF asc", Array As String("PROCTER","PROMOS","TRES MONTES","CAMPARI","CAMPARI-PRO","CLOROX DE MEXICO","MARS","CONAGRA","VERDE VALLE","MEAD JOHNSON")) + ListView1.Clear + lfila.Text = "MARCA" + 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 = 10 + label2.TextColor = Colors.Black + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + ' bmp = LoadBitmap(File.DirAssets, "palomita_verde.png") + ListView1.AddTwoLines(c.GetString("CAT_GP_CLASIF"),c.GetString("CUANTOS")) + Next + End If + End If + clv_productos.GetBase.SetLayoutAnimated(100, 10dip, 140dip, Root.Width - 50, Root.Height * 0.68) 'Cambiamos el tamaño y posición de la lista de productos + clv_productos.Base_Resize(clv_productos.GetBase.Width, clv_productos.GetBase.Height) 'Cambiamos el tamaño del panel interno de la lista para que ajuste al nuevo tamaño. +' p_botonesVenta.Visible = False + p_botonesVenta.Top = clv_productos.AsView.top + clv_productos.AsView.Height + llenaProductos(False) +End Sub + +Sub ListView1_ItemClick (Position As Int, Value As Object) + If Value = "PROMOS" And B4XPages.MainPage.cliente.cuenta <> "N" Then + entro = "3" + marca = "PROMOS" + tipo = "PROMOS" + Else if Value = "PROMOS" And B4XPages.MainPage.cliente.cuenta = "N" Then + entro = "5" + B4XPages.ShowPage("Cliente") + End If + If entro = "1" Then + marca = Value + Starter.skmt.Initialize(Starter.ruta,"kmt.db", True) + c2=Starter.skmt.ExecQuery2("select COUNT(*) AS CUANTOS, CAT_GP_TIPO from " & query & " where CAT_GP_ALMACEN > 0 and CAT_GP_CLASIF = ? GROUP BY CAT_GP_TIPO ORDER BY CAT_GP_TIPO ASC", Array As String(Value)) + ListView1.Clear + lfila.text = "TIPO" + If c2.RowCount>0 Then + For i=0 To c2.RowCount -1 + c2.Position=i + ListView1.AddTwoLines(c2.GetString("CAT_GP_TIPO"),c2.GetString("CUANTOS")) + Next + End If + entro = "3" + Else If entro = "2" Then + tipo = Value + Starter.skmt.Initialize(Starter.ruta,"kmt.db", True) + c2=Starter.skmt.ExecQuery2("select COUNT(*) AS CUANTOS, CAT_GP_SUBTIPO from " & query & " where CAT_GP_ALMACEN > 0 and CAT_GP_CLASIF = ? and CAT_GP_TIPO = ? GROUP BY CAT_GP_SUBTIPO ORDER BY CAT_GP_SUBTIPO ASC ", Array As String(marca, Value)) + ListView1.Clear + lfila.text = "SUB-TIPO" + If c2.RowCount>0 Then + For i=0 To c2.RowCount -1 + c2.Position=i + ListView1.AddTwoLines(c2.GetString("CAT_GP_SUBTIPO"),c2.GetString("CUANTOS")) + Next + End If + entro = "3" + + Else If entro = "3" Then + Starter.skmt.Initialize(Starter.ruta,"kmt.db", True) + c2=Starter.skmt.ExecQuery2("select CAT_GP_NOMBRE, CAT_GP_PRECIO, CAT_GP_ALMACEN, CAT_GP_IMG from " & query & " where CAT_GP_ALMACEN > 0 and CAT_GP_CLASIF = ? AND CAT_GP_TIPO = ? ", Array As String(marca, Value)) + ListView1.Clear + lfila.text = "PRODUCTO" + Dim ins As InputStream + Dim bmp As Bitmap + Dim jpeg() As Byte + If c2.RowCount>0 Then + For i=0 To c2.RowCount -1 + c2.Position=i + jpeg = c2.GetBlob("CAT_GP_IMG") + ins.InitializeFromBytesArray(jpeg, 0, jpeg.Length) + bmp.Initialize2(ins) + + ListView1.AddTwoLines(c2.GetString("CAT_GP_NOMBRE"),"# " & c2.GetString("CAT_GP_ALMACEN") & " $ " & c2.GetString("CAT_GP_PRECIO")) + Next + End If + entro = "4" + Else If entro = "4" Then + + Starter.skmt.ExecNonQuery("delete from PROID") + Starter.skmt.ExecNonQuery2("INSERT INTO PROID VALUES (?)", Array As Object(Value)) + 'StartActivity(pedidos) + HACER_PEDIDO + End If +End Sub + +Private Sub B4XPage_CloseRequest As ResumableSub + ' BACK key pressed +' Log("REGRESAMOS, " & "ENTRO=" & entro) + ya_entro ="0" + If entro = "4" Then + entro = "3" + B4XPage_Appear + Return True + Else If entro = "3" Then + ' I want to capture the key here so I return True + Log("Mostramos Cliente") + B4XPages.ShowPage("Cliente") + Return False + End If + B4XPages.ShowPage("Cliente") + Return False + ' Returning False signals the system to handle the key +End Sub + +Sub BUSCA_TextChanged (Old As String, New As String) + q_buscar = "%" & BUSCA.Text & "%" + Starter.skmt.Initialize(Starter.ruta,"kmt.db", True) + c=Starter.skmt.ExecQuery2("select CAT_GP_NOMBRE, CAT_GP_ALMACEN, CAT_GP_PRECIO,CAT_GP_IMG from " & query & " where CAT_GP_PRECIO > 0 AND CAT_GP_ALMACEN > 0 and CAT_GP_NOMBRE like ? and CAT_GP_CLASIF <> ? and (length(CAT_GP_CODPROMO) = 1 OR CAT_GP_CODPROMO = CAT_GP_ID) order by CAT_GP_NOMBRE asc", Array As String(q_buscar,"PROMOS")) + 'and CAT_GP_CLASIF <> ? group by CAT_GP_CLASIF order by CAT_GP_CLASIF asc", Array As String("PROMOS") ) + + ListView1.Clear + + Dim ins As InputStream + Dim bmp As Bitmap + Dim jpeg() As Byte + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + jpeg = c.GetBlob("CAT_GP_IMG") + ins.InitializeFromBytesArray(jpeg, 0, jpeg.Length) + bmp.Initialize2(ins) + ListView1.AddTwoLines(c.GetString("CAT_GP_NOMBRE"),"Existencia " & c.GetString("CAT_GP_ALMACEN") & " Precio $" & c.GetString("CAT_GP_PRECIO")) + Next + End If + c.Close + entro= "4" +End Sub + +Sub HACER_PEDIDO + c=Starter.skmt.ExecQuery("Select SUBSTR(CUENTA,1,1) AS CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + Panel1.Visible= True + cambio = "0" + cantidad.Text = "" + c=Starter.skmt.ExecQuery("select ID_ALMACEN from CAT_ALMACEN") + C.Position =0 + ALMACEN = C.GetString("ID_ALMACEN") + C.Close + i_fotol.Visible = False + + Starter.skmt.Initialize(Starter.ruta,"kmt.db", True) + c=Starter.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 " & query & " 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") + + If PERFIL = "V-SUPER" Then + c2=Starter.skmt.ExecQuery("select PRECIO, NLISTA FROM LISTA_PRECIOS WHERE NLISTA = '10' AND CAT_GP_ID =" & "'" &L_PROID.TEXT&"' ORDER BY NLISTA ASC") + c2.Position=0 + l_precio.Text = c2.GetString("PRECIO") + c2.Close + Else + l_precio.Text = c.GetDouble("CAT_GP_PRECIO") + End If + 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") + precio2 = l_precio.Text + If l_marca.text = "PROMOS" And l_tipo.Text ="PROMOS" Then + DESC_PROMO.Visible = True + CC=Starter.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 = "4" + Else + CC.Close + CC=Starter.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 + + DD=Starter.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=Starter.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 + 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=Starter.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 + ' If t_venta.Text < 100 AND l_tipo.Text = "PROMOS" Then + 'Terminar.Visible = False + 'guardar.Visible = False + 'cantidad.Visible = False + 'nopromo.Visible = True + 'Else + 'cambio = 0 + Terminar.Visible = True + guardar.Visible = True + cantidad.Visible = True + nopromo.Visible = False + 'End If + + + Dim out As OutputStream + out = File.OpenOutput(Starter.ruta, "1.jpg", False) + out.WriteBytes(IMG_PASO, 0, IMG_PASO.Length) + out.Close + img_prod.Bitmap = LoadBitmap(Starter.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 YA NO PUEDE TENER ESTA PROMOCION") 'ignore + Panel1.Visible= False + End If + + If marca <> "PROMOS" Then + + If PERFIL = "PREVENTA" Then + + t_precio.Visible = False + LV_PRECIOS.Visible = False + + ELSE IF PERFIL = "V-ESPECIAL" Then + c=Starter.skmt.ExecQuery("select PRECIO, NLISTA FROM LISTA_PRECIOS WHERE NLISTA IN ('5','6','7','8','10') AND CAT_GP_ID =" & "'" &L_PROID.TEXT&"' ORDER BY NLISTA ASC") + LV_PRECIOS.Clear + Dim label1 As Label + label1 = LV_PRECIOS.TwoLinesLayout.Label + label1.TextSize = 10 + label1.TextColor = Colors.Black + Dim label2 As Label + label2 = LV_PRECIOS.TwoLinesLayout.SecondLabel + label2.TextSize = 10 + label2.TextColor = Colors.Black + + If c.RowCount>0 Then + For i=0 To c.RowCount -1 + c.Position=i + LV_PRECIOS.AddTwoLines(c.GetString("NLISTA"),c.GetString("PRECIO")) + Next + End If + ELSE IF PERFIL = "V-MINI" Then + t_precio.Visible = False + LV_PRECIOS.Visible = False + + c=Starter.skmt.ExecQuery("select PRECIO, NLISTA FROM LISTA_PRECIOS WHERE NLISTA = '2' AND CAT_GP_ID =" & "'" &L_PROID.TEXT&"' ORDER BY NLISTA ASC") + c.Position=0 + l_precio.Text = c.GetString("PRECIO") + c.Close + ELSE IF PERFIL = "V-COSTO" Then + + t_precio.Visible = False + LV_PRECIOS.Visible = False + + c=Starter.skmt.ExecQuery("select PRECIO, NLISTA FROM LISTA_PRECIOS WHERE NLISTA = '9' AND CAT_GP_ID =" & "'" &L_PROID.TEXT&"' ORDER BY NLISTA ASC") + c.Position=0 + l_precio.Text = c.GetString("PRECIO") + c.Close + ELSE IF PERFIL = "V-SUPER" Then + + t_precio.Visible = False + LV_PRECIOS.Visible = False + + c=Starter.skmt.ExecQuery("select PRECIO, NLISTA FROM LISTA_PRECIOS WHERE NLISTA ='9' AND CAT_GP_ID =" & "'" &L_PROID.TEXT&"' ORDER BY NLISTA ASC") + c.Position=0 + l_precio.Text = c.GetString("PRECIO") + c.Close + End If + End If +End Sub + +Sub guardar_Click + If cantidad.Text = "" Then + Panel1.Visible= False + 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 + Starter.skmt.ExecNonQuery("delete from PROIDID") + + Starter.skmt.ExecNonQuery2("INSERT INTO PROIDID VALUES (?)", Array As Object(L_PROID.text)) + c=Starter.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)") + c.Position =0 + If c.GetString("CUANTOSD") = 0 Then + Msgbox("No tiene venta el cliente para la promo", "ADVERTENCIA") 'ignore + Else + c=Starter.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)") + C.Position =0 + TOT_ART_PROMO = C.GetString("TOT_ART_PROMO") + COSTO_TOT = C.GetString("COSTO_TOT") + C.Close + + c=Starter.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 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=Starter.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 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 + '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. + Starter.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=Starter.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") + If D.RowCount>0 Then + For i=0 To D.RowCount -1 + D.Position=i + + Starter.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=Starter.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 AND CAT_DP_TIPO = 1") + If D.RowCount>0 Then + For i=0 To D.RowCount -1 + D.Position=i + + Starter.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=Starter.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + + c=Starter.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=Starter.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + '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=Starter.skmt.ExecQuery("select count(*) as CUANTOS FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) and CAT_DP_TIPO = 0 AND CAT_DP_PRECIO = 0") + If e.GetString("CUANTOS") > 0 Then + F=Starter.skmt.ExecQuery("select CAT_DP_IDPROD, CAT_DP_PZAS FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) and CAT_DP_TIPO = 0 AND CAT_DP_PRECIO = 0") + 'se coloco el if por la mala promocion. + For i=0 To F.RowCount -1 + F.Position=i + h=Starter.skmt.ExecQuery2("select CAT_GP_NOMBRE from " & query & " where CAT_GP_ID = ? ", Array As String(f.GetString("CAT_DP_IDPROD"))) + h.Position=0 + Starter.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_TIPO,PE_PRECIO2) VALUES(?,?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (L_PROID.text,0, 0, f.GetString("CAT_DP_PZAS") * cantidad.text, h.GetString("CAT_GP_NOMBRE"), f.GetString("CAT_DP_IDPROD"),clie_id, sDate & sTime, usuario,cl_ruta,"VENTA",precio2)) + h.Close + Next + f.Close + End If + e.Close + Starter.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_TIPO,PE_PRECIO2) VALUES(?,?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (L_PROID.text,0, 0, cantidad.text, l_desc.text, L_PROID.Text,clie_id, sDate & sTime, usuario,cl_ruta,"VENTA",precio2)) + Starter.skmt.ExecNonQuery2("update " & query & " 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 = "" + Panel1.Visible= False + else If l_marca.text = "PROMOS" And l_tipo.Text ="PROMOS" And PROMO_C = 0 Then + Starter.skmt.ExecNonQuery("delete from PROIDID") + Starter.skmt.ExecNonQuery2("INSERT INTO PROIDID VALUES (?)", Array As Object(L_PROID.text)) + c=Starter.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=Starter.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=Starter.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=Starter.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=Starter.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=Starter.skmt.ExecQuery2("select CAT_GP_NOMBRE from " & query & " where CAT_GP_ID = ? ", Array As String(f.GetString("CAT_DP_IDPROD"))) + h.Position=0 + Starter.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_TIPO,PE_PRECIO2) 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,"VENTA",precio2)) + h.Close + Next + f.Close + End If + e.Close + Starter.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_TIPO,PE_PRECIO2) VALUES(?,?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (L_PROID.text,0, 0, cantidad.text, l_desc.text, L_PROID.Text,clie_id, sDate & sTime, usuario,cl_ruta,"VENTA",precio2)) + Starter.skmt.ExecNonQuery2("update " & query & " set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cantidad.Text, L_PROID.Text)) + cantidad.Text = "" + c=Starter.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 + Starter.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") + Starter.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"))) + Starter.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + Panel1.Visible= False + Else + DateTime.DateFormat = "MM/dd/yyyy" + sDate=DateTime.Date(DateTime.Now) + sTime=DateTime.Time(DateTime.Now) + c=Starter.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + c=Starter.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=Starter.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + + Starter.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_TIPO,PE_PRECIO2) 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,"VENTA",precio2)) + Starter.skmt.ExecNonQuery2("update " & query & " set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cantidad.Text, L_PROID.Text)) + c=Starter.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 + Starter.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") + Starter.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"))) + Starter.skmt.ExecNonQuery("UPDATE kmt_info set gestion = 2 where CAT_CL_CODIGO In (select cuenta from cuentaa)") + Panel1.Visible= False + 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 + Starter.skmt.ExecNonQuery("delete from PROIDID") + Starter.skmt.ExecNonQuery2("INSERT INTO PROIDID VALUES (?)", Array As Object(L_PROID.text)) + c=Starter.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)") + c.Position =0 + If c.GetString("CUANTOSD") = 0 Then + Msgbox("No tiene venta el cliente para la promo", "ADVERTENCIA") 'ignore + Else + c=Starter.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)") + C.Position =0 + TOT_ART_PROMO = C.GetString("TOT_ART_PROMO") + COSTO_TOT = C.GetString("COSTO_TOT") + C.Close + c=Starter.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 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=Starter.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 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 + 'en pe_cedis meto el codigo de promocion para hacer esta validacion. + Starter.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=Starter.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") + If D.RowCount>0 Then + For i=0 To D.RowCount -1 + D.Position=i + Starter.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=Starter.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 AND CAT_DP_TIPO = 1") + If D.RowCount>0 Then + For i=0 To D.RowCount -1 + D.Position=i + Starter.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=Starter.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + c=Starter.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=Starter.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=Starter.skmt.ExecQuery("select count(*) as CUANTOS FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) and CAT_DP_TIPO = 0 AND CAT_DP_PRECIO = 0") + e.Position =0 + If e.GetString("CUANTOS") > 0 Then + F=Starter.skmt.ExecQuery("select CAT_DP_IDPROD, CAT_DP_PZAS FROM CAT_DETALLES_PAQ WHERE CAT_DP_ID IN (Select PROIDID from PROIDID) and CAT_DP_TIPO = 0 AND CAT_DP_PRECIO = 0") + 'meter el otro + F.Position =0 + h=Starter.skmt.ExecQuery2("select CAT_GP_NOMBRE from " & query & " where CAT_GP_ID = ? ", Array As String(f.GetString("CAT_DP_IDPROD"))) + h.Position=0 + Starter.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_TIPO,PE_PRECIO2) VALUES(?,?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (L_PROID.text,0, 0, f.GetString("CAT_DP_PZAS") * cantidad.text, h.GetString("CAT_GP_NOMBRE"), f.GetString("CAT_DP_IDPROD"),clie_id, sDate & sTime, usuario,cl_ruta,"VENTA",precio2)) + h.Close + f.Close + End If + e.Close + Starter.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_TIPO,PE_PRECIO2) VALUES(?,?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (L_PROID.text,0, 0, cantidad.text, l_desc.text, L_PROID.Text,clie_id, sDate & sTime, usuario,cl_ruta,"VENTA",precio2)) + Starter.skmt.ExecNonQuery2("update " & query & " 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 = "" + Panel1.Visible= False + B4XPages.ShowPage("Cliente") + else If l_marca.text = "PROMOS" And l_tipo.Text ="PROMOS" And PROMO_C = 0 Then + Starter.skmt.ExecNonQuery("delete from PROIDID") + + Starter.skmt.ExecNonQuery2("INSERT INTO PROIDID VALUES (?)", Array As Object(L_PROID.text)) + c=Starter.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=Starter.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=Starter.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=Starter.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=Starter.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=Starter.skmt.ExecQuery2("select CAT_GP_NOMBRE from " & query & " where CAT_GP_ID = ? ", Array As String(f.GetString("CAT_DP_IDPROD"))) + h.Position=0 + Starter.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_TIPO,PE_PRECIO2) 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,"VENTA",precio2)) + h.Close + Next + f.Close + End If + e.Close + Starter.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_TIPO,PE_PRECIO2) VALUES(?,?,?,?,?,?,?,?,?,?,?,?) ", Array As Object (L_PROID.text,0, 0, cantidad.text, l_desc.text, L_PROID.Text,clie_id, sDate & sTime, usuario,cl_ruta,"VENTA",precio2)) + Starter.skmt.ExecNonQuery2("update " & query & " set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cantidad.Text, L_PROID.Text)) + cantidad.Text = "" + c=Starter.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 + Starter.skmt.ExecNonQuery("delete from pedido_cliente where PC_CLIENTE In (select cuenta from cuentaa)") + Starter.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"))) + Starter.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=Starter.skmt.ExecQuery("Select CUENTA from cuentaa") + c.Position=0 + clie_id = c.GetString("CUENTA") + c.Close + c=Starter.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=Starter.skmt.ExecQuery("select USUARIO from usuarioa") + c.Position=0 + usuario = c.GetString("USUARIO") + + Starter.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_TIPO,PE_PRECIO2) 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,"VENTA",precio2)) + Starter.skmt.ExecNonQuery2("update " & query & " set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cantidad.Text, L_PROID.Text)) + Panel1.Visible= False + B4XPages.ShowPage("Cliente") + End If +End Sub + +Sub i_fotol_Click + i_fotol.Visible = False + +End Sub + +Sub DESC_PROMO_Click 'BORRAR +' Starter.skmt.ExecNonQuery("delete from PROIDID") +' Starter.skmt.ExecNonQuery2("INSERT INTO PROIDID VALUES (?)", Array As Object(L_PROID.text)) +' B4XPages.ShowPage("Detalle_Promo") +End Sub + +Sub nopromo_Click 'BORRAR +' c=Starter.skmt.ExecQuery2("select CAT_VA_VALOR from CAT_VARIABLES WHERE CAT_VA_DESCRIPCION = ?", Array As String ("CAMBIOS")) +' c.Position =0 +' CAMBIOS = c.GetString("CAT_VA_VALOR") +' c.Close +' If CAMBIOS = "1" Then +' c=Starter.skmt.ExecQuery("select COUNT(*) AS CUANTOS from HIST_RMI WHERE HR_CLIENTE IN (Select CUENTA from cuentaa) and HR_PROID = '" & L_PROID.Text & "'") +' c.Position =0 +' EXISTE_CAMBIO = c.GetString("CUANTOS") +' c.Close +' If EXISTE_CAMBIO = 0 Then +' EXISTE_CAMBIO = 0 +' Else +' c=Starter.skmt.ExecQuery("select SUM(HR_CANT) AS CUANTOS from HIST_RMI WHERE HR_CLIENTE IN (Select CUENTA from cuentaa) and HR_PROID = '" & L_PROID.Text & "'") +' c.Position =0 +' EXISTE_CAMBIO = c.GetString("CUANTOS") +' c.Close +' End If +' If EXISTE_CAMBIO = 0 Then +' Msgbox("NO SE VENDIO ESTE PRODUCTO, NO SE PUEDE CAMBIAR","ALERTA") 'ignore +' ELSE If cantidad.Text = "" Then +' Msgbox("Cantidad no puede ser 0","Cantidad") 'ignore +' Else If cantidad.Text > EXISTE_CAMBIO Then +' Msgbox("Exede la existencia", "ADVERTENCIA") 'ignore +' Else +' DateTime.DateFormat = "MM/dd/yyyy" +' sDate=DateTime.Date(DateTime.Now) +' sTime=DateTime.Time(DateTime.Now) +' c=Starter.skmt.ExecQuery("Select CUENTA from cuentaa") +' c.Position=0 +' clie_id = c.GetString("CUENTA") +' c=Starter.skmt.ExecQuery("select USUARIO from usuarioa") +' c.Position=0 +' usuario = c.GetString("USUARIO") +' Starter.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_TIPO,PE_PRECIO2) VALUES(?,?,?,?,?,?,?,?,?,?,?) ", Array As Object ("DUR",0,0, cantidad.text,"CAMBIO" & l_desc.text, L_PROID.Text,clie_id, sDate & sTime, usuario,"VENTA",precio2)) +' Starter.skmt.ExecNonQuery2("update " & query & " set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cantidad.Text, L_PROID.Text)) +' cantidad.Text = "" +' Panel1.Visible= False +' End If +' Else +' If cantidad.Text > 15 Then +' Msgbox("Exede la existencia", "ADVERTENCIA") 'ignore +' Else +' DateTime.DateFormat = "MM/dd/yyyy" +' sDate=DateTime.Date(DateTime.Now) +' sTime=DateTime.Time(DateTime.Now) +' c=Starter.skmt.ExecQuery("Select CUENTA from cuentaa") +' c.Position=0 +' clie_id = c.GetString("CUENTA") +' c=Starter.skmt.ExecQuery("select USUARIO from usuarioa") +' c.Position=0 +' usuario = c.GetString("USUARIO") +' +' Starter.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_TIPO,PE_PRECIO2) VALUES(?,?,?,?,?,?,?,?,?,?,?) ", Array As Object ("DUR",0,0, cantidad.text,"CAMBIO" & l_desc.text, L_PROID.Text,clie_id, sDate & sTime, usuario,"VENTA",precio2)) +' Starter.skmt.ExecNonQuery2("update " & query & " set cat_gp_almacen = cat_gp_almacen - ? where cat_gp_id = ? ", Array As Object(cantidad.Text, L_PROID.Text)) +' cantidad.Text = "" +' Panel1.Visible= False +' End If +' End If +End Sub + +Sub LV_PRECIOS_ItemClick (Position As Int, Value As Object) 'BORRAR +' c=Starter.skmt.ExecQuery("select PRECIO, NLISTA FROM LISTA_PRECIOS WHERE NLISTA = " & "'" & Value &"' AND CAT_GP_ID =" & "'" &L_PROID.TEXT&"' ORDER BY NLISTA ASC") +' c.Position=0 +' l_precio.Text = c.GetString("PRECIO") +' c.Close +End Sub + +'**************************************************************************** +'***************** PARA EL MAS/MENOS ************************************* +'**************************************************************************** + +Sub B_MENOS_Click + If cantidad.Text = "" Then + cantidad.Text = "" + Else IF cantidad.Text > 0 Then + cantidad.Text = cantidad.Text -1 + End If +End Sub + +Sub B_MAS_Click + If cantidad.Text = "" Then + cantidad.Text = 1 + Else + cantidad.Text = cantidad.Text + 1 + End If +End Sub + +Sub llenaProductos(limpiar As Boolean) + If limpiar Then clv_productos.Clear + Private c2 As Cursor +' c2 = Starter.skmt.ExecQuery("select REP_CLIENTE, REP_PRONOMBRE, REP_CANT, REP_COSTO_TOT, REP_PRECIO, REP_PRODID from REPARTO where REP_RECHAZO = 1 and REP_CANT <> '0'") + c2 = Starter.skmt.ExecQuery("Select rep_cliente As cliente, rep_prodid As prodid, rep_pronombre As nombre, rep_precio As precio, rep_cant As cantidad, rep_prodregistro as registro, 'r' as f from reparto where REP_RECHAZO = 1 And REP_CANT > 0 order by REP_PRODID") +' Private cv As Cursor = Starter.skmt.ExecQuery("Select v_cliente_orig As cliente, V_PRODID As prodid, V_PRODNOMBRE As nombre, V_PRECIO As precio, v_cantidad As cantidad, v_prodregistro as registro, 'v' as f from ventas where V_CLIENTE in (select cuenta from cuentaa)") + + Private bgColor, textColor As Int + bgColor = Colors.RGB(177, 200, 249)'azul + clv_productos.Clear : Log("limpiamos productos") + If c2.RowCount > 0 And clv_productos.Size <> c2.RowCount Then + Log("****** TRAEMOS RECHAZOS DESDE REPARTO") + For i=0 To c2.RowCount -1 + c2.Position=i + Private inv, inv2 As Int + If c2.GetString("f") = "r" Then + inv = c2.GetString("cantidad") + inv2 = 0 + Else + inv = 0 + inv2 = c2.GetString("cantidad") + End If +' LogColor($"${c2.GetString("nombre")}, ${c2.GetString("precio")}, ${inv}, ${inv2}, ${c2.GetString("cliente")}"$, Colors.Blue) + textColor = Colors.Black + clv_productos.Add(CreateListItem(c2.GetString("nombre"), Subs.traePrecio(c2.GetString("prodid"), 1), inv, inv2, c2.GetString("cliente"), clv_productos.AsView.Width, 50dip, bmp, c2.GetString("prodid"), bgColor, textColor), c2.GetString("nombre")) + Next + End If +' If cv.RowCount > 0 Then +' Log("******+ VENTAS") +' For i=0 To cv.RowCount -1 +' cv.Position=i +' Private inv, inv2 As Int +' If cv.GetString("f") = "r" Then +' inv = cv.GetString("cantidad") +' inv2 = 0 +' Else +' inv = 0 +' inv2 = cv.GetString("cantidad") +' End If +' LogColor($"${cv.GetString("nombre")}, ${cv.GetString("precio")}, ${inv}, ${inv2}, ${cv.GetString("cliente")}"$, Colors.red) +' textColor = Colors.Black +' clv_productos.Add(CreateListItem(cv.GetString("nombre"), cv.GetString("precio"), inv, inv2, cv.GetString("cliente"), clv_productos.AsView.Width, 50dip, bmp, cv.GetString("prodid"), bgColor, textColor), cv.GetString("nombre")) +' Next +' End If +' ponProdsEnCero + c2.Close +End Sub + +Sub CreateListItem(Text As String, precioU As String, inv As Int, inv2 As Int, cliente As String, 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") +' Log($"***************** PROD=${prodId}, INV2=${inv2}, INV=${inv}"$) + If inv2 <> "0" Then l_vendido.Visible = True +' Log($"***************** PROD=${prodId}, INV2=${inv2}, INV=${inv}"$) + p_prods.Color = bc + l_prodX.TextColor = tc + l_prodX.Text = Text&CRLF&"# " & inv & " $ " & precioU + l_prodX.Tag = $"ID: ${prodId}${CRLF}${Text}${CRLF}Precio: $$1.2{precioU}${CRLF}Inv: ${inv} pzs"$ + l_vendido.Tag = precioU&"|"&inv&"|"&prodId&"|"&inv2&"|"&cliente + p_prods.Tag = precioU&"|"&inv&"|"&prodId&"|"&inv2&"|"&cliente + l_pCant.Tag = precioU&"|"&inv&"|"&prodId&"|"&cliente + et_pCant.Tag = precioU&"|"&inv&"|"&prodId&"|"&cliente +' l_pCant.Text = 0 +' et_pCant.Text = inv2 + et_pCant.BringToFront +' i_prod.Bitmap = img + Return p +End Sub + +Sub p_prods_Click + Log(Sender.As(Panel).tag) +End Sub + +Sub b_prodMenos_Click + etCantHasFocus = False + LogColor("b_prodMenos_Click", Colors.Magenta) + Dim index As Int = clv_productos.GetItemFromView(Sender) + Dim pnl0 As B4XView = clv_productos.GetPanel(index) + Dim pnl As B4XView = pnl0.GetView(0) + Dim laCant As B4XView = pnl.GetView(2).GetView(3) +' Log(pnl.GetView(2).GetView(0) & "|" & pnl.GetView(2).GetView(1) & "|" & pnl.GetView(2).GetView(2)) +' Log($"precio|stock:${laCant.tag}"$) + If laCant.Text = "" Then laCant.Text = 0 + laCant.Text = $"$1.0{laCant.Text-1}"$ + If laCant.Text < 0 Then laCant.Text = 0 + + Dim esteTag As List = Regex.Split("\|", laCant.Tag) + Log($"ACTUALIZAMOS REPARTO"$) + Private precio As String = Subs.traePrecio(esteTag.Get(2), 1) + Private prodId As String = esteTag.Get(2) + Private clienteOriginal As String = esteTag.get(3) + Starter.skmt.ExecNonQuery2("update HIST_VENTAS set HVD_PARCIAL = 1, HVD_CANT = 0, HVD_COSTO_TOT = '0' WHERE HVD_PROID = ? and HVD_CLIENTE in (Select CUENTA from cuentaa)", Array As String(prodId)) + Starter.skmt.ExecNonQuery($"update reparto set REP_CANT = REP_CANT + 1 where REP_CLIENTE = '${clienteOriginal}' and REP_CLI_ORIG = '${clienteOriginal}' and REP_RECHAZO = 1 and REP_PRODID = '${prodId}'"$) + Starter.skmt.ExecNonQuery($"update reparto set REP_CANT = REP_CANT - 1 where REP_CLIENTE in (Select CUENTA from cuentaa) and REP_CLI_ORIG = '${clienteOriginal}' and REP_RECHAZO = 0 and REP_PRODID = '${prodId}'"$) +' Log($"update reparto set REP_CANT = REP_CANT + 1 where REP_CLIENTE = '${clienteOriginal}' and REP_CLI_ORIG = '${clienteOriginal}' and REP_RECHAZO = 1 and REP_PRODID = '${prodId}'"$) +' Log($"update reparto set REP_CANT = REP_CANT - 1 where REP_CLIENTE in (Select CUENTA from cuentaa) and REP_CLI_ORIG = '${clienteOriginal}' and REP_RECHAZO = 0 and REP_PRODID = '${prodId}'"$) + Starter.skmt.ExecNonQuery($"update reparto set REP_COSTO_TOT = REP_CANT * ${precio}, REP_PRECIO = '${precio}' where REP_CLIENTE in (Select CUENTA from cuentaa) and REP_CLI_ORIG = '${clienteOriginal}' and REP_PRODID = '${prodId}'"$) + +' Dim chk As B4XView = pnl.GetView(2) + cuentaProds +End Sub + +Sub b_prodMas_Click + etCantHasFocus = False + LogColor("b_prodMas_Click", Colors.Magenta) + Dim index As Int = clv_productos.GetItemFromView(Sender) + Dim pnl0 As B4XView = clv_productos.GetPanel(index) + Dim pnl As B4XView = pnl0.GetView(0) + Dim laCant As B4XView = pnl.GetView(2).GetView(3) +' Log(pnl.GetView(2).GetView(1).text&"|"&pnl.GetView(2).GetView(2)&"|"&pnl.GetView(2).GetView(4).text) + Log($"precio|stock:${laCant.tag}"$) + Log($"Indice: ${index}, cant:${laCant.Text+1}, precioU: ${laCant.tag}"$) + Dim esteTag As List = Regex.Split("\|", laCant.Tag) + Log("LC_TEXT:"&laCant.Text&"|LC_TAG:"&laCant.Tag&"|ET:"&esteTag) + If laCant.Text = "" Then laCant.Text = 0 + If laCant.Text + 1 <= esteTag.get(1) Then + laCant.Text = $"$1.0{laCant.Text+1}"$ + LogColor("XXXXXXXXX " & esteTag, Colors.Green) + Private precio As String = Subs.traePrecio(esteTag.Get(2), 1) + + Private rv As Cursor = Starter.skmt.ExecQuery($"select count(*) as hayVenta from REPARTO where REP_PRODID = '${esteTag.Get(2)}' and REP_CLIENTE in (Select cuenta from cuentaa) and REP_CLI_ORIG = '${esteTag.Get(3)}'"$) + rv.Position = 0 + If rv.GetString("hayVenta") = 0 Then + Log("Insertamos en REPARTO") + Private cp As Cursor = Starter.skmt.ExecQuery($"select * from HIST_VENTAS where HVD_PROID = '${esteTag.Get(2)}' and HVD_CLIENTE = '${esteTag.get(3)}'"$) + If cp.RowCount > 0 Then + cp.Position = 0 + Starter.skmt.ExecNonQuery2("insert into reparto(REP_CLIENTE, REP_PRONOMBRE, REP_CANT, REP_COSTO_TOT, REP_FECHA, REP_RECHAZO, REP_PRODID, REP_PRECIO, REP_PRODREGISTRO, REP_CLI_ORIG) VALUES (?,?,?,?,?,1,?,?,?,?) ", Array As String(Subs.traeCliente, cp.GetString("HVD_PRONOMBRE"), 0, cp.GetString("HVD_COSTO_TOT"), Subs.fechaKMT(DateTime.now), cp.GetString("HVD_PROID"), precio, 50, esteTag.get(3))) + Starter.skmt.ExecNonQuery2("insert into reparto(REP_CLIENTE, REP_PRONOMBRE, REP_CANT, REP_COSTO_TOT, REP_FECHA, REP_RECHAZO, REP_PRODID, REP_PRECIO, REP_PRODREGISTRO, REP_CLI_ORIG) VALUES (?,?,?,?,?,0,?,?,?,?) ", Array As String(Subs.traeCliente, cp.GetString("HVD_PRONOMBRE"), laCant.text, cp.GetString("HVD_COSTO_TOT"), Subs.fechaKMT(DateTime.now), cp.GetString("HVD_PROID"), precio, 50, esteTag.get(3))) + Starter.skmt.ExecNonQuery($"update reparto set REP_CANT = REP_CANT - 1, REP_PRECIO = '${precio}', REP_COSTO_TOT = ((REP_CANT - 1) * REP_PRECIO) where REP_CLIENTE = '${esteTag.get(3)}' and REP_CLI_ORIG = '${esteTag.get(3)}' and REP_RECHAZO = 1 and REP_PRODID = '${esteTag.Get(2)}'"$) + Starter.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen + ? where cat_gp_nombre = ?", Array As Object(laCant.Text, cp.GetString("HVD_PRONOMBRE"))) + End If + Else +' Log($"update reparto set REP_CANT = REP_CANT - 1, REP_PRECIO = '${precio}', REP_COSTO_TOT = '0' where REP_CLIENTE = '${esteTag.get(3)}' and REP_CLI_ORIG = '${esteTag.get(3)}' and REP_RECHAZO = 1 and REP_PRODID = '${esteTag.Get(2)}'"$) +' Log($"update reparto set REP_CANT = REP_CANT + 1, REP_PRECIO = '${precio}', REP_COSTO_TOT = '0' where REP_CLIENTE in (Select CUENTA from cuentaa) and REP_CLI_ORIG = '${esteTag.get(3)}' and REP_RECHAZO = 0 and REP_PRODID = '${esteTag.Get(2)}'"$) + Starter.skmt.ExecNonQuery($"update reparto set REP_CANT = REP_CANT - 1, REP_PRECIO = '${precio}', REP_COSTO_TOT = '0' where REP_CLIENTE = '${esteTag.get(3)}' and REP_CLI_ORIG = '${esteTag.get(3)}' and REP_RECHAZO = 1 and REP_PRODID = '${esteTag.Get(2)}'"$) + Starter.skmt.ExecNonQuery($"update reparto set REP_CANT = REP_CANT + 1, REP_PRECIO = '${precio}', REP_COSTO_TOT = '0' where REP_CLIENTE in (Select CUENTA from cuentaa) and REP_CLI_ORIG = '${esteTag.get(3)}' and REP_RECHAZO = 0 and REP_PRODID = '${esteTag.Get(2)}'"$) + Starter.skmt.ExecNonQuery($"update reparto set REP_COSTO_TOT = REP_CANT * ${precio} where REP_CLIENTE in (Select CUENTA from cuentaa) and REP_CLI_ORIG = '${esteTag.get(3)}' and REP_RECHAZO = 1 and REP_PRODID = '${esteTag.Get(2)}'"$) + End If + cuentaProds + End If +' Log($"Total Prods: ${totalProds}, Total Compra: $$1.2{totalCompra}"$) +End Sub + +Private Sub et_pCant_TextChanged (Old As String, New As String) +' LogColor($"txt changed: ${Old}|${New}, hasfocus=${etCantHasFocus}"$,Colors.Magenta) + If Not(Old = "0" And New = "") And etCantHasFocus Then cuentaProds +End Sub + +Private Sub et_pCant_FocusChanged (HasFocus As Boolean) +' LogColor($"focus changed=${HasFocus}"$, Colors.Magenta) + etCantHasFocus = HasFocus + cuentaProds +End Sub + +Sub cuentaProds +' Log("CUENTAPRODS") + totalProds = 0 + totalCompra = 0 + For i = 0 To clv_productos.GetSize - 1 + Private p0 As B4XView = clv_productos.GetPanel(i) + Private p As B4XView = p0.GetView(0) +' Log($"${p.GetView(2).GetView(0)}, ${p.GetView(2).GetView(1)}, ${p.GetView(2).GetView(2)}, ${p.GetView(2).GetView(3)}"$) + Private cant1 As B4XView = p.GetView(2).GetView(3) + If cant1.Text = "" Then cant1.Text = 0 + totalProds = totalProds + cant1.Text + Private esteTag As List = Regex.Split("\|", cant1.Tag) +' Log(esteTag) + Private prodId As String = esteTag.Get(2) + Private m As Map +' Log($"CANTIDAD = ${cant1.text}"$) + If cant1.Text > esteTag.Get(1) Then cant1.Text = esteTag.Get(1) + If cant1.Text > 0 Then 'Lo agregamos al mapa +' Log(esteTag.Get(2) & "|" & cant1.Text) + Log("Cant > 0") + totalCompra = totalCompra + (esteTag.get(0) * cant1.text) + Log($"${esteTag.Get(2)}, Cant: ${cant1.Text}, Suma: ${esteTag.get(0) * cant1.text}"$) + m=CreateMap("cant":cant1.Text, "precio":esteTag.get(0), "cli_ori":esteTag.get(3)) + prodsMap.Put(esteTag.Get(2), m) + prodsListId.Add(esteTag.Get(2)) + prodsListCliOrig.Add(esteTag.get(3)) + prodsList.Add(m) + Else 'Si la cantidad es CERO lo quitamos del mapa. +' Log($"QUITAMOS EL PRODS POR CERO : ${esteTag.Get(2)}, ${esteTag.Get(3)}"$) +' Log($"${esteTag.Get(2)}, Cant: ${cant1.Text}, Suma: ${esteTag.get(0) * cant1.text}"$) + prodsMap.Remove(esteTag.Get(2)) + Private indice As Int = -1 +' For q=0 To prodsList.Size-1 +' If prodsListId.Get(q) = esteTag.Get(2) And prodsListCliOrig = esteTag.Get(3) Then +'' prodsList.RemoveAt(q) +' indice = q +' prodsListId.RemoveAt(q) +' prodsListCliOrig.RemoveAt(q) +' End If +' Next + If indice > -1 Then prodsList.RemoveAt(indice) +' prodsList.Get(0) + End If + l_total.Visible = True + l_totProds.Visible = True + l_total.Text = $"Total: $$1.2{totalCompra}"$ + l_totProds.text = $"Prods: ${totalProds}"$ + Next +' LogColor($"prodsmap=${prodsMap}"$, Colors.blue) +' LogColor($"prodsListID=${prodsListId} ${CRLF}prodsList=${prodsList} ${CRLF}prodsListCliOrig=${prodsListCliOrig}"$, Colors.Magenta) + p_botonesVenta.Visible = True + Log($"Total Prods: ${totalProds}, Total Compra: $$1.2{totalCompra}"$) +End Sub + +Private Sub b_terminar1_Click + Log("b_terminar1_Click") +' cuentaProds +' Private p1 As Map +' Log(Subs.fechaKMT(DateTime.Now)) +' For Each p As String In prodsMap.Keys +' p1 = prodsMap.Get(p) +' Log(p & "|" & p1) +' Private pn As String = Subs.traeNombre(p) +' LogColor($"---------------- prodsMap= ${prodsMap}"$, Colors.Magenta) +' Log($"Guardamos ${p}-${pn}, cant=${p1.Get("cant")}, precio=${p1.Get("precio")}"$) +' Starter.skmt.ExecNonQuery($"update REPARTO set REP_CANT = REP_CANT - ${p1.Get("cant")} where REP_PRODID = '${p}' and REP_RECHAZO = 1 and REP_CLIENTE = '${p1.Get("cli_ori")}' and REP_CLI_ORIG = '${p1.Get("cli_ori")}'"$) +' Starter.skmt.ExecNonQuery($"update REPARTO set REP_CANT = REP_CANT + ${p1.Get("cant")} where REP_PRODID = '${p}' and REP_RECHAZO = 0 and REP_CLIENTE in (select cuenta from cuentaa) and REP_CLI_ORIG = '${p1.Get("cli_ori")}'"$) +' Starter.skmt.ExecNonQuery($"update CAT_GUNAPROD set CAT_GP_ALMACEN = CAT_GP_ALMACEN - ${p1.Get("cant")} where CAT_GP_ID = '${p}'"$) +' +' Private rv As Cursor = Starter.skmt.ExecQuery($"select count(*) as hayVenta from REPARTO where REP_PRODID = '${p}' and REP_CLIENTE in (Select cuenta from cuentaa)"$) +' rv.Position = 0 +' Log($"+++++++++++++++ PRODSMAP = ${p1}"$) +' If rv.GetString("hayVenta") = 0 Then +' Log("Insertamos en REPARTO") +' Starter.skmt.ExecNonQuery2("insert into reparto(REP_CLIENTE, REP_PRONOMBRE, REP_CANT, REP_COSTO_TOT, REP_FECHA, REP_RECHAZO, REP_PRODID, REP_PRECIO, REP_PRODREGISTRO, REP_CLI_ORIG) VALUES (?,?,?,?,?,1,?,?,?,?) ", Array As String(Subs.traeCliente, pn, 0, p1.Get("cant") * p1.Get("precio"), Subs.fechaKMT(DateTime.now), p, p1.Get("precio"), 50, p1.Get("cli_ori"))) +' Starter.skmt.ExecNonQuery2("insert into reparto(REP_CLIENTE, REP_PRONOMBRE, REP_CANT, REP_COSTO_TOT, REP_FECHA, REP_RECHAZO, REP_PRODID, REP_PRECIO, REP_PRODREGISTRO, REP_CLI_ORIG) VALUES (?,?,?,?,?,0,?,?,?,?) ", Array As String(Subs.traeCliente, pn, p1.Get("cant"), p1.Get("cant") * p1.Get("precio"), Subs.fechaKMT(DateTime.now), p, p1.Get("precio"), 50, p1.Get("cli_ori"))) +' Starter.skmt.ExecNonQuery2("update cat_gunaprod set cat_gp_almacen = cat_gp_almacen + ? where cat_gp_nombre = ?", Array As Object(p1.Get("cant"), pn)) +' End If +' Next + ya_entro = "0" : Log("ya_entro=1") +'' lv_promos.Visible = False +' clv_productos.AsView.Visible = False +' lv_catalogos.Visible = True +' Log("Terminar") +'' clv_productos.Clear +' ponProdsEnCero + prodsMap.Initialize + B4XPages.ShowPage("Cliente") +End Sub + +Private Sub p_prods_LongClick + Log($"${Sender.As(Panel).tag}"$) + Private esteTag As List = Regex.Split("\|", Sender.As(Panel).Tag) + Log($"|${esteTag.Get(3)}|"$) + If esteTag.Get(3) <> "0" Then + Log("VENDIDO") + borraProdVenta(esteTag.Get(2)) + Else + Log("NO VENDIDO") + End If +End Sub + +Private Sub l_vendido_LongClick + Log($"${Sender.As(Label).tag}"$) + Private esteTag As List = Regex.Split("\|", Sender.As(Label).Tag) + Log($"|${esteTag.Get(3)}|"$) + If esteTag.Get(3) <> "0" Then + Log("VENDIDO") + borraProdVenta(esteTag.Get(2)) + Else + Log("NO VENDIDO") + End If +End Sub + +Sub borraProdVenta(prodId) + Private cant As Int = 0 + Private cliOrig As String = "" + Private RES As String = Msgbox2("Seguro que desea borrar este producto?","Borrar", "Si", "", "No",LoadBitmap(File.DirAssets,"alert2.png")) 'ignore + If RES = DialogResponse.POSITIVE Then +' Private rr As Cursor = Starter.skmt.ExecQuery($"select REP_CANT from REPARTO where REP_PRODID = '${prodId}' and REP_RECHAZO = 0 and REP_CLIENTE in (select CUENTA from CUENTAA)"$) + LogColor($"Buscamos - ${prodId}, ${cant}"$, Colors.Blue) + Private rr As Cursor = Starter.skmt.ExecQuery($"select * from VENTAS where V_CLIENTE in (select CUENTA from CUENTAA) and V_PRODID = '${prodId}'"$) + Log($"ID=${prodId}, RC=${rr.RowCount}"$) + If rr.RowCount > 0 Then 'Si hay producto con venta en VENTAS ... + rr.Position = 0 + cant = rr.GetInt("V_CANTIDAD") + cliOrig = rr.GetString("V_CLIENTE_ORIG") + LogColor($"Hay prod con venta en VENTAS - ${prodId}, ${cant}"$, Colors.Blue) + Starter.skmt.ExecNonQuery($"update CAT_GUNAPROD set CAT_GP_ALMACEN = CAT_GP_ALMACEN + ${cant} where CAT_GP_ID = '${prodId}'"$) + End If + Starter.skmt.ExecNonQuery($"update REPARTO set REP_CANT = REP_CANT + ${cant} where REP_RECHAZO = 1 and REP_PRODID = '${prodId}' and REP_CLIENTE = '${cliOrig}'"$) + Starter.skmt.ExecNonQuery($"update REPARTO set REP_CANT = REP_CANT - ${cant} where REP_RECHAZO = 0 and REP_PRODID = '${prodId}' and REP_CLIENTE = '${cliOrig}'"$) + Starter.skmt.ExecNonQuery($"delete from VENTAS where V_PRODID = '${prodId}' and V_CLIENTE_ORIG = '${cliOrig}' and V_CLIENTE in (select CUENTA from CUENTAA)"$) + B4XPages.ShowPage("Cliente") + End If +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..8371da5 --- /dev/null +++ b/B4A/C_TicketsDia.bas @@ -0,0 +1,24 @@ +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 +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_UpdateAvailable.bas b/B4A/C_UpdateAvailable.bas new file mode 100644 index 0000000..62c83f8 --- /dev/null +++ b/B4A/C_UpdateAvailable.bas @@ -0,0 +1,74 @@ +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") +' ToastMessageShow("Descargando actualización", True) + 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/CameraExClass.bas b/B4A/CameraExClass.bas new file mode 100644 index 0000000..1743551 --- /dev/null +++ b/B4A/CameraExClass.bas @@ -0,0 +1,290 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=7.01 +@EndOfDesignText@ + +'Class module +'version 1.20 +'See this page for the list of constants: +'http://developer.android.com/intl/fr/reference/android/hardware/Camera.Parameters.html +'Note that you should use the constant values instead of the names. +Sub Class_Globals + Private nativeCam As Object + Private cam As Camera + Private r As Reflector + Private target As Object + Private event As String + Public Front As Boolean + Type CameraInfoAndId (CameraInfo As Object, Id As Int) + Type CameraSize (Width As Int, Height As Int) + Private parameters As Object +End Sub + +Public Sub Initialize (Panel1 As Panel, FrontCamera As Boolean, TargetModule As Object, EventName As String) + target = TargetModule + event = EventName + Front = FrontCamera + Dim id As Int + id = FindCamera(Front).id + If id = -1 Then + Front = Not(Front) 'try different camera + id = FindCamera(Front).id + If id = -1 Then + ToastMessageShow("No camera found.", True) + Return + End If + End If + cam.Initialize2(Panel1, "camera", id) +End Sub + +Private Sub FindCamera (frontCamera As Boolean) As CameraInfoAndId + Dim ci As CameraInfoAndId + Dim cameraInfo As Object + Dim cameraValue As Int + If frontCamera Then cameraValue = 1 Else cameraValue = 0 + cameraInfo = r.CreateObject("android.hardware.Camera$CameraInfo") + Dim numberOfCameras As Int = r.RunStaticMethod("android.hardware.Camera", "getNumberOfCameras", Null, Null) + For i = 0 To numberOfCameras - 1 + r.RunStaticMethod("android.hardware.Camera", "getCameraInfo", Array As Object(i, cameraInfo), _ + Array As String("java.lang.int", "android.hardware.Camera$CameraInfo")) + r.target = cameraInfo + If r.GetField("facing") = cameraValue Then + ci.cameraInfo = r.target + ci.Id = i + Return ci + End If + Next + ci.id = -1 + Return ci +End Sub + +Private Sub SetDisplayOrientation + r.target = r.GetActivity + r.target = r.RunMethod("getWindowManager") + r.target = r.RunMethod("getDefaultDisplay") + r.target = r.RunMethod("getRotation") + Dim previewResult, result, degrees As Int = r.target * 90 + Dim ci As CameraInfoAndId = FindCamera(Front) + r.target = ci.CameraInfo + Dim orientation As Int = r.GetField("orientation") + If Front Then + previewResult = (orientation + degrees) Mod 360 + result = previewResult + previewResult = (360 - previewResult) Mod 360 + Else + previewResult = (orientation - degrees + 360) Mod 360 + result = previewResult + Log(previewResult) + End If + r.target = nativeCam + r.RunMethod2("setDisplayOrientation", previewResult, "java.lang.int") + r.target = parameters + r.RunMethod2("setRotation", result, "java.lang.int") + CommitParameters +End Sub + +Private Sub Camera_Ready (Success As Boolean) + If Success Then + r.target = cam + nativeCam = r.GetField("camera") + r.target = nativeCam + parameters = r.RunMethod("getParameters") + SetDisplayOrientation + Else + Log("success = false, " & LastException) + End If + CallSub2(target, event & "_ready", Success) +End Sub + +Sub Camera_Preview (Data() As Byte) + If SubExists(target, event & "_preview") Then + CallSub2(target, event & "_preview", Data) + End If +End Sub +Public Sub TakePicture + cam.TakePicture +End Sub + +Private Sub Camera_PictureTaken (Data() As Byte) + CallSub2(target, event & "_PictureTaken", Data) +End Sub + +Public Sub StartPreview + cam.StartPreview +End Sub + +Public Sub StopPreview + cam.StopPreview +End Sub + +Public Sub Release + cam.Release +End Sub + +'Saves the data received from PictureTaken event +Public Sub SavePictureToFile(Data() As Byte, Dir As String, FileName As String) + Dim out As OutputStream = File.OpenOutput(Dir, FileName, False) + out.WriteBytes(Data, 0, Data.Length) + out.Close +End Sub + +Public Sub SetParameter(Key As String, Value As String) + r.target = parameters + r.RunMethod3("set", Key, "java.lang.String", Value, "java.lang.String") +End Sub + +Public Sub GetParameter(Key As String) As String + r.target = parameters + Return r.RunMethod2("get", Key, "java.lang.String") +End Sub + +Public Sub CommitParameters + Try + r.target = nativeCam + r.RunMethod4("setParameters", Array As Object(parameters), Array As String("android.hardware.Camera$Parameters")) + Catch + ToastMessageShow("Error setting parameters.", True) + Log(LastException) + End Try +End Sub + +Public Sub GetColorEffect As String + Return GetParameter("effect") +End Sub + +Public Sub SetColorEffect(Effect As String) + SetParameter("effect", Effect) +End Sub + +Public Sub GetSupportedPicturesSizes As CameraSize() + r.target = parameters + Dim list1 As List = r.RunMethod("getSupportedPictureSizes") + Dim cs(list1.Size) As CameraSize + For i = 0 To list1.Size - 1 + r.target = list1.Get(i) + cs(i).Width = r.GetField("width") + cs(i).Height = r.GetField("height") + Next + Return cs +End Sub + +Public Sub SetPictureSize(Width As Int, Height As Int) + r.target = parameters + r.RunMethod3("setPictureSize", Width, "java.lang.int", Height, "java.lang.int") +End Sub + +Public Sub SetJpegQuality(Quality As Int) + r.target = parameters + r.RunMethod2("setJpegQuality", Quality, "java.lang.int") +End Sub + +Public Sub SetFlashMode(Mode As String) + r.target = parameters + r.RunMethod2("setFlashMode", Mode, "java.lang.String") +End Sub + +Public Sub GetFlashMode As String + r.target = parameters + Return r.RunMethod("getFlashMode") +End Sub + +Public Sub GetSupportedFlashModes As List + r.target = parameters + Return r.RunMethod("getSupportedFlashModes") +End Sub + +Public Sub GetSupportedColorEffects As List + r.target = parameters + Return r.RunMethod("getSupportedColorEffects") +End Sub + +Public Sub GetPreviewSize As CameraSize + r.target = parameters + r.target = r.RunMethod("getPreviewSize") + Dim cs As CameraSize + cs.Width = r.GetField("width") + cs.Height = r.GetField("height") + Return cs +End Sub + +Public Sub GetPictureSize As CameraSize + r.target = parameters + r.target = r.RunMethod("getPictureSize") + Dim cs As CameraSize + cs.Width = r.GetField("width") + cs.Height = r.GetField("height") + Return cs +End Sub + +'Converts a preview image formatted in YUV format to JPEG. +'Note that you should not save every preview image as it will slow down the whole process. +Public Sub PreviewImageToJpeg(data() As Byte, quality As Int) As Byte() + Dim size, previewFormat As Object + r.target = parameters + size = r.RunMethod("getPreviewSize") + previewFormat = r.RunMethod("getPreviewFormat") + r.target = size + Dim width = r.GetField("width"), height = r.GetField("height") As Int + Dim yuvImage As Object = r.CreateObject2("android.graphics.YuvImage", _ + Array As Object(data, previewFormat, width, height, Null), _ + Array As String("[B", "java.lang.int", "java.lang.int", "java.lang.int", "[I")) + r.target = yuvImage + Dim rect1 As Rect + rect1.Initialize(0, 0, r.RunMethod("getWidth"), r.RunMethod("getHeight")) + Dim out As OutputStream + out.InitializeToBytesArray(100) + r.RunMethod4("compressToJpeg", Array As Object(rect1, quality, out), _ + Array As String("android.graphics.Rect", "java.lang.int", "java.io.OutputStream")) + Return out.ToBytesArray +End Sub + +Public Sub GetSupportedFocusModes As List + r.target = parameters + Return r.RunMethod("getSupportedFocusModes") +End Sub + +Public Sub SetContinuousAutoFocus + Dim modes As List = GetSupportedFocusModes + If modes.IndexOf("continuous-picture") > -1 Then + SetFocusMode("continuous-picture") + Else If modes.IndexOf("continuous-video") > -1 Then + SetFocusMode("continuous-video") + Else + Log("Continuous focus mode is not available") + End If +End Sub + +Public Sub SetFocusMode(Mode As String) + r.target = parameters + r.RunMethod2("setFocusMode", Mode, "java.lang.String") +End Sub + +Public Sub GetFocusDistances As Float() + Dim F(3) As Float + r.target = parameters + r.RunMethod4("getFocusDistances", Array As Object(F), Array As String("[F")) + Return F +End Sub +'This method should only be called if you need to immediately release the camera. +'For example if you need to start another application that depends on the camera. +Public Sub CloseNow + cam.Release + r.target = cam + r.RunMethod2("releaseCameras", True, "java.lang.boolean") +End Sub +'Calls AutoFocus and then takes the picture if focus was successfull. +Public Sub FocusAndTakePicture + cam.AutoFocus +End Sub +Private Sub Camera_FocusDone (Success As Boolean) + If Success Then + TakePicture + Else + Log("AutoFocus error.") + End If +End Sub + + + diff --git a/B4A/DBRequestManager.bas b/B4A/DBRequestManager.bas new file mode 100644 index 0000000..b3d83a1 --- /dev/null +++ b/B4A/DBRequestManager.bas @@ -0,0 +1,272 @@ +B4A=true +Group=Default Group +ModulesStructureVersion=1 +Type=Class +Version=7.01 +@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 - 211023 +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 +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) + + 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) + 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 + 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.Blue) 'Mod por CHV - 211023 + jobTagAnterior = Job.Tag 'Mod por CHV - 211023 + 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 + 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/Files/alert2.png b/B4A/Files/alert2.png new file mode 100644 index 0000000000000000000000000000000000000000..44d3b7e651884f30ca0811371860a2c872077175 GIT binary patch literal 632 zcmV-;0*C#HP)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&PV000029qX%a+GMXQ$LSen>t%?#a*r8U}Olp5mHS_w@%R25Nc zdMtxVQEHiKs_n5>1tUaiQU_fyTAKN_bEe;W_uTvLeeZtn-Sf_sOh{${l$*1wGXR1B z073(h@PTwd7AdWygx;ALC5(!)iaG{^MPZcpDnXWtDh8*5(amz8V*)5AC%1doZgmt&)m&Fok3=LAO)ZF)7DSSSs`;AjL=N=e7mD@gM@Ydy zBos4%*rBXai0`Z*3`)9_)832ha4}UmtV~xj2`E4tU}!iRI10pf%YcA30=R~P0d`+a zIE8?v+#atMr)86r2ZqI$RNbiPKpnAY$#Ck$)_4JbFtfK+zCGF|xtum){_|yYZgx|0 zM6`5Cy-u+7lzYsm%cMuxJ6X@4_7U>%_UlXo=AH7n)uC3!Zv-4s(x4%IPpNg1Mi zeqh7DbtmhYZ}Rb7Dj6p_y1cLxo!V=v&5bAfic9%VybGterLO*Wxh&mWBwJVv;O(qQ zLC%#b)k^U;4y_Q@mv0doslrXpnXI5I zB3swZ1IM%xFcb25s-R)T=a)!djew=S@RW2>tRT=}#Cy5Xjyh+0dV=Y?pXs_{kYHxj zIzw%EfKK=Is^i?%WNl@ZRfn@0>npRGQYUr0^St{>IR#H|w2L|Sy*%Te_LN*OZ zvARQdfSz15S6GTA(}HYFNBJ62O$YG%_>g^qJv~s` ztkqGMD9W9_|HGX7x@U_J+3H9`IvY5y*~By6k8GSjNuBy*y1jZkzf*to%e}3d5eX11 z0bcjdl)vEf={UK{pO{pgbCFkNcNg92^ zIgK?hZrQ|z*&>H=6}N>${3t;ieM5P2xaLv*cq(&&L9UqJBfhla1dc7moP5l44^0Z? zsXq^@sa{=RZ1U|6$~D#bS~zmX_{q=H)fVyvr?|)6TGiZD3EW}wxJOObpK6+&xW!%< zWW7^S&8zK$O^H$OSmHe0q;)}zuzkK<7{spBz824M4Gjzk4M5qiAOd>CQHRU0B~8t< zwM;OAn8Mn!^`CXAuQ_y~dC{DEGcMs%){Ea~o0(UP&U84-2YBQC+Un%9-)Si9e9IG$ zsq&pJ#y^gXHQr3*^@YeA;$V3W2?wlf&&G|ZSM(~8KQKdXd88E<@A34lHgck#+d3YT99NUdD^pah=URGQclB;?u{pTn9*Ztp~4hb(-CnjWDHZr&ivu&E8CR2&M3x|WX zmKsEnU818J9kLONw7HRcvE-Uv*QLHVJ(L#nU((r(s;89c{w}}z?$XLdTqIca8EI$YCjb+0G9mImj6`OtC{>L-el*Z%?ya$i^g literal 0 HcmV?d00001 diff --git a/B4A/Files/buscar.bal b/B4A/Files/buscar.bal new file mode 100644 index 0000000000000000000000000000000000000000..afb40f4ab89cf331cc282a9278a77863ce8ac3e0 GIT binary patch literal 2653 zcmZ`*O>7%g5MI}Ih)aM%DNRdDLQ|lS#w0+0XbFj9J57XR7vnZkC6v7EK4%v;yQ|%` z(-c)|#jyg>sz?-6i31130SSpK2QDq5hw>xfhI#{mP>_&NBO#gjX1(h=bu7*7%)EK? zX14h@$`+E-p)%_V$B}M|YzuRiU6+FKBiTHVEHFf>UwYPegZXW#f-2Bby!5@2emh{p0f9{E?zr1?m*~+dK7F_ORFg-zWJ4S1+&Zes}HkZ&$DUQ|i9dz4qDf|2nYp=f{-MF(PEHdX*JN?jk9-AUs1&=cH#WTGCC=NMD4VK&?Lc zb!yLpv?eTLN%)3sL*@fx=OkMY{ooBV39_0=L%} zi#XHA4#Z=Dvqc7V!!sxa99kEyAuN9wp-frzF&n<^VDqw}`8q=D(pc1eY}AFN>OmFt zK!oFwHx13hfDP{;)~ORbigyj^NC)o_%mBYx!`HL6OAYnH1x)^e?P}8Ha$4#v(gj*7 zZzv1RsCf*sDeK(Ub(aPOIYQG6YjL9q3a?wI>xjyQ>F5GsZP&p4#t;GSLVmI`SDrpL zRcX7`7`CeLeCn)in)zT30Nltkq03g$F zJmU<{Q?XRc!x+6;D6eW;er8#Eb}*?>;g3@Fj7c|ciK<6+*?h5*FV9Vt%G0Mx#Y(1t zrqkt;G-c+rYFi$o?n=*-8n%0cz9|caC4r~sub4c|#Zq}DQ{am$PxI)NrK*cFHd6D+ z#LdS5<6>8ZDiJrApUj*nR1miwrS$-5&9qMD%a!SDrVu=a=f=iKxD_Z$3SYdAsqlG> zy+}DTU3-YSP}BesM+z!!G#YzD3w@Qu6U4BA|7bL8$5R=l!pVI@7Dk|-gs2jR0?tnn z^)McQEy5$JG%6>+g9}H<7BHj)z(C;jamt#{{+xs;n7$(LETUs~)wRW7~9aVP+ zP6*k;36sUJ(l@}VH^gbr#yG(_@hq`mfQCt8obYhBaC$B@KTiUFi5G~a4uBCghvOiL zhhW0!A10#dna{ik%MoHxrx*`}WIS*ZEc%a literal 0 HcmV?d00001 diff --git a/B4A/Files/cliente.bal b/B4A/Files/cliente.bal new file mode 100644 index 0000000000000000000000000000000000000000..8806a17508b7b59464ed3a433dd60f6b2204ada3 GIT binary patch literal 18350 zcmeHOeQaCR6@Mm4sUZUfYYU8z*Oo$|5Spav2VbpgyRE^oL*lkuH*jCKw|5Dzw`XQoVb23 zj^=44(tSSn+JAo~gX}wnG z*xotKENUiM`%)9RC_YPht#0V$qW%$d2GZK3Uh*g)eQNAX8{+2ad_0!P@dTy3&aDSM z^bmJS=X2RyEG=v;AJdZjMvQ0qb2R;bM`>EUj7rdns<)M1CW#i2$VYO6zSbEq9uKC?f0AWKE6 z`KoD@3r1BdiT%d3vd@0f@4>{JW?qI5{zR+~--o=0R+lwzO$l$fgO8 zO;aZtjLOh&Z2D{uO=q+DANA1Zdg${!^v68(Di6KdL$C4B=X>Z2JoJSg`r{t@A`gAB zhrYx^U+SS%553kyuk+CBJv8lZpLc_Yz8th|w<|zzM7t90Di0r|@)X*o$7y|Hb7P%#Dw|)*mUne(Tt8pLqD9`>)BTx7~Mqm3dCj%q?%u6ffKN zc6@tH{ouLe$TN=~z4*cR@A~sIPyRi-@{yJA|LVOp?;QT=58iot_Qn&3{`vA>d;Ylo z=--}&Mo**BV+yt0(W*{cCMLC-Q5Z<*HDkK0n**bIU9)oweXWjpizOWTf>t(Wkq;{6 z#GEOgJa*C4j%br5od##4DwWY4_+31NJiikYuciS=3Eg;dT!i#rh26012XE z60kzWg#P1N(U_}oUd2SBs*76m`E+tmEQvr7Iaf^0 zl}Zx@Q`gHBkGL((74@7^FUib1w0Vs-q>aj0O{-Ql6S6>vr_{A+Dp=7Y@ciHp^1_5e53O4S)n zEL$oW)tYg)*eH|DBngWr8M8Z8Dc561^jgKTKf7E(tIWhoaLHL%l*cE2)DaG+!ziUx zp;E5#s8y|4G|JOlQNw3RPa9>OderJit!pHc9UqOQ#hLZH>eQ@`Pq8V&8ceZCbj3+a>?op08mp?lI#3~TDDLQc$6O5Z&c8uWy7HWnDh2+6Qa7~qp zZKad2{NatZ7oW&&nyHpF)so2#l2-9ltZ;#Q(+^T)E|ttAVjOVGhhZ*Cq{fr+cq*IW z*bYt=KaesaIgyJcvb^61H#;L+X})+ioz0|TG9>b4(KhzuW5RW7lO0?T69tkoG)zl* zsy+I2rlK~~mnmDsE}Epz1Bf$CjZGriR%CEQ4A>~xgtOJd84}Jm*Q2*H8br7%Ca=ka z?E;BiGzx166>$qh@`j`YYm}S9kob_giHMA9RZZAK?6DT*=k9DeLFY{%g#lx=sH<`a znK?{cr68u#saX_WvxX@{Td4Hzywtr^Zw&P;uL@m8-Fj|_gE6yi6y{15InIz(;z>Cx zlU?{nxL>XUO=MuZ7{;n<3Av&i+qnzGn^s4O@{=>8c1;m^2rLRALy6K6WSoL{gcT>q zMiU9N;ffRZA;`j^`J)US{`4|s^hFrPQJRPW+NZE&>x@4cL5H5um`15O@m$ zIzr%FIB_@xZtNxkH!Xs|uHZ3%)lD%#fgupsiRo4h6d!wAT=+NO1VexU=*GaGV0aPm zZ#xD!uA;S#fnAu?wHSzD^X3@n2muNVfxvD|_apEYI2|G2#6VyK;@HwcAOQ+UD$yh! z?me)_X72^D56zmr@On6bv3A!3#rC7QcVudDiLC^^YFr}s%tApohZA&MQCbLs9Hn=$ zTk94KH2ce8D`L|aT8kDzQ&bWg@sL}K)|6X|D*JCO3iSKSC^&s5zq>M+VtEbjTnW3| zv1>c8aWkVEx8JejmhVjd%t`InqG7;u3$nwSPwCC#Vfn!rDDj$GLGXx+xJN56y_FMI zD!t=)u-x$03KQr$s;KBhUcy66%PpNcNa_Gi_FHrfIC9^MsaPoUnx44`yG@5U31d7AW}Lyaq$yXPD{605|p{z(`lo+9J@^ zvg!adY)0T%Cow>QM1Z%2{H($=x`bGuR(>Q7g5%_nmf46&RgmCKEU}P_G>~94o-7u2 zVcg2c8$cm-DbfGlOWr52T{9Am>oUko-ok7|fgQ!dE(ll(0{3E_AaEB5LEsG#Dq7oE zh+|UM5cniEUsePtup%`*>)LP#xTQ)LV&KqnBS3*2Autmdfg3Q>y$_ri;6)q` zflpzD6$2l>V!#xrQRK1ME5@fW(j2jk+bfMBC)ca!Eb@x+I@taSjspGu()tzSHq0GC zi{6fh^@@QCT@v3gZXAEy2K##KACM#ho`V4K8dl&cnrQEw$GHVD(lAdRRM#@+VQk(4 zhah(sRyW~5fqooLT1jh|ZXsZQITO5&qlMkLb*cxak`7$QO+rxD5GY{tWkrAjLm)sa z`VpWuONjvofsGI#F%bA&hBZ*v5SYT|%?O03->|wV1}HED0@Il8M_?B?egqDJGVBocfJ~iq^J%<8|3J1PpAxtO!tG2n6oHbUy;Y>$esNJPwf(1A!5^6DzugKna^K zD*_Z40)bgf_ahLzerth%Q@;g9pxjLaD$9)k1%^PNx&VRif#c6Y!D=Dr9ylu!HU>U} zEv*W}j2m(4n;9Up^hrm5p z(KQ6|bWnlo?~ItHD)hQNK;d|45oz>X032?Y3KpjFl10)eX$nBlSz3q1>g zQ>*GVF-}{Sixnet&6Q^*i62bCH!f?W#Y>pXOM9|KQJ@&iCf8*@{D35+8a^pl=wy3R5+EO^95x&}%5Ljn{k)Q`Vr#U$TkUd>uW%*DUpS zbdJ|Je+KCMeaS{_;zYqZbR-<`+4vnDGW99xHKA@Ok*JGaJUvjPL5R3asMuZ`bnk0E&cT+ z1^RIq0;lCaEPV@u76OWLT*9sgr`rZ@`+r#4gIR9eu0l@)+zbIyBOC%pMQi)b;G>w- zH3S~R<{cm~hUI<)C@=&9t1;b1z%t-c5nut}M}W$yXl)UA9Fw|+z_+n^2MADiKLQjO z0)Zzm-A16Z82C9P`4PAY92KoC0#9O6*ARFLn|FW!Q>`BX3Jih3YD~8g2pa?RaW@Nn TfSwEMAkYY16f9oY-wM++-w9JG!y-*?zWf`~2S9 z^GnhoF&IoBG^ygp(4@f+kOo4C{V9UMpGioFF$p0+2n6bn{QxA8iYE9m#1F#vo#*@f z+&ZbtA~8qzzH`q#_uO;7bMCoUNg0N*Z<}H4!1s2v?P$45pjK3{b_?jN9-Q_~&$IkA zc;%(zR*+YIYbOP!mV>}`+S3Ezgp7BJVBHGlmjiRgsktG;R!vWtKA9=XE-p;xWS>G+ z1tsf3&{jk{G>f*)G|jqoN?EI;yD-W|!dTHfGJ245T-p{{68X`Iu?uKg-m^`orc9ZmJk9fb zx28gsFJn0TEd8SQBNuw2r7GFH)lzlG^0Ozcz|`l5p$#A>8Kjx*3}T2(M>WkrxlVrB zmoG7?`sS)xwyk@5D9^X&veU>mUym5gtX|eVMdZt_U$uN$(HWjr)u6$&W8V7Asfz2v z{&};imRpo_ePua;n8nm97LJvc=4XzdC^2CyhbC5;m(~izX3eHWTPp%?SNWh-o>{Fbr@oOLQmMp_cnu3x+RAIGPYb5AbF&4a z)~S08YRz?m+^W@b!*FrP1r%)LY-Df~0bpuQ7iLR^`K1$c^D}4WW=pvucSN#UC=B*Y z#dV~pwqU1i6_sNV!&b0nOB`qC=1=B|lKrUeG%dhaLdSUVNYu=VMQ8JcW4Xm*i3Y4h z2C$5^4LDVpFU?HniVV%@om|l4yhXPFEx+cT*wbT`jzo4!1x?e_Ll(BqN$Q@XJGdJx z)>Rc)&9dBqWqa9TiK8!d-{ciaoMV@dgw(fMEvrf=#^`Ef@EBS9HmW1~hLQTA2eI2v zv*doPnXLfF&9&`9csQy00mj9&y@uSpa<`Gaf1@4s^(#B-LF}58yPE;6xqijUyN=`< zYXjkFC`Y2ruSA=Y%JG&1ebP&XM@vir&uq0;QJ1)C6|W2$HO@_Woy4!2F0@7|cHn*J zdSyZQ2D$cq^3fjhI^fv_R5;7VRZkA;$@?MP$pD!p%37W#R#i)ipXM=J+x0Nc^1_&F z7NLk9QOt>wvYMVNHRm7?SDCLB{cxf*A5a-G==DS>5_?KfM=^X^QNS=hcXSfO>*2si z^UF6zT0bTdUjd8xK!%ZKRg`%uVoV0s$wm_m1b$#0Kc=&ASjE#cgTEwkP9^AjnxOFH zrR2?#O7OKIyYk5)vwU}?^}|C5o-~*}Dvb(tPRmq8ON#cl#4n9&-+jOn)zO_mFI zR7mg!w;{It6A-!b0ko8{AANcpU4-cYa=86Lw1M?2c2!WO>IqIALiZqv!{{Qk1oseE zreFtmt`h|pKnU*l!Gp;D47lP^qzMdp-5bdxpu&WF2$bM{6hsI2NzKlIm_kcWqsyZu zR?+bnKXC<&Gib7(SU^k#LFyF*@s&4!n!=r|BVfnSQXQPcDX^}>AR#_(fB{v={39Ux z!r(Xrw-SRB(3e5$3j+#o6$T7{lt_ZXcfpCGkikG~x=R!Iw)0>HREWXDpd=4I4x*C> zTUV5e(0fvJXV7;*+6ht;g&TJ#3YT<)6dfh;_YCGEr()%45-K~#g#L+mbWFxEFYx#v zGML6Erip{3bhGF~cAt*r6)Yz5)dlMt{TD1ILU+NU z!frVGEL7F6UJ(F!rmt71!b8fSb|OGiL_u^&lbG-8kbVM7!wAfSk_aq-h}HEHhF8OM zHn#|F%8=@Q3S z#}h`tz?weMWa2)~En=^cw{Yk`1yv!Y4}lU)k5YTYp499dh$*!66X-T9{!5t5pmhM= zr1(>~8@&I$_|sy6lHM@M5{J=Ah)HC~LF?2A4#Jat7F39V2}&?1gXmyT(QMu~7FsBM zk7o1T)z3MHn31fZ>wmowf8@&g`VFmL9~%0%)ERoiU+8kL8q>h+wTEYeM-h>bvq7Zf zZ14rreKx4DS9mwAGzyCjqRI1K0!qc#t2CQFiK0r=_jBMJwtV|$MEEb&L=@4@Gh$>d z4R0j(i6ri#5&17bXFa$^vR6i&$HbOq1Qp(JM%Y;Nf6s^}jCi|d#QOU9c=s9KJR?xU s;Y}6nA%u6n86r^WOV?e`J1> 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¨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 hm<6DKuWz+}dnxpqib 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 literal 0 HcmV?d00001 diff --git a/B4A/Files/durakelo1.png b/B4A/Files/durakelo1.png new file mode 100644 index 0000000000000000000000000000000000000000..00cb4343cd75a44401cfac77698d76428ce8d9a7 GIT binary patch literal 5896 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 N002ovPDHLkV1l*Gg!=#h literal 0 HcmV?d00001 diff --git a/B4A/Files/foto.bal b/B4A/Files/foto.bal new file mode 100644 index 0000000000000000000000000000000000000000..9cf56b7898176bebdfe18f262a558152e1d05adb GIT binary patch literal 2561 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 literal 0 HcmV?d00001 diff --git a/B4A/Files/guna_viejo.png b/B4A/Files/guna_viejo.png new file mode 100644 index 0000000000000000000000000000000000000000..a0c3190d89de628813950f908de2b6727367808a GIT binary patch literal 20988 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 RELZ>l002ovPDHLkV1gG_=_~*M literal 0 HcmV?d00001 diff --git a/B4A/Files/historico.bal b/B4A/Files/historico.bal new file mode 100644 index 0000000000000000000000000000000000000000..929cd7583e83376ca882e9c818dc26ca6ac7ba77 GIT binary patch literal 7732 zcmeHMU2Ggz6`qZ~PBu-;Pk_)u13XniT6_WYBb9ZKT zoOK*0fxNKNxpVHh_nv#scg{U?$4+XRc43pIZN>9`&=ydp;+sv=Klg6%13_oj)$4V` z-3-}WdCqZN{XPzlH+Ym0e@OH9XyAuVOXJb)#xlo%eEGw&D5C;wjTu zYOUp*NJvfjayBzvx|g%_`kZ04CMG$=K26D&ONCMG|AkP@D>S zEtPaS5OsmKnnU;CQ7_kB)2^6x-4ZKibUS8+^nsl=BioitzhOBIrRqoyV`jA^BxdU-QLE(5B&Q<9{}xW<39*K&;wR`3DkR@ zR?x=%U-{YAO@rHVjo*E5`BJ+7YNhW>Z+-s7H(#6Y-~QHR<7@Z#?i+o*@Pm_GU#$N% zwR!RFC%=4YVMl4~`+xcNcXy7w@~d-uzw_XxpI-Xb#fyX6kMzvG@(p{_jy=B_+jen( zCcA4_=1lLEm%9G6XaCRr;b9XM|IdXS=o*vGt1c}s|N+g#Lr z)3GNSt~}{=)zz2uIm_7HLHR^$Y#{4cjvMrd=0LD4KEwdxY*Yw2|n+6!x0B4wvzLDH>y zO;_42v+kLn6QHLH(>Y?GDg*bMcWghiWO$B>AG@4PlxrCaDZPk@Fjup==~Av(o-7on zP8X(8;A9uJK^3W#moUAe5ee&XRq{3;78-494?5jq>r7_%UcaA@h30 zpuZEjqnVTW5>++B?O9z~+n>r6OH-Ytgvr}c|?!ovV{hHT3A6e>HR!-$K zRS(gYRw<|5On%}vT__$`n-8Q;RZCk@j1D?iCLkjRcV%9)3DqUn^0(fg_MJB$caxa;r8_@@h=k>+9Weg9fAq%gwCSGSe>JxZb2Nj1|(&|sj!DF$SvOU<6 zSzY}YXU3)wRUYQYDcW7pEvlZu>)SJ`k~;+2!};}T7T-q7>>#?_`9#fGQo$Wx{n96{ zhaW)G30HMzxc)xz(GK&2qdaf|#nK=Sl%OCHsi-W=C~XVoGd5MzlR6s6h(N2fwu|b@ z>p;ZhY+ZSzMyOFH(0HL(%oOR`5k@V#@DRsh>+-{4O?zQ<49uIVqow#{KBj`}K;o+q zF<&XrQq(Tv+>zRPRwxFE2JY6gf*)&&NEodYW58cGp-d*|UW$J6;3egTkWBE7AiMH{ zAfvn`q=IXLFuWtASOgico|V7-YlYw@6RZGT528s_(eRWA(;G19faxOx()t62o$g&| zx<0~&-PA*9#L3-YBH#A};+ypy^R@1W(Qtv*<~#EzG$oBrVi}Dfz%4^h1PV^x3)&`l z5H_A2!6WoEbVuPKj#Fg>3_1!JGBW-&fJmd0H~?QmYeG$&w;GszkO?r4fLQ|=))i=8 zJ3A1yHL_y>t5T1mX@lwjx_qUIze8Yv<#J}2k`Xka-Dz|Z#7j`5eS+diFpq&`xxh(< z5u60~ASkIF;;h4HLUfN%!fbmS)U#6k`rCpxI@-rTsVC4pN#-duA#QCEU@}G#$e|Z1 zkO;g6Ng9-3j)b0snjnCSorBdZVN zMRg?@!BA*!8XZaM_?3W|#1A7C#!dPM)Mg^&&nIW{ljO$B)IGuGLInAWiY8{ z(deL_l`mX=XO5Bz8rq-46l@-9it_vh1%ONFWmEtt;jg<>j13H|j`6c=UHfR1#F&1E zwILp3D%=ZFpLzT)34OX@u!)%pHa@H*R^07Yf=%y50V|CJJG_BE14R2E6=3@V2G3TA z=fSBEFMwmLQarN}@Ma)B1LiD9&5p%Gz8qIDwgnVbW^`JC3BDYuHvV@73z7~R*HZLr zbLTx+k+@#b;>Hx6SN|L7pa^<8CytGQ)rr&kUbwzEu--}H5KT!O1}L65R2WYj2a;s_ zXYDZv!n!M84RuIV*5Hpd67)le?X6_ZtI#A0{s9G&H5VXBgVrq(&tcO4vj%77UI4*g qw=|u~jf;`n$eLv=k7o@PZa8Z^EV?sUvlW_dF>A201yr2VwEqCbZKiPm literal 0 HcmV?d00001 diff --git a/B4A/Files/infonavit1.jpg b/B4A/Files/infonavit1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b8cce4c0421c69dfd07a7b13d4487ef5edeb186c GIT binary patch literal 30576 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 HXXZZu3mh}r literal 0 HcmV?d00001 diff --git a/B4A/Files/itembuttonblue.png b/B4A/Files/itembuttonblue.png new file mode 100644 index 0000000000000000000000000000000000000000..af4dc0b6e6fb333c43e978d6194936f4a8c52d92 GIT binary patch literal 2647 zcmb_edo+~m8h@oi8KbKyF;P2_E_R)bq=_LpGOn{lcH^4Z&DfO&k&%#FS$kKMM4bw; z45Kv1Wl-8FijhksB$vr0Gn&DSnfbo+PHSbIy;`k({y2Zk%scPz{XLi8`#jJ0B|DSs zFiX}h0RUj^57@W@umFMUHr2)OTk>2h0{*D|cEIx#0NXYwK1vby2z0o)Cd~Fwm|N)4 zuyEg#fxs#t)Gu(oJ=HfT&^6FEAo9eEz&(&SWN%~T9`SafmvB5gNT+U!7uj;+kL4~K z+;O<&m;Y&e;FXV>9(h;Nx!cO!IJIRIFO{@{=?*Znr-3h0PBMoRwp558Mq;BtA?z?Kk32)B?I}>+?Y4S~n?rD4Vfs#!wsaW2& zgJ(n3qcjn7F;U&a&m}s4jB2e6fQ711@{l`uH({oKF8yw;2k*nt!vh3K^TaN&`nN0A|vw zr4)LTgDHdp8U{l1@o=xAOvZbs?Y5mTPWy9lD_Zjr8a~V1OqwB$?y2YMpt3Pb!#T!y zay0-u^mAB3LUcoI5+k=uUSl+wbT%MN9Fxvtf z%^-IDv%?JU6{0U6y75d2fQy&VH>tS#ru}gJ>S`9+lVAeCKA{=|fMfqQdK#+wWuc$A z!In&~P9#8UmPk?I+MUquF=knzmu*3#zk+-5XR|?g-54!m-;@fB&`GQe>Xbgl3@A1| zmOv|JxOhlc*xLs&@B|NlCTzjFBb%$Jic_z!sD)xv11SD|g<}QKnu54q2E8bduNJmcXxSB67ESZ;xD)NlR1rQjixjVliF&0T$`)p-2+J@Zasi^bv_j_a}oD(^iL zR#~<XxxHue*KUOE-`i?2?OTmGD;Dlj)NR{~;aar6nh>O=s(m(laK_k~9EN`J&Q) zU)7gHyNU$qEWsZ+uv$fe?J4yQiYr;Gi|mI(_V2ZtSN{9ie;=7Af1}tu@)xqAF6WWb z^rxL?71>}+_agVYP5dEtR64=yucS5nf6BE-4aHUFK^Yve=rE~gCG67C0SX;|eF1DY za)roDR;3VVZPA0}NFeWaFzg^=akjuP<)nF7RkH+E%8JucZ8;}X=Qu*# zw~I(3(J$lWG3fd09Z_5RFgGuGNMQT9TyYW@YaAcxuZ*BMiYXX*ko2en7SXXri_b#1 zb?VsE%$P&Ordo=`zLm1*f^@Txrh($wWe{L+Fvp4CaxjvD{sVpV^tAEy1HZ zXk+kUbs-~TGLa+|P6y3-M28QTOI0pX1(N3Y2L9*iMgf7U_pt4UG>)d%;EDl(Sc|yI zs|LQJlpb!p$0a?+XYdouWV(EfRAl151=0p8DeW8tvHoi3Dh z02FKx3x!lIJ}s;y-Bpwu^L9H8hxDYNz1-c|NS>}^!LJ#%z8U3dWz&m@1y%>qN7Ut@ z?l%dhA|rDoDxaD&Fc@aeLDV>hm!Rhs?Td-4Ye~cVFpN@(!M=>=>q9)ddp6#uUiryB zWam%xmzo-}viM%wtjkBbZoCnmwc!FtqJ7fyy)&hJ=R z?x$L`GmmN^Q&|lp%VKxRo3PP3uoB;R+h+=In7?(45@S78vq>KLuZL~WGi=VtI2Jy3 zR1vnTpucO*-wNKoC E01Tvq<^TWy literal 0 HcmV?d00001 diff --git a/B4A/Files/kelloggs.png b/B4A/Files/kelloggs.png new file mode 100644 index 0000000000000000000000000000000000000000..4debf15bad095c8d26059c74de12ca143916e922 GIT binary patch literal 4718 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