]> git.llucax.com Git - z.facultad/75.06/emufs.git/blob - gui/articulos.c
* BUGFIX : En grabar registro calculo correctamente el numero de bloque en caso de
[z.facultad/75.06/emufs.git] / gui / articulos.c
1
2 #include "articulos.h"
3
4 t_LstArticulos *lst_articulos;
5
6 t_Articulo *art_form_buscar(WINDOW *win);
7
8 t_LstArticulos *art_cargar(const char *filename)
9 {
10         xmlDocPtr document;
11         xmlNode *node;
12         int cant;
13         t_LstArticulos *tmp = (t_LstArticulos *)malloc(sizeof(t_LstArticulos));
14         if (tmp == NULL) return NULL;
15
16         document = xmlReadFile(filename, "ISO-8859-1",0);
17         if (document == NULL) {
18                 free(tmp);
19                 return NULL;
20         }
21
22         node = xmlDocGetRootElement(document);
23         while (node) {
24                 if (node->type == XML_ELEMENT_NODE) {
25                         if (strcmp(node->name, "ARTICULOS") == 0) {
26                                 node = node->children;
27                                 break;
28                         }
29                 }
30                 node = node->next;
31         }
32
33         /* Cuento la cantidad de articulos en el archivo */
34         cant = 0;
35         for ( ; node ; node = node->next) {
36                 if (node->type == XML_ELEMENT_NODE) {
37                         if (strcmp(node->name, "ARTICULO") == 0) {
38                                 ++cant;
39                         }
40                 }       
41         }
42         tmp->cant = cant;
43         tmp->array = (t_Articulo *)malloc(sizeof(t_Articulo)*cant);
44
45         if (tmp->array == NULL) {
46                 xmlFreeDoc(document);
47                 xmlCleanupParser();
48                 free(tmp);
49                 return NULL;
50         }
51
52         node = xmlDocGetRootElement(document);
53         while (node) {
54                 if (node->type == XML_ELEMENT_NODE) {
55                         if (strcmp(node->name, "ARTICULOS") == 0) {
56                                 node = node->children;
57                                 break;
58                         }
59                 }
60                 node = node->next;
61         }
62
63         /* leo los datos */
64         cant = 0;
65         for ( ; node ; node = node->next) {
66                 if (node->type == XML_ELEMENT_NODE) {
67                         if (strcmp(node->name, "ARTICULO") == 0) {
68                                 strncpy(tmp->array[cant].numero, xmlGetProp(node, "NroArtículo"), 8);
69                                 strncpy(tmp->array[cant].desc, xmlGetProp(node, "Descripción"), 50);
70                                 strncpy(tmp->array[cant].presentacion, xmlGetProp(node, "Presentación"), 30);
71                                 strncpy(tmp->array[cant].existencia, xmlGetProp(node, "Existencia"), 8);
72 //                      /       strncpy(tmp->array[cant].ubicacion, xmlGetProp(node, "Ubicacion"), 30);
73                                 strncpy(tmp->array[cant].pvu, xmlGetProp(node, "PVU"), 8);
74                                 strncpy(tmp->array[cant].emin, xmlGetProp(node, "Emín"), 8);
75                                 ++cant;
76                         }
77                 }
78         }
79         xmlFreeDoc(document);
80         xmlCleanupParser();
81
82         lst_articulos = tmp;
83         return tmp;
84 }
85
86 int art_liberar(t_LstArticulos *l)
87 {
88         if (l == NULL) l = lst_articulos;
89         if (l == NULL) return 1;
90
91         free(l->array);
92         free(l);
93
94         lst_articulos = NULL;
95         return 0;
96 }
97
98 t_Articulo *art_obtener(t_LstArticulos *lst, const char *numero)
99 {
100         int i, j;
101         int n = atoi(numero);
102
103         if (lst == NULL) lst = lst_articulos;
104
105         for(i=0; i<lst->cant; i++) {
106                 j = atoi(lst->array[i].numero);
107                 if (n == j)
108                         return &lst->array[i];
109         }
110
111         return NULL;
112 }
113
114 t_Articulo *art_form_buscar(WINDOW *win)
115 {
116         t_Form *form;
117         t_Articulo *articulo;
118
119         form = form_crear(win);
120         form_agregar_widget(form, INPUT, "Numero de Artículo", 8, "");
121         form_ejecutar(form, 1,1);
122         articulo = art_obtener(NULL, form_obtener_valor(form, "Numero de Artículo"));
123         form_destruir(form);
124
125         return articulo;
126 }
127
128 void art_modificar(char *s)
129 {
130         WINDOW *win;
131         t_Form *form;
132         t_Articulo *articulo;
133
134         win = newwin(8, 68, 13, 1);
135         box(win, 0, 0);
136         wrefresh(win);
137
138         articulo = art_form_buscar(win);
139
140         if (articulo != NULL) {
141                 form = form_crear(win);
142                 form_agregar_widget(form, INPUT, "Numero de Artículo", 8, articulo->numero);
143                 form_agregar_widget(form, INPUT, "Descripción", 50, articulo->desc);
144                 form_agregar_widget(form, INPUT, "Presentación", 30, articulo->presentacion);
145                 form_agregar_widget(form, INPUT, "Stock Actual", 8, articulo->existencia);
146                 form_agregar_widget(form, INPUT, "PVU", 8, articulo->pvu);
147                 form_agregar_widget(form, INPUT, "Stock Mínimo", 8, articulo->emin);
148                 form_ejecutar(form, 1,1);
149
150                 /* TODO : Actualizar registro */
151                 
152                 form_destruir(form);
153         }       
154
155         werase(win);
156         wrefresh(win);
157         delwin(win);
158 }
159
160 void art_eliminar(char *s)
161 {
162         WINDOW *win;
163         t_Articulo *articulo;
164
165         win = newwin(8, 68, 13, 1);
166         box(win, 0, 0);
167         wrefresh(win);
168
169         articulo = art_form_buscar(win);
170
171         if (articulo == NULL) {
172                 wattron(win, COLOR_PAIR(COLOR_YELLOW));
173                 mvwaddstr(win, 6, 4, "No existe artículo con ese código. Abortando!");
174                 wattroff(win, COLOR_PAIR(COLOR_YELLOW));
175                 wrefresh(win);
176                 getch();
177         } else {
178                 /* TODO : Eliminar un registro */
179         }
180
181         werase(win);
182         wrefresh(win);
183         delwin(win);
184 }
185
186 void art_agregar(char *s)
187 {
188         WINDOW *win;
189         t_Form *form;
190
191         win = newwin(8, 68, 13, 1);
192         box(win, 0, 0);
193         wrefresh(win);
194
195         form = form_crear(win);
196         form_agregar_widget(form, INPUT, "Numero de Artículo", 8, "");
197         form_agregar_widget(form, INPUT, "Descripción", 50, "");
198         form_agregar_widget(form, INPUT, "Presentación", 30, "");
199         form_agregar_widget(form, INPUT, "Stock Actual", 8, "");
200         form_agregar_widget(form, INPUT, "PVU", 8, "");
201         form_agregar_widget(form, INPUT, "Stock Mínimo", 8, "");
202         form_ejecutar(form, 1,1);
203         
204         /* TODO : Agregar el nuevo elemento */
205
206         form_destruir(form);
207
208         werase(win);
209         wrefresh(win);
210         delwin(win);
211 }
212