PageRenderTime 46ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 1ms

/src/proveedores.c

#
C | 610 lines | 393 code | 114 blank | 103 comment | 40 complexity | 9399f1e0f5fae6cbed75fa1bcda9c479 MD5 | raw file
Possible License(s): GPL-2.0
  1. /* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4;
  2. c-indentation-style: gnu -*- */
  3. /*proveedores.c
  4. *
  5. * Copyright (C) 2004,2008 Rizoma Tecnologia Limitada <info@rizoma.cl>
  6. *
  7. * This file is part of rizoma.
  8. *
  9. * Rizoma is free software; you can redistribute it and/or modify
  10. * it under the terms of the GNU General Public License as published by
  11. * the Free Software Foundation; either version 2 of the License, or
  12. * (at your option) any later version.
  13. *
  14. * This program is distributed in the hope that it will be useful,
  15. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  17. * GNU General Public License for more details.
  18. *
  19. * You should have received a copy of the GNU General Public License
  20. * along with this program; if not, write to the Free Software
  21. * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  22. */
  23. #include<gtk/gtk.h>
  24. #include<stdlib.h>
  25. #include<string.h>
  26. #include"tipos.h"
  27. #include"postgres-functions.h"
  28. #include"printing.h"
  29. #include"compras.h"
  30. #include"credito.h"
  31. #include"errors.h"
  32. #include"utils.h"
  33. GtkWidget *rut;
  34. GtkWidget *razon;
  35. GtkWidget *direccion;
  36. GtkWidget *comuna;
  37. GtkWidget *ciudad;
  38. GtkWidget *fono;
  39. GtkWidget *fax;
  40. GtkWidget *web;
  41. GtkWidget *contacto;
  42. GtkWidget *email;
  43. GtkWidget *fono_directo;
  44. GtkWidget *giro;
  45. GtkWidget *compras_totales;
  46. GtkWidget *contrib_total;
  47. GtkWidget *contrib_proyect;
  48. GtkWidget *inci_compras;
  49. GtkWidget *stock_valorizado;
  50. GtkWidget *merma_uni;
  51. GtkWidget *merma_porc;
  52. GtkWidget *ventas_totales;
  53. GtkWidget *contrib_agreg;
  54. GtkWidget *inci_ventas;
  55. GtkWidget *total_pen_fact;
  56. GtkWidget *indice_t;
  57. GtkWidget *search_entry;
  58. GtkTreeStore *proveedores_store;
  59. /**
  60. * Es llamada cuando el boton "btn_prov_search" es presionado (signal click).
  61. *
  62. * Esta funcion llama a una consulta de sql que a su vez llama a la funcion
  63. * buscar_proveedor(), esta retorna al o a los proveedores, segun por los
  64. * parametros que se ingreso. Despues este o estos los agrega a la tree_view
  65. * correspondiente.
  66. *
  67. * @param widget the widget that emited the signal
  68. * @param data the user data
  69. *
  70. */
  71. void
  72. BuscarProveedor (GtkWidget *widget, gpointer data)
  73. {
  74. GtkWidget *aux_widget;
  75. GtkTreeIter iter;
  76. GtkListStore *store;
  77. PGresult *res;
  78. gint tuples, i;
  79. gchar *str_axu;
  80. gchar *q;
  81. gchar *string;
  82. aux_widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_prov_search"));
  83. string = g_strdup (gtk_entry_get_text (GTK_ENTRY (aux_widget)));
  84. /*consulta de sql que llama a la funcion que retorna a el o los
  85. proveedores, dependiendo de los datos de entrada*/
  86. q = g_strdup_printf ("SELECT rut, dv, nombre, giro, contacto, lapso_reposicion "
  87. "FROM buscar_proveedor('%%%s%%')",
  88. string);
  89. res = EjecutarSQL (q);
  90. g_free (q);
  91. tuples = PQntuples (res);
  92. aux_widget = GTK_WIDGET(gtk_builder_get_object(builder, "treeview_prov_search"));
  93. store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(aux_widget)));
  94. gtk_list_store_clear (store);
  95. /* se agrega al proveedor al tree view y sus datos*/
  96. for (i = 0; i < tuples; i++)
  97. {
  98. str_axu = g_strconcat(PQvaluebycol (res, i, "rut"),
  99. PQvaluebycol (res, i, "dv"), NULL);
  100. gtk_list_store_append (store, &iter);
  101. gtk_list_store_set (store, &iter,
  102. 0, str_axu,
  103. 1, PQvaluebycol (res, i, "nombre"),
  104. 2, PQvaluebycol (res, i, "giro"),
  105. 3, PQvaluebycol (res, i, "contacto"),
  106. -1);
  107. g_free (str_axu);
  108. }
  109. }
  110. /**
  111. * Es llamada por la funcion "AddProveedor()".
  112. *
  113. * Esta funcion agrega al proveedor a la lista (tree view) de la busqueda de proveedores.
  114. *
  115. */
  116. void
  117. ListarProveedores (void)
  118. {
  119. GtkWidget *treeview;
  120. GtkListStore *store;
  121. PGresult *res;
  122. gint tuples, i;
  123. GtkTreeIter iter;
  124. gchar *str_axu;
  125. res = EjecutarSQL ("SELECT rut, dv, nombre, giro, contacto FROM buscar_proveedor('%') ORDER BY nombre ASC");
  126. tuples = PQntuples (res);
  127. treeview = GTK_WIDGET(gtk_builder_get_object(builder, "treeview_prov_search"));
  128. store = GTK_LIST_STORE(gtk_tree_view_get_model(GTK_TREE_VIEW(treeview)));
  129. gtk_list_store_clear (store);
  130. for (i = 0; i < tuples; i++)
  131. {
  132. str_axu = g_strconcat(PQvaluebycol(res, i, "rut"), PQvaluebycol(res, i, "dv"), NULL);
  133. gtk_list_store_append (store, &iter);
  134. gtk_list_store_set (store, &iter,
  135. 0, str_axu,
  136. 1, PQvaluebycol (res, i, "nombre"),
  137. 2, PQvaluebycol (res, i, "giro"),
  138. 3, PQvaluebycol (res, i, "contacto"),
  139. -1);
  140. g_free (str_axu);
  141. }
  142. }
  143. /**
  144. * Es llamada cuando se selecciona un proveedor de la lista
  145. * "treeview_prov_search".
  146. *
  147. * Esta funcionagrega la informacion del proveedor a los
  148. * respectivos campos de texto (entry)
  149. *
  150. * @param selection the row data
  151. * @param data the user data
  152. *
  153. */
  154. void
  155. LlenarDatosProveedor (GtkTreeSelection *selection,
  156. gpointer user_data)
  157. {
  158. GtkWidget *widget;
  159. GtkTreeView *tree_view;
  160. GtkListStore *store;
  161. PGresult *res;
  162. GtkTreeIter iter;
  163. gchar *rut_proveedor;
  164. gchar *aux, *q;
  165. gint largo;
  166. tree_view = gtk_tree_selection_get_tree_view(selection);
  167. store = GTK_LIST_STORE(gtk_tree_view_get_model(tree_view));
  168. if (gtk_tree_selection_get_selected (selection, NULL, &iter) == FALSE)
  169. return;
  170. gtk_tree_model_get (GTK_TREE_MODEL (store), &iter,
  171. 0, &rut_proveedor,
  172. -1);
  173. largo = strlen (rut_proveedor);
  174. aux = g_strndup (rut_proveedor, largo-1);
  175. /* consulta de sql que llama a funcion select_proveedor, que dado el id de
  176. este devuelve la informacion del mismo*/
  177. q = g_strdup_printf ("SELECT * FROM select_proveedor(%s)", aux);
  178. res = EjecutarSQL (q);
  179. g_free (q);
  180. g_free (aux);
  181. //g_strfreev(aux);
  182. if ((res == NULL) || (PQntuples (res) == 0))
  183. return;
  184. widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_prov_name"));
  185. gtk_entry_set_text (GTK_ENTRY (widget), PQvaluebycol (res, 0, "nombre"));
  186. q = g_strconcat(PQvaluebycol (res, 0, "rut"), PQvaluebycol (res, 0, "dv"), NULL);
  187. widget = GTK_WIDGET(gtk_builder_get_object(builder, "lbl_prov_rut"));
  188. gtk_label_set_text (GTK_LABEL (widget), formato_rut (q));
  189. g_free (q);
  190. widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_prov_addr"));
  191. gtk_entry_set_text (GTK_ENTRY (widget), PQvaluebycol (res, 0, "direccion"));
  192. widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_prov_city"));
  193. gtk_entry_set_text (GTK_ENTRY (widget), PQvaluebycol (res, 0, "ciudad"));
  194. widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_prov_comuna"));
  195. gtk_entry_set_text (GTK_ENTRY (widget), PQvaluebycol (res, 0, "comuna"));
  196. widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_prov_phone"));
  197. gtk_entry_set_text (GTK_ENTRY (widget), PQvaluebycol (res, 0, "telefono"));
  198. widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_prov_web"));
  199. gtk_entry_set_text (GTK_ENTRY (widget), PQvaluebycol (res, 0, "web"));
  200. widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_prov_contact"));
  201. gtk_entry_set_text (GTK_ENTRY (widget), PQvaluebycol (res, 0, "contacto"));
  202. widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_prov_mail"));
  203. gtk_entry_set_text (GTK_ENTRY (widget), PQvaluebycol (res, 0, "email"));
  204. widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_prov_giro"));
  205. gtk_entry_set_text (GTK_ENTRY (widget), PQvaluebycol (res, 0, "giro"));
  206. widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_lap_rep"));
  207. gtk_entry_set_text (GTK_ENTRY (widget), PQvaluebycol (res, 0, "lapso_reposicion"));
  208. }
  209. /**
  210. * Es llamada por la funcion "AddProveedor()".
  211. *
  212. * Esta funcion cierra la ventana de "wnd_addprovider".
  213. *
  214. * @param widget the widget that emited the signal
  215. * @param data the user data
  216. *
  217. */
  218. void
  219. CloseAgregarProveedorWindow (GtkWidget *widget, gpointer user_data)
  220. {
  221. GtkWidget *window;
  222. window = GTK_WIDGET(gtk_builder_get_object(builder, "wnd_addprovider"));
  223. gtk_window_set_transient_for(GTK_WINDOW(window), NULL);
  224. gtk_widget_hide(window);
  225. }
  226. /**
  227. * Es llamada cuando el boton "btn_prov_ad" es presionado (signal click).
  228. *
  229. * Esta funcion verifica que todos los campos de proveedor sean correctamente
  230. * rellenados y luego llama a la funcion "AddProveedorToDB()" que registra al
  231. * proveedor en la base de datos.
  232. *
  233. * @param widget the widget that emited the signal
  234. * @param data the user data
  235. *
  236. */
  237. void
  238. AgregarProveedor (GtkWidget *widget, gpointer user_data)
  239. {
  240. GtkWidget *aux_widget;
  241. GtkWidget *wnd;
  242. gchar *str_rut;
  243. gchar *rut_c;
  244. gchar *rut_ver;
  245. gchar *nombre_c;
  246. gchar *direccion_c;
  247. gchar *ciudad_c;
  248. gchar *comuna_c;
  249. gchar *telefono_c;
  250. gchar *email_c;
  251. gchar *web_c;
  252. gchar *contacto_c;
  253. gchar *giro_c;
  254. wnd = GTK_WIDGET(gtk_builder_get_object(builder, "wnd_addprovider"));
  255. aux_widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_addprov_rut"));
  256. rut_c = g_strdup (gtk_entry_get_text (GTK_ENTRY (aux_widget)));
  257. aux_widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_addprov_dv"));
  258. rut_ver = g_strdup (gtk_entry_get_text (GTK_ENTRY (aux_widget)));
  259. aux_widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_addprov_name"));
  260. nombre_c = g_strdup (gtk_entry_get_text (GTK_ENTRY (aux_widget)));
  261. aux_widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_addprov_addr"));
  262. direccion_c = g_strdup (gtk_entry_get_text (GTK_ENTRY (aux_widget)));
  263. aux_widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_addprov_city"));
  264. ciudad_c = g_strdup (gtk_entry_get_text (GTK_ENTRY (aux_widget)));
  265. aux_widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_addprov_comuna"));
  266. comuna_c = g_strdup (gtk_entry_get_text (GTK_ENTRY (aux_widget)));
  267. aux_widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_addprov_phone"));
  268. telefono_c = g_strdup (gtk_entry_get_text (GTK_ENTRY (aux_widget)));
  269. aux_widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_addprov_email"));
  270. email_c = g_strdup (gtk_entry_get_text (GTK_ENTRY (aux_widget)));
  271. aux_widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_addprov_web"));
  272. web_c = g_strdup (gtk_entry_get_text (GTK_ENTRY (aux_widget)));
  273. aux_widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_addprov_contact"));
  274. contacto_c = g_strdup (gtk_entry_get_text (GTK_ENTRY (aux_widget)));
  275. aux_widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_addprov_giro"));
  276. giro_c = g_strdup (gtk_entry_get_text (GTK_ENTRY (aux_widget)));
  277. if (g_strcmp0 (rut_c, "") == 0)
  278. {
  279. ErrorMSG (wnd, "Debe Escribir el rut completo");
  280. return;
  281. }
  282. else if (g_strcmp0 (rut_ver, "") == 0)
  283. {
  284. ErrorMSG (wnd, "Debe ingresar el digito verificador del rut");
  285. return;
  286. }
  287. else if ((GetDataByOne
  288. (g_strdup_printf ("SELECT * FROM proveedor WHERE rut=%s", rut_c))) != NULL)
  289. {
  290. ErrorMSG (wnd, "Ya existe un proveedor con el mismo rut");
  291. return;
  292. }
  293. else if (g_strcmp0 (nombre_c, "") == 0)
  294. {
  295. ErrorMSG (wnd, "Debe escribir el nombre del proveedor");
  296. return;
  297. }
  298. else if (g_strcmp0 (direccion_c, "") == 0)
  299. {
  300. ErrorMSG (wnd, "Debe escribir la direccion");
  301. return;
  302. }
  303. else if (g_strcmp0 (comuna_c, "") == 0)
  304. {
  305. ErrorMSG (wnd, "Debe escribir la comuna");
  306. return;
  307. }
  308. else if (g_strcmp0 (telefono_c, "") == 0)
  309. {
  310. ErrorMSG (wnd, "Debe escribir el telefono");
  311. return;
  312. }
  313. else if (g_strcmp0 (giro_c, "") == 0)
  314. {
  315. ErrorMSG (wnd, "Debe escribir el giro");
  316. return;
  317. }
  318. if (VerificarRut (rut_c, rut_ver) != TRUE)
  319. {
  320. ErrorMSG (wnd, "El rut no es valido!");
  321. return;
  322. }
  323. if (atoi(telefono_c) == 0)
  324. {
  325. ErrorMSG (wnd, "Debe ingresar solo números en el campo telefono");
  326. return;
  327. }
  328. CloseAgregarProveedorWindow (NULL, user_data);
  329. str_rut = g_strdup_printf ("%s-%s", rut_c, rut_ver);
  330. AddProveedorToDB (str_rut, nombre_c, direccion_c, ciudad_c, comuna_c, telefono_c, email_c, web_c, contacto_c, giro_c);
  331. g_free (str_rut);
  332. //ListarProveedores (); <- this does not correspond
  333. }
  334. /**
  335. * Es llamada cuando el boton "btn_prov_ad" es presionado (signal click).
  336. *
  337. * Esta funcion visualiza la ventana para agregar un proveedor y sus
  338. * respectivos entry para llenar con los campos de este.
  339. *
  340. * @param widget the widget that emited the signal
  341. * @param data the user data
  342. *
  343. */
  344. void
  345. AgregarProveedorWindow (GtkWidget *widget, gpointer user_data)
  346. {
  347. GtkWidget *aux_widget;
  348. aux_widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_addprov_rut"));
  349. gtk_entry_set_text(GTK_ENTRY(aux_widget), "");
  350. aux_widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_addprov_dv"));
  351. gtk_entry_set_text(GTK_ENTRY(aux_widget), "");
  352. aux_widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_addprov_name"));
  353. gtk_entry_set_text(GTK_ENTRY(aux_widget), "");
  354. aux_widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_addprov_addr"));
  355. gtk_entry_set_text(GTK_ENTRY(aux_widget), "");
  356. aux_widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_addprov_comuna"));
  357. gtk_entry_set_text(GTK_ENTRY(aux_widget), "");
  358. aux_widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_addprov_city"));
  359. gtk_entry_set_text(GTK_ENTRY(aux_widget), "");
  360. aux_widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_addprov_phone"));
  361. gtk_entry_set_text(GTK_ENTRY(aux_widget), "");
  362. aux_widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_addprov_email"));
  363. gtk_entry_set_text(GTK_ENTRY(aux_widget), "");
  364. aux_widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_addprov_web"));
  365. gtk_entry_set_text(GTK_ENTRY(aux_widget), "");
  366. aux_widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_addprov_contact"));
  367. gtk_entry_set_text(GTK_ENTRY(aux_widget), "");
  368. aux_widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_addprov_giro"));
  369. gtk_entry_set_text(GTK_ENTRY(aux_widget), "");
  370. aux_widget = GTK_WIDGET(gtk_builder_get_object(builder, "wnd_addprovider"));
  371. gtk_window_set_transient_for(GTK_WINDOW(aux_widget),
  372. GTK_WINDOW(gtk_widget_get_toplevel(widget)));
  373. gtk_window_set_modal (GTK_WINDOW(aux_widget), TRUE);
  374. gtk_widget_show (aux_widget);
  375. }
  376. /**
  377. * Es llamada cuando el boton "btn_prov_save" es presionado (signal click).
  378. *
  379. * Esta funcion carga los datos llenados con los datos del proveedor y luego
  380. * llama a la funcion "SetModificacionesProveedor() que actualiza los datos
  381. * de este en la base de datos.
  382. */
  383. void
  384. ModificarProveedor (void)
  385. {
  386. GtkWidget *widget;
  387. gchar *rut_c;
  388. gchar *nombre_c;
  389. gchar *direccion_c;
  390. gchar *comuna_c;
  391. gchar *ciudad_c;
  392. gchar *fono_c;
  393. gchar *web_c;
  394. gchar *contacto_c;
  395. gchar *email_c;
  396. gchar *giro_c;
  397. gchar *lap_rep_c;
  398. widget = GTK_WIDGET (gtk_builder_get_object (builder, "lbl_prov_rut"));
  399. rut_c = CutPoints (g_strdup (gtk_label_get_text (GTK_LABEL (widget))));
  400. widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_prov_name"));
  401. nombre_c = g_strdup(gtk_entry_get_text (GTK_ENTRY (widget)));
  402. widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_prov_addr"));
  403. direccion_c = g_strdup(gtk_entry_get_text (GTK_ENTRY (widget)));
  404. widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_prov_comuna"));
  405. comuna_c = g_strdup(gtk_entry_get_text (GTK_ENTRY (widget)));
  406. widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_prov_city"));
  407. ciudad_c = g_strdup(gtk_entry_get_text (GTK_ENTRY (widget)));
  408. widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_prov_phone"));
  409. fono_c = g_strdup(gtk_entry_get_text (GTK_ENTRY (widget)));
  410. widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_prov_web"));
  411. web_c = g_strdup(gtk_entry_get_text (GTK_ENTRY (widget)));
  412. widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_prov_contact"));
  413. contacto_c = g_strdup(gtk_entry_get_text (GTK_ENTRY (widget)));
  414. widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_prov_mail"));
  415. email_c = g_strdup(gtk_entry_get_text (GTK_ENTRY (widget)));
  416. widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_prov_giro"));
  417. giro_c = g_strdup(gtk_entry_get_text (GTK_ENTRY (widget)));
  418. widget = GTK_WIDGET(gtk_builder_get_object(builder, "entry_lap_rep"));
  419. lap_rep_c = g_strdup(gtk_entry_get_text (GTK_ENTRY (widget)));
  420. gint respuesta = SetModificacionesProveedor (rut_c, nombre_c, direccion_c, comuna_c, ciudad_c, fono_c,
  421. web_c, contacto_c, email_c, giro_c, lap_rep_c);
  422. widget = GTK_WIDGET(gtk_builder_get_object(builder, "statusbar"));
  423. if (respuesta == 0)
  424. statusbar_push (GTK_STATUSBAR(widget), "El proveedor ha sido actualizado exitosamente", 3000);
  425. else if (respuesta == -1)
  426. statusbar_push (GTK_STATUSBAR(widget), "Error: Lapso Reposición debe ser un valor numérico y mayor a cero", 3000);
  427. }
  428. /**
  429. * Es llamada por la funcion "compras_win()"[compras.c]
  430. *
  431. * Esta funcion visualiza los nombres de cada columna del tree view de
  432. * proveedores, y los datos para poder exportarlos a Gnumeric.
  433. *
  434. */
  435. void
  436. proveedores_box ()
  437. {
  438. GtkWidget *proveedores_tree;
  439. GtkListStore *store;
  440. GtkTreeSelection *selection;
  441. GtkWidget *button;
  442. GtkCellRenderer *renderer;
  443. GtkTreeViewColumn *column;
  444. Print *proveedores_print;
  445. proveedores_print = (Print *) g_malloc0 (sizeof (Print));
  446. //setup the gtktreeview and all the necesary objects
  447. store = gtk_list_store_new (4,
  448. G_TYPE_STRING,
  449. G_TYPE_STRING,
  450. G_TYPE_STRING,
  451. G_TYPE_STRING);
  452. proveedores_tree = GTK_WIDGET(gtk_builder_get_object(builder, "treeview_prov_search"));
  453. gtk_tree_view_set_model(GTK_TREE_VIEW(proveedores_tree), GTK_TREE_MODEL(store));
  454. selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(proveedores_tree));
  455. g_signal_connect (G_OBJECT (selection), "changed",
  456. G_CALLBACK (LlenarDatosProveedor), NULL);
  457. renderer = gtk_cell_renderer_text_new ();
  458. column = gtk_tree_view_column_new_with_attributes ("Rut", renderer,
  459. "text", 0,
  460. NULL);
  461. gtk_tree_view_append_column (GTK_TREE_VIEW (proveedores_tree), column);
  462. gtk_tree_view_column_set_resizable (column, FALSE);
  463. gtk_tree_view_column_set_cell_data_func (column, renderer, control_rut, (gpointer)0, NULL);
  464. renderer = gtk_cell_renderer_text_new ();
  465. column = gtk_tree_view_column_new_with_attributes ("Proveedor", renderer,
  466. "text", 1,
  467. NULL);
  468. gtk_tree_view_append_column (GTK_TREE_VIEW (proveedores_tree), column);
  469. gtk_tree_view_column_set_resizable (column, FALSE);
  470. gtk_tree_view_column_set_expand (column, TRUE);
  471. renderer = gtk_cell_renderer_text_new ();
  472. column = gtk_tree_view_column_new_with_attributes ("Giro", renderer,
  473. "text", 2,
  474. NULL);
  475. gtk_tree_view_append_column (GTK_TREE_VIEW (proveedores_tree), column);
  476. gtk_tree_view_column_set_resizable (column, FALSE);
  477. gtk_tree_view_column_set_expand (column, TRUE);
  478. renderer = gtk_cell_renderer_text_new ();
  479. column = gtk_tree_view_column_new_with_attributes ("Contacto", renderer,
  480. "text", 3,
  481. NULL);
  482. gtk_tree_view_append_column (GTK_TREE_VIEW (proveedores_tree), column);
  483. gtk_tree_view_column_set_resizable (column, FALSE);
  484. button = GTK_WIDGET(gtk_builder_get_object(builder, "btn_prov_print"));
  485. proveedores_print->tree = GTK_TREE_VIEW (proveedores_tree);
  486. proveedores_print->title = "Lista de Proveedores";
  487. proveedores_print->name = "proveedores";
  488. proveedores_print->date_string = NULL;
  489. proveedores_print->cols[0].name = "Nombre";
  490. proveedores_print->cols[0].num = 0;
  491. proveedores_print->cols[1].name = "Rut";
  492. proveedores_print->cols[1].num = 1;
  493. proveedores_print->cols[2].name = NULL;
  494. g_signal_connect (G_OBJECT (button), "clicked",
  495. G_CALLBACK (PrintTree), (gpointer)proveedores_print);
  496. }