]> git.llucax.com Git - z.facultad/75.06/emufs.git/blob - emufs_gui/genera_art/genera_fact.c
6086566331cacdb7f3ff0f1fcd9130a7e4dbd8ec
[z.facultad/75.06/emufs.git] / emufs_gui / genera_art / genera_fact.c
1
2 #include "dict.h"
3
4 void separar_string(char *s, int *numero, float *precio)
5 {
6         /* Bueno el ' ' y reemplazo por \0 */
7         int pos, len;
8         len = strlen(s);
9         pos = 0;
10         while ((s[pos] != '\0') && (s[pos] != ' ')) pos++;
11         if (pos == len) {
12                 *numero = 0;
13                 *precio = 0.0f;
14         }
15         s[pos] = '\0';
16         *numero = atoi(s);
17         *precio = atof(s+pos+1);
18
19         /* Dejo todo como esta! */
20         s[pos] = ' ';
21 }
22
23 int main(int argc, char *argv[])
24 {
25         t_Dict *articulos;
26         t_Dict *notas;
27         FILE *fp;
28         int numero, i,j, cant_items, CANT;
29         float precio;
30         int co, cr, ch;
31         char *s;
32
33         if (argc != 3) {
34                 printf("Modo de uso :\n");
35                 printf("\t#> %s salida.xml <cantidad de facturas a generar>\n", argv[0]);
36                 return 1;
37         }
38
39         CANT = atoi(argv[2]);
40
41         co = cr = ch = 0;
42
43         if ((fp=fopen(argv[1], "rt")) == NULL) {
44                 printf("No se pudo generar archivo de salida.\n");
45                 return 1;
46         }
47
48         articulos = dict_crear("articulos.txt");
49         if (articulos == NULL) {
50                 printf("No se encontro registro de articulos (articulos.txt). Es posible que deba correr generar_art primero.");
51                 return 1;
52         }
53         notas = dict_crear("notas.txt");
54         
55         fprintf(fp, "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n");
56         fprintf(fp, "<FACTURAS>\n");
57         for(i=0; i<CANT; i++) {
58                 fprintf(fp, "\t<FACTURA NroFac=\"%d\" ", i);
59                 fprintf(fp, "FechaEmisión=\"2004%02d%02d\" ", (i<(CANT/2))?4:5, al_azar(1, 30));
60                 /* Genero la info importante */
61                 /* Selecciono la forma de Pago (FP) */
62                 if (i < CANT*0.3) { /* FP = "CH" */
63                         fprintf(fp, " FP=\"CH\" ");
64                         ch++;
65                         if (ch <= CANT*0.3*0.2) {
66                                 fprintf(fp, " Estado=\"SF\" ");
67                         } else if (ch <= CANT*0.3*0.5) {
68                                 fprintf(fp, " Estado=\"NC\" ");
69                         } else if (ch <= CANT*0.3) {
70                                 fprintf(fp, " Estado=\"PN\" ");
71                         }
72                         fprintf(fp, "NroCheque=\"%04d-%03d-%05d-%03d\" ", al_azar(1, 9999), al_azar(1, 999), al_azar(1, 99999), al_azar(1, 999));
73                 } else  if (i < CANT*0.6) { /* FP = "CR" */
74                         fprintf(fp, " FP=\"CR\" ");
75                         cr++;
76                         if (cr <= CANT*0.3*0.08) { /* Hasta el 8 % */
77                                 fprintf(fp, " Estado=\"CM\" ");
78                         } else if (cr <= CANT*0.3*0.4) { /* Desde 8 a 40 = 32% */
79                                 fprintf(fp, " Estado=\"CD\" ");
80                         } else if (cr <= CANT*0.3) { /* Desde 40 a 100 = 60% */
81                                 fprintf(fp, " Estado=\"PN\" ");
82                         }
83                         fprintf(fp, "NroCtaCte=\"%d\" ", al_azar(111111, 99999));
84                 } else  if (i < CANT) { /* FP = "CO" */
85                         fprintf(fp, " FP=\"CO\" Estado=\"PN\" ");
86                 }
87                 fprintf(fp, ">\n");
88                 fprintf(fp, "\t\t<NOTA>%s</NOTA>\n", dict_get_al_azar(notas));
89                 /* Veo cuantos items necesita esta factura */
90                 if (i < CANT) {
91                         cant_items = al_azar(2, 5);
92                 }
93                 if (i < CANT*0.6) {
94                         cant_items = 1;
95                 }
96                 if (i < CANT*0.3) {
97                         cant_items = al_azar(6, 10);
98                 }
99                 if (i < CANT*0.1) {
100                         cant_items = al_azar(10, 15);
101                 }
102                 for(j=0; j<cant_items; j++) {
103                         /* Obtengo un articulo al azar */
104                         s = dict_get_al_azar(articulos);
105                         separar_string(s, &numero, &precio);
106                         fprintf(fp, "\t\t<ITEMVENTA NroArtículo=\"%d\" CV=\"%d\" PVU=\"%.2f\" />\n", numero, al_azar(1, 10), precio);
107                 }
108                 fprintf(fp, "\t</FACTURA>\n");
109         }
110         fprintf(fp, "\t</FACTURAS>\n");
111
112         dict_destruir(articulos);
113         dict_destruir(notas);
114         return 0;
115 }
116