]> git.llucax.com Git - z.facultad/75.06/emufs.git/blob - emufs_gui/articulos.c
* Ajustes pequeños al codigo.
[z.facultad/75.06/emufs.git] / emufs_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                                 tmp->array[cant].numero = atoi(xmlGetProp(node, "NroArtículo"));
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 = 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_char(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         char num[8];
134
135         win = newwin(8, 68, 13, 1);
136         box(win, 0, 0);
137         wrefresh(win);
138
139         articulo = art_form_buscar(win);
140
141         if (articulo != NULL) {
142                 form = form_crear(win);
143                 sprintf(num, "%07d", articulo->numero);
144                 form_agregar_widget(form, INPUT, "Numero de Artículo", 8, num);
145                 form_agregar_widget(form, INPUT, "Descripción", 50, articulo->desc);
146                 form_agregar_widget(form, INPUT, "Presentación", 30, articulo->presentacion);
147                 form_agregar_widget(form, INPUT, "Stock Actual", 8, articulo->existencia);
148                 form_agregar_widget(form, INPUT, "PVU", 8, articulo->pvu);
149                 form_agregar_widget(form, INPUT, "Stock Mínimo", 8, articulo->emin);
150                 form_ejecutar(form, 1,1);
151
152                 /* TODO : Actualizar registro */
153                 
154                 form_destruir(form);
155         }       
156
157         werase(win);
158         wrefresh(win);
159         delwin(win);
160 }
161
162 void art_eliminar(char *s)
163 {
164         WINDOW *win;
165         t_Articulo *articulo;
166
167         win = newwin(8, 68, 13, 1);
168         box(win, 0, 0);
169         wrefresh(win);
170
171         articulo = art_form_buscar(win);
172
173         if (articulo == NULL) {
174                 wattron(win, COLOR_PAIR(COLOR_YELLOW));
175                 mvwaddstr(win, 6, 4, "No existe artículo con ese código. Abortando!");
176                 wattroff(win, COLOR_PAIR(COLOR_YELLOW));
177                 wrefresh(win);
178                 getch();
179         } else {
180                 /* TODO : Eliminar un registro */
181         }
182
183         werase(win);
184         wrefresh(win);
185         delwin(win);
186 }
187
188 void art_agregar(char *s)
189 {
190         WINDOW *win;
191         t_Form *form;
192
193         win = newwin(8, 68, 13, 1);
194         box(win, 0, 0);
195         wrefresh(win);
196
197         form = form_crear(win);
198         form_agregar_widget(form, INPUT, "Numero de Artículo", 8, "");
199         form_agregar_widget(form, INPUT, "Descripción", 50, "");
200         form_agregar_widget(form, INPUT, "Presentación", 30, "");
201         form_agregar_widget(form, INPUT, "Stock Actual", 8, "");
202         form_agregar_widget(form, INPUT, "PVU", 8, "");
203         form_agregar_widget(form, INPUT, "Stock Mínimo", 8, "");
204         form_ejecutar(form, 1,1);
205         
206         /* TODO : Agregar el nuevo elemento */
207
208         form_destruir(form);
209
210         werase(win);
211         wrefresh(win);
212         delwin(win);
213 }
214