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 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 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")