#!/usr/bin/env python
# -*- coding: utf-8 -*-

###############################################################################
# Copyright (C) 2005-2008  Francisco José Rodríguez Bogado,                   #
#                          Diego Muñoz Escalante.                             #
# (pacoqueen@users.sourceforge.net, escalant3@users.sourceforge.net)          #
#                                                                             #
# This file is part of GeotexInn.                                             #
#                                                                             #
# GeotexInn is free software; you can redistribute it and/or modify           #
# it under the terms of the GNU General Public License as published by        #
# the Free Software Foundation; either version 2 of the License, or           #
# (at your option) any later version.                                         #
#                                                                             #
# GeotexInn is distributed in the hope that it will be useful,                #
# but WITHOUT ANY WARRANTY; without even the implied warranty of              #
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               #
# GNU General Public License for more details.                                #
#                                                                             #
# You should have received a copy of the GNU General Public License           #
# along with GeotexInn; if not, write to the Free Software                    #
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA  #
###############################################################################

###################################################################
## formulacion_geotextiles.py - Formulación HARCODED de geotextiles
###################################################################
## NOTAS:
## Ventana hecha a volapié para crear los descuentos predefinidos.
## No permite definir más material para el descuento automático ni 
## cambiar las formulaciones, solo cantidades y productos de compra
## empleados en cada "categoría". 
## ----------------------------------------------------------------
## 
###################################################################
## Changelog:
## 
## 
###################################################################
# 
###################################################################
from ventana import Ventana
from formularios import
 utils
import re
import pygtk
pygtk.requir
e('2.0')
import gtk
from framework import pclases
from utils import _float as float
try:
    from psycopg import ProgrammingError as psycopg_ProgrammingError
except ImportError:
    from psycopg2 import ProgrammingError as psycopg_ProgrammingError



class FormulacionGeotextiles(Ventana):
    def __init__(self, objeto = None, usuario = None):
        """
        Constructor. objeto puede ser un objeto de pclases con el que
        comenzar la ventana (en lugar del primero de la tabla, que es
        el que se muestra por defecto).
        """
        Ventana.__init__(self, 'formulacion_geotextiles.glade', objeto, usuario = usuario)
        connections = {'b_salir/clicked': self.salir,
                       '_b_guardar/clicked': self.guardar,
                       'b_ensimaje/clicked': self.buscar_mp,
                       'b_antiestatico/clicked': self.buscar_mp,
                       'b_tubos/clicked': self.buscar_mp,
                       'b_plastico/clicked': self.buscar_mp,
                       'b_casquillos/clicked': self.buscar_mp,
                       'b_precinto/clicked': self.buscar_mp,
                       'b_grapas/clicked': self.buscar_mp,
                       'b_add_consumo/clicked': self.add_consumo_por_producto, 
                       'b_drop_consumo/clicked': self.drop_consumo_por_producto,
                       'b_cambiar_producto_compra/clicked': 
                            self.cambiar_producto_compra, 
                       'b_add_producto_a_consumo/clicked': 
                            self.add_producto_a_consumo
                      }
        self.add_connections(connections)
        cols = (("Descripción (opcional)", "gobject.TYPE_STRING", 
                    True, True, True, None),
                ("Material", "gobject.TYPE_STRING", False, True, False, None), 
                ("Cantidad", "gobject.TYPE_STRING", 
                    True, True, True, self.cambiar_cantidad), 
                ("Unidad", "gobject.TYPE_STRING", 
                    True, True, True, self.cambiar_unidad), 
                ("ID", "gobject.TYPE_STRING", False, False, False, None))
            # Unidad: Deberá ser algo así como:
            # % para porcentaje del peso.
            # algo/u para descontar m, k o en lo que quiera que se mida el producto de compra por cada unidad fabricada.
            # algo/kg para descontar m, k o en lo que quiera que se mida el producto de compra por cada kg (m² en rollos) fabricado.
            # algo/x m para descontar m, k o en lo que quiera que se mida el producto de compra por cada x metros de ancho de cada 
            #          rollo fabricado (sólo para geotextiles y geocompuestos)
        utils.preparar_treeview(self.wids['tv_consumos'], cols, multi = True)
            # En el treeview cada nodo padre será una materia prima con su descuento y tal. Los nodos hijos contendrán el producto
            # de venta al que se aplica ese descuento automático.
        self.wids['tv_consumos'].connect("row-activated", self.abrir_producto)
        self.comprobar_registro()
        self.rellenar_widgets()
        gtk.main()

    def abrir_producto(self, tv, path, view_column):
        """
        Abre el producto de compra si la línea marcada es de 
        consumo y el de venta si es un "contenido" de consumo.
        """
        model = tv.get_model()
        ide = model[path][-1]
        if model[path].parent == None:
            from formularios import productos_compra
            consumo = pclases.ConsumoAdicional.get(ide)
            producto_compra = consumo.productoCompra
            v = productos_compra.ProductosCompra(producto_compra)  # @UnusedVariable
        else:
            from formularios import productos_de_venta_rollos
            v = productos_de_venta_rollos.ProductosDeVentaRollos(pclases.ProductoVenta.get(ide))  # @UnusedVariable

    def guardar(self, b):
        """
        Guarda los valores para la cantidad en los campos de los registros correspondientes.
        """
        try:
            self.cas['ensimaje'].cantidad = float(self.wids['e_censimaje'].get_text())
        except:
            utils.dialogo_info(titulo = "ERROR DE FORMATO", texto = "Corrija el formato numérico usado y vuelva a intentarlo.")
        try:
            self.cas['antiestatico'].cantidad = float(self.wids['e_cantiestatico'].get_text())
        except:
            utils.dialogo_info(titulo = "ERROR DE FORMATO", texto = "Corrija el formato numérico usado y vuelva a intentarlo.")
        try:
            self.cas['tubos'].cantidad = float(self.wids['e_ctubos'].get_text())
        except:
            utils.dialogo_info(titulo = "ERROR DE FORMATO", texto = "Corrija el formato numérico usado y vuelva a intentarlo.")
        try:
            self.cas['plastico'].cantidad = float(self.wids['e_cplastico'].get_text())
        except:
            utils.dialogo_info(titulo = "ERROR DE FORMATO", texto = "Corrija el formato numérico usado y vuelva a intentarlo.")
        try:
            self.cas['precinto'].cantidad = float(self.wids['e_cprecinto'].get_text())
        except:
            utils.dialogo_info(titulo = "ERROR DE FORMATO", texto = "Corrija el formato numérico usado y vuelva a intentarlo.")
        try:
            self.cas['casquillos'].cantidad = float(self.wids['e_ccasquillos'].get_text())
        except:
            utils.dialogo_info(titulo = "ERROR DE FORMATO", texto = "Corrija el formato numérico usado y vuelva a intentarlo.")
        try:
            self.cas['grapas'].cantidad = float(self.wids['e_cgrapas'].get_text())
        except:
      