Ejemplo n.º 1
0
class RightPanel_view(wx.Panel):
    def __init__(self, parent, id, list_sales_current, details_sale):
        # begin wxGlade: RightPanel_view.__init__
        self.statusSale = False
        self.statusSalePending = False
        self.statusDue = True
        self.statusDiscount = True
        self.sale_id = 0 
        self.valid = False
        self.parent = parent
        self.pos = self.parent.GetParent().pos	#Obtiene el padre en este caso es la ventana de opening para sacar el pos
        img_opening = Platform("/img/toolbars/opening.png")
        img_addsale = Platform("/img/toolbars/add.png")
        img_cancel = Platform("/img/toolbars/cancellation.png")



        self.helpers_sale = Sale_helper(self.parent)
        self.list_sales_current = list_sales_current
        self.details_sale = details_sale

        wx.Panel.__init__(self, parent, id)
        self.p_maintoolbar = wx.Panel(self, -1, style=wx.SIMPLE_BORDER|wx.TAB_TRAVERSAL)
        self.bm_opening = wx.BitmapButton(self.p_maintoolbar, -1, wx.Bitmap(img_opening.string, wx.BITMAP_TYPE_ANY))
        self.sl_1 = wx.StaticLine(self.p_maintoolbar, -1)
        self.tc_searchsale = wx.TextCtrl(self.p_maintoolbar, -1, "")
        self.bm_addsale = wx.BitmapButton(self.p_maintoolbar, -1, wx.Bitmap(img_addsale.string, wx.BITMAP_TYPE_ANY))
        self.sl_2 = wx.StaticLine(self.p_maintoolbar, -1)
        self.bm_cancel = wx.BitmapButton(self.p_maintoolbar, -1, wx.Bitmap(img_cancel.string, wx.BITMAP_TYPE_ANY))
        self.p_content = SalesList_view(self, -1)

        self.Bind(wx.EVT_BUTTON, self.new_sale, id = self.bm_addsale.GetId())
        self.Bind(wx.EVT_BUTTON, self.cancel_sale, id = self.bm_cancel.GetId())

        self.__set_properties()
        self.__do_layout()
        # end wxGlade

    def __set_properties(self):
        # begin wxGlade: RightPanel_view.__set_properties
        self.bm_opening.SetSize(self.bm_opening.GetBestSize())
        self.sl_1.SetMinSize((1, 70))
        self.tc_searchsale.SetMinSize((450, 30))
        self.bm_addsale.SetSize(self.bm_addsale.GetBestSize())
        self.sl_2.SetMinSize((1, 70))
        self.bm_cancel.SetSize(self.bm_cancel.GetBestSize())
        self.p_maintoolbar.SetBackgroundColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_WINDOWFRAME))
        # end wxGlade

    def __do_layout(self):
        # begin wxGlade: RightPanel_view.__do_layout
        self.s_right = wx.BoxSizer(wx.VERTICAL)
        s_maintoolbar = wx.FlexGridSizer(1, 6, 0, 0)
        s_maintoolbar.Add(self.bm_opening, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 10)
        s_maintoolbar.Add(self.sl_1, 1, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 10)
        s_maintoolbar.Add(self.tc_searchsale, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 10)
        s_maintoolbar.Add(self.bm_addsale, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 10)
        s_maintoolbar.Add(self.sl_2, 1, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 10)
        s_maintoolbar.Add(self.bm_cancel, 0, wx.ALL|wx.ALIGN_CENTER_VERTICAL, 10)
        self.p_maintoolbar.SetSizer(s_maintoolbar)
        s_maintoolbar.AddGrowableRow(0)
        s_maintoolbar.AddGrowableCol(1)
        s_maintoolbar.AddGrowableCol(2)
        s_maintoolbar.AddGrowableCol(3)
        self.s_right.Add(self.p_maintoolbar, 0, wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL, 0)
        self.s_right.Add(self.p_content, 1, wx.EXPAND, 10)
        self.SetSizer(self.s_right)
        self.s_right.Fit(self)

    def new_sale(self, evt):
	    self.statusSale = True
	    self.statusDue = True
	    self.statusDiscount = True
	
	    self.bm_addsale.Disable()
	    self.p_content.Destroy()
	    self.p_content = Sale_view(self, -1)
	    self.s_right.Add(self.p_content, 1, wx.EXPAND, 10)
	    self.Layout()

    def close_sale_list(self):
	    self.bm_addsale.Disable()
	    wx.CallAfter(self.set_details_sale)

    def set_details_sale(self):
	    """
	    Elimina el panel que contiene la lista de ventas
	    actuales y carga la informacion de la venta selecciona
	    al panel de venta.
	    """
	    self.statusSale = False
	    self.statusSalePending = True
	    self.p_content.Destroy()
	    self.p_content = Sale_view(self, -1)
	    self.s_right.Add(self.p_content, -1, wx.EXPAND, 10)
	    self.Layout()

	    lc = self.p_content.lc_sale	
	    for item in self.details_sale:
		    index = lc.InsertStringItem(0, unicode(item['name']))
		    lc.SetStringItem(index,1, unicode(item['amount']))
		    lc.SetStringItem(index,2, unicode(item['price']))
		    lc.SetStringItem(index,3, unicode(item['total']))

	    subtotal = self.helpers_sale.get_subtotal(lc, self.p_content.l_vsubtotal)
	    taxTotal = self.helpers_sale.get_tax_total(lc, self.p_content.l_vstax)
	    self.helpers_sale.get_total_sale(taxTotal, subtotal, self.p_content.l_vtotal)
	
    def cancel_sale(self, sale_current):
	    self.bm_addsale.Enable()
	    self.statusSale = False
	    self.p_content.Destroy()
	    self.p_content = SalesList_view(self, -1)
	    self.s_right.Add(self.p_content, 1, wx.EXPAND, 10)
	    self.get_sale_list(sale_current)
	    self.Layout()

    def pay_close(self):
	    """
	    Se usa para cerrar el dialogo una vez que el pago se completo
	    y agrega la venta pagada a list_sales_current obteniendola desde
	    la bd, por eso a get_sale_list se le debe pasar None
	    """
	    self.bm_addsale.Enable()
	    #self.statusSale = False
	    #self.statusDue = True
	    #self.statusDiscount = True
	    self.p_content.Destroy()
	    self.p_content = SalesList_view(self, -1)
	    self.s_right.Add(self.p_content, 1, wx.EXPAND, 10)
	    self.get_sale_list(None)
	    self.Layout()
		

    def get_sale_list(self, sale_current):
	    """
	    Obtiene la lista de ventas con productos pagadas o pendientes
	    que es el resultado de la lista actual mas una venta pagada o pendiente.
	    Si sale_current es None regresara las ventas pagadas solamente.
	    """
	    if sale_current:
		    self.p_content.list_sales_current.append(sale_current)
		    self.set_sale_list(self.p_content.list_sales_current)
	    else:
		    self.set_sale_list(self.p_content.list_sales_current)
	    print "GET_SALE_LIST", self.p_content.list_sales_current
		
    def set_sale_list(self, sales_current):
	    """
	    Actualiza la lista de ventas actuales
	    """
	    self.p_content.lc_saleslist.DeleteAllItems()
	    for item in sales_current:
		    index = self.p_content.lc_saleslist.InsertStringItem(0, '')
		    self.p_content.lc_saleslist.SetStringItem(index,1, unicode(item['id']))
		    self.p_content.lc_saleslist.SetStringItem(index,2, unicode(item['sku']))
		    self.p_content.lc_saleslist.SetStringItem(index,3, unicode(item['sale']))
		    self.p_content.lc_saleslist.SetStringItem(index,4, unicode(item['amount']))
		    self.p_content.lc_saleslist.SetStringItem(index,5, unicode(item['total']))