class DebtsViewWidget(FWidget): """ Shows the home page """ def __init__(self, parent=0, *args, **kwargs): super(DebtsViewWidget, self).__init__(parent=parent, *args, **kwargs) self.parent = parent self.parentWidget().setWindowTitle(Config.NAME_ORGA + u"Gestion des dettes") hbox = QHBoxLayout(self) # self.balace_box = QGridLayout(self) # self.balace_box.addWidget(FLabel(u"Reste à payer :"), 0, 2) # self.balace_box.setRowStretch(1, 2) self.remaining_box = FLabel() self.remaining_box.setMaximumHeight(40) self.table_debt = DebtsTableWidget(parent=self) self.table_provid_clt = ProviderOrClientTableWidget(parent=self) self.search_field = LineEdit() self.search_field.textChanged.connect(self.search) self.search_field.setPlaceholderText(u"Nom ou numéro tel") self.search_field.setMaximumHeight(40) splitter = QSplitter(Qt.Horizontal) self.splitter_left = QSplitter(Qt.Vertical) self.splitter_left.addWidget(self.search_field) self.splitter_left.addWidget(self.table_provid_clt) splt_clt = QSplitter(Qt.Vertical) splt_clt.addWidget(self.remaining_box) splt_clt.addWidget(self.table_debt) splt_clt.resize(900, 1000) splitter.addWidget(self.splitter_left) splitter.addWidget(splt_clt) hbox.addWidget(splitter) self.setLayout(hbox) def search(self): self.table_provid_clt.refresh_(self.search_field.text()) def new_refund(self, provid_clt): from ui.refund_edit_add import RefundEditAddDialog self.parent.open_dialog(RefundEditAddDialog, modal=True, type_=Refund.RB, provid_clt=provid_clt, table_p=self.table_debt)
class DashbordViewWidget(FWidget): """ Shows the home page """ def __init__(self, parent=0, *args, **kwargs): super(DashbordViewWidget, self).__init__(parent=parent, *args, **kwargs) self.parentWidget().setWindowTitle(Config.APP_NAME + u" TABLEAU DE BORD") self.parent = parent vbox = QVBoxLayout() table_invoice = QVBoxLayout() table_buying = QVBoxLayout() self.search_field = LineEdit() self.search_field.setPlaceholderText( "Taper un nom client ou num. facture") self.search_field.setMaximumSize( 500, self.search_field.maximumSize().height()) self.search_field.textChanged.connect(self.finder) self.title = FPageTitle("TABLEAU DE BORD") self.title_buying = FBoxTitle(u"L'arivages ") self.table_buying = BuyTableWidget(parent=self) table_buying.addWidget(self.title_buying) table_buying.addWidget(self.table_buying) self.title_invoice = FBoxTitle(u"Les Factures") self.table_invoice = InvoiceTableWidget(parent=self) table_invoice.addWidget(self.search_field) table_invoice.addWidget(self.table_invoice) tab_widget = tabbox((table_invoice, u"Factures"), (table_buying, u"Arivages ")) vbox.addWidget(self.title) vbox.addWidget(tab_widget) self.setLayout(vbox) def finder(self): self.table_invoice.refresh_(self.search_field.text())
class CooperativeSocietyViewWidget(FWidget): """ Shows the home page """ def __init__(self, parent=0, *args, **kwargs): super(CooperativeSocietyViewWidget, self).__init__(parent=parent, *args, **kwargs) self.parentWidget().set_window_title("SCOOP") self.parent = parent self.search_field = LineEdit() self.search_field.setPlaceholderText("Rechercher une coopérative") self.search_field.setMinimumSize(600, 80) self.search_field.textChanged.connect(self.finder) self.btt_xlsx_export = BttExportXLSX("") self.btt_xlsx_export.clicked.connect(self.export_xlsx) self.btt_xlsx_export.setMaximumWidth(40) self.btt_xlsx_export.setEnabled(False) self.string_list = [] self.title_field = FPageTitle("Gestion des Sociétés coopératives") self.table = MemberTableWidget(parent=self) editbox = QGridLayout() editbox.addWidget(self.search_field, 1, 0) editbox.setColumnStretch(1, 1) editbox.addWidget(self.btt_xlsx_export, 1, 2) vbox = QVBoxLayout() vbox.addWidget(self.title_field) vbox.addLayout(editbox) vbox.addWidget(self.table) self.setLayout(vbox) def export_xlsx(self): from Common.exports_xlsx import export_dynamic_data export_dynamic_data(self.table.dict_data()) def finder(self): self.search = self.search_field.text() self.table.refresh_()
class ResgistrationManagerWidget(FWidget): def __init__(self, parent=0, *args, **kwargs): super(ResgistrationManagerWidget, self).__init__(parent=parent, *args, **kwargs) self.parent = parent self.search_field = LineEdit() self.search_field.setPlaceholderText("Rechercher une demande") self.search_field.setMinimumSize(600, 80) self.search_field.textChanged.connect(self.finder) self.string_list = [] self.title_field = FPageTitle("Gestion des demandes") self.new_demande_btt = Button("Nouvelle demande") self.new_demande_btt.setMaximumWidth(400) self.new_demande_btt.setIcon( QIcon.fromTheme('save', QIcon(u"{}add.png".format(Config.img_media)))) self.new_demande_btt.clicked.connect(self.goto_demande) self.table = DemandeTableWidget(parent=self) editbox = QGridLayout() editbox.addWidget(self.search_field, 1, 0) editbox.setColumnStretch(1, 1) editbox.addWidget(self.new_demande_btt, 1, 3) vbox = QVBoxLayout() vbox.addWidget(self.title_field) vbox.addLayout(editbox) vbox.addWidget(self.table) self.setLayout(vbox) def goto_demande(self): from ui.registration_view import RegistrationViewWidget self.change_main_context(RegistrationViewWidget) def finder(self): self.table.refresh_()
class DebtsViewWidget(FWidget): """ Shows the home page """ def __init__(self, parent=0, *args, **kwargs): super(DebtsViewWidget, self).__init__(parent=parent, *args, **kwargs) self.parent = parent self.parentWidget().setWindowTitle( Config.NAME_ORGA + u"Gestion des dettes") hbox = QHBoxLayout(self) self.table_debt = DebtsTableWidget(parent=self) self.table_provid_clt = ProviderOrClientTableWidget(parent=self) self.search_field = LineEdit() self.search_field.textChanged.connect(self.search) self.search_field.setPlaceholderText(u"Nom ou numéro tel") splitter = QSplitter(Qt.Horizontal) self.splitter_left = QSplitter(Qt.Vertical) self.splitter_left.addWidget(self.search_field) self.splitter_left.addWidget(self.table_provid_clt) splt_clt = QSplitter(Qt.Vertical) splt_clt.addWidget(self.table_debt) splt_clt.resize(900, 1000) splitter.addWidget(self.splitter_left) splitter.addWidget(splt_clt) hbox.addWidget(splitter) self.setLayout(hbox) def search(self): self.table_provid_clt.refresh_(self.search_field.text()) def new_refund(self, provid_clt): from ui.refund_edit_add import RefundEditAddDialog self.parent.open_dialog( RefundEditAddDialog, modal=True, type_=Refund.RB, provid_clt=provid_clt, table_p=self.table_debt)
class DashbordViewWidget(FWidget): """ Shows the home page """ def __init__(self, parent=0, *args, **kwargs): super(DashbordViewWidget, self).__init__(parent=parent, *args, **kwargs) self.parentWidget().setWindowTitle(Config.APP_NAME + " TABLEAU DE BORD") self.parent = parent vbox = QVBoxLayout() table_invoice = QVBoxLayout() table_buying = QVBoxLayout() self.search_field = LineEdit() self.search_field.setPlaceholderText("Rechercher") self.search_field.setMaximumSize(500, self.search_field.maximumSize().height()) self.search_field.textChanged.connect(self.finder) self.title = FPageTitle("TABLEAU DE BORD") self.title_buying = FBoxTitle("L'arivages ") self.table_buying = BuyTableWidget(parent=self) table_buying.addWidget(self.title_buying) table_buying.addWidget(self.table_buying) self.title_invoice = FBoxTitle("Les Factures") self.table_invoice = InvoiceTableWidget(parent=self) table_invoice.addWidget(self.search_field) table_invoice.addWidget(self.table_invoice) tab_widget = tabbox((table_invoice, "Factures"), (table_buying, "Arivages ")) vbox.addWidget(self.title) vbox.addWidget(tab_widget) self.setLayout(vbox) def finder(self): self.table_invoice.refresh_(str(self.search_field.text()))
class MemberManagerWidget(FWidget): def __init__(self, parent, dmd=None, *args, **kwargs): super(FWidget, self).__init__(parent=parent, *args, **kwargs) self.parent = parent self.dmd = parent.dmd self.search_field = LineEdit() self.search_field.setPlaceholderText("Rechercher un membre") # self.search_field.setMaximumWidth(400) self.search_field.setMaximumSize(900, 100) self.search_field.textChanged.connect(self.finder) self.string_list = [] self.new_demande_btt = Button("Nouveau Membre") self.new_demande_btt.setMaximumWidth(400) self.new_demande_btt.setIcon(QIcon.fromTheme('save', QIcon( u"{}add.png".format(Config.img_media)))) self.new_demande_btt.clicked.connect(self.add_member) self.table = MemberTableWidget(parent=self) editbox = QGridLayout() editbox.addWidget(self.search_field, 1, 0) editbox.setColumnStretch(1, 1) editbox.addWidget(self.new_demande_btt, 1, 3) vbox = QVBoxLayout() vbox.addLayout(editbox) vbox.addWidget(self.table) self.setLayout(vbox) def add_member(self): self.parent.open_dialog( EditOrAddMemberDialog, modal=True, scoop=self.dmd.scoop, table_p=self.table) def finder(self): self.search = self.search_field.text() self.table.refresh_()
class MemberManagerWidget(FWidget, FPeriodHolder): def __init__(self, parent=0, dmd=None, *args, **kwargs): super(MemberManagerWidget, self).__init__( parent=parent, *args, **kwargs) FPeriodHolder.__init__(self, *args, **kwargs) self.parent = parent self.dmd = dmd self.search_field = LineEdit() self.search_field.setPlaceholderText("Rechercher un membre") # self.search_field.setMaximumWidth(400) self.search_field.setMaximumSize(900, 100) self.search_field.textChanged.connect(self.finder) self.string_list = [] self.title_field = FPageTitle( "Gestion des membres de la {}".format(self.dmd.scoop)) self.end_demande_btt = Button("Fin de l'ajout") self.end_demande_btt.setMaximumWidth(400) self.end_demande_btt.clicked.connect(self.goto_immatriculation) if self.dmd.scoop.membres().count() < 4: self.end_demande_btt.setEnabled(False) self.new_demande_btt = Button("Nouveau Membre") self.new_demande_btt.setMaximumWidth(400) self.new_demande_btt.setIcon(QIcon.fromTheme('save', QIcon( u"{}add.png".format(Config.img_media)))) self.new_demande_btt.clicked.connect(self.add_member) self.table = MemberTableWidget(parent=self) editbox = QGridLayout() editbox.addWidget(self.search_field, 1, 0) editbox.setColumnStretch(1, 1) editbox.addWidget(self.new_demande_btt, 1, 3) editbox.addWidget(self.end_demande_btt, 1, 4) vbox = QVBoxLayout() vbox.addWidget(self.title_field) vbox.addLayout(editbox) vbox.addWidget(self.table) self.setLayout(vbox) # def end_add_member(self): # self.dmd.status = self.dmd.CHECKLIST # self.dmd.save_() # from ui.check_list_view import CheckListViewWidget # self.change_main_context(CheckListViewWidget, dmd=self.dmd) def goto_immatriculation(self): # self.dmd.status = self.dmd.CHECKLIST self.dmd.status = self.dmd.IMMATRICULAITON self.dmd.save_() from ui.immatriculation import ImmatriculationSCoopViewWidget self.change_main_context( ImmatriculationSCoopViewWidget, dmd=self.dmd) def add_member(self): self.open_dialog( EditOrAddMemberDialog, modal=True, scoop=self.dmd.scoop, table_p=self.table) def finder(self): self.search = self.search_field.text() self.table.refresh_() def refresh_b(self): if self.dmd.scoop.membres().count() >= 3: self.end_demande_btt.setEnabled(True)
class InvoiceViewWidget(FWidget): def __init__(self, product="", parent=0, *args, **kwargs): super(InvoiceViewWidget, self).__init__(parent=parent, *args, **kwargs) self.parentWidget().setWindowTitle( Config.APP_NAME + u" Ventes") self.parent = parent vbox = QVBoxLayout(self) # hbox = QHBoxLayout(self) editbox = QGridLayout(self) try: next_number = int( Invoice.select().order_by(Invoice.number.desc()).get().number) + 1 except: next_number = 1 self.num_invoice = IntLineEdit(str(next_number)) self.num_invoice.setToolTip(u"Le numéro") self.num_invoice.setMaximumSize( 40, self.num_invoice.maximumSize().height()) self.invoice_date = FormatDate(QDate.currentDate()) # self.name_client_field = LineEdit() self.string_list = [""] + ["{},{}".format(clt.name, clt.phone) for clt in ProviderOrClient.select().where( ProviderOrClient.type_ == ProviderOrClient.CLT).order_by(ProviderOrClient.name.desc())] # self.name_client_field_new = "" self.name_client_field = ExtendedComboBox() self.name_client_field.addItems(self.string_list) self.name_client_field.setMaximumSize( 200, self.name_client_field.maximumSize().height()) self.name_client_field.setToolTip("Nom, numero du client") self.add_clt_btt = BttSmall(u"+") self.add_clt_btt.clicked.connect(self.add_clt) self.add_clt_btt.setFixedWidth(50) # Combobox widget for add store self.liste_type_invoice = [Invoice.TYPE_FACT, Invoice.TYPE_BON] self.box_type_inv = QComboBox() for index in range(0, len(self.liste_type_invoice)): op = self.liste_type_invoice[index] sentence = u"%(name)s" % {'name': op} self.box_type_inv.addItem(sentence, op) self.search_field = LineEdit() self.search_field.setPlaceholderText("Rechercher un article") self.search_field.textChanged.connect(self.finder) # self.search_field.setFixedWidth(250) self.table_invoice = InvoiceTableWidget(parent=self) self.table_resultat = ResultatTableWidget(parent=self) self.table_info = InfoTableWidget(parent=self) self.table_resultat.refresh_("") editbox.addWidget(self.box_type_inv, 0, 2) editbox.addWidget(self.num_invoice, 0, 3) editbox.addWidget(FLabel(u"Doit :"), 1, 2) editbox.addWidget(self.name_client_field, 1, 3) # editbox.addWidget(self.add_clt_btt, 1, 4) editbox.addWidget(self.invoice_date, 0, 6) editbox.setColumnStretch(0, 1) editbox.setColumnStretch(5, 1) splitter = QSplitter(Qt.Horizontal) splitter_left = QSplitter(Qt.Vertical) splitter_left.addWidget(self.search_field) splitter_left.addWidget(self.table_resultat) # splitter_down.resize(15, 20) splitter_down = QSplitter(Qt.Vertical) splitter_down.addWidget(self.table_info) splitter_rigth = QSplitter(Qt.Vertical) # splitter_rigth.setLayout(editbox) splitter_rigth.addWidget(self.table_invoice) splitter_rigth.resize(800, 900) splitter_left.addWidget(splitter_down) splitter.addWidget(splitter_left) splitter.addWidget(splitter_rigth) vbox.addLayout(editbox) vbox.addWidget(splitter) self.setLayout(vbox) def add_clt(self): from GCommon.ui.provider_client_edit_add import EditOrAddClientOrProviderDialog self.open_dialog(EditOrAddClientOrProviderDialog, modal=True, prov_clt=None, table_p=self) def finder(self): search_term = self.search_field.text() value = unicode(search_term) self.table_resultat.refresh_(value) def is_valide(self): print("is_valide") try: self.name_client, self.phone = self.name_client_field.lineEdit().text().split( ",") except Exception as e: # print(e) field_error( self.name_client_field, "Nom, numéro de téléphone du client") return False return True def save_b(self): ''' add operation ''' # entete de la facture print("save") if not self.is_valide(): return invoice_date = unicode(self.invoice_date.text()) num_invoice = int(self.num_invoice.text()) invoice_type = self.liste_type_invoice[ self.box_type_inv.currentIndex()] lis_error = [] invoice = Invoice() try: self.owner = Owner.get(Owner.islog == True) except: lis_error.append("Aucun utilisateur est connecté <br/>") paid_amount = int(self.table_invoice.paid_amount_field.text()) try: clt = ProviderOrClient.get_or_create( self.name_client, int(self.phone.replace(" ", "")), ProviderOrClient.CLT) except ValueError: field_error( self.name_client_field, "Nom, numéro de téléphone du client") invoice.number = num_invoice invoice.owner = self.owner invoice.client = clt invoice.location = "Bamako" invoice.type_ = invoice_type invoice.subject = "" invoice.paid_amount = paid_amount invoice.tax = False try: invoice.save() if int(paid_amount) != 0 or invoice_type == Invoice.TYPE_BON: Refund(type_=Refund.DT, owner=self.owner, amount=paid_amount, date=date_to_datetime(invoice_date), provider_client=clt, invoice=Invoice.get(number=num_invoice)).save() except Exception as e: invoice.deletes_data() lis_error.append( "Erreur sur l'enregistrement d'entête de facture<br/>") return False # Save invoiceitems invoice = Invoice.get(Invoice.number == num_invoice) for name, qty, price in self.table_invoice.get_table_items(): rep = Report() product = Product.get(Product.name == name) rep.store = 1 rep.product = product rep.invoice = invoice rep.type_ = Report.S rep.cost_buying = int(product.last_report.cost_buying) rep.date = date_to_datetime(invoice_date) rep.qty = int(qty) rep.selling_price = int(price) try: rep.save() except Exception as e: lis_error.append(e) if lis_error != []: invoice.delete_instance() self.parent.Notify(lis_error, "error") return False else: self.parent.Notify("Facture Enregistrée avec succès", "success") self.change_main_context(ShowInvoiceViewWidget, invoice_num=invoice.number)
class BuyViewWidget(FWidget): def __init__(self, parent=0, *args, **kwargs): super(BuyViewWidget, self).__init__(parent=parent, *args, **kwargs) self.parentWidget().setWindowTitle( Config.APP_NAME + u" Arrivage d'article") self.parent = parent vbox = QVBoxLayout(self) hbox = QHBoxLayout(self) editbox = QGridLayout() self.date = FormatDate(QDate.currentDate()) self.name_client = LineEdit() self.search_field = LineEdit() self.search_field.setPlaceholderText("Rechercher un article") self.search_field.textChanged.connect(self.finder) # self.search_field.setFixedWidth(200) self.add_prod = Button(u"+ &Article") self.add_prod.clicked.connect(self.add_product) self.add_prod.setFixedWidth(80) # self.add_prod.setFixedHeight(20) self.add_prod.setStyleSheet("Text-align:botton") self.add_prod.setToolTip("Ajouter un nouvel article") self.table_buy = BuyTableWidget(parent=self) self.table_resultat = ResultatTableWidget(parent=self) self.table_info = InfoTableWidget(parent=self) editbox.addWidget(self.add_prod, 0, 1) editbox.addWidget(FormLabel(u"Date d'achat:"), 0, 4) editbox.addWidget(self.date, 0, 5) editbox.setColumnStretch(3, 3) splitter = QSplitter(Qt.Horizontal) splitter_left = QSplitter(Qt.Vertical) splitter_down = QSplitter(Qt.Vertical) splitter_left.addWidget(self.search_field) splitter_left.addWidget(self.table_resultat) splitter_down.resize(35, 20) splitter_down.addWidget(self.table_info) splitter_rigth = QSplitter(Qt.Vertical) splitter_rigth.addWidget(self.table_buy) splitter_rigth.resize(800, 900) splitter_left.addWidget(splitter_down) splitter.addWidget(splitter_left) splitter.addWidget(splitter_rigth) hbox.addWidget(splitter) vbox.addLayout(editbox) vbox.addLayout(hbox) self.setLayout(vbox) def add_product(self): """ """ self.open_dialog(EditOrAddProductsDialog, modal=True, product=None, table_p=self.table_resultat) def finder(self): search_term = str(self.search_field.text()) self.table_resultat.refresh_(search_term) def save_b(self): ''' add operation ''' # entete de la facture if not self.table_buy.isvalid: return False owner = Owner.get(Owner.islog == True) date = str(self.date.text()) values_t = self.table_buy.get_table_items() buy = Buy() # buy.date = datetime_ buy.provd_or_clt = \ ProviderOrClient.get_or_create( "Fournisseur", 000000, ProviderOrClient.FSEUR) buy.owner = owner try: buy.save() err = False except: raise raise_error( "Erreur", u"Impossible d'enregistrer l'entête de la facture") return False for name, qty, cost_buying, selling_price in values_t: rep = Report() rep.buy = buy rep.type_ = Report.E rep.store = 1 rep.date = date_to_datetime(date) rep.product = Product.get(name=name) rep.qty = int(qty) rep.cost_buying = int(cost_buying) rep.selling_price = int(selling_price) try: rep.save() except Exception as e: print(e) err = True if err: buy.delete_instance() raise_error("Erreur", u"Ce mouvement n'a pas pu etre " u"enregistré dans les rapports") return False else: self.parent.Notify(u"L'entrée des articles avec succès", "success") self.change_main_context(BuyShowViewWidget, buy=buy)
class InvoiceViewWidget(FWidget): def __init__(self, product="", parent=0, *args, **kwargs): super(InvoiceViewWidget, self).__init__(parent=parent, *args, **kwargs) self.parentWidget().setWindowTitle(Config.APP_NAME + u" Ventes") self.parent = parent vbox = QVBoxLayout() # hbox = QHBoxLayout(self) editbox = QGridLayout() try: next_number = int(Invoice.select().order_by( Invoice.number.desc()).get().number) + 1 except: next_number = 1 self.num_invoice = IntLineEdit(str(next_number)) self.num_invoice.setToolTip(u"Le numéro") self.num_invoice.setMaximumSize( 40, self.num_invoice.maximumSize().height()) self.invoice_date = FormatDate(QDate.currentDate()) # self.name_client_field = LineEdit() self.string_list = [""] + [ "{},{}".format(clt.name, clt.phone) for clt in ProviderOrClient.select().where( ProviderOrClient.type_ == ProviderOrClient.CLT).order_by( ProviderOrClient.name.desc()) ] # self.name_client_field_new = "" self.name_client_field = ExtendedComboBox() self.name_client_field.addItems(self.string_list) self.name_client_field.setMaximumSize( 200, self.name_client_field.maximumSize().height()) self.name_client_field.setToolTip("Nom, numero du client") self.add_clt_btt = BttSmall(u"+") self.add_clt_btt.clicked.connect(self.add_clt) self.add_clt_btt.setFixedWidth(50) # Combobox widget for add store self.liste_type_invoice = [ Invoice.TYPE_FACT, Invoice.TYPE_BON, Invoice.TYPE_PROF ] self.box_type_inv = QComboBox() for index in range(0, len(self.liste_type_invoice)): op = self.liste_type_invoice[index] sentence = u"%(name)s" % {'name': op} self.box_type_inv.addItem(sentence, op) self.search_field = LineEdit() self.search_field.setPlaceholderText("Rechercher un article") self.search_field.textChanged.connect(self.finder) # self.search_field.setFixedWidth(250) self.search_field.setMaximumHeight(40) self.table_invoice = InvoiceTableWidget(parent=self) self.table_resultat = ResultatTableWidget(parent=self) self.table_info = InfoTableWidget(parent=self) self.table_resultat.refresh_("") editbox.addWidget(self.box_type_inv, 0, 2) editbox.addWidget(self.num_invoice, 0, 3) editbox.addWidget(FLabel(u"Doit :"), 1, 2) editbox.addWidget(self.name_client_field, 1, 3) # editbox.addWidget(self.add_clt_btt, 1, 4) editbox.addWidget(self.invoice_date, 0, 6) editbox.setColumnStretch(0, 1) editbox.setColumnStretch(5, 1) splitter = QSplitter(Qt.Horizontal) splitter_left = QSplitter(Qt.Vertical) splitter_left.addWidget(self.search_field) splitter_left.addWidget(self.table_resultat) # splitter_down.resize(15, 20) splitter_down = QSplitter(Qt.Vertical) splitter_down.addWidget(self.table_info) splitter_rigth = QSplitter(Qt.Vertical) # splitter_rigth.setLayout(editbox) splitter_rigth.addWidget(self.table_invoice) splitter_rigth.resize(800, 900) splitter_left.addWidget(splitter_down) splitter.addWidget(splitter_left) splitter.addWidget(splitter_rigth) vbox.addLayout(editbox) vbox.addWidget(splitter) self.setLayout(vbox) def add_clt(self): from GCommon.ui.provider_client_edit_add import EditOrAddClientOrProviderDialog self.open_dialog(EditOrAddClientOrProviderDialog, modal=True, prov_clt=None, table_p=self) def finder(self): search_term = self.search_field.text() value = unicode(search_term) self.table_resultat.refresh_(value) def is_valide(self): print("is_valide") try: self.name_client, self.phone = self.name_client_field.lineEdit( ).text().split(",") except Exception as e: # print(e) field_error(self.name_client_field, "Nom, numéro de téléphone du client") return False return True def refresh_(self): pass def save_b(self): ''' add operation ''' # entete de la facture print("save") if not self.is_valide(): return invoice_date = unicode(self.invoice_date.text()) num_invoice = int(self.num_invoice.text()) invoice_type = self.liste_type_invoice[ self.box_type_inv.currentIndex()] lis_error = [] invoice = Invoice() try: self.owner = Owner.get(Owner.islog == True) except: lis_error.append("Aucun utilisateur est connecté <br/>") paid_amount = int(self.table_invoice.paid_amount_field.text()) try: clt = ProviderOrClient.get_or_create( self.name_client, int(self.phone.replace(" ", "")), ProviderOrClient.CLT) except ValueError: field_error(self.name_client_field, "Nom, numéro de téléphone du client") invoice.number = num_invoice invoice.owner = self.owner invoice.client = clt invoice.location = "Bamako" invoice.type_ = invoice_type invoice.subject = "" invoice.paid_amount = paid_amount invoice.tax = False try: invoice.save() if int(paid_amount) != 0 or invoice_type == Invoice.TYPE_BON: Refund(type_=Refund.DT, owner=self.owner, amount=paid_amount, date=date_to_datetime(invoice_date), provider_client=clt, invoice=Invoice.get(number=num_invoice)).save() except Exception as e: invoice.deletes_data() lis_error.append( "Erreur sur l'enregistrement d'entête de facture<br/>") return False # Save invoiceitems invoice = Invoice.get(Invoice.number == num_invoice) for name, qty, price in self.table_invoice.get_table_items(): rep = Report() product = Product.get(Product.name == name) rep.store = 1 rep.product = product rep.invoice = invoice rep.type_ = Report.S rep.cost_buying = int(product.last_report.cost_buying) rep.date = date_to_datetime(invoice_date) rep.qty = int(qty) rep.selling_price = int(price) try: rep.save() except Exception as e: lis_error.append(e) if lis_error != []: invoice.delete_instance() self.parent.Notify(lis_error, "error") return False else: self.parent.Notify("Facture Enregistrée avec succès", "success") self.table_invoice._reset() try: self.parent.open_dialog(ShowInvoiceViewWidget, modal=True, opacity=100, table_p=self, invoice_num=invoice.number) except Exception as e: print(e)
class BuyViewWidget(FWidget): def __init__(self, parent=0, *args, **kwargs): super(BuyViewWidget, self).__init__(parent=parent, *args, **kwargs) self.parentWidget().setWindowTitle(Config.APP_NAME + u" Arrivage d'article") self.parent = parent vbox = QVBoxLayout() hbox = QHBoxLayout() editbox = QGridLayout() self.date = FormatDate(QDate.currentDate()) self.name_client = LineEdit() self.search_field = LineEdit() self.search_field.setPlaceholderText("Rechercher un article") self.search_field.setMaximumHeight(40) self.search_field.textChanged.connect(self.finder) # self.search_field.setFixedWidth(200) self.add_prod = Button(u"+ &Article") self.add_prod.clicked.connect(self.add_product) self.add_prod.setFixedWidth(80) # self.add_prod.setFixedHeight(20) self.add_prod.setStyleSheet("Text-align:botton") self.add_prod.setToolTip("Ajouter un nouvel article") self.table_buy = BuyTableWidget(parent=self) self.table_resultat = ResultatTableWidget(parent=self) self.table_info = InfoTableWidget(parent=self) editbox.addWidget(self.add_prod, 0, 1) editbox.addWidget(FormLabel(u"Date d'achat:"), 0, 4) editbox.addWidget(self.date, 0, 5) editbox.setColumnStretch(3, 3) splitter = QSplitter(Qt.Horizontal) splitter_left = QSplitter(Qt.Vertical) splitter_down = QSplitter(Qt.Vertical) splitter_left.addWidget(self.search_field) splitter_left.addWidget(self.table_resultat) splitter_down.resize(35, 20) splitter_down.addWidget(self.table_info) splitter_rigth = QSplitter(Qt.Vertical) splitter_rigth.addWidget(self.table_buy) splitter_rigth.resize(800, 900) splitter_left.addWidget(splitter_down) splitter.addWidget(splitter_left) splitter.addWidget(splitter_rigth) hbox.addWidget(splitter) vbox.addLayout(editbox) vbox.addLayout(hbox) self.setLayout(vbox) def add_product(self): """ """ self.open_dialog(EditOrAddProductsDialog, modal=True, product=None, table_p=self.table_resultat) def finder(self): search_term = str(self.search_field.text()) self.table_resultat.refresh_(search_term) def save_b(self): ''' add operation ''' # entete de la facture if not self.table_buy.isvalid: return False owner = Owner.get(Owner.islog == True) date = str(self.date.text()) values_t = self.table_buy.get_table_items() buy = Buy() # buy.date = datetime_ buy.provd_or_clt = \ ProviderOrClient.get_or_create( "Fournisseur", 000000, ProviderOrClient.FSEUR) buy.owner = owner try: buy.save() err = False except: raise raise_error("Erreur", u"Impossible d'enregistrer l'entête de la facture") return False for name, qty, cost_buying, selling_price in values_t: rep = Report() rep.buy = buy rep.type_ = Report.E rep.store = 1 rep.date = date_to_datetime(date) rep.product = Product.get(name=name) rep.qty = int(qty) rep.cost_buying = int(cost_buying) rep.selling_price = int(selling_price) try: rep.save() except Exception as e: print(e) err = True if err: buy.delete_instance() raise_error( "Erreur", u"Ce mouvement n'a pas pu etre " u"enregistré dans les rapports") return False else: self.parent.Notify(u"L'entrée des articles avec succès", "success") self.change_main_context(BuyShowViewWidget, buy=buy)