class InventoryViewWidget(FWidget): def __init__(self, parent=0, *args, **kwargs): super(InventoryViewWidget, self).__init__( parent=parent, *args, **kwargs) self.parent = parent self.title = u"Inventaire des articles" self.parentWidget().setWindowTitle(Config.NAME_ORGA + " " + self.title) self.invent_table = InventoryTableWidget(parent=self) self.on_date = FormatDate(QtCore.QDate(date.today().year, 1, 1)) self.end_date = FormatDate(QtCore.QDate.currentDate()) self.btt_ok = BttSmall(u"Ok") self.btt_ok.clicked.connect(self.rapport_filter) self.btt_export = BttExportXLS(u"Exporter") self.btt_export.clicked.connect(self.export_xls) self.btt_export.setEnabled(False) vbox = QtGui.QVBoxLayout() # Grid gridbox = QtGui.QGridLayout() gridbox.addWidget(FormLabel(u"Date debut"), 0, 1) gridbox.addWidget(self.on_date, 0, 2) gridbox.addWidget(FormLabel(u"Date fin"), 1, 1) gridbox.addWidget(self.end_date, 1, 2) gridbox.addWidget(self.btt_ok, 1, 3) gridbox.setColumnStretch(4, 5) gridbox.addWidget(self.btt_export, 1, 6) vbox.addWidget(FPageTitle(self.title)) vbox.addLayout(gridbox) vbox.addWidget(self.invent_table) self.setLayout(vbox) def refresh(self): self.invent_table.refresh() def rapport_filter(self): self.btt_export.setEnabled(True) self.invent_table.refresh_(on=date_on_or_end(self.on_date.text()), end=date_on_or_end(self.end_date.text(), on=False)) def export_xls(self): dict_data = { 'file_name': "inventaire.xls", 'headers': self.invent_table.hheaders, 'data': self.invent_table.data, 'sheet': self.title, 'widths': self.invent_table.stretch_columns, "date": "Du " + self.on_date.text() + " au " + self.end_date.text() } export_dynamic_data(dict_data)
class OrderViewWidget(FWidget): """ Faire une commande """ def __init__(self, parent=0, *args, **kwargs): super(OrderViewWidget, self).__init__(parent=parent, *args, **kwargs) self.order_table = OrederTableWidget(parent=self) self.parentWidget().setWindowTitle("{} {}".format( Config.APP_NAME, "COMMANDE")) self.title = FPageTitle(u"Faire une Commande") self.com_date = FormatDate(QDate.currentDate()) vbox = QVBoxLayout() self.export_xls_btt = BttExportXLSX(u"Exporter") self.connect(self.export_xls_btt, SIGNAL('clicked()'), self.export_xls_order) # self.save_order_btt = ButtonSave(u"enregistre") # self.connect(self.save_order_btt, SIGNAL('clicked()'), # self.save_order) self.restor_order_btt = DeletedBtt(u"vider") self.connect(self.restor_order_btt, SIGNAL('clicked()'), self.remove_save) # Grid gridbox = QGridLayout() gridbox.addWidget(FormLabel(u"Date"), 0, 0) gridbox.addWidget(self.com_date, 0, 1) gridbox.setColumnStretch(1, 5) gridbox.addWidget(self.restor_order_btt, 2, 2) # gridbox.addWidget(self.save_order_btt, 2, 3) gridbox.addWidget(self.export_xls_btt, 2, 4) vbox.addWidget(self.title) vbox.addLayout(gridbox) vbox.addWidget(self.order_table) self.setLayout(vbox) def refresh(self): self.order_table.refresh() def remove_save(self): self.open_dialog(OrderRemoveWidget, modal=True) # def save_order(self): # data = self.order_table.getTableItems() # print data # obj_file = open('tmp_order.txt', 'w') #fichier.txt est un fichier déjà créé par toi-même # obj_file.write(json.dumps(data)) #ecriture des données dans fichier.txt # obj_file.close()# fermeture du fichier quand plus aucune utilité # raise_success(u"Confirmation de la sauvegarde", # u"La sauvegarde de la commande à été fait avec succès") def export_xls_order(self): L = self.order_table.getTableItems() com_date = date_to_datetime(self.com_date.text()) write_order_xls("order", [com_date, L])
class PeriodByViewWidget(FWidget): def __init__(self, parent=0, *args, **kwargs): super(PeriodByViewWidget, self).__init__( parent=parent, *args, **kwargs) self.parent = parent self.title = FPageTitle(_(u"Periodic report")) self.on_date = FormatDate(QDate(date.today().year, 1, 1)) self.end_date = FormatDate(QDate.currentDate()) self.Button = Button(u"OK") self.Button.clicked.connect(self.rapport_filter) self.current_period = FLabel(self.format_period(self.on_date.text(), self.end_date.text())) vbox = QVBoxLayout() # Grid gridbox = QGridLayout() gridbox.addWidget(FormLabel(u"Date debut"), 0, 0) gridbox.addWidget(self.on_date, 0, 1) gridbox.addWidget(FormLabel(u"Date fin"), 1, 0) gridbox.addWidget(self.end_date, 1, 1) gridbox.addWidget(self.Button, 1, 2) gridbox.setColumnStretch(3, 1) gridbox.addWidget(self.current_period, 1, 4) self.table = By_periodTableWidget(parent=self) vbox.addWidget(self.title) vbox.addLayout(gridbox) vbox.addWidget(self.table) self.setLayout(vbox) def format_period(self, on, end): return u"<h3>Rapport: <i style='color:LimeGreen'>%s</i>" \ u" Au <i style='color:LimeGreen'>%s</i><h3>" \ % (date_on_or_end(on).strftime(u"%A le %d/%m/%Y"), date_on_or_end(end, on=False).strftime(u"%A le %d/%m/%Y")) def refresh(self): self.table.refresh() def rapport_filter(self): self.table.refresh_(on=self.on_date.text(), end=self.end_date.text())
class PeriodByViewWidget(FWidget): def __init__(self, parent=0, *args, **kwargs): super(PeriodByViewWidget, self).__init__(parent=parent, *args, **kwargs) self.parent = parent self.title = FPageTitle(_(u"Periodic report")) self.on_date = FormatDate(QDate(date.today().year, 1, 1)) self.end_date = FormatDate(QDate.currentDate()) self.Button = Button(u"OK") self.Button.clicked.connect(self.rapport_filter) self.current_period = FLabel( self.format_period(self.on_date.text(), self.end_date.text())) vbox = QVBoxLayout() # Grid gridbox = QGridLayout() gridbox.addWidget(FormLabel(u"Date debut"), 0, 0) gridbox.addWidget(self.on_date, 0, 1) gridbox.addWidget(FormLabel(u"Date fin"), 1, 0) gridbox.addWidget(self.end_date, 1, 1) gridbox.addWidget(self.Button, 1, 2) gridbox.setColumnStretch(3, 1) gridbox.addWidget(self.current_period, 1, 4) self.table = By_periodTableWidget(parent=self) vbox.addWidget(self.title) vbox.addLayout(gridbox) vbox.addWidget(self.table) self.setLayout(vbox) def format_period(self, on, end): return u"<h3>Rapport: <i style='color:LimeGreen'>%s</i>" \ u" Au <i style='color:LimeGreen'>%s</i><h3>" \ % (date_on_or_end(on).strftime(u"%A le %d/%m/%Y"), date_on_or_end(end, on=False).strftime(u"%A le %d/%m/%Y")) def refresh(self): self.table.refresh() def rapport_filter(self): self.table.refresh_(on=self.on_date.text(), end=self.end_date.text())
class OrderViewWidget(FWidget): def __init__(self, parent=0, *args, **kwargs): super(OrderViewWidget, self).__init__(parent=parent, *args, **kwargs) self.parentWidget().setWindowTitle(Config.NAME_ORGA + u" COMMANDE") self.parent = parent self.title = FPageTitle(u"Faire une Commande") vbox = QVBoxLayout() self.order_table = OrederTableWidget(parent=self) self.export_xls_btt = BttExportXLS(u"Exporter") self.connect(self.export_xls_btt, SIGNAL('clicked()'), self.export_xls_order) self.com_date = FormatDate(QDate.currentDate()) self.restor_order_btt = Deleted_btt(u"vider") self.connect(self.restor_order_btt, SIGNAL('clicked()'), self.remove_save) self.search_field = QLineEdit() self.search_field.setPlaceholderText("Rechercher un article") self.search_field.setMaximumSize(200, self.search_field.maximumSize().height()) self.search_field.textChanged.connect(self.finder) # Grid gridbox = QGridLayout() gridbox.addWidget(self.search_field, 0, 0) # gridbox.addWidget(FormLabel(u"Date"), 0, 3) gridbox.setColumnStretch(2, 2) # gridbox.setColumnStretch(1, 2) gridbox.addWidget(self.restor_order_btt, 0, 3) gridbox.addWidget(self.com_date, 0, 4) gridbox.addWidget(self.export_xls_btt, 0, 5) vbox.addWidget(self.title) vbox.addLayout(gridbox) vbox.addWidget(self.order_table) self.setLayout(vbox) def finder(self, value): self.order_table.refresh_(value) def refresh(self): self.order_table.refresh() def remove_save(self): self.open_dialog(RemoveOrderwWidget, modal=True) def export_xls_order(self): L = self.order_table.getTableItems() com_date = date_to_datetime(self.com_date.text()) write_order_xls("order.xls", [com_date, L])
class GReportViewWidget(FWidget): def __init__(self, parent=0, *args, **kwargs): super(GReportViewWidget, self).__init__(parent=parent, *args, **kwargs) self.parentWidget().setWindowTitle(Config.NAME_ORGA + u" GESTION DES RAPPORTS") self.parent = parent self.title = u"Tous les mouvements" tablebox = QVBoxLayout() self.table_op = GReportTableWidget(parent=self) tablebox.addWidget(self.table_op) self.on_date = FormatDate(QDate(date.today().year, 1, 1)) self.end_date = FormatDate(QDate.currentDate()) self.Button = Button(_(u"OK")) self.Button.clicked.connect(self.report_filter) vbox = QVBoxLayout() # Grid gridbox = QGridLayout() gridbox.addWidget(FormLabel(_(u"Debut")), 0, 2) gridbox.addWidget(self.on_date, 0, 3) gridbox.addWidget(FormLabel(_(u"Fin")), 0, 4) gridbox.addWidget(self.end_date, 0, 5) gridbox.addWidget(self.Button, 0, 6) gridbox.setColumnStretch(7, 5) period = " Du {} au {}".format( show_date(self.on_date.text(), time=False), show_date(self.end_date.text(), time=False)) self.report_filter() vbox = QVBoxLayout() vbox.addWidget(FPageTitle(self.title)) vbox.addWidget(FormLabel(period)) vbox.addLayout(gridbox) vbox.addLayout(tablebox) self.setLayout(vbox) def report_filter(self): self.table_op.refresh_(on=date_on_or_end(self.on_date.text()), end=date_on_or_end(self.end_date.text(), on=False))
class ApricotsViewWidget(FWidget): def __init__(self, parent=0, *args, **kwargs): super(ApricotsViewWidget, self).__init__(parent=parent, *args, **kwargs) self.parentWidget().setWindowTitle(Config.APP_NAME + u" La Caise") self.parent = parent tablebox = QVBoxLayout() gridbox = QGridLayout() self.title = "La caise" tablebox.addWidget(FPageTitle(self.title)) self.date_ = FormatDate(QDate.currentDate()) self.btt_export = BttExportXLSX(u"Exporter") self.btt_export.setEnabled(False) self.btt_export.clicked.connect(self.export_xls) self.table_op = ApricotsTableWidget(parent=self) tablebox.addWidget(self.table_op) # self.date_.setFont(QFont("Courier New", 10, True)) self.date_.dateChanged.connect(self.table_op.refresh_) gridbox.addWidget(self.date_, 0, 0) gridbox.addWidget(self.btt_export, 0, 2) gridbox.setColumnStretch(1, 5) vbox = QVBoxLayout() vbox.addLayout(gridbox) vbox.addLayout(tablebox) self.setLayout(vbox) def export_xls(self): from Common.exports_xlsx import export_dynamic_data dict_data = { 'file_name': "caise", 'headers': self.table_op.hheaders, 'data': self.table_op.get_table_items(), "extend_rows": [ (3, self.table_op.amount_ht), ], 'sheet': self.title, 'title': self.title, 'format_money': [ "C:C", "D:D", ], 'widths': self.table_op.stretch_columns, "date": self.date_.text() } export_dynamic_data(dict_data)
class ApricotsViewWidget(FWidget): def __init__(self, parent=0, *args, **kwargs): super(ApricotsViewWidget, self).__init__( parent=parent, *args, **kwargs) self.parentWidget().setWindowTitle(Config.APP_NAME + u" La Caise") self.parent = parent tablebox = QVBoxLayout() gridbox = QGridLayout() self.title = "La caise" tablebox.addWidget(FPageTitle(self.title)) self.date_ = FormatDate(QDate.currentDate()) self.table_op = ApricotsTableWidget(parent=self) tablebox.addWidget(self.table_op) # self.date_.setFont(QFont("Courier New", 10, True)) self.date_.dateChanged.connect(self.table_op.refresh_) self.btt_export = BttExportXLS(u"Exporter") self.btt_export.clicked.connect(self.export_xls) gridbox.addWidget(self.date_, 0, 0) gridbox.addWidget(self.btt_export, 0, 2) gridbox.setColumnStretch(1, 5) vbox = QVBoxLayout() vbox.addLayout(gridbox) vbox.addLayout(tablebox) self.setLayout(vbox) def export_xls(self): from Common.exports_xls import export_dynamic_data dict_data = { 'file_name': "arivage.xls", 'headers': self.table_op.hheaders, 'data': self.table_op.data, "extend_rows": [(3, self.table_op.amount_ht), ], 'sheet': self.title, 'title': self.title, 'widths': self.table_op.stretch_columns, "date": self.date_.text() } export_dynamic_data(dict_data)
class InventoryViewWidget(FWidget): def __init__(self, parent=0, *args, **kwargs): super(InventoryViewWidget, self).__init__( parent=parent, *args, **kwargs) self.parentWidget().setWindowTitle( Config.APP_NAME + u" INVENTAIRE") self.parent = parent self.title = u"Inventaire" self.on_date = FormatDate(QDate(date.today().year, 1, 1)) self.end_date = FormatDate(QDate.currentDate()) self.button = Button(u"Ok") self.button.clicked.connect(self.rapport_filter) self.btt_export = BttExportXLS(u"Exporter") self.btt_export.clicked.connect(self.export_xls) self.invent_table = InventaireTableWidget(parent=self) # Grid gridbox = QGridLayout() gridbox.addWidget(FormLabel(u"Date debut"), 0, 1) gridbox.addWidget(self.on_date, 0, 2) gridbox.addWidget(FormLabel(u"Date fin"), 1, 1) gridbox.addWidget(self.end_date, 1, 2) gridbox.addWidget(self.button, 1, 3) gridbox.addWidget(self.btt_export, 1, 6) gridbox.setColumnStretch(4, 5) vbox = QVBoxLayout() vbox.addWidget(FPageTitle(self.title)) vbox.addLayout(gridbox) vbox.addWidget(self.invent_table) self.setLayout(vbox) self.refresh() def refresh(self): self.l_date = [ date_to_datetime(self.on_date.text()), date_to_datetime(self.end_date.text())] self.invent_table.refresh_period(self.l_date) def rapport_filter(self): self.refresh() def export_xls(self): from Common.exports_xls import export_dynamic_data table = self.invent_table hheaders = table.hheaders dict_data = { 'file_name': "Inventaire.xls", 'headers': hheaders, 'data': table.data, "extend_rows": [(3, table.sum_totals), ], 'sheet': self.title, 'title': self.title, 'widths': table.stretch_columns, "date": "Du {} au {}".format( date_to_datetime(self.on_date.text()).strftime(u'%d/%m/%Y'), date_to_datetime(self.end_date.text()).strftime(u'%d/%m/%Y')) } export_dynamic_data(dict_data)
class EditReportViewWidget(QtGui.QDialog, FWidget): def __init__(self, report, parent, *args, **kwargs): QtGui.QDialog.__init__(self, parent, *args, **kwargs) self.setWindowTitle(u"Modification") self.title = FPageTitle(u"Vous le vous modifié ?") self.op = report vbox = QtGui.QVBoxLayout() self.qty_use = QtGui.QLineEdit(str(self.op.qty_use)) self.qty_use.setValidator(QtGui.QIntValidator()) self.date_ = FormatDate(QtCore.QDate(self.op.date)) self.time = QtGui.QDateTimeEdit(QtCore.QTime.currentTime()) formbox = QtGui.QVBoxLayout() editbox = QtGui.QGridLayout() formbox.addWidget(FBoxTitle(u"Modification")) # Combobox widget i = 0 self.liste_type = Reports.TYPES self.box_type = QtGui.QComboBox() for index in xrange(0, len(self.liste_type)): ty = self.liste_type[index] if ty == self.op.type_: i = index sentence = u"%(type_)s" % {'type_': ty} self.box_type.addItem(sentence, QtCore.QVariant(ty)) self.box_prod.setCurrentIndex(i) # Combobox widget # self.liste_store = Store.order_by(desc(Store.id)).all() # self.box_mag = QtGui.QComboBox() # for index in xrange(0, len(self.liste_store)): # op = self.liste_store[index] # sentence = _(u"%(name)s") % {'name': op.name} # self.box_mag.addItem(sentence, QtCore.QVariant(op.id)) # Combobox widget self.liste_product = Product.all() self.box_prod = QtGui.QComboBox() for index in xrange(0, len(self.liste_product)): op = self.liste_product[index] if op == self.op.product.article: i = index sentence = u"%(article)s" % {'article': op.article} self.box_prod.addItem(sentence, QtCore.QVariant(op.id)) self.box_prod.setCurrentIndex(i) editbox.addWidget(QtGui.QLabel(u"Type"), 0, 0) editbox.addWidget(self.box_type, 1, 0) # editbox.addWidget(QtGui.QLabel((_(u"Store"))), 0, 1) # editbox.addWidget(self.box_mag, 1, 1) editbox.addWidget(QtGui.QLabel(u"Produit"), 0, 2) editbox.addWidget(self.box_prod, 1, 2) editbox.addWidget(QtGui.QLabel(u"Quantité"), 0, 3) editbox.addWidget(self.qty_use, 1, 3) editbox.addWidget(QtGui.QLabel((u"Date")), 0, 4) editbox.addWidget(self.date_, 1, 4) butt = Button(u"Enregistrer") butt.clicked.connect(self.edit_report) cancel_but = Button(u"Annuler") cancel_but.clicked.connect(self.cancel) editbox.addWidget(butt, 2, 3) editbox.addWidget(cancel_but, 2, 4) formbox.addLayout(editbox) vbox.addLayout(formbox) self.setLayout(vbox) def cancel(self): self.close() def edit_report(self): type_ = self.box_type.currentIndex() product = self.liste_product[self.box_prod.currentIndex()] qty_use = str(self.nbr_carton.text()) date_ = self.date_.text() datetime_ = date_to_datetime(date_) report = self.op report.type_ = type_ report.product = product report.qty_use = qty_use report.remaining = 0 report.date = datetime_ report.save() self.cancel() self.parent.Notify(u"Votre rapport a été modifié", "success")
class RefundEditAddDialog(QDialog, FWidget): def __init__(self, table_p, parent, provid_clt=None, type_=None, refund=None, *args, **kwargs): QDialog.__init__(self, parent, *args, **kwargs) self.type_ = type_ self.refund = refund self.parent = parent self.table_p = table_p self.provid_clt = provid_clt self.new = True if self.refund: self.new = False self.last_r = self.refund self.type_ = refund.type_ self.refund_date_field = FormatDate(self.refund.date) self.refund_date_field.setEnabled(False) self.title = u"Modification de {} {}".format(self.refund.type_, self.refund.invoice.client) self.succes_msg = u"{} a été bien mise à jour".format( self.refund.type_) self.amount = refund.amount self.provid_clt = refund.provider_client else: self.refund_date_field = FormatDate(QDate.currentDate()) self.succes_msg = u"Client a été bien enregistré" self.title = u"Création d'un nouvel client" self.amount = "" self.refund = Refund() self.last_r = Refund.select().where( Refund.provider_client == provid_clt).order_by(Refund.date.desc()).get() self.setWindowTitle(self.title) self.amount_field = IntLineEdit(unicode(self.amount)) vbox = QVBoxLayout() self.last_remaining = self.last_r.refund_remaing() print(self.last_remaining) # try: # self.last_r.refund_remaing() # self.remaining = self.last_r.remaining # except Exception as e: # self # print("last_r except ", e) # self.last_r = None # self.close() formbox = QFormLayout() formbox.addRow(FormLabel("Client :"), FormLabel(self.provid_clt.name)) formbox.addRow(FormLabel("Dette restante :"), FormLabel(str(formatted_number(self.last_remaining)) + Config.DEVISE)) formbox.addRow(FormLabel(u"Date : *"), self.refund_date_field) formbox.addRow(FormLabel(u"Montant : *"), self.amount_field) butt = Button_save(u"Enregistrer") butt.clicked.connect(self.save_edit) formbox.addRow("", butt) # formbox.addRow("", "Le client {} n'est pas endetté") vbox.addLayout(formbox) self.setLayout(vbox) def save_edit(self): ''' add operation ''' if check_is_empty(self.amount_field): return amount = int(self.amount_field.text()) refund_date = unicode(self.refund_date_field.text()) # self.remaining = self.last_r.remaining if check_field( self.amount_field, "Ce montant ne peut être supperieur au dettes restante {}.".format( self.last_remaining), amount > self.last_remaining): return refund = self.refund refund.type_ = self.type_ refund.invoice = self.last_r.invoice refund.amount = amount if self.new: refund.provider_client = self.provid_clt refund.date = date_to_datetime(refund_date) try: refund.save() self.close() self.parent.Notify(u"le {type} {lib} à été enregistré avec succès".format( type=self.type_, lib=amount), "success") self.table_p.refresh_(self.provid_clt.id) except Exception as e: self.parent.Notify(e, "error")
class PaymentViewWidget(FWidget, FPeriodHolder): def __init__(self, parent=0, *args, **kwargs): super(PaymentViewWidget, self).__init__(parent=parent, *args, **kwargs) FPeriodHolder.__init__(self, *args, **kwargs) self.parentWidget().setWindowTitle(Config.APP_NAME + u" Movements") self.parent = parent self.title = u"Movements" self.on_date = FormatDate( QDate(date.today().year, date.today().month, 1)) self.end_date = FormatDate(QDate.currentDate()) self.now = datetime.now().strftime("%x") self.soldeField = FormLabel("0") self.label_balance = FormLabel(u"Solde au {} ".format(self.now)) balanceBox = QGridLayout() balanceBox.addWidget(self.label_balance, 0, 2) balanceBox.addWidget(self.soldeField, 0, 3) balanceBox.setColumnStretch(0, 1) self.table = RapportTableWidget(parent=self) self.button = Button(u"Ok") self.button.clicked.connect(self.table.refresh_) self.btt_export = BttExportXLSX(u"Exporter") self.btt_export.clicked.connect(self.export_xls) self.add_btt = Button("Créditer") self.add_btt.setIcon( QIcon(u"{img_media}{img}".format(img_media=Config.img_media, img="in.png"))) self.add_btt.clicked.connect(self.add_payment) self.sub_btt = Button("Débiter") self.sub_btt.setIcon( QIcon(u"{img_media}{img}".format(img_media=Config.img_media, img="out.png"))) self.sub_btt.clicked.connect(self.sub_payment) editbox = QGridLayout() editbox.addWidget(FormLabel(u"Date debut"), 0, 1) editbox.addWidget(self.on_date, 0, 2) editbox.addWidget(FormLabel(u"Date fin"), 1, 1) editbox.addWidget(self.end_date, 1, 2) editbox.addWidget(self.button, 1, 3) editbox.addWidget(self.sub_btt, 1, 5) editbox.addWidget(self.add_btt, 1, 6) editbox.addWidget(self.btt_export, 1, 7) editbox.setColumnStretch(4, 2) vbox = QVBoxLayout() vbox.addWidget(FPageTitle(self.title)) vbox.addLayout(editbox) vbox.addWidget(self.table) vbox.addLayout(balanceBox) self.setLayout(vbox) def export_xls(self): from Common.exports_xlsx import export_dynamic_data dict_data = { 'file_name': "versements.xlsx", 'headers': self.table.hheaders[:-1], 'data': self.table.data, "extend_rows": [ (1, self.table.label_mov_tt), (2, self.table.totals_debit), (3, self.table.totals_credit), ], "footers": [ ("C", "E", "Solde au {} = {}".format(self.now, self.table.balance_tt)), ], 'sheet': self.title, # 'title': self.title, 'format_money': [ 'C:C', 'D:D', 'E:E', ], 'widths': self.table.stretch_columns, 'exclude_row': len(self.table.data) - 1, "date": "Du {} au {}".format( date_to_datetime(self.on_date.text()).strftime(u'%d/%m/%Y'), date_to_datetime(self.end_date.text()).strftime(u'%d/%m/%Y')) } export_dynamic_data(dict_data) def add_payment(self): print("add_payment") self.open_dialog(EditOrAddPaymentrDialog, modal=True, payment=None, type_=Payment.CREDIT, table_p=self.table) def sub_payment(self): print("sub_payment") self.open_dialog(EditOrAddPaymentrDialog, modal=True, payment=None, type_=Payment.DEBIT, table_p=self.table)
class InvoiceViewWidget(FWidget): def __init__(self, product="", parent=0, *args, **kwargs): super(InvoiceViewWidget, self).__init__(parent=parent, *args, **kwargs) self.parentWidget().setWindowTitle(Config.NAME_ORGA + u" FACTURATION") self.parent = parent vbox = QVBoxLayout(self) hbox = QHBoxLayout(self) editbox = QGridLayout() self.num_invoice = IntLineEdit("%d" % (Invoice.select().count() + 1)) self.num_invoice.setToolTip(u"Le numéro de la facture") self.num_invoice.setMaximumSize(40, self.num_invoice.maximumSize().height()) self.num_invoice_error = ErrorLabel("") self.invoice_date = FormatDate(QDate.currentDate()) self.name_client = QLineEdit() self.name_client.setMaximumSize(200, self.name_client.maximumSize().height()) self.name_client.setToolTip("Taper le nom du client") self.name_client_error = ErrorLabel("") self.search_field = QLineEdit() self.search_field.setMaximumSize(200, self.search_field.maximumSize().height()) self.search_field.textChanged.connect(self.finder) self.vline = QFrame() self.vline.setFrameShape(QFrame.VLine) self.vline.setFrameShadow(QFrame.Sunken) self.table_invoice = OrderTableWidget(parent=self) self.table_resultat = ResultatTableWidget(parent=self) self.table_info = InfoTableWidget(parent=self) self.table_resultat.refresh_("") editbox.addWidget(FormLabel(u"Recherche:"), 0, 0) editbox.addWidget(self.search_field, 1, 0) editbox.addWidget(self.vline, 0, 1, 2, 5) editbox.addWidget(FormLabel(u"Facture N°:"), 0, 2) editbox.addWidget(self.num_invoice, 0, 3) editbox.addWidget(self.num_invoice_error, 0, 4) editbox.addWidget(FormLabel(u"Doit:"), 1, 2) editbox.addWidget(self.name_client, 1, 3) editbox.addWidget(self.name_client_error, 1, 4) editbox.addWidget(FormLabel(u"Date:"), 0, 5) editbox.addWidget(self.invoice_date, 0, 6) splitter = QSplitter(Qt.Horizontal) splitter_left = QSplitter(Qt.Vertical) splitter_down = QSplitter(Qt.Vertical) splitter_left.addWidget(FBoxTitle(u"Les resultats")) splitter_left.addWidget(self.table_resultat) splitter_down.resize(15, 20) splitter_down.addWidget(self.table_info) splitter_rigth = QSplitter(Qt.Vertical) splitter_rigth.addWidget(FBoxTitle(u"Les produits vendus")) splitter_rigth.addWidget(self.table_invoice) splitter_rigth.resize(500, 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 finder(self): completion_values = [] search_term = self.search_field.text() # try: # products = Product.select().where(Product.name.icontains(search_term)) # except ValueError: # pass # for product in products: # last_r = product.last_report_by_prod() # try: # completion_values.append(last_r.product.__str__()) # except: # pass # completer = QCompleter(completion_values, parent=self) # completer.setCaseSensitivity(Qt.CaseInsensitive) # completer.setCompletionMode(QCompleter.UnfilteredPopupCompletion) # self.search_field.setCompleter(completer) self.table_resultat.refresh_(search_term) def save_b(self): ''' add operation ''' # entete de la facture if not self.table_invoice.isvalid: return False try: num_invoice = int(self.num_invoice.text()) self.num_invoice_error.setText(u"") except: self.pixmap = QPixmap(u"{img_media}{img}".format(img_media=Config.img_media, img="warning.png")) self.num_invoice.setStyleSheet("background-color: rgb(255, 235, 235);") self.num_invoice_error.setToolTip(u"Le numero de facture est obligatoire.") self.num_invoice_error.setPixmap(self.pixmap) invoice_date = str(self.invoice_date.text()) name_client = str(self.name_client.text()) datetime_ = date_to_datetime(invoice_date) values_t = self.table_invoice.get_table_items() if name_client == "": self.name_client.setStyleSheet("background-color: rgb(255, 235, 235);") self.pixmap = QPixmap(u"{img_media}{img}".format(img_media=Config.img_media, img="decline.png")) self.name_client_error.setToolTip(u"Nom du client est obligatoire.") self.name_client_error.setPixmap(self.pixmap) return False # if num_invoice > Config.credit: # raise_error(("Avertisement"), u"<h2>Veuillez payer la reste de la licence</h2>") # return False invoice = Invoice() try: invoice.owner = Owner.get(islog=True) except: if Config.DEBUG: invoice.owner = Owner.get(username='******') else: return False invoice.number = num_invoice invoice.date_ord = datetime_ invoice.client = name_client.capitalize() invoice.location = "Bamako" invoice.type_ = "Facture" invoice.subject = "" invoice.tax = False invoice.otax_rate = 18 try: invoice.save() except: raise_error("Erreur", u"Impossible d'enregistrer l'entête de la facture") return False # Save orderitems try: order = Invoice.get(number=num_invoice) except: return False for i in values_t: qty, name, price = i description = Product.filter(name=name).get() item = InvoiceItem() item.invoices = invoice.id item.quantity = int(i[0]) item.description = description item.price = int(i[2]) try: item.save() self.name_client.clear() self.num_invoice.clear() except Exception as e: print(e) invoice.delete_instance() raise_error("Erreur", u"Ce mouvement n'a pas pu etre " u"enregistré dans les rapports") return False self.change_main_context(ShowInvoiceViewWidget, invoice=invoice)
class OrderViewWidget(FWidget): """ Faire une commande """ def __init__(self, parent=0, *args, **kwargs): super(OrderViewWidget, self).__init__(parent=parent, *args, **kwargs) self.order_table = OrederTableWidget(parent=self) self.parentWidget().setWindowTitle(Config.NAME_ORGA + u" COMMANDE") self.title = FPageTitle(u"Faire une Commande") self.com_date = FormatDate(QDate.currentDate()) vbox = QVBoxLayout() self.export_xls_btt = BttExportXLS(u"Exporter") self.connect(self.export_xls_btt, SIGNAL('clicked()'), self.export_xls_order) # self.save_order_btt = Button_save(u"enregistre") # self.connect(self.save_order_btt, SIGNAL('clicked()'), # self.save_order) self.restor_order_btt = Deleted_btt(u"vider") self.connect(self.restor_order_btt, SIGNAL('clicked()'), self.remove_save) # Grid gridbox = QGridLayout() gridbox.addWidget(FormLabel(u"Date"), 0, 0) gridbox.addWidget(self.com_date, 0, 1) gridbox.setColumnStretch(1, 5) gridbox.addWidget(self.restor_order_btt, 2, 2) # gridbox.addWidget(self.save_order_btt, 2, 3) gridbox.addWidget(self.export_xls_btt, 2, 4) vbox.addWidget(self.title) vbox.addLayout(gridbox) vbox.addWidget(self.order_table) self.setLayout(vbox) def refresh(self): self.order_table.refresh() def remove_save(self): self.open_dialog(OrderRemoveWidget, modal=True) # def save_order(self): # data = self.order_table.getTableItems() # print data # obj_file = open('tmp_order.txt', 'w') #fichier.txt est un fichier déjà créé par toi-même # obj_file.write(json.dumps(data)) #ecriture des données dans fichier.txt # obj_file.close()# fermeture du fichier quand plus aucune utilité # raise_success(u"Confirmation de la sauvegarde", # u"La sauvegarde de la commande à été fait avec succès") def export_xls_order(self): L = self.order_table.getTableItems() com_date = date_to_datetime(self.com_date.text()) write_order_xls("order", [com_date, L])
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 InventoryViewWidget(FWidget): def __init__(self, parent=0, *args, **kwargs): super(InventoryViewWidget, self).__init__(parent=parent, *args, **kwargs) self.parentWidget().setWindowTitle(Config.APP_NAME + u" INVENTAIRE") self.parent = parent self.title = u"Inventaire" self.on_date = FormatDate(QDate(date.today().year, 1, 1)) self.end_date = FormatDate(QDate.currentDate()) self.button = Button(u"Ok") self.button.clicked.connect(self.rapport_filter) self.btt_export = BttExportXLSX(u"Exporter") self.btt_export.clicked.connect(self.export_xls) self.invent_table = InventaireTableWidget(parent=self) # Grid gridbox = QGridLayout() gridbox.addWidget(FormLabel(u"Date debut"), 0, 1) gridbox.addWidget(self.on_date, 0, 2) gridbox.addWidget(FormLabel(u"Date fin"), 1, 1) gridbox.addWidget(self.end_date, 1, 2) gridbox.addWidget(self.button, 1, 3) gridbox.addWidget(self.btt_export, 1, 6) gridbox.setColumnStretch(4, 5) vbox = QVBoxLayout() vbox.addWidget(FPageTitle(self.title)) vbox.addLayout(gridbox) vbox.addWidget(self.invent_table) self.setLayout(vbox) self.refresh() def refresh(self): self.l_date = [ date_to_datetime(self.on_date.text()), date_to_datetime(self.end_date.text()) ] self.invent_table.refresh_period(self.l_date) def rapport_filter(self): self.refresh() def export_xls(self): from Common.exports_xlsx import export_dynamic_data table = self.invent_table hheaders = table.hheaders dict_data = { 'file_name': "Inventaire", 'headers': hheaders, 'data': table.data, "extend_rows": [ (3, table.sum_totals), ], 'sheet': self.title, # 'title': self.title, 'format_money': [ "C:C", "D:D", ], 'widths': table.stretch_columns, "date": "Du {} au {}".format( date_to_datetime(self.on_date.text()).strftime(u'%d/%m/%Y'), date_to_datetime(self.end_date.text()).strftime(u'%d/%m/%Y')) } export_dynamic_data(dict_data)
class EditOrAddMemberDialog(QDialog, FWidget): def __init__(self, table_p, parent, scoop=None, member=None, *args, **kwargs): FWidget.__init__(self, parent, *args, **kwargs) self.table_p = table_p self.member = member self.scoop = scoop self.parent = parent full_name = "" self.ddn_field = FormatDate(QDate(QDate.currentDate())) addres = "" nationality = "" phone = "" if self.member: self.new = False full_name = self.member.full_name mddn = self.member.ddn if mddn: day, month, year = mddn.split("/") ddn = datetime.strptime(mddn, '%d/%m/%Y') self.ddn_field.setDate(QDate(ddn)) addres = self.member.addres nationality = self.member.nationality phone = str(self.member.phone or "") self.title = u"Modification de {}".format(self.member) self.succes_msg = u"{} a été bien mise à jour".format(self.member) else: self.new = True self.succes_msg = u"Client a été bien enregistré" self.title = u"Ajout nouveau membre" self.member = CooperativeMember() self.setWindowTitle(self.title) vbox = QVBoxLayout() # vbox.addWidget(FPageTitle(u"Utilisateur: %s " % self.member.name)) self.full_name_field = LineEdit(full_name) self.sex_list = CooperativeMember.SEX.items() # Combobox widget self.sex_box = QComboBox() for index, value in enumerate(self.sex_list): # form = self.sex_list[index] self.sex_box.addItem("{}".format(value[1].upper()), value[0]) if self.member.sex == value[0]: self.sex_box.setCurrentIndex(index) # print("DE", ddn) # self.ddn_field.setDate(ddn) # self.ddn_field = QDateEdit(QDate(ddn)) self.addres_field = QTextEdit(addres) self.nationality_field = LineEdit(nationality) self.phone_field = IntLineEdit(phone) self.phone_field.setInputMask("## ## ## ##") self.poste_list = get_postes() self.poste_box = QComboBox() for index, value in enumerate(self.poste_list): self.poste_box.addItem( "{}".format(self.poste_list.get(value).upper()), value) if self.member.poste == value: print(value) self.poste_box.setCurrentIndex(index) formbox = QFormLayout() formbox.addRow(FormLabel(u"Nom complet : *"), self.full_name_field) formbox.addRow(FormLabel(u"Sexe *:"), self.sex_box) formbox.addRow(FormLabel(u"Date de naissance *:"), self.ddn_field) formbox.addRow(FormLabel(u"Poste occupé *:"), self.poste_box) formbox.addRow(FormLabel(u"Nationalité *:"), self.nationality_field) formbox.addRow(FormLabel(u"Téléphone :"), self.phone_field) formbox.addRow(FormLabel(u"Adresse :"), self.addres_field) butt = Button(u"Enregistrer") butt.clicked.connect(self.save_edit) formbox.addRow("", butt) vbox.addLayout(formbox) self.setLayout(vbox) def is_valide(self): if check_is_empty(self.full_name_field): return False if check_is_empty(self.ddn_field): return False if check_is_empty(self.nationality_field): return False if check_is_empty(self.phone_field): return False return True def save_edit(self): ''' add operation ''' if not self.is_valide(): return print("Save") self.member.scoop = self.scoop self.member.full_name = self.full_name_field.text() self.member.sex = self.sex_box.itemData(self.sex_box.currentIndex()) self.member.ddn = self.ddn_field.text() self.member.addres = self.addres_field.toPlainText() self.member.nationality = self.nationality_field.text() phone = self.phone_field.text() self.member.phone = is_int(phone) self.member.poste = self.poste_box.itemData( self.poste_box.currentIndex()) try: self.member.save_() self.close() self.table_p.refresh_() self.parent.Notify( u"Le membre {} ({}) a été mise à jour".format( self.member.full_name, self.member.poste), "success") except peewee.IntegrityError: field_error(self.full_name_field, "Ce nom existe dans la basse de donné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)
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 EditOrAddPaymentrDialog(QDialog, FWidget): def __init__(self, table_p, parent, type_=None, payment=None, *args, **kwargs): QDialog.__init__(self, parent, *args, **kwargs) self.type_ = type_ self.payment = payment self.parent = parent self.table_p = table_p if self.payment: self.new = False self.type_ = payment.type_ self.payment_date_field = FormatDate(self.payment.date) self.payment_date_field.setEnabled(False) self.title = u"Modification de {} {}".format(self.payment.type_, self.payment.libelle) self.succes_msg = u"{} a été bien mise à jour".format( self.payment.type_) if self.type_ == Payment.CREDIT: amount = payment.credit elif self.type_ == Payment.DEBIT: amount = payment.debit else: self.new = True amount = "" self.payment_date_field = FormatDate(QDate.currentDate()) self.succes_msg = u"Client a été bien enregistré" self.title = u"Création d'un nouvel client" self.payment = Payment() self.setWindowTitle(self.title) self.amount_field = IntLineEdit(unicode(amount)) self.libelle_field = QTextEdit(self.payment.libelle) vbox = QVBoxLayout() formbox = QFormLayout() formbox.addRow(FormLabel(u"Date : *"), self.payment_date_field) formbox.addRow(FormLabel(u"Libelle :"), self.libelle_field) formbox.addRow(FormLabel(u"Montant : *"), self.amount_field) butt = Button_save(u"Enregistrer") butt.clicked.connect(self.save_edit) formbox.addRow("", butt) vbox.addLayout(formbox) self.setLayout(vbox) def save_edit(self): ''' add operation ''' if check_is_empty(self.amount_field): return payment_date = unicode(self.payment_date_field.text()) libelle = unicode(self.libelle_field.toPlainText()) amount = int(self.amount_field.text().replace(" ", "")) payment = self.payment payment.type_ = self.type_ payment.libelle = libelle if self.new: payment.date = date_to_datetime(payment_date) if self.type_ == Payment.CREDIT: payment.credit = amount elif self.type_ == Payment.DEBIT: payment.debit = amount try: payment.save() self.close() self.parent.Notify(u"le {type} {lib} à été enregistré avec succès".format( type=self.type_, lib=libelle), "success") self.table_p.refresh_() except Exception as e: self.parent.Notify(e, "error")
class RegistrationViewWidget(FWidget): """ Shows the home page """ def __init__(self, parent=0, *args, **kwargs): super(RegistrationViewWidget, self).__init__(parent=parent, *args, **kwargs) self.parent = parent self.parentWidget().set_window_title("FORMULAIRE D’IMMATRICULATION") self.title = FLabel("<h3>FORMULAIRE D’IMMATRICULATION</h3>") self.office = Office.select().where(Office.id == 1).get() self.created_date_field = FormatDate(QDate.currentDate()) self.created_date_field.setMaximumWidth(130) # self.created_date_field.setInputMask('##/##/####') self.rue_field = IntLineEdit() self.porte_field = IntLineEdit() self.tel_field = IntLineEdit() self.tel_field.setInputMask('## ## ## ##') self.tel2_field = IntLineEdit() self.tel2_field.setInputMask('## ## ## ##') self.bp_field = IntLineEdit() self.email_field = LineEdit() self.denomination_field = LineEdit() self.commercial_name_field = LineEdit() self.declaration_date_field = FormatDate(QDate.currentDate()) self.declaration_date_field.setMaximumWidth(130) self.amount_capital_social_initial = FLabel() self.amount_part_social_field = IntLineEdit() self.apports_numeraire_field = IntLineEdit() self.apports_numeraire_field.textChanged.connect(self.cal_total) self.apports_nature_field = IntLineEdit() self.apports_nature_field.textChanged.connect(self.cal_total) self.apports_industrie_field = IntLineEdit() self.apports_industrie_field.textChanged.connect(self.cal_total) self.duree_statutaire_field = IntLineEdit() self.duree_statutaire_field.setMaximumWidth(80) self.spinneret_box = QComboBox() self.spinneret_box.setMaximumWidth(800) self.activites_box = QComboBox() self.activites_box.setMaximumWidth(800) self.activites_box.currentIndexChanged.connect(self.sp_change_select) self.activities_list = get_activities() for index, value in enumerate(self.activities_list): self.activites_box.addItem( "{}".format(self.activities_list.get(value).upper()), value) # if self.store and self.store.name == op.name: # self.box_store.setCurrentIndex(index) self.formes_box = QComboBox() self.formes_box.setMaximumWidth(800) self.formes_list = get_formes() for index, value in enumerate(self.formes_list): self.formes_box.addItem( "{}".format(self.formes_list.get(value).upper()), value) self.commune_list = entity_children(self.office.slug_cercle).items() self.commune_box = ExtendedComboBox() for index, value in enumerate(self.commune_list): self.commune_box.addItem("{}".format(value[1].upper()), value[0]) # self.commune_box.addItems(self.commune_list) self.commune_box.setToolTip("commune") self.commune_box.currentIndexChanged.connect(self.c_change_select) # self.vfq_list = self.get_vfq_list() self.vfq_box = ExtendedComboBox() self.vfq_list = self.get_vfq_list() for index, value in enumerate(self.vfq_list): self.vfq_box.addItem("{}".format(self.vfq_list.get(value).upper()), value) self.vfq_box.setToolTip("vfq") formbox = QFormLayout() formbox.addRow(FLabel(DATE_DEMANTE), self.declaration_date_field) formbox.addRow(FLabel("1. " + DENOMINATION_S_SC), self.denomination_field) formbox.addRow(FLabel("2. " + NOM_COMMERCIAL), self.commercial_name_field) formbox.addRow(FLabel("3. " + DATE_CREATION_SC), self.created_date_field) formbox.addRow(FLabel("4. " + ACTIVITES_E), self.activites_box) formbox.addRow(FLabel("5. " + FILIERE), self.spinneret_box) formbox.addRow(FLabel("6. " + FORME_SC), self.formes_box) # Capital Social Initial capital_formbox = QFormLayout() capital_formbox.addRow(FLabel("7.1. " + MONTANT_PART_S), self.amount_part_social_field) capital_formbox.addRow(FLabel("7.2. " + MONTANT_APPORTS_NUM), self.apports_numeraire_field) capital_formbox.addRow(FLabel("7.3. " + MONTANT_APPORTS_NAT), self.apports_nature_field) capital_formbox.addRow(FLabel("7.4. " + MONTANT_APPORTS_INDU), self.apports_industrie_field) self.capitalSGroupBox = QGroupBox("7. " + MONTANT_CAPITAL_SI) self.capitalSGroupBox.setLayout(capital_formbox) self.capitalSGroupBox.setStyleSheet(CSS) # self.capitalSGroupBox.setMaximumWidth(1300) # Adresse du siège social self.vline = QFrame() self.vline.setFrameShape(QFrame.VLine) self.vline.setFrameShadow(QFrame.Sunken) self.addresGroupBox = QGroupBox("8. " + ADRESSE_SS) self.addresGroupBox.setStyleSheet(CSS) addres_gribox = QGridLayout() addres_gribox.addWidget(FRLabel(CERCLE), 0, 0) addres_gribox.addWidget(FLabel(self.office.cercle_name()), 0, 1) addres_gribox.addWidget(FRLabel(COMMUNE), 1, 0) addres_gribox.addWidget(self.commune_box, 1, 1) # addres_gribox.addWidget(self.vline, 0, 3, 2, 5) addres_gribox.addWidget(FRLabel(VFQ), 2, 0) addres_gribox.addWidget(self.vfq_box, 2, 1) addres_gribox.addWidget(FRLabel(RUE), 0, 2) addres_gribox.addWidget(self.rue_field, 0, 3) addres_gribox.addWidget(FRLabel(PORTE), 1, 2) addres_gribox.addWidget(self.porte_field, 1, 3) addres_gribox.addWidget(FRLabel(BP), 0, 4) addres_gribox.addWidget(self.bp_field, 0, 5) addres_gribox.addWidget(FRLabel(EMAIL), 1, 4) addres_gribox.addWidget(self.email_field, 1, 5) addres_gribox.addWidget(FRLabel(TEL), 2, 2) addres_gribox.addWidget(self.tel_field, 2, 3) addres_gribox.addWidget(FRLabel(TEL2), 2, 4) addres_gribox.addWidget(self.tel2_field, 2, 5) # addres_gribox.setColumnStretch(6, 5) self.addresGroupBox.setLayout(addres_gribox) # self.addresGroupBox.setMaximumWidth(1300) # Durée statutaire de la société coopérative duree_fbox = QFormLayout() duree_fbox.addRow(FLabel("9. " + DUREE_STATUTAIRE_SC), self.duree_statutaire_field) butt = Button_save(SAVE) butt.clicked.connect(self.save_and_goto_manager) butt_and_continous = Button_save(SAVE_AND_CONTINNUES) butt_and_continous.clicked.connect(self.save_and_goto_add_member) butt_and_continous.setMaximumWidth(300) duree_fbox.addRow(FLabel(""), FLabel("")) duree_fbox.addRow(butt, butt_and_continous) vbox = QVBoxLayout() vbox.addLayout(formbox) vbox.addWidget(self.capitalSGroupBox) vbox.addWidget(self.addresGroupBox) vbox.addLayout(duree_fbox) self.setLayout(vbox) def get_vfq_list(self): # c_dic = {} co_select = self.commune_box.itemData(self.commune_box.currentIndex()) return entity_children(co_select) def c_change_select(self): self.vfq_box.clear() self.vfq_list = self.get_vfq_list() for index, value in enumerate(self.vfq_list): self.vfq_box.addItem("{}".format(self.vfq_list.get(value).upper()), value) def get_spinneret_list(self): # c_dic = {} r_select = self.activites_box.itemData( self.activites_box.currentIndex()) return get_spinneret_activites(r_select) def sp_change_select(self): self.spinneret_box.clear() self.spinneret_list = self.get_spinneret_list() for index, value in enumerate(self.spinneret_list): self.spinneret_box.addItem( "{}".format(self.spinneret_list.get(value).upper()), value) def is_valide(self): if check_is_empty(self.denomination_field): return False if CooperativeCompanie.select().where( CooperativeCompanie.denomination == self.denomination_field.text()).exists(): field_error( self.denomination_field, "Cette dénomination existe déjà dans la base de données !") return False if check_is_empty(self.commercial_name_field): return False if check_is_empty(self.created_date_field): return False if check_is_empty(self.denomination_field): return False if check_is_empty(self.apports_numeraire_field): return False if check_is_empty(self.apports_nature_field): return False if check_is_empty(self.apports_industrie_field): return False # if check_is_empty(self.rue_field): # return False # if check_is_empty(self.porte_field): # return False # print(len(self.tel_field.text())) if len(self.tel_field.text()) != 11: field_error(self.tel_field, "Numéro requis") return False # if check_is_empty(self.bp_field): # return False # if check_is_empty(self.email_field): # return False if check_is_empty(self.duree_statutaire_field): return False # print(int(self.duree_statutaire_field.text())) if int(self.duree_statutaire_field.text()) > 99: field_error( self.duree_statutaire_field, "La durée statutaire ne peut être supérieure à 99 ans") return False return True def save(self): if not self.is_valide(): return self.scoop = CooperativeCompanie() self.scoop.office = self.office self.scoop.created_date = str(self.created_date_field.text()) self.scoop.denomination = str(self.denomination_field.text()) self.scoop.commercial_name = str(self.commercial_name_field.text()) self.scoop.activity = self.activites_box.itemData( self.activites_box.currentIndex()) self.scoop.spinneret = self.spinneret_box.itemData( self.spinneret_box.currentIndex()) self.scoop.forme = self.formes_box.itemData( self.formes_box.currentIndex()) self.scoop.amount_part_social = is_int( self.amount_part_social_field.text()) self.scoop.apports_numeraire = is_int( self.apports_numeraire_field.text()) self.scoop.apports_nature = is_int(self.apports_nature_field.text()) self.scoop.apports_industrie = is_int( self.apports_industrie_field.text()) self.scoop.region = self.office.slug_region self.scoop.cercle = self.office.slug_cercle self.scoop.commune = self.commune_box.itemData( self.commune_box.currentIndex()) self.scoop.vfq = self.vfq_box.itemData(self.vfq_box.currentIndex()) self.scoop.rue = is_int(self.rue_field.text()) self.scoop.porte = is_int(self.porte_field.text()) self.scoop.tel = is_int(self.tel_field.text()) self.scoop.tel2 = is_int(self.tel2_field.text()) self.scoop.bp = is_int(self.bp_field.text()) self.scoop.email = self.email_field.text() self.scoop.duree_statutaire = is_int( self.duree_statutaire_field.text()) self.scoop.save_() check_list = CheckList() check_list.save_() self.dmd = Demande() self.dmd.check_list = check_list self.dmd.declaration_date = str(self.declaration_date_field.text()) self.dmd.scoop = self.scoop self.dmd.status = self.dmd.ADDMEMBER self.dmd.save_() return True def save_and_goto_add_member(self): if self.save(): from ui.member_manager import MemberManagerWidget self.parent.change_context(MemberManagerWidget, dmd=self.dmd) def save_and_goto_manager(self): if self.save(): self.parent.change_context(ResgistrationManagerWidget) def cal_total(self): total = is_int(self.apports_numeraire_field.text() or 0) + is_int( self.apports_nature_field.text() or 0) + is_int( self.apports_industrie_field.text() or 0) self.capitalSGroupBox.setTitle("7. {} : {}".format( MONTANT_CAPITAL_SI, device_amount(total)))
class StockInputWidget(FWidget): def __init__(self, product="", parent=0, *args, **kwargs): super(StockInputWidget, self).__init__(parent=parent, *args, **kwargs) title = u" ENTREE STOCK" self.parentWidget().setWindowTitle(Config.NAME_ORGA + title) Config.logging.info(title) self.parent = parent vbox = QVBoxLayout(self) hbox = QHBoxLayout(self) editbox = QGridLayout() self.date = FormatDate(QDate.currentDate()) # Combobox widget for add store self.liste_store = Store.all() self.box_mag = QComboBox() for index in range(0, len(self.liste_store)): op = self.liste_store[index] sentence = u"%(name)s" % {'name': op.name} self.box_mag.addItem(sentence, op.id) self.search_field = QLineEdit() self.search_field.setPlaceholderText("Rechercher un article") self.search_field.setMaximumSize(200, self.search_field.maximumSize().height()) self.search_field.textChanged.connect(self.finder) self.add_prod = Button(u"+ &Article") self.add_prod.clicked.connect(self.add_product) self.vline = QFrame() self.vline.setFrameShape(QFrame.VLine) self.vline.setFrameShadow(QFrame.Sunken) self.table_resultat = ResultatTableWidget(parent=self) self.table_info = InfoTableWidget(parent=self) self.table_in = InputTableWidget(parent=self) self.table_resultat.refresh_() editbox.addWidget(self.search_field, 0, 0) editbox.addWidget(self.vline, 0, 2, 1, 1) editbox.addWidget(FormLabel(u"Magasin:"), 0, 4) editbox.addWidget(self.box_mag, 0, 5) editbox.addWidget(FormLabel(u"Date d'entrée:"), 0, 6) editbox.addWidget(self.date, 0, 7) editbox.setColumnStretch(3, 3) splitter = QSplitter(Qt.Horizontal) # splitter.setFrameShape(QFrame.StyledPanel) splitter_left = QSplitter(Qt.Vertical) # splitter_left.addWidget(FBoxTitle(u"Les products")) splitter_left.addWidget(self.table_resultat) splitter_down = QSplitter(Qt.Vertical) splitter_down.resize(15, 20) splitter_down.addWidget(self.table_info) splitter_down.addWidget(self.add_prod) splitter_rigth = QSplitter(Qt.Vertical) # splitter_rigth.addWidget(FBoxTitle(u"Les products achatés")) splitter_rigth.addWidget(self.table_in) splitter_rigth.resize(500, 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): """ """ from GCommon.ui.product_edit_or_add import EditOrAddProductsDialog self.open_dialog(EditOrAddProductsDialog, modal=True, product=None, table_p=self.table_resultat) def finder(self): value = str(self.search_field.text()) self.table_resultat.refresh_(value) def save_b(self): ''' add operation ''' # entete de la facture if not self.table_in.isvalid: return False date = str(self.date.text()) datetime_ = date_to_datetime(date) store = self.liste_store[self.box_mag.currentIndex()] values_t = self.table_in.get_table_items() for ligne in values_t: qty, name = ligne product = Product.select().where(Product.name == name).get() rep = Reports(orders=None, type_=Reports.E, store=store, date=datetime_, product=product, qty_use=int(qty)) try: rep.save() except: self.parent.Notify( u"Ce mouvement n'a pas pu être enrgistré dans les raports", "error") return False self.parent.change_context(GReportViewWidget) self.parent.Notify(u"L'entrée des articles avec succès", "success")
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 RefundEditAddDialog(QDialog, FWidget): def __init__(self, table_p, parent, provid_clt=None, type_=None, refund=None, *args, **kwargs): QDialog.__init__(self, parent, *args, **kwargs) self.type_ = type_ self.refund = refund self.parent = parent self.table_p = table_p self.provid_clt = provid_clt self.new = True if self.refund: self.new = False self.last_r = self.refund self.type_ = refund.type_ self.refund_date_field = FormatDate(self.refund.date) self.refund_date_field.setEnabled(False) self.title = u"Modification de {} {}".format(self.refund.type_, self.refund.invoice.client) self.succes_msg = u"{} a été bien mise à jour".format( self.refund.type_) self.amount = refund.amount self.provid_clt = refund.provider_client else: self.refund_date_field = FormatDate(QDate.currentDate()) self.succes_msg = u"Client a été bien enregistré" self.title = u"Création d'un nouvel client" self.amount = "" self.refund = Refund() self.last_r = Refund.select().where( Refund.provider_client == provid_clt).order_by(Refund.date.desc()).get() self.setWindowTitle(self.title) self.amount_field = IntLineEdit(unicode(self.amount)) vbox = QVBoxLayout() self.last_remaining = self.last_r.refund_remaing() # try: # self.last_r.refund_remaing() # self.remaining = self.last_r.remaining # except Exception as e: # self # print("last_r except ", e) # self.last_r = None # self.close() formbox = QFormLayout() formbox.addRow(FormLabel("Client :"), FormLabel(self.provid_clt.name)) formbox.addRow(FormLabel("Dette restante :"), FormLabel(str(formatted_number(self.last_remaining)))) formbox.addRow(FormLabel(u"Date : *"), self.refund_date_field) formbox.addRow(FormLabel(u"Montant : *"), self.amount_field) butt = ButtonSave(u"Enregistrer") butt.clicked.connect(self.save_edit) formbox.addRow("", butt) # formbox.addRow("", "Le client {} n'est pas endetté") vbox.addLayout(formbox) self.setLayout(vbox) def save_edit(self): ''' add operation ''' if check_is_empty(self.amount_field): return amount = int(self.amount_field.text()) refund_date = unicode(self.refund_date_field.text()) # self.remaining = self.last_r.remaining if check_field( self.amount_field, "Ce montant ne peut être supperieur au dettes restante {}.".format( self.last_remaining), amount > self.last_remaining): return refund = self.refund refund.type_ = self.type_ refund.invoice = self.last_r.invoice refund.amount = amount if self.new: refund.provider_client = self.provid_clt refund.date = date_to_datetime(refund_date) try: refund.save() self.close() self.parent.Notify(u"le {type} {lib} à été enregistré avec succès".format( type=self.type_, lib=amount), "success") self.table_p.refresh_(provid_clt_id=self.provid_clt.id) except Exception as e: self.parent.Notify(e, "error")
class StockOutputWidget(FWidget): def __init__(self, product="", parent=0, *args, **kwargs): super(StockOutputWidget, self).__init__(parent=parent, *args, **kwargs) self.parentWidget().setWindowTitle( Config.NAME_ORGA + u" SORTIE STOCK ") self.parent = parent vbox = QVBoxLayout(self) hbox = QHBoxLayout(self) editbox = QGridLayout() self.date_out = FormatDate(QDate.currentDate()) # Combobox widget for add store self.liste_store = Store.all() self.box_store = QComboBox() for index in xrange(0, len(self.liste_store)): op = self.liste_store[index] sentence = u"{name}".format(name=op.name) self.box_store.addItem(sentence, op.id) self.search_field = QLineEdit() self.search_field.setPlaceholderText("Rechercher un article") self.search_field.setMaximumSize( 200, self.search_field.maximumSize().height()) self.search_field.textChanged.connect(self.finder) self.vline = QFrame() self.vline.setFrameShape(QFrame.VLine) self.vline.setFrameShadow(QFrame.Sunken) self.table_resultat = ResultatTableWidget(parent=self) self.table_info = InfoTableWidget(parent=self) self.table_out = InproductTableWidget(parent=self) self.box_store.connect(self.box_store, SIGNAL("currentIndexChanged(int)"), self.table_out.changed_value) self.table_resultat.refresh_("") # editbox.addWidget(FormLabel(u"Recherche:"), 0, 0) editbox.addWidget(self.search_field, 0, 0) editbox.addWidget(self.vline, 0, 2, 1, 1) editbox.addWidget(FormLabel(u"Magasin:"), 0, 4) editbox.addWidget(self.box_store, 0, 5) editbox.addWidget(FormLabel(u"Date d'achat:"), 0, 6) editbox.addWidget(self.date_out, 0, 7) editbox.setColumnStretch(3, 3) splitter = QSplitter(Qt.Horizontal) splitter_left = QSplitter(Qt.Vertical) # splitter_left.addWidget(FBoxTitle(u"Les products")) splitter_left.addWidget(self.table_resultat) splitter_down = QSplitter(Qt.Vertical) splitter_down.resize(15, 20) splitter_down.addWidget(self.table_info) splitter_rigth = QSplitter(Qt.Vertical) # splitter_rigth.addWidget(FBoxTitle(u"Les products achatés")) splitter_rigth.addWidget(self.table_out) splitter_rigth.resize(500, 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 finder(self): value = str(self.search_field.text()) self.table_resultat.refresh_(value) def save_report(self): ''' add operation ''' # entete de la facture self.table_out.changed_value() if not self.table_out.isvalid: return False date_out = str(self.date_out.text()) datetime_ = date_to_datetime(date_out) self.current_store = self.liste_store[self.box_store.currentIndex()] values_t = self.table_out.get_table_items() for qty, name in values_t: rep = Reports(type_=Reports.S, store=self.current_store, date=datetime_, product=Product.get(name=name), qty_use=int(qty)) try: rep.save() except: self.parent.Notify( u"Ce mouvement n'a pas pu être enrgistré dans les raports", "error") return False self.parent.change_context(GReportViewWidget) self.parent.Notify(u"La sortie des articles avec succès", "success")
class ProvidersViewWidget(FWidget): def __init__(self, parent=0, *args, **kwargs): super(ProvidersViewWidget, self).__init__(parent=parent, *args, **kwargs) self.parent = parent self.title = u"Movements" self.on_date = FormatDate(QDate(date.today().year, 1, 1)) self.end_date = FormatDate(QDate.currentDate()) # self.now = datetime.now().strftime("%x") self.soldeField = FormLabel("{}".format(device_amount(0))) balanceBox = QGridLayout() balanceBox.addWidget(self.soldeField, 0, 3) balanceBox.setColumnStretch(0, 1) 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 = 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.table = RapportTableWidget(parent=self) self.button = Button(u"Ok") self.button.clicked.connect(self.refresh_prov_clt) self.btt_export = BttExportXLSX(u"Exporter") self.btt_export.clicked.connect(self.export_xls) editbox = QGridLayout() editbox.addWidget(FormLabel(u"Date debut"), 0, 1) editbox.addWidget(self.on_date, 0, 2) editbox.addWidget(FormLabel(u"Date fin"), 1, 1) editbox.addWidget(self.end_date, 1, 2) editbox.addWidget(self.name_client_field, 0, 3) editbox.addWidget(self.button, 1, 3) editbox.addWidget(self.btt_export, 1, 7) editbox.setColumnStretch(4, 2) vbox = QVBoxLayout() vbox.addWidget(FPageTitle(self.title)) vbox.addLayout(editbox) vbox.addWidget(self.table) vbox.addLayout(balanceBox) self.setLayout(vbox) def refresh_prov_clt(self): try: self.name_client, self.phone = self.name_client_field.lineEdit( ).text().split(",") clt = ProviderOrClient.get(phone=int(self.phone.replace(" ", ""))) self.table.refresh_(provid_clt_id=clt.id) except Exception as e: self.table.refresh_() print(" ", e) def export_xls(self): from Common.exports_xlsx import export_dynamic_data dict_data = { 'file_name': "versements", 'headers': self.table.hheaders[:-1], 'data': self.table.data, "extend_rows": [ (1, self.table.label_mov_tt), (3, self.table.balance_tt), ], # "footers": [], 'sheet': self.title, # 'title': self.title, 'widths': self.table.stretch_columns, 'exclude_row': len(self.table.data) - 1, 'format_money': [ "D:D", ], 'others': [ ("A7", "B7", "Compte : {}".format(self.table.provider_clt)), ("A8", "B8", "Du {} au {} : {}".format( date_to_datetime(self.on_date.text()).strftime( Config.DATEFORMAT), date_to_datetime( self.end_date.text()).strftime(Config.DATEFORMAT), device_amount(self.table.balance_tt))), ], } export_dynamic_data(dict_data) def display_remaining(self, amount_text): return """ <h2>Solde du {} au {} : <b>{}</b></h2> """.format( date_to_datetime(self.on_date.text()).strftime(Config.DATEFORMAT), date_to_datetime(self.end_date.text()).strftime(Config.DATEFORMAT), amount_text)
class EditOrAddPaymentrDialog(QDialog, FWidget): def __init__(self, table_p, parent, type_=None, payment=None, *args, **kwargs): QDialog.__init__(self, parent, *args, **kwargs) self.type_ = type_ self.payment = payment self.parent = parent self.table_p = table_p if self.payment: self.new = False self.type_ = payment.type_ self.payment_date_field = FormatDate(self.payment.date) self.payment_date_field.setEnabled(False) self.title = u"Modification de {} {}".format(self.payment.type_, self.payment.libelle) self.succes_msg = u"{} a été bien mise à jour".format( self.payment.type_) if self.type_ == Payment.CREDIT: amount = payment.credit elif self.type_ == Payment.DEBIT: amount = payment.debit else: self.new = True amount = "" self.payment_date_field = FormatDate(QDate.currentDate()) self.succes_msg = u"Client a été bien enregistré" self.title = u"Création d'un nouvel client" self.payment = Payment() self.setWindowTitle(self.title) self.amount_field = IntLineEdit(unicode(amount)) self.libelle_field = QTextEdit(self.payment.libelle) vbox = QVBoxLayout() formbox = QFormLayout() formbox.addRow(FormLabel(u"Date : *"), self.payment_date_field) formbox.addRow(FormLabel(u"Libelle :"), self.libelle_field) formbox.addRow(FormLabel(u"Montant : *"), self.amount_field) butt = ButtonSave(u"Enregistrer") butt.clicked.connect(self.save_edit) formbox.addRow("", butt) vbox.addLayout(formbox) self.setLayout(vbox) def save_edit(self): ''' add operation ''' if check_is_empty(self.amount_field): return payment_date = unicode(self.payment_date_field.text()) libelle = unicode(self.libelle_field.toPlainText()) amount = int(self.amount_field.text().replace(" ", "")) payment = self.payment payment.type_ = self.type_ payment.libelle = libelle if self.new: payment.date = date_to_datetime(payment_date) if self.type_ == Payment.CREDIT: payment.credit = amount elif self.type_ == Payment.DEBIT: payment.debit = amount try: payment.save() self.close() self.parent.Notify(u"le {type} {lib} à été enregistré avec succès".format( type=self.type_, lib=libelle), "success") self.table_p.refresh_() except Exception as e: self.parent.Notify(e, "error")