void PurchaseEditor::addItemToList() { ProductInfo pInfo; Azahar *myDb = new Azahar; myDb->setDatabase(db); bool ok=false; if (ui->editCode->text().isEmpty()) ui->editCode->setFocus(); else if (ui->editDesc->text().isEmpty()) ui->editDesc->setFocus(); else if (ui->editPoints->text().isEmpty()) ui->editPoints->setFocus(); else if (ui->editCost->text().isEmpty()) ui->editCost->setFocus(); else if (ui->editTax->text().isEmpty()) ui->editTax->setFocus(); else if (ui->editFinalPrice->text().isEmpty()) ui->editFinalPrice->setFocus(); else if (ui->editQty->text().isEmpty() || ui->editQty->text()=="0") ui->editQty->setFocus(); else if ((ui->editUtility->text().isEmpty() && ui->editFinalPrice->text().isEmpty()) || ui->editFinalPrice->text().toDouble()<=ui->editCost->text().toDouble() ) ui->editFinalPrice->setFocus(); else if (ui->groupBoxedItem->isChecked() && (ui->editItemsPerBox->text().isEmpty() || ui->editItemsPerBox->text()=="0")) ui->editItemsPerBox->setFocus(); else if (ui->groupBoxedItem->isChecked() && (ui->editPricePerBox->text().isEmpty() || ui->editPricePerBox->text()=="0")) ui->editPricePerBox->setFocus(); else ok = true; if (ok) { ProductInfo info = myDb->getProductInfo( QString::number( getCode() ) ); //FIX BUG: dont allow enter new products.. dont know why? new code on 'continue' statement. if (info.code == 0) { //new product info.code = getCode(); info.stockqty = 0; //new product info.lastProviderId=1; //for now.. fixme in the future } //update p.info from the dialog info.desc = getDescription(); info.price = getPrice(); info.cost = getCost(); info.tax = getTax1(); info.extratax= getTax2(); info.photo = getPhotoBA(); info.units = getMeasureId(); info.category= getCategoryId(); info.utility = getProfit(); info.points = getPoints(); info.purchaseQty = getPurchaseQty(); info.validDiscount = productExists; //used to check if product is already on db. if (info.isAGroup) { // get each product fo the group/pack QStringList list = gelem.split(","); for (int i=0; i<list.count(); ++i) { QStringList tmp = list.at(i).split("/"); if (tmp.count() == 2) { //ok 2 fields qulonglong code = tmp.at(0).toULongLong(); pInfo = myDb->getProductInfo(QString::number(code)); pInfo.purchaseQty = getPurchaseQty(); pInfo.validDiscount = true; // all grouped products exists insertProduct(pInfo); ///inserting each product of the group } // correct fields }//for each element } else insertProduct(info); resetEdits(); ui->editCode->setFocus(); } }
void PurchaseEditor::insertProduct(ProductInfo info) { //When a product is already on list, increment qty. bool existed = false; if (info.code>0) { if (productsHash.contains(info.code)) { info = productsHash.take(info.code); //re get it from hash info.purchaseQty += getPurchaseQty(); itemCount += getPurchaseQty(); totalBuy = totalBuy + info.cost*getPurchaseQty(); existed = true; } else { itemCount += info.purchaseQty; totalBuy = totalBuy + info.cost*info.purchaseQty; } double finalCount = info.purchaseQty + info.stockqty; info.groupElementsStr=""; //grouped products cannot be a group. //insert item to productsHash productsHash.insert(info.code, info); //insert item to ListView if (!existed) { int rowCount = ui->tableView->rowCount(); ui->tableView->insertRow(rowCount); ui->tableView->setItem(rowCount, 0, new QTableWidgetItem(QString::number(info.code))); ui->tableView->setItem(rowCount, 1, new QTableWidgetItem(info.desc)); ui->tableView->setItem(rowCount, 2, new QTableWidgetItem(QString::number(info.purchaseQty))); ui->tableView->setItem(rowCount, 3, new QTableWidgetItem(QString::number(finalCount))); } else { //simply update the groupView with the new qty for (int ri=0; ri<ui->tableView->rowCount(); ++ri) { QTableWidgetItem * item = ui->tableView->item(ri, 1); QString name = item->data(Qt::DisplayRole).toString(); if (name == info.desc) { //update QTableWidgetItem *itemQ = ui->tableView->item(ri, 2); itemQ->setData(Qt::EditRole, QVariant(QString::number(info.purchaseQty))); itemQ = ui->tableView->item(ri, 3); itemQ->setData(Qt::EditRole, QVariant(QString::number(finalCount))); continue; //HEY PURIST, WHEN I GOT SOME TIME I WILL CLEAN IT } } } ui->tableView->horizontalHeader()->setResizeMode(QHeaderView::Interactive); ui->tableView->resizeRowsToContents(); //totalBuy = totalBuy + info.cost*info.purchaseQty; //itemCount = itemCount + info.purchaseQty; //update info on group caption ui->groupBox->setTitle( i18n("Items in this purchase [ %1 items, %2 ]",itemCount, KGlobal::locale()->formatMoney(totalBuy, QString(), 2) ) ); qDebug()<<"totalBuy until now:"<<totalBuy<<" itemCount:"<<itemCount<<"info.cost:"<<info.cost<<"info.purchaseQty:"<<info.purchaseQty; } else qDebug()<<"Item "<<info.code<<" already on hash"; }
void PurchaseEditor::addItemToList() { qDebug()<<"DATE:"<<getDate().toString()<<ui->editDateTime->dateTime().date().toString(); ProductInfo pInfo; Azahar *myDb = new Azahar; myDb->setDatabase(db); // Exit here if (!ui->p->checkFieldsState()) {return;} if (ui->editQty->text().isEmpty() || ui->editQty->text()=="0") { ui->editQty->setFocus(); return; } // in-db definition ProductInfo info = myDb->getProductInfo( ui->p->getCode() ); productExists=(info.code!="0"); //if is an Unlimited stock product, do not allow to add to the purchase. if (info.hasUnlimitedStock) { errorPanel->showTip(i18n("<b>Unlimited Stock Products cannot be purchased.</b>"), 10000); return; } // in-widget definition info=ui->p->getProductInfo(); info.validDiscount = productExists; //used to check if product is already on db. if (info.isAGroup) { //FIXME! // get each product fo the group/pack QStringList list = gelem.split(","); for (int i=0; i<list.count(); ++i) { QStringList tmp = list.at(i).split("/"); if (tmp.count() == 2) { //ok 2 fields qulonglong code = tmp.at(0).toULongLong(); pInfo = myDb->getProductInfo(QString::number(code)); pInfo.purchaseQty = getPurchaseQty(); pInfo.validDiscount = true; // all grouped products exists insertProduct(pInfo); ///inserting each product of the group } // correct fields }//for each element } else { info.purchaseQty=getPurchaseQty(); insertProduct(info); } resetEdits(); }
void PurchaseEditor::addItemToList() { ProductInfo pInfo; Azahar *myDb = new Azahar; myDb->setDatabase(db); bool ok=false; if (ui->editCode->text().isEmpty()) ui->editCode->setFocus(); else if (ui->editDesc->text().isEmpty()) ui->editDesc->setFocus(); else if (ui->editPoints->text().isEmpty()) ui->editPoints->setFocus(); else if (ui->editCost->text().isEmpty()) ui->editCost->setFocus(); else if (ui->editTax->text().isEmpty()) ui->editTax->setFocus(); else if (ui->editFinalPrice->text().isEmpty()) ui->editFinalPrice->setFocus(); else if (ui->editQty->text().isEmpty() || ui->editQty->text()=="0") ui->editQty->setFocus(); else if ((ui->editUtility->text().isEmpty() && ui->editFinalPrice->text().isEmpty()) || ui->editFinalPrice->text().toDouble()<=ui->editCost->text().toDouble() ) ui->editFinalPrice->setFocus(); else if (ui->groupBoxedItem->isChecked() && (ui->editItemsPerBox->text().isEmpty() || ui->editItemsPerBox->text()=="0")) ui->editItemsPerBox->setFocus(); else if (ui->groupBoxedItem->isChecked() && (ui->editPricePerBox->text().isEmpty() || ui->editPricePerBox->text()=="0")) ui->editPricePerBox->setFocus(); else ok = true; if (ok) { ProductInfo info = myDb->getProductInfo(QString::number(getCode())); if (info.code == 0) { info.code = getCode(); info.lastProviderId=1; //for now.. fixme in the future } //update p.info from the dialog info.desc = getDescription(); info.price = getPrice(); info.cost = getCost(); info.tax = getTax1(); //FIXME: add tax models //info.extratax= getTax2(); info.photo = getPhotoBA(); info.units = getMeasureId(); info.category= getCategoryId(); info.profit = getProfit(); info.points = getPoints(); info.stockqty= getQtyOnDb(); info.purchaseQty = getPurchaseQty(); double finalCount = info.purchaseQty + info.stockqty; // WHAT FOR?? info.validDiscount = productExists; //used to check if product is already on db. //FIXME: NEXT 2 lines are temporal remove on 0.8 version //info.alphaCode = "-NA-"; //FIXME: last providerId for an existent must be gotten from db since we dont have that field here. Provide a combobox to select one and a button to add a new one. //info.lastProviderId = 1; if (info.isAGroup) { // get each product fo the group/pack QStringList list = gelem.split(","); for (int i=0; i<list.count(); ++i) { QStringList tmp = list.at(i).split("/"); if (tmp.count() == 2) { //ok 2 fields qulonglong code = tmp.at(0).toULongLong(); pInfo = myDb->getProductInfo(QString::number(code)); pInfo.purchaseQty = getPurchaseQty(); pInfo.validDiscount = true; // all grouped products exists insertProduct(pInfo); ///inserting each product of the group } // correct fields }//for each element } else insertProduct(info); resetEdits(); ui->editCode->setFocus(); } }
void PurchaseEditor::insertProduct(ProductInfo info) { //When a product is already on list, increment qty. bool existed = false; if (info.code=="0") { qDebug()<<"INVALID PRODUCT"; return; } if (productsHash.contains(info.code)) { qDebug()<<"Item "<<info.code<<" already on hash"; info = productsHash.take(info.code); //re get it from hash double finalStock = info.purchaseQty + info.stockqty; double suggested; if (-info.stockqty == 0) suggested = 1; else suggested = -info.stockqty; qDebug()<<"Purchase Qty:"<<info.purchaseQty<<" product stock:"<<info.stockqty<<" final Stock:"<<finalStock; if (finalStock < 0) { //this cannot be saved, negative stock is not allowed in database. qDebug()<<"Cannot be negative stock!, suggested purchase:"<<suggested; //launch a message errorPanel->showTip(i18n("<b>Stock cannot go negative.</b> The <i>minimum</i> purchase can be <b>%1</b>", suggested), 10000); setPurchaseQty(suggested); ui->editQty->setFocus(); return; } info.purchaseQty += getPurchaseQty(); itemCount += getPurchaseQty(); totalBuy = totalBuy + info.cost*getPurchaseQty(); existed = true; } else { double finalStock = info.purchaseQty + info.stockqty; double suggested; if (-info.stockqty == 0) suggested = 1; else suggested = -info.stockqty; qDebug()<<"Purchase Qty:"<<info.purchaseQty<<" product stock:"<<info.stockqty<<" final Stock:"<<finalStock; if (finalStock < 0) { //this cannot be saved, negative stock is not allowed in database. qDebug()<<"Cannot be negative stock!, suggested purchase:"<<suggested; //launch a message errorPanel->showTip(i18n("<b>Stock cannot go negative.</b> The <i>minimum</i> purchase can be <b>%1</b>", suggested), 10000); setPurchaseQty(suggested); ui->editQty->setFocus(); return; } itemCount += info.purchaseQty; totalBuy = totalBuy + info.cost*info.purchaseQty; } //its ok to reset edits now... resetEdits(); double finalCount = info.purchaseQty + info.stockqty; info.groupElementsStr=""; //grouped products cannot be a group. //insert item to productsHash productsHash.insert(info.code, info); //insert item to ListView if (!existed) { int rowCount = ui->tableView->rowCount(); ui->tableView->insertRow(rowCount); ui->tableView->setItem(rowCount, 0, new QTableWidgetItem(info.code)); ui->tableView->setItem(rowCount, 1, new QTableWidgetItem(info.desc)); ui->tableView->setItem(rowCount, 2, new QTableWidgetItem(QString::number(info.purchaseQty))); ui->tableView->setItem(rowCount, 3, new QTableWidgetItem(QString::number(finalCount))); } else { //simply update the groupView with the new qty for (int ri=0; ri<ui->tableView->rowCount(); ++ri) { QTableWidgetItem * item = ui->tableView->item(ri, 0); QString name = item->data(Qt::DisplayRole).toString(); if (name == info.code) { //update QTableWidgetItem *itemQ = ui->tableView->item(ri, 2); itemQ->setData(Qt::EditRole, QVariant(QString::number(info.purchaseQty))); itemQ = ui->tableView->item(ri, 3); itemQ->setData(Qt::EditRole, QVariant(QString::number(finalCount))); itemQ = ui->tableView->item(ri, 1); itemQ->setData(Qt::EditRole, QVariant(info.desc)); continue; //HEY PURIST, WHEN I GOT SOME TIME I WILL CLEAN IT } } } ui->tableView->horizontalHeader()->setResizeMode(QHeaderView::Interactive); ui->tableView->resizeRowsToContents(); //totalBuy = totalBuy + info.cost*info.purchaseQty; //itemCount = itemCount + info.purchaseQty; //update info on group caption ui->groupBox->setTitle( i18n("Items in this purchase [ %1 items, %2 ]",itemCount, KGlobal::locale()->formatMoney(totalBuy, QString(), 2) ) ); qDebug()<<"totalBuy until now:"<<totalBuy<<" itemCount:"<<itemCount<<"info.cost:"<<info.cost<<"info.purchaseQty:"<<info.purchaseQty; }