Example #1
0
class ClientsController:
    def __init__(self, parent):

        self.main_controller = parent
        self.main_frame = parent.getFrame()

        self.frame = ObjectListFrameClient(self.main_frame)
        self.model = ObjectListModel(Client)

        self.setupListColumns()
        self.setupSearchBy()
        self.loadAllClients()
        self.setTitle()
        # self.bindEvents()

        pub.subscribe(self.clientChanged, "client.changed")
        pub.subscribe(self.clientAdded, "clients.added")
        pub.subscribe(self.clientDeleted, "clients.deleted")

        self.frame.Bind(wx.EVT_BUTTON, self.OnModify, self.frame.btn_modify)
        self.frame.Bind(wx.EVT_BUTTON, self.OnNew, self.frame.btn_add)
        self.frame.Bind(wx.EVT_BUTTON, self.OnDelete, self.frame.btn_delete)
        self.frame.Bind(wx.EVT_BUTTON, self.OnAdmCuent, self.frame.btn_admCuent)
        self.frame.Bind(wx.EVT_BUTTON, self.OnVerFactura, self.frame.btn_verFact)

    def setupListColumns(self):

        self.frame.setColumns((("ID", 100), ("Nombre", 200), ("DNI/CUIL", 150)))

        self.frame.setResizableColumn(2)

    def setupSearchBy(self):

        self.frame.setSearchBy(["Nombre", "ID"])

    def setTitle(self):

        self.frame.SetTitle("Lista de Clientes")

    def loadAllClients(self):

        for client in self.model.getObjects():
            self.frame.insertRow((client.getId(), (str(client.model.pk), client.model.name, client.model.dni_cuil)))

    def bindEvents(self):

        # Bind event to DClick on ListItem
        self.frame.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnListItemActivated)

    def show(self):

        self.frame.Show()

    def setModel(self, client_dialog, model):

        controls = client_dialog.getControls()
        field_names = model.getFieldNames()

        for field in controls:
            if field in field_names:

                value = model.getFieldValue(field)
                client_dialog.getControl(field).SetValue(str(value))

                # Setting name in dialog title
        client_dialog.SetTitle("Cliente: %s" % model.getFieldValue("name"))

        client_dialog.setUnmodified()

    def saveModel(self, client_dialog, model=None):

        controls = client_dialog.getControls()
        field_names = self.model.getFieldNames()

        fields_to_save = {}

        for field in controls:
            if field in field_names:

                value = client_dialog.getControl(field).GetValue()
                # model.setFieldValue(field, value)
                fields_to_save[field] = value

        if model is not None:
            model.setFieldsValues(fields_to_save)
        else:
            self.model.createObject(fields_to_save)

    def clientChanged(self, object):

        # print "el cliente %d cambio" % object_id
        item_idx = self.frame.list_objects.FindItemData(-1, object.getId())

        pk = object.getFieldValue("pk")
        name = object.getFieldValue("name")
        dni_cuil = object.getFieldValue("dni_cuil")

        self.frame.setRow(item_idx, (str(pk), name, dni_cuil))

    def clientAdded(self, object):

        self.frame.insertRow((object.getId(), (str(object.model.pk), object.model.name, object.model.dni_cuil)))

    def clientDeleted(self, object_id):

        item_idx = self.frame.list_objects.FindItemData(-1, object_id)
        self.frame.deleteRow(item_idx)

    def showClientDialog(self, client_model=None):

        # Show the Client Frame
        client_dialog = ClientDialog(self.frame)

        if client_model is not None:

            # Existent Client
            self.setModel(client_dialog, client_model)

            # Save Model Data
            if client_dialog.ShowModal() == wx.ID_OK:
                self.saveModel(client_dialog, client_model)

        else:

            # Create New Client
            client_dialog.SetTitle("Nuevo Cliente")
            if client_dialog.ShowModal() == wx.ID_OK:
                self.saveModel(client_dialog)

        client_dialog.Destroy()

    def getFocusedClientId(self):

        selected_item_idx = self.frame.list_objects.GetFocusedItem()

        if selected_item_idx != -1:

            item = self.frame.list_objects.GetItem(selected_item_idx)
            cid = int(item.GetData())

        else:

            cid = -1

            info_dlg = wx.MessageDialog(
                self.frame,
                "Debe seleccionar un cliente primero",
                caption="Error",
                style=wx.OK | wx.CENTRE | wx.ICON_ERROR,
            )

            info_dlg.ShowModal()
            info_dlg.Destroy()

        return cid

    def OnListItemActivated(self, event):

        client_id = int(event.GetData())
        client_model = self.model.getObjectById(client_id)

        self.showClientDialog(client_model)

        event.Skip()

    def OnAdmCuent(self, event):

        client_id = self.getFocusedClientId()

        if client_id != -1:

            cuentas = ObjectListModel(Cuenta).getFilteredData(**{"cliente_id": client_id})

            try:
                self.cuentasController.Show()
            except:
                self.cuentasController = cuentasController(self.frame, cuentas, client_id)
                self.cuentasController.show()

        event.Skip()

    def OnVerFactura(self, event):

        client_id = self.getFocusedClientId()

        if client_id != -1:

            cuentas = ObjectListModel(Cuenta).getFilteredData(**{"cliente_id": client_id})

            arreglo = []
            for i in cuentas:
                arreglo.append(i.getId())

            facturas = ObjectListModel(Factura).getFilteredData(**{"cuenta__in": arreglo})
            cliente = self.model.getObjectById(client_id)
            arregloCliente = []
            arregloCliente.append(cliente.getFieldValue("name"))
            arregloCliente.append(cliente.getFieldValue("dni_cuil"))
            try:
                self.facturas_controller.show()
            except:
                self.facturas_controller = FacturaController(self.frame)
                self.facturas_controller.show()
            self.facturas_controller.facturasPorCliente(facturas)

            self.facturas_controller.setFacturas(arregloCliente)
        event.Skip()

    def OnModify(self, event):

        client_id = self.getFocusedClientId()

        if client_id != -1:
            client_model = self.model.getObjectById(client_id)
            self.showClientDialog(client_model)

    def OnNew(self, event):

        self.showClientDialog()
        event.Skip()

    def OnDelete(self, event):

        client_id = self.getFocusedClientId()

        if client_id != -1:

            client_model = self.model.getObjectById(client_id)

            confirm_dlg = wx.MessageDialog(
                self.frame,
                "Esta seguro que desea eliiminar el cliente %s?" % client_model.getFieldValue("name"),
                caption="Confirmar",
                style=wx.OK | wx.CANCEL | wx.CENTRE | wx.ICON_QUESTION,
            )

            if confirm_dlg.ShowModal() == wx.ID_OK:
                self.model.deleteObjectById(client_model.getId())
Example #2
0
class NuevoTipoCuentaController:
    def __init__(self, parent):

        self.main_controller = parent
        self.main_frame = parent.getFrame()

        self.frame = ObjectListFrameTipoCuenta(self.main_frame, size=(700, 500))
        self.model = ObjectListModel(TipoCuenta)

        self.setupListColumns()
        self.setupSearchBy()
        self.loadAllTipoCuenta()
        self.setTitle()
        self.bindEvents()

        pub.subscribe(self.tipoCuentaChanged, "tipo_cuenta.changed")
        pub.subscribe(self.tipoCuentaAdded, "tipo_cuentas.added")
        pub.subscribe(self.tipoCuentaDeleted, "tipo_cuentas.deleted")

        self.frame.Bind(wx.EVT_BUTTON, self.OnModify, self.frame.btn_modify)
        self.frame.Bind(wx.EVT_BUTTON, self.OnNew, self.frame.btn_add)
        self.frame.Bind(wx.EVT_BUTTON, self.OnDelete, self.frame.btn_delete)
        self.frame.Bind(wx.EVT_BUTTON, self.OnMayor, self.frame.btn_mayor)

    def setupListColumns(self):

        self.frame.setColumns((("Tipo", 100), ("Empresa", 200)))

        self.frame.setResizableColumn(2)

    def setupSearchBy(self):

        self.frame.setSearchBy(["Tipo", "Empresa"])

    def setTitle(self):

        self.frame.SetTitle("Lista de cuentas")

    def loadAllTipoCuenta(self):

        for tipoCuenta in self.model.getObjects():
            self.frame.insertRow((tipoCuenta.getId(), (tipoCuenta.model.tipo, tipoCuenta.model.empresa)))

    def bindEvents(self):

        # Bind event to DClick on ListItem
        self.frame.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnListItemActivated)

    def show(self):

        self.frame.Show()

    def setModel(self, tipoCuenta_dialog, model):

        controls = tipoCuenta_dialog.getControls()
        field_names = model.getFieldNames()

        for field in controls:
            if field in field_names:

                value = model.getFieldValue(field)
                tipoCuenta_dialog.getControl(field).SetValue(unicode(value))

                # Setting name in dialog title
        tipoCuenta_dialog.SetTitle("Cuenta: %s" % model.getFieldValue("tipo"))

        tipoCuenta_dialog.setUnmodified()

    def saveModel(self, tipoCuenta_dialog, model=None):

        controls = tipoCuenta_dialog.getControls()
        field_names = self.model.getFieldNames()

        fields_to_save = {}

        for field in controls:
            if field in field_names:

                value = tipoCuenta_dialog.getControl(field).GetValue()
                # model.setFieldValue(field, value)
                fields_to_save[field] = value

        if model is not None:
            model.setFieldsValues(fields_to_save)
        else:
            self.model.createObject(fields_to_save)

    def tipoCuentaChanged(self, object):

        # print "el cliente %d cambio" % object_id
        item_idx = self.frame.list_objects.FindItemData(-1, object.getId())

        tipo = object.getFieldValue("tipo")
        empresa = object.getFieldValue("empresa")

        self.frame.setRow(item_idx, (tipo, empresa))

    def tipoCuentaAdded(self, object):

        self.frame.insertRow((object.getId(), (object.model.tipo, object.model.empresa)))

    def tipoCuentaDeleted(self, object_id):

        item_idx = self.frame.list_objects.FindItemData(-1, object_id)
        self.frame.deleteRow(item_idx)

    def showTipoCuentaDialog(self, tipoCuenta_model=None):

        # Show the Client Frame
        tipoCuenta_dialog = agregarNuevoTipoCuenta(self.frame)

        if tipoCuenta_model is not None:

            # Existent Client
            self.setModel(tipoCuenta_dialog, tipoCuenta_model)

            # Save Model Data
            if tipoCuenta_dialog.ShowModal() == wx.ID_OK:
                self.saveModel(tipoCuenta_dialog, tipoCuenta_model)

        else:

            # Create New Client
            tipoCuenta_dialog.SetTitle("Nueva Cuenta")
            if tipoCuenta_dialog.ShowModal() == wx.ID_OK:
                self.saveModel(tipoCuenta_dialog)

        tipoCuenta_dialog.Destroy()

    def getFocusedTipoCuentaId(self):

        selected_item_idx = self.frame.list_objects.GetFocusedItem()

        if selected_item_idx != -1:

            item = self.frame.list_objects.GetItem(selected_item_idx)
            cid = int(item.GetData())

        else:

            cid = -1

            info_dlg = wx.MessageDialog(
                self.frame,
                "Debe seleccionar una cuenta primero",
                caption="Error",
                style=wx.OK | wx.CENTRE | wx.ICON_ERROR,
            )

            info_dlg.ShowModal()
            info_dlg.Destroy()

        return cid

    def OnListItemActivated(self, event):

        tipoCuentaId = int(event.GetData())
        tipoCuenta_model = self.model.getObjectById(tipoCuentaId)

        self.showTipoCuentaDialog(tipoCuenta_model)

        event.Skip()

    def OnMayor(self, event):
        tipoCuentaId = self.getFocusedTipoCuentaId()

        if tipoCuentaId != -1:
            tipocuenta = self.model.getObjectById(tipoCuentaId)
            listaCuentas = ObjectListModel(Cuenta).getFilteredData(**{"tipocuenta_id": tipoCuentaId})
            self.mayor = CuentaMayor(self.frame)
            self.mayor.setColumns((("DEBE", 295), ("HABER", 295)))
            self.mayor.setResizableColumn(2)
            self.mayor.setTitle(
                "Mayor cuenta " + unicode(tipocuenta.model.tipo) + " - " + unicode(tipocuenta.model.empresa)
            )
            # self.armarMayor(listaCuentas,tipocuenta)
            self.mayor.Layout()
            self.mayor.Show()

    def armarMayor(self, obj, tipocuenta):
        facturas = ObjectListModel(Factura).getFilteredData(**{"cuenta_id": obj.getId()})
        pagos = ObjectListModel(PagosPorCliente).getFilteredData(**{"factura__in": facturas})
        cobros = ObjectListModel(Factura).getFilteredData(**{"factura__in": facturas})
        for obj in facturas:
            self.mayor.insertRow((obj.getId(), (cobros)))

    def OnModify(self, event):

        tipoCuentaId = self.getFocusedTipoCuentaId()

        if tipoCuentaId != -1:
            tipoCuenta_model = self.model.getObjectById(tipoCuentaId)
            self.showTipoCuentaDialog(tipoCuenta_model)

    def OnNew(self, event):

        self.showTipoCuentaDialog()
        event.Skip()

    def OnDelete(self, event):
        tipoCuentaId = self.getFocusedTipoCuentaId()

        if tipoCuentaId != -1:

            tipoCuenta_model = self.model.getObjectById(tipoCuentaId)

            confirm_dlg = wx.MessageDialog(
                self.frame,
                "Esta seguro que desea eliminar la cuenta %s?" % tipoCuenta_model.getFieldValue("tipo"),
                caption="Confirmar",
                style=wx.OK | wx.CANCEL | wx.CENTRE | wx.ICON_QUESTION,
            )

            if confirm_dlg.ShowModal() == wx.ID_OK:
                self.model.deleteObjectById(tipoCuenta_model.getId())