class SeleccionarProducto( wx.Dialog ): def __init__( self, parent, id, title ): wx.Dialog.__init__( self, parent, id, title ) self.DBM = DBManager() self.producto_comprado = None self.SetSize( ( 320, 260 ) ) vbox = wx.BoxSizer( wx.VERTICAL ) font = wx.Font( 16, wx.NORMAL, wx.NORMAL, wx.BOLD) hbox0 = wx.BoxSizer( wx.HORIZONTAL ) b_text = wx.StaticText( self, -1, "BUSCAR" ) b_text.SetFont( font ) hbox0.Add( b_text, flag=wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP ) vbox.Add( hbox0, flag=wx.CENTER | wx.EXPAND ) hbox1 = wx.BoxSizer( wx.HORIZONTAL ) self.b_field = wx.TextCtrl( self, -1, "" ) b_button = wx.Button( self, -1, "Buscar" ) hbox1.Add( self.b_field, flag=wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, border=10 ) hbox1.Add( b_button, flag=wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, border=10 ) vbox.Add( hbox1 ) hbox3 = wx.BoxSizer( wx.HORIZONTAL ) cantidad = wx.StaticText( self, -1, "Cantidad" ) self.b_cant = wx.TextCtrl( self, -1, "", size=(40,20) ) comprar = wx.Button( self, -1, "Agregar" ) hbox3.Add( cantidad, flag=wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, border=10 ) hbox3.Add( self.b_cant, flag=wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, border=10 ) hbox3.Add( comprar, flag=wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, border=10 ) vbox.Add( hbox3 ) hbox2 = wx.BoxSizer( wx.HORIZONTAL ) self.b_decr = wx.TextCtrl( self, -1, "", size=(40,20) ) hbox2.Add( self.b_decr, proportion=3, flag=wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, border=10 ) vbox.Add( hbox2, proportion=3, flag=wx.CENTER | wx.EXPAND, border=3 ) self.Bind(wx.EVT_BUTTON, self.__OnSearch, b_button) self.Bind(wx.EVT_BUTTON, self.__OnBuy, comprar) self.SetSizer( vbox ) self.Show( True ) def __OnSearch( self, evt ): try: producto = self.DBM.getProductoByCode( self.b_field.GetValue() )[0] if producto[6] == 0: self.b_decr.SetValue( "Stock Agotado" ) else: self.b_decr.SetValue( "%s %s $%.2f" % ( producto[2], producto[3], producto[4] ) ) self.producto_comprado = producto except: self.b_decr.SetValue( "Producto Inexistente" ) def __OnBuy( self, evt ): cantidad = self.b_cant.GetValue() if self.producto_comprado[6] < int( cantidad ): wx.MessageBox("No tiene suficiente stock para realizar la venta", "Stock Insuficiente", wx.OK | wx.ICON_INFORMATION) else: Publisher().sendMessage(("producto_seleccionado_sin_cancha"), {'producto':self.producto_comprado, 'cantidad':cantidad} ) self.Destroy()
class CuentaCancha( wx.Dialog ): def __init__( self, parent, id, title, data ): wx.Dialog.__init__( self, parent, id, title ) self.data = data self.SetSize( ( 800, 600 ) ) self.SetMinSize( ( 800, 600 ) ) self.list_ctrl = wx.ListCtrl(self, style=wx.LC_REPORT) image2 = wx.Image('images/add.png', wx.BITMAP_TYPE_ANY).ConvertToBitmap() self.btn_add = wx.BitmapButton(self, id=-1, bitmap=image2, size=(24,24)) image5 = wx.Image('images/delete.png', wx.BITMAP_TYPE_ANY).ConvertToBitmap() self.btn_del = wx.BitmapButton(self, id=-1, bitmap=image5, size=(24,24)) self.__generateContent( ) self.Bind(wx.EVT_CLOSE, self.__OnClose) Publisher().subscribe(self.__redefine, ("producto_seleccionado")) def __OnClose( self, evt ): Publisher().sendMessage(("cuentacancha_cerrada"), True) self.Destroy() def __generateContent( self ): self.DBM = DBManager() id_reserva = self.DBM.getIDReservado( self.data['fecha'], self.data['id_cancha'], self.data['horario'] ) id_cuenta_horario = self.DBM.getCuentaHorarioID( id_reserva )[0] productos = self.DBM.getProductosByCuenta( id_cuenta_horario ) rows = list() try: for row in productos: rows.append( (row[3], row[4], row[5], row[1], row[2]) ) except: rows.append( ('Vacio', '', '', '', '') ) self.list_ctrl.InsertColumn(0, "Codigo") self.list_ctrl.InsertColumn(1, "Marca") self.list_ctrl.InsertColumn(2, "Descripcion") self.list_ctrl.InsertColumn(3, "Precio") self.list_ctrl.InsertColumn(4, "Cantidad") index = 0 total = 0 for row in rows: self.list_ctrl.InsertStringItem(index, row[0]) self.list_ctrl.SetStringItem(index, 1, row[1]) self.list_ctrl.SetStringItem(index, 2, row[2]) self.list_ctrl.SetStringItem(index, 3, "$ %s" % str( row[3] )) self.list_ctrl.SetStringItem(index, 4, str( row[4] )) total += row[3] * row[4] if index % 2: self.list_ctrl.SetItemBackgroundColour(index, "white") else: self.list_ctrl.SetItemBackgroundColour(index, "gray") index += 1 self.list_ctrl.InsertStringItem(index, "TOTAL") self.list_ctrl.SetStringItem(index, 1, "") self.list_ctrl.SetStringItem(index, 2, "") self.list_ctrl.SetStringItem(index, 3, "") self.list_ctrl.SetStringItem(index, 4, "$ %s" % total) self.list_ctrl.SetItemBackgroundColour(index, "red") self.Bind(wx.EVT_BUTTON, self.onAdd, self.btn_add) self.Bind(wx.EVT_BUTTON, self.onDel, self.btn_del) sizer = wx.BoxSizer(wx.VERTICAL) sizer2 = wx.BoxSizer(wx.HORIZONTAL) sizer2.Add(self.btn_add, 0, wx.ALL, 1) sizer2.Add(self.btn_del, 0, wx.ALL, 1) sizer.Add(sizer2, 0, wx.ALL, 1) sizer.Add(self.list_ctrl, 1, wx.EXPAND) self.SetSizer(sizer) self.Show(True) def __redefine( self, evt ): self.list_ctrl.ClearAll() id_reserva = self.DBM.getIDReservado( self.data['fecha'], self.data['id_cancha'], self.data['horario'] ) id_cuenta_horario = self.DBM.getCuentaHorarioID( id_reserva )[0] self.DBM.addProductToCuentaCancha( id_cuenta_horario, evt.data['producto'][0], evt.data['producto'][4], evt.data['cantidad'] ) nueva_cantidad = evt.data['producto'][6] - int( evt.data['cantidad'] ) self.DBM.reduceStockById( evt.data['producto'][0], nueva_cantidad ) self.DBM.addProductTrans( self.data["fecha"], evt.data['cantidad'], 1, evt.data['producto'][4], evt.data['producto'][0], 1, 1, self.data['id_cancha'], id_cuenta_horario) self.__generateContent() def onAdd( self, evt ): sp = SeleccionarProducto( self, id=wx.ID_ANY, title="Agregar Producto a la Compra") def onDel( self, evt ): item = self.list_ctrl.GetItem( self.list_ctrl.GetFirstSelected() ) product = self.DBM.getProductoByCode( item.GetText() ) id_reserva = self.DBM.getIDReservado( self.data['fecha'], self.data['id_cancha'], self.data['horario'] ) id_cuenta_horario = self.DBM.getCuentaHorarioID( id_reserva )[0] productos = self.DBM.getProductosByCuenta( id_cuenta_horario ) cantidad = 0 for prod in productos: if prod[0] == product[0][0]: cantidad = prod[2] n_cantidad = cantidad + product[0][6] self.DBM.reduceStockById( product[0][0], n_cantidad ) self.DBM.deleteProductFromCuenta( product[0][0], id_cuenta_horario ) self.DBM.deleteProductFromProductTrans( product[0][0], id_cuenta_horario ) self.list_ctrl.ClearAll() self.__generateContent()