void PurchaseEditor::deleteSelectedItem() //added on dec 3, 2009 { if (ui->tableView->currentRow()!=-1) { int row = ui->tableView->currentRow(); QTableWidgetItem *item = ui->tableView->item(row, colCode); qulonglong code = item->data(Qt::DisplayRole).toULongLong(); if (productsHash.contains(code)) { //delete it from hash and from view ProductInfo info = productsHash.take(code); ui->tableView->removeRow(row); //update qty and $ of the purchase totalBuy -= (info.cost*info.purchaseQty); itemCount -= info.purchaseQty; //calculate taxes for this item. Calculated from the costs. Azahar *myDb = new Azahar; myDb->setDatabase(db); double cWOTax = 0; if (myDb->getConfigTaxIsIncludedInPrice()) cWOTax= (info.cost)/(1+((info.tax+info.extratax)/100)); else cWOTax = info.cost; double tax = cWOTax*info.purchaseQty*(info.tax/100); double tax2= cWOTax*info.purchaseQty*(info.extratax/100); totalTaxes = totalTaxes - tax - tax2; qDebug()<<"Total taxes updated:"<<totalTaxes; delete myDb; ui->groupBox->setTitle( i18n("Items in this purchase [ %1 items, %2 ]",itemCount, KGlobal::locale()->formatMoney(totalBuy, QString(), 2) ) ); } } }
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; } //calculate taxes for this item. Calculated from the costs. Azahar *myDb = new Azahar; myDb->setDatabase(db); double cWOTax = 0; if (myDb->getConfigTaxIsIncludedInPrice()) cWOTax= (info.cost)/(1+((info.tax+info.extratax)/100)); else cWOTax = info.cost; double tax = cWOTax*info.purchaseQty*(info.tax/100); double tax2= cWOTax*info.purchaseQty*(info.extratax/100); totalTaxes += tax + tax2; // add this product taxes to the total taxes in the purchase. qDebug()<<"Total taxes updated:"<<totalTaxes<<" Taxes for this product:"<<tax+tax2; delete myDb; 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::calculatePrice() { double finalPrice=0.0; bool costOk,profitOk,taxOk,etaxOk; if (ui->editCost->text().isEmpty() && !ui->groupBoxedItem->isChecked() ) { ui->editCost->setText("0.0"); //ui->editCost->setFocus(); ui->editCost->setStyleSheet("background-color: rgb(255,100,0); color:white; selection-color: white; font-weight:bold;"); costOk = false; } else { ui->editCost->setStyleSheet(""); costOk=true; } if (ui->editUtility->text().isEmpty()) { //ui->editUtility->setFocus(); ui->editUtility->setText("0.0"); ui->editUtility->setStyleSheet("background-color: rgb(255,100,0); color:white; selection-color: white; font-weight:bold;"); profitOk=false; } else { ui->editUtility->setStyleSheet(""); profitOk=true; } if (ui->editTax->text().isEmpty()) { ui->editTax->setText("0.0"); //ui->editTax->setFocus(); ui->editTax->selectAll(); ui->editTax->setStyleSheet("background-color: rgb(255,100,0); color:white; selection-color: white; font-weight:bold;"); taxOk=false; } else { ui->editTax->setStyleSheet(""); taxOk=true; } if (ui->editExtraTaxes->text().isEmpty()) { ui->editExtraTaxes->setText("0.0"); //ui->editExtraTaxes->setFocus(); ui->editExtraTaxes->selectAll(); ui->editExtraTaxes->setStyleSheet("background-color: rgb(255,100,0); color:white; selection-color: white; font-weight:bold;"); etaxOk = false; } else { etaxOk = true; ui->editExtraTaxes->setStyleSheet(""); } //now check which are ZEROs // if (!ui->editExtraTaxes->text().isEmpty() && ui->editExtraTaxes->text().toDouble()<=0) // ui->editExtraTaxes->setStyleSheet("background-color: rgb(255,100,0); color:white; selection-color: white; font-weight:bold;"); // else ui->editExtraTaxes->setStyleSheet(""); if (!ui->editTax->text().isEmpty() && ui->editTax->text().toDouble()<=0) ui->editTax->setStyleSheet("background-color: rgb(255,100,0); color:white; selection-color: white; font-weight:bold;"); else ui->editTax->setStyleSheet(""); if (!ui->editUtility->text().isEmpty() && ui->editUtility->text().toDouble()<=0) ui->editUtility->setStyleSheet("background-color: rgb(255,100,0); color:white; selection-color: white; font-weight:bold;"); else ui->editUtility->setStyleSheet(""); if (!ui->editCost->text().isEmpty() && ui->editCost->text().toDouble()<=0) ui->editCost->setStyleSheet("background-color: rgb(255,100,0); color:white; selection-color: white; font-weight:bold;"); else ui->editCost->setStyleSheet(""); if (costOk && profitOk && taxOk && etaxOk ) { //TODO: if TAXes are included in cost... double cWOTax = 0; double tax = ui->editTax->text().toDouble(); double tax2 = ui->editExtraTaxes->text().toDouble(); double utility = ui->editUtility->text().toDouble(); Azahar *myDb = new Azahar; myDb->setDatabase(db); // We assume that tax rules for prices also apply to costs. if (myDb->getConfigTaxIsIncludedInPrice()) cWOTax= (ui->editCost->text().toDouble())/(1+((tax+tax2)/100)); else cWOTax = ui->editCost->text().toDouble(); double cost = cWOTax; utility = ((utility/100)*cost); double cu=cost+utility; //We need the tax recalculated from the costs+utility, this time taxes are expressed in $ tax = ((tax/100)*(cost)); ///NOTE fixed:when paying for a product we pay taxes for the cost not the cost+profit tax2 = ((tax2/100)*(cost)); if (ui->groupBoxedItem->isChecked()){ double itemsPerBox = 0; double pricePerBox = 0; if (!ui->editItemsPerBox->text().isEmpty()) itemsPerBox = ui->editItemsPerBox->text().toDouble(); if (!ui->editPricePerBox->text().isEmpty()) pricePerBox = ui->editPricePerBox->text().toDouble(); if (!ui->editItemsPerBox->text().isEmpty() || !ui->editPricePerBox->text().isEmpty()) return; tax = ui->editTax->text().toDouble(); tax2 = ui->editExtraTaxes->text().toDouble(); if (myDb->getConfigTaxIsIncludedInPrice()) cWOTax= (pricePerBox/itemsPerBox)/(1+((tax+tax2)/100)); else cWOTax = pricePerBox/itemsPerBox; cost = cWOTax; ui->editCost->setText(QString::number(cost)); utility = ((ui->editUtility->text().toDouble()/100)*cost); cu = cost + utility; tax = ((tax/100)*(cost));///NOTE fixed:when paying for a product we pay taxes for the cost not the cost+profit tax2 = ((tax2/100)*(cost)); finalPrice = cu + tax + tax2; } else finalPrice = cost + utility + tax + tax2; qDebug()<<"cWOTax ="<<cWOTax<<" tax1="<<tax<<" tax2="<<tax2<<" FinalPrice:"<<finalPrice; ui->editFinalPrice->setText(QString::number(finalPrice)); ui->editFinalPrice->selectAll(); delete myDb; } }