]> git.llucax.com Git - z.facultad/75.06/emufs.git/blob - gui/articulos.c
cce691a481ec57b42363fdf780bff5f83edbb3e5
[z.facultad/75.06/emufs.git] / gui / articulos.c
1
2 #include "articulos.h"
3
4 t_LstArticulos *lst_articulos;
5
6 t_LstArticulos *art_cargar(const char *filename)
7 {
8         xmlDocPtr document;
9         xmlNode *node;
10         int cant;
11         t_LstArticulos *tmp = (t_LstArticulos *)malloc(sizeof(t_LstArticulos));
12         if (tmp == NULL) return NULL;
13
14         document = xmlParseFile(filename);
15         if (document == NULL) {
16                 free(tmp);
17                 return NULL;
18         }
19
20         node = xmlDocGetRootElement(document);
21         while (node) {
22                 if (node->type == XML_ELEMENT_NODE) {
23                         if (strcmp(node->name, "ARTICULOS") == 0) {
24                                 node = node->children;
25                                 break;
26                         }
27                 }
28                 node = node->next;
29         }
30
31         /* Cuento la cantidad de articulos en el archivo */
32         cant = 0;
33         for ( ; node ; node = node->next) {
34                 if (node->type == XML_ELEMENT_NODE) {
35                         if (strcmp(node->name, "ARTICULO") == 0) {
36                                 ++cant;
37                         }
38                 }       
39         }
40         tmp->cant = cant;
41         tmp->array = (t_Articulo *)malloc(sizeof(t_Articulo)*cant);
42
43         if (tmp->array == NULL) {
44                 xmlFreeDoc(document);
45                 xmlCleanupParser();
46                 free(tmp);
47                 return NULL;
48         }
49
50         node = xmlDocGetRootElement(document);
51         while (node) {
52                 if (node->type == XML_ELEMENT_NODE) {
53                         if (strcmp(node->name, "ARTICULOS") == 0) {
54                                 node = node->children;
55                                 break;
56                         }
57                 }
58                 node = node->next;
59         }
60
61         /* leo los datos */
62         cant = 0;
63         for ( ; node ; node = node->next) {
64                 if (node->type == XML_ELEMENT_NODE) {
65                         if (strcmp(node->name, "ARTICULO") == 0) {
66                                 strncpy(tmp->array[cant].numero, xmlGetProp(node, "NroArticulo"), 8);
67                                 strncpy(tmp->array[cant].desc, xmlGetProp(node, "Descripcion"), 50);
68                                 strncpy(tmp->array[cant].presentacion, xmlGetProp(node, "Presentacion"), 30);
69                                 strncpy(tmp->array[cant].existencia, xmlGetProp(node, "Existencia"), 8);
70 //                              strncpy(tmp->array[cant].ubicacion, xmlGetProp(node, "Ubicacion"), 30);
71                                 strncpy(tmp->array[cant].pvu, xmlGetProp(node, "PVU"), 8);
72                                 strncpy(tmp->array[cant].emin, xmlGetProp(node, "Emin"), 8);
73                                 ++cant;
74                         }
75                 }
76         }
77         xmlFreeDoc(document);
78         xmlCleanupParser();
79
80         lst_articulos = tmp;
81         return tmp;
82 }
83
84 int art_liberar(t_LstArticulos *l)
85 {
86         if (l == NULL) l = lst_articulos;
87         if (l == NULL) return 1;
88
89         free(l->array);
90         free(l);
91
92         lst_articulos = NULL;
93         return 0;
94 }
95
96 t_Articulo *art_obtener(t_LstArticulos *lst, const char *numero)
97 {
98         int i, j;
99         int n = atoi(numero);
100
101         if (lst == NULL) lst = lst_articulos;
102
103         for(i=0; i<lst->cant; i++) {
104                 j = atoi(lst->array[i].numero);
105                 if (n == j)
106                         return &lst->array[i];
107         }
108
109         return NULL;
110 }
111
112 void art_modificar(char *s)
113 {
114         WINDOW *win;
115         t_Form *form;
116         t_Articulo *articulo;
117
118         win = newwin(8, 68, 13, 1);
119         box(win, 0, 0);
120         wrefresh(win);
121
122         form = form_crear(win);
123         form_agregar_widget(form, INPUT, "Numero de Artículo", 8, "");
124         form_ejecutar(form, 1,1);
125         articulo = art_obtener(NULL, form_obtener_valor(form, "Numero de Artículo"));
126         form_destruir(form);
127
128         if (articulo != NULL) {
129                 form = form_crear(win);
130                 form_agregar_widget(form, INPUT, "Numero de Artículo", 8, articulo->numero);
131                 form_agregar_widget(form, INPUT, "Descripción", 50, articulo->desc);
132                 form_agregar_widget(form, INPUT, "Presentación", 30, articulo->presentacion);
133                 form_agregar_widget(form, INPUT, "Stock Actual", 8, articulo->existencia);
134                 form_agregar_widget(form, INPUT, "PVU", 30, articulo->pvu);
135                 form_agregar_widget(form, INPUT, "Stock Mínimo", 8, articulo->emin);
136                 form_ejecutar(form, 1,1);
137                 form_destruir(form);
138         }       
139
140         werase(win);
141         wrefresh(win);
142         delwin(win);
143 }
144