示例#1
0
void dspAROpenItemsByCustomer::sFillList()
{
  _aropen->clear();

  q.prepare( "SELECT aropen_id, aropen_docnumber, aropen_ordernumber,"
             "       CASE WHEN (aropen_doctype='C') THEN :creditMemo"
             "            WHEN (aropen_doctype='D') THEN :debitMemo"
             "            WHEN (aropen_doctype='I') THEN :invoice"
             "            WHEN (aropen_doctype='R') THEN :cashdeposit"
             "            ELSE :other"
             "       END AS f_doctype,"
             "       formatDate(aropen_docdate) AS f_docdate,"
             "       formatDate(aropen_duedate) AS f_duedate,"
             "       formatMoney(aropen_amount) AS f_amount,"
             "       formatMoney(aropen_paid) AS f_paid,"
             "       CASE WHEN (aropen_doctype IN ('C', 'R')) THEN ((aropen_amount - aropen_paid) * -1)"
             "            WHEN (aropen_doctype IN ('I', 'D')) THEN (aropen_amount - aropen_paid)"
             "            ELSE (aropen_amount - aropen_paid)"
             "       END AS balance,"
	     "       currConcat(aropen_curr_id) AS currAbbr,"
             "       currToBase(aropen_curr_id,"
	     "       CASE WHEN (aropen_doctype IN ('C', 'R')) THEN ((aropen_amount - aropen_paid) * -1)"
             "            WHEN (aropen_doctype IN ('I', 'D')) THEN (aropen_amount - aropen_paid)"
             "            ELSE (aropen_amount - aropen_paid)"
             "       END, aropen_docdate) AS base_balance "
             "  FROM aropen "
             " WHERE ( (aropen_open)"
             "   AND   (aropen_cust_id=:cust_id) "
             "   AND   (aropen_duedate BETWEEN :startDate AND :endDate) ) "
             " ORDER BY aropen_docdate;" );
  _dates->bindValue(q);
  q.bindValue(":cust_id", _cust->id());
  q.bindValue(":creditMemo", tr("C/M"));
  q.bindValue(":debitMemo", tr("D/M"));
  q.bindValue(":invoice", tr("Invoice"));
  q.bindValue(":cashdeposit", tr("C/D"));
  q.exec();
  if (q.first())
  {
    double total= 0.0;
    XTreeWidgetItem * last = 0;
    do
    {
      last = new XTreeWidgetItem( _aropen, last, q.value("aropen_id").toInt(),
                                  q.value("f_doctype"), q.value("aropen_docnumber"),
                                  q.value("aropen_ordernumber"), q.value("f_docdate"),
                                  q.value("f_duedate"), q.value("f_amount"),
                                  q.value("f_paid"), formatMoney(q.value("balance").toDouble()),
			          q.value("currAbbr"),
			          formatMoney(q.value("base_balance").toDouble()));
 
      total += q.value("base_balance").toDouble();
    }
    while (q.next());

    new XTreeWidgetItem( _aropen, last, -1,
                         QVariant(tr("Total")), "", "", "", "", "", "", "", "",
                         formatMoney(total) );
  }
}
示例#2
0
void selectedPayments::sFillList()
{
  _apselect->clear();

  QString sql( "SELECT apopen_id, apselect_id,"
               "       (bankaccnt_name || '-' || bankaccnt_descrip) AS f_bank,"
               "       (vend_number || '-' || vend_name) AS f_vendor,"
               "       CASE WHEN (apopen_doctype='V') THEN :voucher"
               "            When (apopen_doctype='D') THEN :debitMemo"
               "       END AS doctype,"
               "       apopen_docnumber, apopen_ponumber, apselect_amount,"
	       "       apopen_invcnumber,"
	       "       currToBase(apselect_curr_id, apselect_amount, "
	       "		  CURRENT_DATE) AS apselect_amount_base, "
	       "       currConcat(apselect_curr_id) AS currAbbr "
               "FROM apopen, apselect, vend, bankaccnt "
               "WHERE ( (apopen_vend_id=vend_id)"
               "  AND   (apselect_apopen_id=apopen_id)"
               "  AND   (apselect_bankaccnt_id=bankaccnt_id)" 
	       "<? if exists(\"bankaccntid\") ?>"
	       "  AND   (bankaccnt_id=<? value(\"bankaccntid\") ?>)"
	       "<? endif ?>"
	       " ) "
	       "ORDER BY bankaccnt_name, vend_number, apopen_docnumber;" );
  ParameterList params;
  setParams(params);
  MetaSQLQuery mql(sql);
  q = mql.toQuery(params);
  XTreeWidgetItem *last = 0;
  double running = 0;
  while (q.next())
  {
    running += q.value("apselect_amount_base").toDouble();

    last = new XTreeWidgetItem(_apselect, last,
			       q.value("apopen_id").toInt(),
			       q.value("apselect_id").toInt(),
			       q.value("f_bank"),
			       q.value("f_vendor"),
			       q.value("doctype"),
			       q.value("apopen_docnumber"),
			       q.value("apopen_invcnumber"),
			       q.value("apopen_ponumber"),
			       formatMoney(q.value("apselect_amount").toDouble()),
			       q.value("currAbbr"),
			       formatMoney(running) );
  }
  if (q.lastError().type() != QSqlError::None)
  {
    systemError(this, q.lastError().databaseText(), __FILE__, __LINE__);
    return;
  }
}
示例#3
0
void changePoitemQty::sPopulate(int pPoitemid)
{
  if (pPoitemid == -1)
  {
    _currentQtyReceived->clear();
    _newQtyReceived->clear();
    _currentQtyOrdered->clear();
    _newQty->clear();
    _currentQtyBalance->clear();
    _newQtyBalance->clear();
    _freight->clear();
  }
  else
  {
    q.prepare( "SELECT poitem_qty_ordered, poitem_qty_received, poitem_qty_returned,"
               "             poitem_freight "
               "FROM poitem "
               "WHERE (poitem_id=:poitem_id);" );
    q.bindValue(":poitem_id", pPoitemid);
    q.exec();
    if (q.first())
    {
      _currentQtyOrdered->setText(formatQty(q.value("poitem_qty_ordered").toDouble()));
      _currentQtyReceived->setText(formatQty(q.value("poitem_qty_received").toDouble()));
      _currentQtyBalance->setText(formatQty((q.value("poitem_qty_ordered").toDouble() - q.value("poitem_qty_received").toDouble())));
      _newQtyReceived->setText(formatQty(q.value("poitem_qty_received").toDouble()));
      _cacheFreight = q.value("poitem_freight").toDouble();
      _freight->setText(formatMoney(q.value("poitem_freight").toDouble()));
      sQtyChanged();
    }
  }
}
示例#4
0
void dspBriefSalesHistoryByCustomerType::sFillList()
{
  _sohist->clear();

  if (!checkParameters())
    return;

  QString sql( "SELECT custtype_id, custtype_code, cust_name,"
               "       cohist_ordernumber, cohist_invcnumber,"
               "       formatDate(cohist_orderdate) AS f_orderdate,"
               "       formatDate(cohist_invcdate) AS f_invcdate,"
               "       SUM(round(cohist_qtyshipped * cohist_unitprice,2)) AS extended,"
               "       formatMoney(SUM(round(cohist_qtyshipped * cohist_unitprice,2))) AS f_extended "
               "FROM cohist, cust, custtype, itemsite, item "
               "WHERE ( (cohist_itemsite_id=itemsite_id)"
               " AND (itemsite_item_id=item_id)"
               " AND (cohist_cust_id=cust_id)"
               " AND (cust_custtype_id=custtype_id)"
               " AND (cohist_invcdate BETWEEN :startDate AND :endDate)" );

  if (_warehouse->isSelected())
    sql += " AND (itemsite_warehous_id=:warehous_id)";

  if (_customerType->isSelected())
    sql += " AND (custtype_id=:custtype_id)";
  else if (_customerType->isPattern())
    sql += " AND (custtype_code ~ :custtype_pattern)";

  sql += ") "
         "GROUP BY custtype_id, custtype_code, cust_name,"
         "         cohist_ordernumber, cohist_invcnumber,"
         "         cohist_orderdate, cohist_invcdate "
         "ORDER BY cohist_invcdate, cohist_orderdate;";

  q.prepare(sql);
  _dates->bindValue(q);
  _warehouse->bindValue(q);
  _customerType->bindValue(q);
  q.exec();
  if (q.first())
  {
    double totalSales = 0.0;

    do
    {
      new XListViewItem( _sohist, _sohist->lastItem(), q.value("custtype_id").toInt(),
                         q.value("custtype_code"), q.value("cust_name"),
                         q.value("cohist_ordernumber"), q.value("cohist_invcnumber"),
                         q.value("f_orderdate"), q.value("f_invcdate"),
                         q.value("f_extended") );

       totalSales += q.value("extended").toDouble();
    }
    while (q.next());

    new XListViewItem( _sohist, _sohist->lastItem(), -1,
                       "", "", "", "", "", tr("Totals"),
                       formatMoney(totalSales) );
  }
}
示例#5
0
void dspSummarizedSalesByCustomerType::sFillList()
{
  _sohist->clear();

  if (!checkParameters())
    return;

  QString sql( "SELECT custtype_id, custtype_code, warehous_code,"
               "       formatSalesPrice(minprice) AS f_minprice,"
               "       formatSalesPrice(maxprice) AS f_maxprice,"
               "       formatSalesPrice(avgprice) AS f_avgprice,"
               "       formatQty(totalunits) AS f_totalunits,"
               "       formatQty(totalsales) AS f_totalsales, totalsales "
               "FROM ( SELECT custtype_id, custtype_code, warehous_code,"
               "              MIN(cohist_unitprice) AS minprice, MAX(cohist_unitprice) AS maxprice,"
               "              AVG(cohist_unitprice) AS avgprice, SUM(cohist_qtyshipped) AS totalunits,"
               "              SUM(round(cohist_qtyshipped * cohist_unitprice,2)) AS totalsales "
               "       FROM cohist, cust, custtype, itemsite, item, warehous "
               "       WHERE ( (cohist_cust_id=cust_id)"
               "        AND (cust_custtype_id=custtype_id)"
               "        AND (cohist_itemsite_id=itemsite_id)"
               "        AND (itemsite_item_id=item_id)"
               "        AND (itemsite_warehous_id=warehous_id)"
               "        AND (cohist_invcdate BETWEEN :startDate AND :endDate)" );

  if (_warehouse->isSelected())
    sql += "AND (warehous_id=:warehous_id)";

  if (_customerType->isSelected())
    sql += " AND (custtype_id=:custtype_id)";
  else if (_customerType->isPattern())
    sql += " AND (custtype_code ~ :custtype_pattern)";

  sql += ") "
         "GROUP BY custtype_id, custtype_code, warehous_code ) AS data "
         "ORDER BY custtype_code, warehous_code;";

  q.prepare(sql);
  _warehouse->bindValue(q);
  _customerType->bindValue(q);
  _dates->bindValue(q);
  q.exec(); 
  _sohist->populate(q);

  if (q.first())
  {
    double totalSales = 0.0;

    do
      totalSales += q.value("totalsales").toDouble();
    while (q.next());

    new XTreeWidgetItem(_sohist,
			_sohist->topLevelItem(_sohist->topLevelItemCount() - 1),
			-1,
                        QVariant(tr("Totals")), "", "", "", "", "",
                        formatMoney(totalSales) );
  }
}
示例#6
0
void dspBriefSalesHistoryByCustomer::sFillList()
{
  _sohist->clear();

  if (!checkParameters())
    return;

  QString sql( "SELECT cohist_ordernumber, cohist_ponumber, cohist_invcnumber,"
               "       formatDate(cohist_orderdate) AS f_orderdate,"
               "       formatDate(cohist_invcdate, 'Return') AS f_invcdate,"
               "       SUM(round(cohist_qtyshipped * cohist_unitprice,2)) AS extended,"
               "       formatMoney(SUM(round(cohist_qtyshipped * cohist_unitprice,2))) AS f_extended "
               "FROM cohist, itemsite, item "
               "WHERE ( (cohist_itemsite_id=itemsite_id)"
               " AND (itemsite_item_id=item_id)"
               " AND (cohist_invcdate BETWEEN :startDate AND :endDate)"
               " AND (cohist_cust_id=:cust_id)" );

  if (_warehouse->isSelected())
    sql += " AND (itemsite_warehous_id=:warehous_id)";

  if (_productCategory->isSelected())
    sql += " AND (item_prodcat_id=:prodcat_id)";
  else if (_productCategory->isPattern())
    sql += " AND (item_prodcat_id IN (SELECT prodcat_id FROM prodcat WHERE (prodcat_code ~ :prodcat_pattern)))";

  sql += ") "
         "GROUP BY cohist_ordernumber, cohist_ponumber, cohist_invcnumber,"
         "         cohist_orderdate, cohist_invcdate "
         "ORDER BY cohist_invcdate, cohist_orderdate;";

  q.prepare(sql);
  _dates->bindValue(q);
  q.bindValue(":cust_id", _cust->id());
  _warehouse->bindValue(q);
  _productCategory->bindValue(q);
  q.exec();
  if (q.first())
  {
    double        totalSales = 0.0;

    XTreeWidgetItem *last = 0;
    do
    {
      last = new XTreeWidgetItem( _sohist, last, -1, 
			       q.value("cohist_ordernumber"), q.value("cohist_ponumber"),
			       q.value("cohist_invcnumber"), q.value("f_orderdate"),
			       q.value("f_invcdate"), q.value("f_extended") );

      totalSales += q.value("extended").toDouble();
    }
    while (q.next());

    XTreeWidgetItem *totals = new XTreeWidgetItem(_sohist, last, -1, QVariant(tr("Totals")));
    totals->setText(5, formatMoney(totalSales));
  }
}
示例#7
0
void dspBacklogByItem::sFillList()
{
  _soitem->clear();
  if (_item->isValid())
  {
    MetaSQLQuery mql = mqlLoad(":/so/displays/SalesOrderItems.mql");
    ParameterList params;
    _dates->appendValue(params);
    _warehouse->appendValue(params);
    params.append("item_id", _item->id());
    params.append("openOnly");
    params.append("orderByScheddate");
    q = mql.toQuery(params);

    XTreeWidgetItem *last = 0;
    double totalBacklog = 0.0;
    while (q.next())
    {
      last = new XTreeWidgetItem(_soitem, last,
				 q.value("cohead_id").toInt(),
				 q.value("coitem_id").toInt(),
				 q.value("cohead_number"),
				 q.value("coitem_linenumber"),
				 q.value("cust_name"),
				 formatDate(q.value("cohead_orderdate").toDate()),
				 formatDate(q.value("coitem_scheddate").toDate()),
         q.value("uom_name"),
				 formatQty(q.value("coitem_qtyord").toDouble()),
				 formatQty(q.value("coitem_qtyshipped").toDouble()),
				 formatQty(q.value("qtybalance").toDouble()),
				 formatMoney(q.value("baseextpricebalance").toDouble()) );
      totalBacklog += q.value("baseextpricebalance").toDouble();
    }

    if (_showPrices->isChecked())
    {
      last = new XTreeWidgetItem(_soitem, last, -1, -1,
				 "", "", tr("Total Backlog"), "", "", "", "", "",
				 formatMoney(totalBacklog) );
    }
  }
  else
    _soitem->clear();
}
示例#8
0
void dspInvoiceRegister::sFillList()
{
  display::sFillList();
  list()->expandAll();

  // calculate subtotals and grand total for debit and credit columns and add rows for them
  double debittotal = 0.0;
  double credittotal = 0.0;
  for (int i = 0; i < list()->topLevelItemCount(); i++)
  {
    double debitsum = 0.0;
    double creditsum = 0.0;
    XTreeWidgetItem *item = 0;
    for (int j = 0; j < list()->topLevelItem(i)->childCount(); j++)
    {
      item = list()->topLevelItem(i)->child(j);
//      qDebug("in loop @ %d %p", j, item);
      if (item)
      {
        debitsum += item->rawValue("debit").toDouble();
        creditsum += item->rawValue("credit").toDouble();
        debittotal += item->rawValue("debit").toDouble();
        credittotal += item->rawValue("credit").toDouble();
      }
    }
    if (item)
    {
//      qDebug("adding subtotal %p", item);
      item = new XTreeWidgetItem(list()->topLevelItem(i), -1, -1, tr("Subtotal"));
      item->setData(list()->column("debit"),  Qt::EditRole, formatMoney(debitsum));
      item->setData(list()->column("credit"), Qt::EditRole, formatMoney(creditsum));
    }
  }
  XTreeWidgetItem *item = new XTreeWidgetItem(list(), -1, -1, tr("Total"));
  item->setData(list()->column("debit"),  Qt::EditRole, formatMoney(debittotal));
  item->setData(list()->column("credit"), Qt::EditRole, formatMoney(credittotal));
}
示例#9
0
void dspBookingsByProductCategory::sFillList()
{
  if (!checkParameters())
      return;

  _soitem->clear();
  
  MetaSQLQuery mql = mqlLoad(":/so/displays/SalesOrderItems.mql");
  ParameterList params;
  _dates->appendValue(params);
  _warehouse->appendValue(params);
  _productCategory->appendValue(params);
  params.append("orderByOrderdate");
  q = mql.toQuery(params);

  XTreeWidgetItem *last = 0;
  bool exchangeError = false;
  while (q.next())
  {
    if (q.value("baseunitprice").toDouble() < 0.0)
      exchangeError = true;
    last = new XTreeWidgetItem(_soitem, last,
         q.value("coitem_id").toInt(),
         q.value("cohead_number"),
         formatDate(q.value("cohead_orderdate").toDate()),
         q.value("cust_number"),
         q.value("cust_name"),
         q.value("item_number"),
         formatQty(q.value("coitem_qtyord").toDouble()),
         formatSalesPrice(q.value("baseunitprice").toDouble()),
         formatMoney(q.value("baseextprice").toDouble()) );
  }
  if (exchangeError)
    QMessageBox::warning( this, tr("Currency Exchange Rate Error"),
                          tr("One or more of the Prices could not be converted to Base Currency.\n"
                             "These Prices have been set to a negative value.") );
}
示例#10
0
void dspSummarizedGLTransactions::sFillList()
{
  _gltrans->clear();

  QString sql( "SELECT gltrans_id, accnt_id,"
               "       formatGLAccount(accnt_id) AS account,"
               "       accnt_descrip,"
               "       formatDate(gltrans_date) AS transdate,"
               "       gltrans_source, gltrans_doctype, gltrans_docnumber,"
               "       firstLine(gltrans_notes) AS f_notes,"
               "       CASE WHEN (gltrans_amount < 0) THEN (gltrans_amount * -1)"
               "            ELSE 0"
               "       END AS debit,"
               "       CASE WHEN (gltrans_amount > 0) THEN gltrans_amount"
               "            ELSE 0"
               "       END AS credit,"
               "       gltrans_username "
               "FROM gltrans, accnt "
               "WHERE ( (gltrans_accnt_id=accnt_id)"
               " AND (gltrans_date BETWEEN :startDate AND :endDate) ");

  if (_selectedSource->isChecked())
    sql += " AND (gltrans_source=:source)";

  if (_unpostedTransactions->isChecked())
    sql += " AND (NOT gltrans_posted)";
  else if (_postedTransactions->isChecked())
    sql += " AND (gltrans_posted)";

  sql += ") "
         "ORDER BY accnt_id, gltrans_date, gltrans_created;";

  q.prepare(sql);
  _dates->bindValue(q);
  q.bindValue(":source", _source->currentText());
  q.exec();
  if (q.first())
  {
    XListViewItem *header = NULL;
    int           accntid = -1;
    double        debits  = 0.0;
    double        credits = 0.0;
    do
    {
      if (accntid != q.value("accnt_id").toInt())
      {
        if (header)
        {
          if (debits > 0)
          {
            header->setText(5, formatMoney(debits));
            debits = 0;
          }

          if (credits > 0)
          {
            header->setText(6, formatMoney(credits));
            credits = 0;
          }
        }

        accntid = q.value("accnt_id").toInt();
        header = new XListViewItem( _gltrans, _gltrans->lastItem(), accntid, 
                                    q.value("account"), q.value("accnt_descrip") );
      }

      XListViewItem *item = new XListViewItem( header,
                                               accntid, q.value("gltrans_id").toInt(),
                                               q.value("transdate"), q.value("f_notes"),
                                               q.value("gltrans_source"), q.value("gltrans_doctype"),
                                               q.value("gltrans_docnumber"), "", "",
                                               q.value("gltrans_username") );
       if (q.value("debit") != 0.0)
       {
         debits += q.value("debit").toDouble();
         item->setText(5, formatMoney(q.value("debit").toDouble()));
       }

       if (q.value("credit") != 0.0)
       {
         credits += q.value("credit").toDouble();
         item->setText(6, formatMoney(q.value("credit").toDouble()));
       }
    }
    while (q.next());

    if (header)
    {
      if (debits > 0)
        header->setText(5, formatMoney(debits));

      if (credits > 0)
        header->setText(6, formatMoney(credits));
    }

  }
}
示例#11
0
void dspSalesHistoryByCustomer::sFillList()
{
  _sohist->clear();

  if (!checkParameters())
    return;

  QString sql( "SELECT cohist_id,"
               "       cohist_ordernumber, cohist_invcnumber,"
               "       formatDate(cohist_orderdate) AS f_orderdate,"
               "       formatDate(cohist_invcdate, 'Return') AS f_invcdate,"
               "       item_number, (item_descrip1 || ' ' || item_descrip2) AS description,"
               "       formatQty(cohist_qtyshipped) AS f_shipped " );

  sql += ", formatSalesPrice(cohist_unitprice) AS f_unitprice,"
	 "  round((cohist_qtyshipped * cohist_unitprice),2) AS extprice,"
	 "  formatMoney(round(cohist_qtyshipped * cohist_unitprice,2)) AS f_extprice ";

  sql += ", formatSalesPrice(cohist_unitcost) AS f_unitcost,"
	 "  (cohist_qtyshipped * cohist_unitcost) AS extcost,"
	 "  formatMoney(cohist_qtyshipped * cohist_unitcost) AS f_extcost ";

  sql += "FROM cohist, itemsite, item, prodcat "
         "WHERE ( (cohist_itemsite_id=itemsite_id)"
         " AND (itemsite_item_id=item_id)"
         " AND (item_prodcat_id=prodcat_id)"
         " AND (cohist_invcdate BETWEEN :startDate AND :endDate)"
         " AND (cohist_cust_id=:cust_id)";

  if (_warehouse->isSelected())
    sql += " AND (itemsite_warehous_id=:warehous_id)";

  if (_productCategory->isSelected())
    sql += " AND (prodcat_id=:prodcat_id)";
  else if (_productCategory->isPattern())
    sql += " AND (prodcat_code ~ :prodcat_pattern)";

  sql += " ) "
         "ORDER BY cohist_invcdate, item_number;";

  q.prepare(sql);
  _warehouse->bindValue(q);
  _productCategory->bindValue(q);
  _dates->bindValue(q);
  q.bindValue(":cust_id", _cust->id());
  q.exec();
  XTreeWidgetItem *last = 0;
  if (q.first())
  {
    double totalSales = 0.0;
    double totalCosts = 0.0;

    do
    {
      last = new XTreeWidgetItem( _sohist, last,
				 q.value("cohist_id").toInt(),
				 q.value("cohist_invcnumber").toInt(),
				 q.value("cohist_ordernumber"),
				 q.value("cohist_invcnumber"),
				 q.value("f_orderdate"),
				 q.value("f_invcdate"),
				 q.value("item_number"),
				 q.value("description"),
				 q.value("f_shipped"),
				 q.value("f_unitprice"),
				 q.value("f_extprice"),
				 q.value("f_unitcost"),
				 q.value("f_extcost"));
 
        totalSales += q.value("extprice").toDouble();
        totalCosts += q.value("extcost").toDouble();
    }
    while (q.next());

    if ( (_showPrices->isChecked()) || (_showCosts->isChecked()) )
    {
      XTreeWidgetItem *totals = new XTreeWidgetItem(_sohist, last, -1);
      totals->setText(5, tr("Total"));
      totals->setText(EXTPRICE_COL, formatMoney(totalSales));
      totals->setText(EXTCOST_COL, formatCost(totalCosts));
    }
  }
}
示例#12
0
const QString PivotCell::formatMoney(int fraction, bool showThousandSeparator) const
{
  return formatMoney("", MyMoneyMoney::denomToPrec(fraction), showThousandSeparator);
}
示例#13
0
void dspQOHByParameterList::sFillList()
{
  int itemsiteid = _qoh->id();

  _qoh->clear();
  
  QString sql( "SELECT itemsite_id, detail,"
               "       warehous_code, classcode_code, item_number, uom_name,"
               "       (item_descrip1 || ' ' || item_descrip2) AS itemdescrip,"
               "       defaultlocation,"
               "       formatQty(reorderlevel) AS f_reorderlevel,"
               "       formatQty(qoh) AS f_qoh,"
               "       formatQty(nnqoh) AS f_nnqoh,"
               "       formatCost(cost) AS f_cost,"
               "       formatMoney(noNeg(cost * qoh)) AS f_value,"
               "       formatMoney(noNeg(cost * nnqoh)) AS f_nnvalue,"
               "       cost, reorderlevel, qoh, nnqoh "
               "FROM ( SELECT itemsite_id,"
               "              ( (itemsite_loccntrl) OR (itemsite_controlmethod IN ('L', 'S')) ) AS detail,"
               "              warehous_code, classcode_code, item_number, uom_name, item_descrip1, item_descrip2,"
               "              CASE WHEN (NOT useDefaultLocation(itemsite_id)) THEN :none"
               "                   ELSE defaultLocationName(itemsite_id)"
               "              END AS defaultlocation,"
               "              CASE WHEN (itemsite_useparams) THEN itemsite_reorderlevel ELSE 0.0 END AS reorderlevel,"
               "              itemsite_qtyonhand AS qoh,"
               "              itemsite_nnqoh AS nnqoh," );

  if (_useStandardCosts->isChecked())
    sql += " stdcost(item_id) AS cost ";
  else if (_useActualCosts->isChecked())
    sql += " actcost(item_id) AS cost ";

  sql += "FROM itemsite, item, classcode, warehous, uom "
         "WHERE ( (itemsite_item_id=item_id)"
         " AND (item_inv_uom_id=uom_id)"
         " AND (item_classcode_id=classcode_id)"
         " AND (itemsite_warehous_id=warehous_id)"
         " AND (itemsite_active)";

  if (_warehouse->isSelected())
    sql += " AND (itemsite_warehous_id=:warehous_id)";

  if (_parameter->isSelected())
  {
    if (_parameter->type() == ClassCode)
      sql += " AND (classcode_id=:classcode_id)";
    else if (_parameter->type() == ItemGroup)
      sql += " AND (item_id IN (SELECT itemgrpitem_item_id FROM itemgrpitem WHERE (itemgrpitem_itemgrp_id=:itemgrp_id)))";
  }
  else if (_parameter->isPattern())
  {
    if (_parameter->type() == ClassCode)
      sql += " AND (classcode_id IN (SELECT classcode_id FROM classcode WHERE classcode_code ~ :classcode_pattern))";
    else if (_parameter->type() == ItemGroup)
      sql += " AND (item_id IN (SELECT itemgrpitem_item_id FROM itemgrpitem, itemgrp WHERE ( (itemgrpitem_itemgrp_id=itemgrp_id) AND (itemgrp_name ~ :itemgrp_pattern) ) ))";
  }
  else if(_parameter->type() == ItemGroup)
    sql += " AND (item_id IN (SELECT DISTINCT itemgrpitem_item_id FROM itemgrpitem))";

  if (_showPositive->isChecked())
    sql += " AND (itemsite_qtyonhand>0)";
  else if (_showNegative->isChecked())
    sql += " AND (itemsite_qtyonhand<0)";

  sql += ") ) AS data "
         "ORDER BY warehous_code";

  if (_byItemNumber->isChecked())
    sql += ", item_number;";
  else
    sql += ", noNeg(cost * qoh) DESC;";

  q.prepare(sql);
  q.bindValue(":none", tr("None"));
  q.bindValue(":na", tr("N/A"));
  _warehouse->bindValue(q);
  _parameter->bindValue(q);
  q.exec();
  if (q.first())
  {
    XTreeWidgetItem *selected     = 0;
    XTreeWidgetItem *last         = 0;
    double        netable         = 0.0;
    double        netableValue    = 0.0;
    double        nonNetable      = 0.0;
    double        nonNetableValue = 0.0;

    do
    {
      last = new XTreeWidgetItem( _qoh, last, q.value("itemsite_id").toInt(), q.value("detail").toInt(),
                                  q.value("warehous_code"), q.value("classcode_code"), q.value("item_number"),
                                  q.value("itemdescrip"), q.value("uom_name"),
                                  q.value("defaultlocation"), q.value("f_reorderlevel"),
                                  q.value("f_qoh"), q.value("f_nnqoh") );

      last->setText(9, q.value("f_cost").toString());
      last->setText(10, q.value("f_value").toString());
      last->setText(11, q.value("f_nnvalue").toString());

      if (q.value("qoh").toDouble() < 0) 
        last->setTextColor(7, "red");
      else if (q.value("reorderlevel").toDouble() > q.value("qoh").toDouble())
        last->setTextColor(7, "orange");

      if (q.value("itemsite_id") == itemsiteid)
        selected = last;

      if (q.value("qoh").toDouble() > 0.0)
      {
        netable += q.value("qoh").toDouble();
        netableValue += (q.value("cost").toDouble() * q.value("qoh").toDouble());
      }

      if (q.value("nnqoh").toDouble() > 0.0)
      {
        nonNetable += q.value("nnqoh").toDouble();
        nonNetableValue += (q.value("cost").toDouble() * q.value("nnqoh").toDouble());
      }
    }
    while (q.next());

    XTreeWidgetItem *totals = new XTreeWidgetItem(_qoh, last, -1, 0, tr("Totals"));
    totals->setText(7, formatQty(netable));
    totals->setText(8, formatQty(nonNetable));

    totals->setText(10, formatMoney(netableValue));
    totals->setText(11, formatMoney(nonNetableValue));

    if (selected != NULL)
    {
      _qoh->setCurrentItem(selected);
      _qoh->scrollTo(_qoh->currentIndex());
    }
  }
}
示例#14
0
void dspSalesHistoryByShipTo::sFillList()
{
  if (!checkParameters())
    return;

  _sohist->clear();
  
  MetaSQLQuery mql = mqlLoad(":/so/displays/SalesHistory.mql");
  ParameterList params;
  _dates->appendValue(params);
  _warehouse->appendValue(params);
  _productCategory->appendValue(params);
  params.append("shipto_id", _shipTo->id());
  params.append("orderByInvcdateItem");
  q = mql.toQuery(params);

  if (q.first())
  {
    double totalUnits = 0.0;
    double totalSales = 0.0;
    double totalCosts = 0.0;
    bool exchangeError = false;
    XTreeWidgetItem *last = 0;

    do
    {
      if (q.value("baseunitprice").toDouble() < 0.0)
        exchangeError = true;
      QString invoicedate = tr("Return");
      if (q.value("cohist_invcdate").toString() != "")
        invoicedate = formatDate(q.value("cohist_invcdate").toDate());
        
      last = new XTreeWidgetItem( _sohist, last, q.value("cohist_id").toInt(),
				 q.value("cohist_ordernumber"),
				 q.value("invoicenumber"),
				 formatDate(q.value("cohist_orderdate").toDate()),
				 invoicedate,
				 q.value("item_number"),
				 q.value("itemdescription"),
				 formatQty(q.value("cohist_qtyshipped").toDouble()),
				 formatSalesPrice(q.value("baseunitprice").toDouble()),
				 formatMoney(q.value("baseextprice").toDouble()),
				 formatCost(q.value("cohist_unitcost").toDouble()),
				 formatMoney(q.value("extcost").toDouble()) );
 
      totalUnits += q.value("cohist_qtyshipped").toDouble();
      totalSales += q.value("baseextprice").toDouble();
      totalCosts += q.value("extcost").toDouble();
    }
    while (q.next());

    XTreeWidgetItem *totals = new XTreeWidgetItem(_sohist, last, -1);
    totals->setText(5, tr("Totals"));
    totals->setText(6, formatQty(totalUnits));
    totals->setText(EXTPRICE_COL, formatMoney(totalSales));
    totals->setText(EXTCOST_COL, formatCost(totalCosts));

    if ( (exchangeError) && (_showPrices->isChecked()) )
      QMessageBox::warning( this, tr("Currency Exchange Rate Error"),
                            tr("One or more of the Prices could not be converted to Base Currency.\n"
                               "These Prices have been set to a negative value.") );
  }
}
示例#15
0
void dspSummarizedSalesByCustomerTypeByItem::sFillList()
{
    _sohist->clear();

    if (!checkParameters())
        return;

    QString sql( "SELECT itemsite_id, item_number, item_descrip, warehous_code,"
                 "       formatSalesPrice(minprice) AS f_minprice,"
                 "       formatSalesPrice(maxprice) AS f_maxprice,"
                 "       formatSalesPrice(avgprice) AS f_avgprice,"
                 "       formatQty(totalunits) AS f_totalunits,"
                 "       totalsales, formatMoney(totalsales) AS f_totalsales "
                 "FROM ( SELECT itemsite_id, item_number, (item_descrip1 || ' ' || item_descrip2) AS item_descrip,"
                 "              warehous_code, MIN(cohist_unitprice) AS minprice, MAX(cohist_unitprice) AS maxprice,"
                 "              AVG(cohist_unitprice) AS avgprice, SUM(cohist_qtyshipped) AS totalunits,"
                 "              SUM(round(cohist_qtyshipped * cohist_unitprice,2)) AS totalsales "
                 "       FROM cohist, cust, custtype, itemsite, item, warehous "
                 "       WHERE ( (cohist_cust_id=cust_id)"
                 "        AND (cust_custtype_id=custtype_id)"
                 "        AND (cohist_itemsite_id=itemsite_id)"
                 "        AND (itemsite_item_id=item_id)"
                 "        AND (itemsite_warehous_id=warehous_id)"
                 "        AND (cohist_invcdate BETWEEN :startDate AND :endDate)" );

    if (_warehouse->isSelected())
        sql += " AND (itemsite_warehous_id=:warehous_id)";

    if (_customerType->isSelected())
        sql += " AND (custtype_id=:custtype_id)";
    else if (_customerType->isPattern())
        sql += " AND (custtype_code ~ :custtype_pattern)";

    sql += ") "
           "GROUP BY itemsite_id, item_number, item_descrip1, item_descrip2, warehous_code ) AS data "
           "ORDER BY item_number, warehous_code;";

    q.prepare(sql);
    _warehouse->bindValue(q);
    _customerType->bindValue(q);
    _dates->bindValue(q);
    q.exec();
    if (q.first())
    {
        double totalSales = 0.0;
        XTreeWidgetItem *last = 0;

        do
        {
            last = new XTreeWidgetItem(_sohist, last, q.value("itemsite_id").toInt(),
                                       q.value("item_number"),
                                       q.value("item_descrip"),
                                       q.value("warehous_code"),
                                       q.value("f_minprice"),
                                       q.value("f_maxprice"),
                                       q.value("f_avgprice"),
                                       q.value("f_totalunits"),
                                       q.value("f_totalsales") );

            totalSales += q.value("totalsales").toDouble();
        }
        while (q.next());

        new XTreeWidgetItem( _sohist, last, -1,
                             "", tr("Totals"), "", "", "", "", "",
                             formatMoney(totalSales) );

        _sohist->setDragString("itemsiteid=");
    }
}
示例#16
0
void dspPlannedRevenueExpensesByPlannerCode::sFillList()
{
  _planord->clear();

  ParameterList params;
  setParams(params);

  QString sql( "SELECT planord_id, planord_itemsite_id,"
               "       plonumber, plotype, item_number, itemdescrip,"
               "       formatDate(planord_duedate) AS duedate,"
	       "       formatQty(planord_qty) AS qty,"
               "       plofirm,"
               "       formatMoney(plocost) AS cost,"
	       "       formatMoney(plorevenue) AS revenue,"
               "       formatMoney(plorevenue - plocost) AS profit,"
               "       plocost, plorevenue "
               "FROM ( SELECT planord_id, planord_itemsite_id, planord_duedate,"
               "       formatPloNumber(planord_id) AS plonumber,"
               "       CASE WHEN (planord_type='P') THEN 'P/O'"
               "            WHEN (planord_type='W') THEN 'W/O'"
               "            ELSE '?'"
               "       END AS plotype,"
               "       item_number,"
	       "       (item_descrip1 || ' ' || item_descrip2) AS itemdescrip,"
               "       formatDate(planord_duedate),"
               "       planord_qty, formatBoolYN(planord_firm) AS plofirm,"
	       "<? if exists(\"useActualCost\") ?>"
	       "       (actcost(item_id) * planord_qty)"
	       "<? elseif exists(\"useStandardCost\") ?>"
	       "       (stdcost(item_id) * planord_qty)"
	       "<? endif ?> AS plocost,"
	       "<? if exists(\"useListPrice\") ?>"
	       "       (item_listprice * planord_qty) "
	       "<? elseif exists(\"useAveragePrice\") ?>"
	       "       (CASE WHEN(averageSalesPrice(itemsite_id,"
	       "                               <? value(\"startEvalDate\") ?>,"
	       "                               <? value(\"endEvalDate\") ?>)=0)"
	       "                               THEN item_listprice"
	       "             ELSE averageSalesPrice(itemsite_id,"
	       "                               <? value(\"startEvalDate\") ?>,"
	       "                               <? value(\"endEvalDate\") ?>)"
	       "             END * planord_qty)"
	       "<? endif ?> AS plorevenue "
	       "FROM planord, itemsite, item "
	       "WHERE ((planord_itemsite_id=itemsite_id)"
	       " AND (itemsite_item_id=item_id)"
	       " AND (item_sold)"
	       " AND (planord_duedate BETWEEN <? value(\"startDate\") ?>"
	       "			  AND <? value(\"endDate\") ?>)"
	       "<? if exists(\"plancode_id\") ?>"
	       " AND (itemsite_plancode_id=<? value(\"plancode_id\") ?>)"
	       "<? elseif exists(\"plancode_pattern\") ?>"
	       " AND (itemsite_plancode_id IN (SELECT plancode_id"
	       "      FROM plancode"
	       "      WHERE (plancode_code ~ <? value(\"plancode_pattern\") ?>)))"
	       "<? endif ?>"
	       "<? if exists(\"warehous_id\") ?>"
	       " AND (itemsite_warehous_id=<? value(\"warehous_id\") ?>)"
	       "<? endif ?>"
	       ") ) AS data "
	       "ORDER BY planord_duedate, item_number;" );

  MetaSQLQuery mql(sql);
  q = mql.toQuery(params);

  XTreeWidgetItem *last = NULL;
  double        cost = 0;
  double        revenue = 0;
  
  while (q.next())
  {
    last = new XTreeWidgetItem( _planord, last, q.value("planord_id").toInt(), q.value("planord_itemsite_id").toInt(),
                              q.value("plonumber"), q.value("plotype"),
                              q.value("item_number"), q.value("itemdescrip"),
                              q.value("duedate"), q.value("qty"),
                              q.value("plofirm"), q.value("cost"),
                              q.value("revenue"), q.value("profit") );

    cost += q.value("plocost").toDouble();
    revenue += q.value("plorevenue").toDouble();

    if (q.value("plocost").toDouble() > q.value("plorevenue").toDouble())
      last->setTextColor(9, "red");
  }
  if (q.lastError().type() != QSqlError::None)
  {
    systemError(this, q.lastError().databaseText(), __FILE__, __LINE__);
    return;
  }

  last = new XTreeWidgetItem(_planord, last, -1, -1, tr("Totals:"));
  last->setText(7, formatMoney(cost));
  last->setText(8, formatMoney(revenue));
  last->setText(9, formatMoney(revenue - cost));

  if (cost > revenue)
    last->setTextColor(9, "red");
}
示例#17
0
void dspTimePhasedOpenAPItems::sFillCustom()
{
  if (!_periods->isPeriodSelected())
  {
    if (isVisible())
      QMessageBox::warning( this, tr("Select Calendar Periods"),
                            tr("Please select one or more Calendar Periods") );
    return;
  }

  _columnDates.clear();
  _apopen->clear();
  _apopen->setColumnCount(2);

  QString sql("SELECT vend_id, vend_number, vend_name");

  int columns = 1;
  QList<QTreeWidgetItem*> selected = _periods->selectedItems();
  for (int i = 0; i < selected.size(); i++)
  {
    PeriodListViewItem *cursor = (PeriodListViewItem*)selected[i];
    sql += QString(", openAPItemsValue(vend_id, %2) AS bucket%1")
          .arg(columns++)
          .arg(cursor->id());

    _apopen->addColumn(formatDate(cursor->startDate()), _bigMoneyColumn, Qt::AlignRight);
    _columnDates.append(DatePair(cursor->startDate(), cursor->endDate()));
  }

  sql += " FROM vend ";

  if (_selectedVendor->isChecked())
    sql += "WHERE (vend_id=:vend_id)";
  else if (_selectedVendorType->isChecked())
    sql += "WHERE (vend_vendtype_id=:vendtype_id)";
  else if (_vendorTypePattern->isChecked())
    sql += "WHERE (vend_vendtype_id IN (SELECT vendtype_id FROM vendtype WHERE (vendtype_code ~ :vendtype_code))) ";

  sql += "ORDER BY vend_number;";

  q.prepare(sql);
  q.bindValue(":vend_id", _vend->id());
  q.bindValue(":vendtype_id", _vendorTypes->id());
  q.bindValue(":vendtype_code", _vendorType->text().upper());
  q.exec();
  if (q.first())
  {
    Q3ValueVector<Numeric> totals(columns);;
    XTreeWidgetItem *last = 0;

    do
    {
      double lineTotal = 0.0;

      last = new XTreeWidgetItem( _apopen, last, q.value("vend_id").toInt(),
                                 q.value("vend_number"), q.value("vend_name") );

      for (int column = 1; column < columns; column++)
      {
        QString bucketName = QString("bucket%1").arg(column);
        last->setText((column + 1), formatMoney(q.value(bucketName).toDouble()));
        totals[column] += q.value(bucketName).toDouble();
        lineTotal += q.value(bucketName).toDouble();
      }

      if (lineTotal == 0.0)
      {
        delete last;
        last = _apopen->topLevelItem(_apopen->topLevelItemCount() - 1);
      }
    }
    while (q.next());

//  Add the totals row
    XTreeWidgetItem *total = new XTreeWidgetItem(_apopen, last, -1, QVariant(tr("Totals:")));
    for (int column = 1; column < columns; column++)
      total->setText((column + 1), formatMoney(totals[column].toDouble()));
  }
}
示例#18
0
void dspSummarizedSalesByItem::sFillList()
{
  if (!checkParameters())
    return;

  QString sql( "SELECT item_id, item_number,"
               "       (item_descrip1 || ' ' || item_descrip2) AS itemdescription,"
               "       formatDate(MIN(cohist_invcdate)) AS f_firstdate,"
               "       formatDate(MAX(cohist_invcdate)) AS f_lastdate,"
               "       formatQty(SUM(cohist_qtyshipped)) AS f_totalunits,"
               "       formatMoney(SUM(round(cohist_qtyshipped * cohist_unitprice,2))) AS f_totalsales,"
               "       SUM(round(cohist_qtyshipped * cohist_unitprice,2)) AS totalsales "
               "FROM cohist, cust, item, itemsite "
               "WHERE ( (cohist_cust_id=cust_id)"
               " AND (cohist_itemsite_id=itemsite_id)"
               " AND (itemsite_item_id=item_id)"
               " AND (cohist_invcdate BETWEEN :startDate AND :endDate)" );

  if (_productCategory->isSelected())
    sql += " AND (item_prodcat_id=:prodcat_id)";
  else if (_productCategory->isPattern())
    sql += " AND (item_prodcat_id IN (SELECT prodcat_id FROM prodcat WHERE (prodcat_code ~ :prodcat_pattern)))";

  if (_customerType->isSelected())
    sql += " AND (cust_custtype_id=:custtype_id)";
  else if (_customerType->isPattern())
    sql += " AND (cust_custtype_id IN (SELECT custtype_id FROM custtype WHERE (custtype_code ~ :custtype_pattern)))";

  if (_warehouse->isSelected())
    sql += " AND (itemsite_warehous_id=:warehous_id)";

  sql += ") "
         "GROUP BY item_id, item_number, item_descrip1, item_descrip2 ";

  if (_orderByItemNumber->isChecked())
    sql += "ORDER BY item_number;";
  else if (_orderByQtyVolume->isChecked())
    sql += "ORDER BY SUM(cohist_qtyshipped) DESC;";
  else if (_orderBySalesVolume->isChecked())
    sql += "ORDER BY SUM(cohist_qtyshipped * cohist_unitprice) DESC;";

  q.prepare(sql);
  _warehouse->bindValue(q);
  _customerType->bindValue(q);
  _productCategory->bindValue(q);
  _dates->bindValue(q);
  q.exec();
  _sohist->populate(q);

  if (q.first())
  {
    double totalSales = 0.0;

    do
      totalSales += q.value("totalsales").toDouble();
    while (q.next());

    new XListViewItem( _sohist, _sohist->lastItem(), -1,
                       QVariant(tr("Totals")), "", "", "", "", 
                       formatMoney(totalSales) );
  }

}
示例#19
0
void dspInvoiceRegister::sFillList()
{
  _gltrans->clear();

  QString sql( "SELECT gltrans_id, formatDate(gltrans_date) AS f_date, gltrans_source,"
               "       CASE WHEN(gltrans_doctype='IN') THEN 1"
               "            WHEN(gltrans_doctype='CM') THEN 2"
               "            WHEN(gltrans_doctype='DM') THEN 3"
               "            WHEN(gltrans_doctype='CD') THEN 4"
               "            ELSE -1"
               "       END AS altId,"
               "       CASE WHEN(gltrans_doctype='IN') THEN :invoice"
               "            WHEN(gltrans_doctype='CM') THEN :creditmemo"
               "            WHEN(gltrans_doctype='DM') THEN :debitmemo"
               "            WHEN(gltrans_doctype='CD') THEN :cashdeposit"
               "            ELSE gltrans_doctype"
               "       END AS doctype,"
               "       gltrans_docnumber,"
               "       CASE WHEN(gltrans_doctype='IN') THEN"
               "                (SELECT invchead_shipto_name"
               "                   FROM aropen LEFT OUTER JOIN"
               "                        invchead"
               "                          ON (invchead_id=aropen_cobmisc_id"
               "                          AND invchead_cust_id=aropen_cust_id)"
               "                  WHERE ((aropen_docnumber=gltrans_docnumber)"
               "                    AND  (aropen_doctype='I')))"
               "            ELSE firstLine(gltrans_notes)"
               "       END AS f_notes,"
               "       (formatGLAccount(accnt_id) || ' - ' || accnt_descrip) AS f_accnt,"
               "       CASE WHEN (gltrans_amount < 0) THEN formatMoney(ABS(gltrans_amount))"
               "            ELSE ''"
               "       END AS f_debit,"
               "       CASE WHEN (gltrans_amount < 0) THEN ABS(gltrans_amount)"
               "            ELSE 0"
               "       END AS debit,"
               "       CASE WHEN (gltrans_amount > 0) THEN formatMoney(gltrans_amount)"
               "            ELSE ''"
               "       END AS f_credit,"
               "       CASE WHEN (gltrans_amount > 0) THEN gltrans_amount"
               "            ELSE 0"
               "       END AS credit "
               "FROM gltrans, accnt "
               "WHERE ((gltrans_accnt_id=accnt_id)"
               " AND (gltrans_doctype IN ('IN', 'CM', 'DM', 'CD'))"
               " AND (gltrans_source = 'A/R')"
               " AND (gltrans_date BETWEEN :startDate AND :endDate)" );

  if (_selectedAccount->isChecked())
    sql += " AND (gltrans_accnt_id=:accnt_id)";

  sql += ") "
         "ORDER BY gltrans_date, gltrans_docnumber;";

  q.prepare(sql);
  _dates->bindValue(q);
  q.bindValue(":accnt_id", _account->id());
  q.bindValue(":invoice", tr("Invoice"));
  q.bindValue(":creditmemo", tr("Credit Memo"));
  q.bindValue(":debitmemo", tr("Debit Memo"));
  q.bindValue(":cashdeposit", tr("Customer Deposit"));
  q.exec();

  XTreeWidgetItem * parent = 0;
  XTreeWidgetItem * last = 0;
  QString date;
  double debit = 0.0, credit = 0.0;
  double totdebit = 0.0, totcredit = 0.0;
  while(q.next())
  {
    if(0 == parent || date != q.value("f_date").toString())
    {
      if(parent)
      {
        last = new XTreeWidgetItem(parent, last, -2, -2, QVariant(""), "", "", tr("Subtotal"), "", "", formatMoney(debit), formatMoney(credit));
        parent->setExpanded(TRUE);
      }

      date = q.value("f_date").toString();
      parent = new XTreeWidgetItem(_gltrans, parent, -1, -2, QVariant(date));
      last = 0;
      debit = 0.0;
      credit = 0.0;
    }

    last = new XTreeWidgetItem(parent, last, q.value("gltrans_id").toInt(),
                               q.value("altId").toInt(),
                               QVariant(""), q.value("gltrans_source"), q.value("doctype"),
                               q.value("gltrans_docnumber"), q.value("f_notes"), q.value("f_accnt"),
                               q.value("f_debit"), q.value("f_credit"));

    debit += q.value("debit").toDouble();
    totdebit += q.value("debit").toDouble();
    credit += q.value("credit").toDouble();
    totcredit += q.value("credit").toDouble();
  }

  if (q.lastError().type() != QSqlError::None)
  {
    systemError(this, q.lastError().databaseText(), __FILE__, __LINE__);
    return;
  }

  if(parent)
  {
    last = new XTreeWidgetItem(parent, last, -2, -2, QVariant(""), "", "", tr("Subtotal"), "", "", formatMoney(debit), formatMoney(credit));
    parent->setExpanded(TRUE);
  }

  last = new XTreeWidgetItem(_gltrans, parent, -3, -2, QVariant(""), "", "", tr("Total"), "", "", formatMoney(totdebit), formatMoney(totcredit));
}
示例#20
0
void dspAROpenItems::sFillList()
{
  _aropen->clear();

  q.prepare( "SELECT aropen_id, aropen_docnumber, aropen_ordernumber,"
             "       CASE WHEN (aropen_doctype='C') THEN :creditMemo"
             "            WHEN (aropen_doctype='D') THEN :debitMemo"
             "            WHEN (aropen_doctype='I') THEN :invoice"
             "            WHEN (aropen_doctype='R') THEN :cashdeposit"
             "            ELSE :other"
             "       END AS f_doctype,"
             "       formatDate(aropen_docdate) AS f_docdate,"
             "       formatDate(aropen_duedate) AS f_duedate,"
             "       formatMoney(aropen_amount) AS f_amount,"
             "       formatMoney(aropen_paid) AS f_paid,"
             "       CASE WHEN (aropen_doctype IN ('C', 'R')) THEN ((aropen_amount - aropen_paid) * -1)"
             "            WHEN (aropen_doctype IN ('I', 'D')) THEN (aropen_amount - aropen_paid)"
             "            ELSE (aropen_amount - aropen_paid)"
             "       END AS f_balance,"
             "       currConcat(aropen_curr_id) AS currAbbr,"
             "       currToBase(aropen_curr_id,"
             "            CASE WHEN (aropen_doctype IN ('C', 'R')) THEN ((aropen_amount - aropen_paid) * -1)"
             "                 WHEN (aropen_doctype IN ('I', 'D')) THEN (aropen_amount - aropen_paid)"
             "                 ELSE (aropen_amount - aropen_paid)"
             "            END, CURRENT_DATE) AS base_balance,"
	     "        cust_id, cust_number, cust_name "
             "FROM aropen LEFT OUTER JOIN custinfo ON (aropen_cust_id=cust_id) "
             "WHERE ( (aropen_open)"
             " AND (aropen_duedate BETWEEN :startDate AND :endDate) ) "
             "ORDER BY aropen_docnumber;" );
  _dates->bindValue(q);
  q.bindValue(":creditMemo", tr("C/M"));
  q.bindValue(":debitMemo", tr("D/M"));
  q.bindValue(":invoice", tr("Invoice"));
  q.bindValue(":cashdeposit", tr("C/D"));
  q.exec();

  XTreeWidgetItem * last = 0;
  double total= 0.0;
  while (q.next())
  {
    last = new XTreeWidgetItem( _aropen, last, q.value("aropen_id").toInt(),
				q.value("cust_id").toInt(),
				q.value("f_doctype"),
				q.value("aropen_docnumber"),
				q.value("cust_number"), q.value("cust_name"),
				q.value("aropen_ordernumber"),
				q.value("f_docdate"),
				q.value("f_duedate"), q.value("f_amount"),
				q.value("f_paid"),
				q.value("f_balance"), q.value("currAbbr") );

    total += q.value("base_balance").toDouble();
  }
  if (q.lastError().type() != QSqlError::None)
  {
    systemError(this, q.lastError().databaseText(), __FILE__, __LINE__);
    return;
  }

  new XTreeWidgetItem( _aropen, last, -1,
		       QVariant(tr("Total")), "", "", "", "", "", "", "", "",
		       formatMoney(total), CurrDisplay::baseCurrAbbr() );
}
示例#21
0
void dspBacklogByItem::sFillList()
{
  _soitem->clear();
  if (_item->isValid())
  {
    QString sql( "SELECT cohead_id, coitem_id, cohead_number, coitem_linenumber, cust_name, "
                 "       formatDate(cohead_orderdate) AS f_orderdate,"
                 "       formatDate(coitem_scheddate) AS f_scheddate,"
                 "       uom_name,"
                 "       formatQty(coitem_qtyord) AS f_qtyord,"
                 "       formatQty(coitem_qtyshipped) AS f_qtyshipped,"
                 "       formatQty(noNeg(coitem_qtyord - coitem_qtyshipped + coitem_qtyreturned)) AS f_balance,"
                 "       formatMoney(round((noNeg(coitem_qtyord - coitem_qtyshipped + coitem_qtyreturned) * coitem_qty_invuomratio) * (coitem_price / coitem_price_invuomratio),2)) AS f_amount,"
                 "       round((noNeg(coitem_qtyord - coitem_qtyshipped + coitem_qtyreturned) * coitem_qty_invuomratio) * (coitem_price / coitem_price_invuomratio),2) AS backlog "
                 "FROM cohead, coitem, cust, itemsite, item, uom "
                 "WHERE ( (coitem_cohead_id=cohead_id)"
                 " AND (cohead_cust_id=cust_id)"
                 " AND (coitem_status NOT IN ('C','X'))"
                 " AND (coitem_itemsite_id=itemsite_id)"
                 " AND (coitem_qty_uom_id=uom_id)"
                 " AND (itemsite_item_id=item_id)"
                 " AND (itemsite_item_id=:item_id)"
                 " AND (coitem_scheddate BETWEEN :startDate AND :endDate)" );

    if (_warehouse->isSelected())
      sql += " AND (itemsite_warehous_id=:warehous_id)";

    sql += ") "
           "ORDER BY coitem_scheddate";

    q.prepare(sql);
    _warehouse->bindValue(q);
    _dates->bindValue(q);
    q.bindValue(":item_id", _item->id());
    q.exec();
    XTreeWidgetItem *last = 0;
    double totalBacklog = 0.0;
    while (q.next())
    {
      last = new XTreeWidgetItem(_soitem, last,
				 q.value("cohead_id").toInt(),
				 q.value("coitem_id").toInt(),
				 q.value("cohead_number"),
				 q.value("coitem_linenumber"),
				 q.value("cust_name"),
				 q.value("f_orderdate"),
				 q.value("f_scheddate"),
                                 q.value("uom_name"),
				 q.value("f_qtyord"),
				 q.value("f_qtyshipped"),
				 q.value("f_balance"),
				 q.value("f_amount"));
      totalBacklog += q.value("backlog").toDouble();
    }

    if (_showPrices->isChecked())
    {
      last = new XTreeWidgetItem(_soitem, last, -1, -1,
				 "", "", tr("Total Backlog"), "", "", "", "", "",
				 formatMoney(totalBacklog) );
    }
  }
  else
    _soitem->clear();
}
示例#22
0
void dspSalesHistoryByBilltoName::sFillList()
{
  _sohist->clear();

  if (!checkParameters())
    return;

  QString sql( "SELECT cohist_id, cohist_billtoname,"
               "       cohist_ordernumber, cohist_invcnumber,"
               "       formatDate(cohist_orderdate) AS f_orderdate,"
               "       formatDate(cohist_invcdate) AS f_invcdate,"
               "       item_number,"
               "       cohist_qtyshipped, formatQty(cohist_qtyshipped) AS f_shipped " );

  sql += ", formatSalesPrice(cohist_unitprice) AS f_unitprice,"
	 "  round(cohist_qtyshipped * cohist_unitprice, 2) AS extprice,"
	 "  formatMoney(round(cohist_qtyshipped * cohist_unitprice, 2)) AS f_extprice ";

  sql += ", formatCost(cohist_unitcost) AS f_unitcost,"
	 "  (cohist_qtyshipped * cohist_unitcost) AS extcost,"
	 "  formatCost(cohist_qtyshipped * cohist_unitcost) AS f_extcost ";

  sql += "FROM cohist, itemsite, item "
         "WHERE ( (cohist_itemsite_id=itemsite_id)"
         " AND (itemsite_item_id=item_id)"
         " AND (cohist_invcdate BETWEEN :startDate AND :endDate)"
         " AND (UPPER(cohist_billtoname) ~ UPPER(:billToName))";

  if (_warehouse->isSelected())
    sql += " AND (itemsite_warehous_id=:warehous_id)";

  if (_productCategory->isSelected())
    sql += " AND (item_prodcat_id=:prodcat_id)";
  else if (_productCategory->isPattern())
    sql += " AND (item_prodcat_id IN (SELECT prodcat_id FROM prodcat WHERE (prodcat_code ~ :prodcat_pattern)))";

  sql += ") "
         "ORDER BY cohist_invcdate, cohist_billtoname, item_number";

  q.prepare(sql);
  _warehouse->bindValue(q);
  _productCategory->bindValue(q);
  _dates->bindValue(q);
  q.bindValue(":billToName", _billtoName->text());
  q.exec();
  if (q.first())
  {
    double totalUnits = 0.0;
    double totalSales = 0.0;
    double totalCosts = 0.0;

    XTreeWidgetItem *last = 0;
    do
    {
      last = new XTreeWidgetItem( _sohist, last, q.value("cohist_id").toInt(),
				 q.value("cohist_billtoname"),
				 q.value("cohist_ordernumber"),
				 q.value("cohist_invcnumber"),
				 q.value("f_orderdate"),
				 q.value("f_invcdate"),
				 q.value("item_number"),
				 q.value("f_shipped"),
				 q.value("f_unitprice"),
				 q.value("f_extprice"),
				 q.value("f_unitcost"),
				 q.value("f_extcost"));
 
      totalUnits += q.value("cohist_qtyshipped").toDouble();
      totalSales += q.value("extprice").toDouble();
      totalCosts += q.value("extcost").toDouble();
    }
    while (q.next());

    XTreeWidgetItem *totals = new XTreeWidgetItem(_sohist, last, -1,
						  QVariant(tr("Total Sales")));
    totals->setText(6, formatQty(totalUnits));
    totals->setText(EXTPRICE_COL, formatMoney(totalSales));
    totals->setText(EXTCOST_COL, formatCost(totalCosts));
  }
}
示例#23
0
/* 
   Note that the SELECTs here are UNIONs of the gltrans table (in the base
   currency) and the bankadj table (in the bank account's currency).
*/
void reconcileBankaccount::populate()
{
  qApp->setOverrideCursor(QCursor(Qt::WaitCursor));

  double begBal = _openBal->localValue();
  double endBal = _endBal->localValue();

  int currid = -1;

  // fill receipts list
  currid = _receipts->id();
  _receipts->clear();
  q.prepare("SELECT gltrans_id AS id, 1 AS altid,"
            "       jrnluse_use AS use, gltrans_journalnumber AS jrnlnum,"
            "       COALESCE(date(jrnluse_date), gltrans_date) AS f_jrnldate,"
            "       COALESCE(bankrecitem_cleared, FALSE) AS cleared,"
            "       gltrans_date AS f_date,"
            "       gltrans_docnumber AS docnumber,"
            "       gltrans_notes AS notes,"
            "       currToLocal(bankaccnt_curr_id, gltrans_amount, gltrans_date) * -1 AS amount,"
            "       COALESCE(date(jrnluse_date), gltrans_date) AS jrnldate,"
            "       gltrans_date AS sortdate "
            "  FROM (bankaccnt CROSS JOIN gltrans) LEFT OUTER JOIN bankrecitem "
            "    ON ((bankrecitem_source='GL') AND (bankrecitem_source_id=gltrans_id)"
            "        AND (bankrecitem_bankrec_id=:bankrecid)) "
            "       LEFT OUTER JOIN jrnluse ON (jrnluse_number=gltrans_journalnumber AND jrnluse_use='C/R')"
            " WHERE ((gltrans_accnt_id=bankaccnt_accnt_id)"
            "   AND (NOT gltrans_deleted) "
            "   AND (NOT gltrans_rec)"
            "   AND (gltrans_amount < 0)"
            "   AND (bankaccnt_id=:bankaccntid) ) "
            " UNION ALL "
            "SELECT bankadj_id AS id, 2 AS altid,"
            "       '' AS use, NULL AS jrnlnum, bankadj_date AS f_jrnldate,"
            "       COALESCE(bankrecitem_cleared, FALSE) AS cleared,"
            "       bankadj_date AS f_date,"
            "       bankadj_docnumber AS docnumber,"
            "       bankadjtype_name AS notes,"
            "       (CASE WHEN(bankadjtype_iscredit=true) THEN (bankadj_amount * -1) ELSE bankadj_amount END) AS amount,"
            "       bankadj_date AS jrnldate,"
            "       bankadj_date AS sortdate "
            "  FROM (bankadjtype CROSS JOIN bankadj) "
            "               LEFT OUTER JOIN bankrecitem ON ((bankrecitem_source='AD') "
            "                 AND (bankrecitem_source_id=bankadj_id) "
            "                 AND (bankrecitem_bankrec_id=:bankrecid)) "
            " WHERE ( (((bankadjtype_iscredit=false) AND (bankadj_amount > 0)) OR ((bankadjtype_iscredit=true) AND (bankadj_amount < 0))) "
            "   AND (bankadj_bankadjtype_id=bankadjtype_id) "
            "   AND (NOT bankadj_posted) "
            "   AND (bankadj_bankaccnt_id=:bankaccntid) ) "
            "ORDER BY jrnldate, jrnlnum, sortdate; ");
  q.bindValue(":bankaccntid", _bankaccnt->id());
  q.bindValue(":bankrecid", _bankrecid);
  q.exec();
  if (q.lastError().type() != QSqlError::NoError)
  {
    systemError(this, q.lastError().databaseText(), __FILE__, __LINE__);
    return;
  }

  int jrnlnum = 0;
  XTreeWidgetItem * parent = 0;
  XTreeWidgetItem * lastChild = 0;
  XTreeWidgetItem * last = 0;
  bool cleared = TRUE;
  double amount = 0.0;
  bool amountNull = true;
  while (q.next())
  {
    if(q.value("use").toString() == "C/R")
    {
      if(q.value("jrnlnum").toInt() != jrnlnum || (0 == parent))
      {
        if(parent != 0)
        {
          parent->setText(0, (cleared ? tr("Yes") : tr("No")));
          parent->setText(4, amountNull ? tr("?????") : formatMoney(amount));
        }
        jrnlnum = q.value("jrnlnum").toInt();
        last = new XTreeWidgetItem( _receipts, last,
          jrnlnum, 3, "", formatDate(q.value("f_jrnldate").toDate()), q.value("jrnlnum"));
        parent = last;
        cleared = true;
        amount = 0.0;
	amountNull = true;
        lastChild = 0;
      }
      cleared = (cleared && q.value("cleared").toBool());
      amount += q.value("amount").toDouble();
      amountNull = q.value("amount").isNull();
      
      lastChild = new XTreeWidgetItem( parent, lastChild,
        q.value("id").toInt(), q.value("altid").toInt(),
        (q.value("cleared").toBool() ? tr("Yes") : tr("No")),
        formatDate(q.value("f_date").toDate()), q.value("docnumber"),
        q.value("notes"),
	q.value("amount").isNull() ? tr("?????") : formatMoney(q.value("amount").toDouble()) );
    }
    else
    {
      if(parent != 0)
      {
        parent->setText(0, (cleared ? tr("Yes") : tr("No")));
        parent->setText(4, formatMoney(amount));
      }
      parent = 0;
      cleared = true;
      amount = 0.0;
      amountNull = true;
      lastChild = 0;
      last = new XTreeWidgetItem( _receipts, last,
        q.value("id").toInt(), q.value("altid").toInt(),
        (q.value("cleared").toBool() ? tr("Yes") : tr("No")),
        formatDate(q.value("f_date").toDate()), q.value("docnumber"),
        q.value("notes"),
	q.value("amount").isNull() ? tr("?????") : formatMoney(q.value("amount").toDouble()) );
    }
  }
  if(parent != 0)
  {
    parent->setText(0, (cleared ? tr("Yes") : tr("No")));
    parent->setText(4, amountNull ? tr("?????") : formatMoney(amount));
  }
  if(currid != -1)
    _receipts->setCurrentItem(_receipts->topLevelItem(currid));
  if(_receipts->currentItem())
    _receipts->scrollToItem(_receipts->currentItem());


  // fill receipts cleared value
  q.prepare("SELECT COALESCE(SUM(amount),0.0) AS cleared_amount"
            "  FROM ( SELECT currToLocal(bankaccnt_curr_id, gltrans_amount * -1, gltrans_date) AS amount"
            "           FROM bankaccnt, gltrans, bankrecitem"
            "          WHERE ((gltrans_accnt_id=bankaccnt_accnt_id)"
            "            AND (bankrecitem_source='GL')"
            "            AND (bankrecitem_source_id=gltrans_id)"
            "            AND (bankrecitem_bankrec_id=:bankrecid)"
            "            AND (bankrecitem_cleared)"
            "            AND (NOT gltrans_deleted)"
            "            AND (NOT gltrans_rec)"
            "            AND (gltrans_amount < 0)"
            "            AND (bankaccnt_id=:bankaccntid) ) "
            "          UNION ALL"
            "         SELECT CASE WHEN(bankadjtype_iscredit=true) THEN (bankadj_amount * -1) ELSE bankadj_amount END AS amount"
            "           FROM bankrecitem, bankadj, bankadjtype "
            "          WHERE ( (bankrecitem_source='AD')"
            "            AND (bankrecitem_source_id=bankadj_id)"
            "            AND (bankrecitem_bankrec_id=:bankrecid)"
            "            AND (bankrecitem_cleared)"
            "            AND (bankadj_bankadjtype_id=bankadjtype_id)"
            "            AND (NOT bankadj_posted)"
            "            AND (((bankadjtype_iscredit=false) AND (bankadj_amount > 0)) OR (bankadjtype_iscredit=true AND (bankadj_amount < 0))) "
            "            AND (bankadj_bankaccnt_id=:bankaccntid) ) ) AS data;");
  q.bindValue(":bankaccntid", _bankaccnt->id());
  q.bindValue(":bankrecid", _bankrecid);
  q.exec();
  if (q.first())
    _clearedReceipts->setDouble(q.value("cleared_amount").toDouble());
  else if (q.lastError().type() != QSqlError::NoError)
  {
    systemError(this, q.lastError().databaseText(), __FILE__, __LINE__);
    return;
  }

  // fill checks list
  currid = _checks->id();
  _checks->clear();
  q.prepare("SELECT gltrans_id AS id, 1 AS altid,"
            "       COALESCE(bankrecitem_cleared, FALSE) AS cleared,"
            "       gltrans_date AS transdate,"
            "       gltrans_docnumber AS docnumber,"
            "       gltrans_notes AS notes,"
            "       currToLocal(bankaccnt_curr_id, gltrans_amount, gltrans_date) AS amount,"
            "       gltrans_date AS sortdate, "
            "       'curr' AS amount_xtnumericrole "
            "  FROM (bankaccnt CROSS JOIN gltrans) LEFT OUTER JOIN bankrecitem "
            "    ON ((bankrecitem_source='GL') AND (bankrecitem_source_id=gltrans_id)"
            "        AND (bankrecitem_bankrec_id=:bankrecid)) "
            " WHERE ((gltrans_accnt_id=bankaccnt_accnt_id)"
            "   AND (NOT gltrans_deleted)"
            "   AND (NOT gltrans_rec)"
            "   AND (gltrans_amount > 0)"
            "   AND (bankaccnt_id=:bankaccntid) ) "
            " UNION ALL "
            "SELECT bankadj_id AS id, 2 AS altid,"
            "       COALESCE(bankrecitem_cleared, FALSE) AS cleared,"
            "       bankadj_date AS transdate,"
            "       bankadj_docnumber AS docnumber,"
            "       bankadjtype_name AS notes,"
            "       CASE WHEN(bankadjtype_iscredit=false) THEN (bankadj_amount * -1) ELSE bankadj_amount END AS amount,"
            "       bankadj_date AS sortdate, "
            "       'curr' AS amount_xtnumericrole "
            "  FROM (bankadjtype CROSS JOIN bankadj) "
            "               LEFT OUTER JOIN bankrecitem ON ((bankrecitem_source='AD') "
            "                 AND (bankrecitem_source_id=bankadj_id) "
            "                 AND (bankrecitem_bankrec_id=:bankrecid)) "
            " WHERE ( (((bankadjtype_iscredit=true) AND (bankadj_amount > 0)) OR ((bankadjtype_iscredit=false) AND (bankadj_amount < 0))) "
            "   AND (bankadj_bankadjtype_id=bankadjtype_id) "
            "   AND (NOT bankadj_posted) "
            "   AND (bankadj_bankaccnt_id=:bankaccntid) ) "
            "ORDER BY sortdate; ");
  q.bindValue(":bankaccntid", _bankaccnt->id());
  q.bindValue(":bankrecid", _bankrecid);
  q.exec();
  if (q.lastError().type() != QSqlError::NoError)
  {
    systemError(this, q.lastError().databaseText(), __FILE__, __LINE__);
    return;
  }
  _checks->populate(q, TRUE);

  if(currid != -1)
    _checks->setCurrentItem(_checks->topLevelItem(currid));
  if(_checks->currentItem())
    _checks->scrollToItem(_checks->currentItem());

  // fill checks cleared value
  q.prepare("SELECT COALESCE(SUM(amount),0.0) AS cleared_amount"
            "  FROM ( SELECT currToLocal(bankaccnt_curr_id, gltrans_amount, gltrans_date) AS amount"
            "           FROM bankaccnt, gltrans, bankrecitem"
            "          WHERE ((gltrans_accnt_id=bankaccnt_accnt_id)"
            "            AND (bankrecitem_source='GL')"
            "            AND (bankrecitem_source_id=gltrans_id)"
            "            AND (bankrecitem_bankrec_id=:bankrecid)"
            "            AND (bankrecitem_cleared)"
            "            AND (NOT gltrans_deleted)"
            "            AND (NOT gltrans_rec)"
            "            AND (gltrans_amount > 0)"
            "            AND (bankaccnt_id=:bankaccntid) ) "
            "          UNION ALL"
            "         SELECT CASE WHEN(bankadjtype_iscredit=false) THEN (bankadj_amount * -1) ELSE bankadj_amount END AS amount"
            "           FROM bankadj, bankadjtype, bankrecitem"
            "          WHERE ( (bankrecitem_source='AD')"
            "            AND (bankrecitem_source_id=bankadj_id)"
            "            AND (bankrecitem_bankrec_id=:bankrecid)"
            "            AND (bankrecitem_cleared)"
            "            AND (bankadj_bankadjtype_id=bankadjtype_id)"
            "            AND (NOT bankadj_posted)"
            "            AND (((bankadjtype_iscredit=true) AND (bankadj_amount > 0)) OR ((bankadjtype_iscredit=false) AND (bankadj_amount < 0)))"
            "            AND (bankadj_bankaccnt_id=:bankaccntid) ) ) AS data;");
  q.bindValue(":bankaccntid", _bankaccnt->id());
  q.bindValue(":bankrecid", _bankrecid);
  q.exec();
  if (q.first())
    _clearedChecks->setDouble(q.value("cleared_amount").toDouble());
  else if (q.lastError().type() != QSqlError::NoError)
  {
    systemError(this, q.lastError().databaseText(), __FILE__, __LINE__);
    return;
  }

  // calculate cleared balance
  q.prepare("SELECT (COALESCE(SUM(amount),0.0) + :begBal) AS cleared_amount,"
            "       :endBal AS end_amount,"
            "       (:endBal - (:begBal + (COALESCE(SUM(amount),0.0)))) AS diff_amount,"
            "       round(:endBal - (:begBal + COALESCE(SUM(amount),0.0)), 2) AS diff_value"
            "  FROM ( SELECT currToLocal(bankaccnt_curr_id, gltrans_amount * -1, gltrans_date) AS amount"
            "           FROM bankaccnt, gltrans, bankrecitem"
            "          WHERE ((gltrans_accnt_id=bankaccnt_accnt_id)"
            "            AND (bankrecitem_source='GL')"
            "            AND (bankrecitem_source_id=gltrans_id)"
            "            AND (bankrecitem_bankrec_id=:bankrecid)"
            "            AND (bankrecitem_cleared)"
            "            AND (NOT gltrans_rec)"
            "            AND (bankaccnt_id=:bankaccntid) ) "
            "          UNION ALL"
            "         SELECT CASE WHEN(bankadjtype_iscredit=true) THEN (bankadj_amount * -1) ELSE bankadj_amount END AS amount"
            "           FROM bankadj, bankadjtype, bankrecitem"
            "          WHERE ( (bankrecitem_source='AD')"
            "            AND (bankrecitem_source_id=bankadj_id)"
            "            AND (bankrecitem_bankrec_id=:bankrecid)"
            "            AND (bankrecitem_cleared)"
            "            AND (bankadj_bankadjtype_id=bankadjtype_id)"
            "            AND (NOT bankadj_posted)"
            "            AND (bankadj_bankaccnt_id=:bankaccntid) ) ) AS data;");
  q.bindValue(":bankaccntid", _bankaccnt->id());
  q.bindValue(":bankrecid", _bankrecid);
  q.bindValue(":endBal", endBal);
  q.bindValue(":begBal", begBal);
  q.bindValue(":curr_id",   _currency->id());
  q.bindValue(":effective", _startDate->date());
  q.bindValue(":expires",   _endDate->date());
  q.exec();
  bool enableRec = FALSE;
  if(q.first())
  {
    _clearBal->setDouble(q.value("cleared_amount").toDouble());
    _endBal2->setDouble(q.value("end_amount").toDouble());
    _diffBal->setDouble(q.value("diff_amount").toDouble());

    QString stylesheet;

    if(q.value("diff_value").toDouble() == 0.0)
    {
      if(_startDate->isValid() && _endDate->isValid())
        enableRec = TRUE;
    }
    else
      stylesheet = QString("* { color: %1; }").arg(namedColor("error").name());

    _diffBal->setStyleSheet(stylesheet);
  }
  else if (q.lastError().type() != QSqlError::NoError)
  {
    systemError(this, q.lastError().databaseText(), __FILE__, __LINE__);
    return;
  }
  //_reconcile->setEnabled(enableRec);

  qApp->restoreOverrideCursor();
}
示例#24
0
文件: klocale.cpp 项目: vasi/kdelibs
QString KLocale::formatMoney(double num, const QString &symbol, int precision) const
{
    return d->formatMoney(num, symbol, precision);
}
示例#25
0
void dspARApplications::sFillList()
{
  if ( (_selectedCustomer->isChecked()) && (!_cust->isValid()) )
  {
    QMessageBox::warning( this, tr("Select Customer"),
                          tr("You must select a Customer whose A/R Applications you wish to view.") );
    _cust->setFocus();
    return;
  }

  if (!_dates->startDate().isValid())
  {
    QMessageBox::critical( this, tr("Enter Start Date"),
                           tr("You must enter a valid Start Date.") );
    _dates->setFocus();
    return;
  }

  if (!_dates->endDate().isValid())
  {
    QMessageBox::critical( this, tr("Enter End Date"),
                           tr("You must enter a valid End Date.") );
    _dates->setFocus();
    return;
  }

  if ( (!_cashReceipts->isChecked()) && (!_creditMemos->isChecked()) )
  {
    QMessageBox::critical( this, tr("Select Document Type"),
                           tr("You must indicate which Document Type(s) you wish to view.") );
    _cashReceipts->setFocus();
    return;
  }

  QString sql( "SELECT arapply_id, cust_number, cust_name,"
               "       formatDate(arapply_postdate) AS f_postdate,"
	       "       arapply_source_doctype, arapply_fundstype, "
               "       CASE WHEN (arapply_source_doctype IN ('C','R')) THEN TEXT(arapply_source_docnumber)"
               "            ELSE arapply_refnumber"
               "         END AS source,"
               "       arapply_target_doctype,"
               "       TEXT(arapply_target_docnumber) AS target,"
               "       formatMoney(arapply_applied) AS f_applied, arapply_applied "
               "FROM arapply, custinfo "
               "WHERE ( (arapply_cust_id=cust_id)"
               " AND (arapply_postdate BETWEEN <? value(\"startDate\") ?> AND <? value(\"endDate\") ?>)"
               " AND (arapply_source_doctype IN ("
	       "<? if exists(\"creditMemos\") ?>"
	       "  <? if exists(\"cashReceipts\") ?>"
	       "	'K', 'C', 'R' "
	       "  <? else ?>"
	       "	'C', 'R' "
	       "  <? endif ?>"
	       "<? else ?>"
	       "	'K' "
	       "<? endif ?>"
	       "))"
	       "<? if exists(\"cust_id\") ?>"
	       "  AND (cust_id=<? value(\"cust_id\") ?>)"
	       "<? elseif exists(\"custtype_id\") ?>"
	       "  AND (cust_custtype_id=<? value(\"custtype_id\") ?>)"
	       "<? elseif exists(\"custtype_pattern\") ?>"
	       "  AND (cust_custtype_id IN (SELECT custtype_id FROM custtype"
	       "                            WHERE (custtype_code ~ <? value(\"custtype_id\") ?>)))"
	       "<? endif ?>"
	       ") "
	       "ORDER BY arapply_postdate, source;"
	       );

  ParameterList params;

  if (_cashReceipts->isChecked())
    params.append("cashReceipts");

  if (_creditMemos->isChecked())
    params.append("creditMemos");

  params.append("startDate", _dates->startDate());
  params.append("endDate", _dates->endDate());

  if (_selectedCustomer->isChecked())
    params.append("cust_id", _cust->id());
  else if (_selectedCustomerType->isChecked())
    params.append("custtype_id", _customerTypes->id());
  else if (_customerTypePattern->isChecked())
    params.append("custtype_pattern", _customerType->text());

  MetaSQLQuery mql(sql);
  q = mql.toQuery(params);
  if (q.first())
  {
    _arapply->clear();

    double total = 0;

    XTreeWidgetItem* last = 0;
    do
    {
      QString fundstype = q.value("arapply_fundstype").toString();
      QString doctype;
      if (q.value("arapply_source_doctype") == "C")
	    doctype = tr("Credit Memo");
      else if (q.value("arapply_source_doctype") == "R")
        doctype = tr("Cash Deposit");
      else if (fundstype == "A")
	    doctype = tr("AmEx");
      else if (fundstype == "C")
	    doctype = tr("Check");
      else if (fundstype == "D")
	    doctype = tr("Discover");
      else if (fundstype == "K")
	    doctype = tr("Cash");
      else if (fundstype == "M")
	    doctype = tr("M/C");
      else if (fundstype == "R")
	    doctype = tr("Other C/C");
      else if (fundstype == "T")
	    doctype = tr("Cert. Check");
      else if (fundstype == "V")
	    doctype = tr("Visa");
      else if (fundstype == "W")
	    doctype = tr("Wire Trans.");
      else if (fundstype == "O")
	    doctype = tr("Other");

      QString targetdoctype = q.value("arapply_target_doctype").toString();
      if (targetdoctype == "D")
	targetdoctype = tr("Debit Memo");
      else if (targetdoctype == "I")
	targetdoctype = tr("Invoice");
      else if (targetdoctype == "K")
	targetdoctype = tr("A/P Check");
      else
	targetdoctype = tr("Other");

      last = new XTreeWidgetItem( _arapply, last,
				 q.value("arapply_id").toInt(),
				 q.value("cust_number"),
				 q.value("cust_name"),
				 q.value("f_postdate"),
				 (q.value("arapply_source_doctype") == "C") ?
					"C/M" : ((q.value("arapply_source_doctype") == "R") ? "Cash Deposit" : fundstype),
				 doctype,
				 q.value("source"),
				 q.value("arapply_target_doctype").toString(),
				 targetdoctype,
				 q.value("target"), q.value("f_applied") );

      total += q.value("arapply_applied").toDouble();
    }
    while (q.next());

    last = new XTreeWidgetItem(_arapply, last, -1, "", tr("Total Applications:"));
    last->setText(9, formatMoney(total));
  }
  else if (q.lastError().type() != QSqlError::None)
  {
    systemError(this, q.lastError().databaseText(), __FILE__, __LINE__);
    return;
  }
}
示例#26
0
void dspAROpenItems::sFillList()
{
  _aropen->clear();

  MetaSQLQuery mql = mqlLoad(":/ar/arOpenItems.mql");
  ParameterList params;
  _dates->appendValue(params);
  params.append("invoice", tr("Invoice"));
  params.append("creditMemo", tr("C/M"));
  params.append("debitMemo", tr("D/M"));
  params.append("cashdeposit", tr("C/D"));
  if (_incidentsOnly->isChecked())
    params.append("incidentsOnly");
  q = mql.toQuery(params);

  XSqlQuery incident;
  incident.prepare( "SELECT incdt_id, incdt_number::TEXT AS incdtnumber,"
                    "       incdt_summary, incdt_assigned_username "
                    "FROM incdt "
                    "WHERE (incdt_aropen_id=:aropen_id);" );

  if (q.first())
  {
    XTreeWidgetItem *document = 0;
    XTreeWidgetItem *last = 0;
    double total= 0.0;
    do
    {
      last = document = new XTreeWidgetItem( _aropen, last, q.value("aropen_id").toInt(), q.value("cust_id").toInt(),
                                             q.value("doctype"),
                                             q.value("aropen_docnumber"),
                                             q.value("cust_number"), q.value("cust_name"),
                                             q.value("aropen_ordernumber"),
                                             formatDate(q.value("aropen_docdate").toDate()),
                                             formatDate(q.value("aropen_duedate").toDate()),
                                             formatMoney(q.value("aropen_amount").toDouble()),
                                             formatMoney(q.value("aropen_paid").toDouble()),
                                             formatMoney(q.value("balance").toDouble()),
                                             q.value("currAbbr") );

      total += q.value("base_balance").toDouble();

      incident.bindValue(":aropen_id", q.value("aropen_id").toInt());
      incident.exec();
      if (incident.first())
      {
        do
        {
          new XTreeWidgetItem( document, -1, incident.value("incdt_id").toInt(),
                               "",
                               "",
                               incident.value("incdtnumber"), incident.value("incdt_summary"),
                               incident.value("incdt_assigned_username"),
                               "",
                               "", "",
                               "",
                               "", "" );
        }
        while (incident.next());
      }
    }
    while (q.next());

    new XTreeWidgetItem( _aropen, last, -1,
                         QVariant(tr("Total")), "", "", "", "", "", "", "", "",
                         formatMoney(total), CurrDisplay::baseCurrAbbr() );
  }
  
  if (q.lastError().type() != QSqlError::None)
  {
    systemError(this, q.lastError().databaseText(), __FILE__, __LINE__);
    return;
  }
}
示例#27
0
void dspAPOpenItemsByVendor::sFillList()
{
  _apopen->clear();

  q.prepare( "SELECT apopen_id, apopen_ponumber, apopen_docnumber,"
             "       CASE WHEN (apopen_doctype='C') THEN :creditMemo"
             "            WHEN (apopen_doctype='D') THEN :debitMemo"
             "            WHEN (apopen_doctype='V') THEN :voucher"
             "            ELSE :other"
             "       END AS f_doctype,"
             "       apopen_invcnumber AS invoicenumber,"
             "       formatDate(apopen_docdate) AS f_docdate,"
             "       formatDate(apopen_duedate) AS f_duedate,"
             "       formatMoney(apopen_amount) AS f_amount,"
             "       formatMoney(apapplied(apopen_id,:asofdate)) AS f_paid,"
             "       CASE WHEN (apopen_doctype='C') THEN ((apopen_amount - apapplied(apopen_id,:asofdate)) * -1)"
             "            WHEN (apopen_doctype IN ('V', 'D')) THEN (apopen_amount - apapplied(apopen_id,:asofdate))"
             "            ELSE (apopen_amount - apapplied(apopen_id,:asofdate))"
             "       END AS balance, currConcat(apopen_curr_id) AS currAbbr,"
             "       currToBase(apopen_curr_id,"
	     "           CASE WHEN (apopen_doctype='C') THEN ((apopen_amount - apapplied(apopen_id,:asofdate)) * -1)"
             "            WHEN (apopen_doctype IN ('V', 'D')) THEN (apopen_amount - apapplied(apopen_id,:asofdate))"
             "            ELSE (apopen_amount - apopen_paid)"
             "            END, apopen_docdate) AS base_balance "
             "FROM apopen "
             " WHERE ( (COALESCE(apopen_closedate,date :asofdate + integer '1')>:asofdate) "
             "   AND   (apopen_docdate<=:asofdate)"
             "   AND   (apopen_vend_id=:vend_id) "
             "   AND   (apopen_duedate BETWEEN :startDate AND :endDate) "
             "   AND   ((currtobase(apopen_curr_id,apopen_amount,:asofdate) - apapplied(apopen_id,:asofdate)) > 0)) "
             " ORDER BY apopen_docdate;" );
  _dates->bindValue(q);
  q.bindValue(":vend_id", _vend->id());
  q.bindValue(":creditMemo", tr("C/M"));
  q.bindValue(":debitMemo", tr("D/M"));
  q.bindValue(":voucher", tr("Voucher"));
  q.bindValue(":asofdate", _asOf->date());
  q.exec();
  if (q.first())
  {
    double total= 0.0;

    XTreeWidgetItem *last = 0;
    do
    {
      last = new XTreeWidgetItem( _apopen, last, q.value("apopen_id").toInt(),
				 q.value("f_doctype"), q.value("apopen_docnumber"),
				 q.value("apopen_ponumber"), q.value("invoicenumber"), q.value("f_docdate"),
				 q.value("f_duedate"), q.value("f_amount"),
				 q.value("f_paid"), formatMoney(q.value("balance").toDouble()),
				 q.value("currAbbr"),
				 formatMoney(q.value("base_balance").toDouble()));
 
      total += q.value("base_balance").toDouble();
    }
    while (q.next());

    last = new XTreeWidgetItem( _apopen, last, -1,
                       QVariant(tr("Total")), "", "", "", "", "", "", "", "", "",
                       formatMoney(total) );
  }
}
示例#28
0
void dspRWTransactions::sFillList()
{
  _gltrans->clear();
  QString sql( "SELECT gltrans_id, formatDate(gltrans_date) AS f_date,"
               "       gltrans_source, gltrans_doctype, gltrans_docnumber,"
               "       firstLine(gltrans_notes) AS f_notes,"
               "       (formatGLAccount(accnt_id)||' - '|| accnt_descrip) AS f_accnt,"
               "       CASE WHEN (gltrans_amount < 0) THEN formatMoney(abs(gltrans_amount))"
               "            ELSE ''"
               "       END AS f_debit,"
               "       CASE WHEN (gltrans_amount > 0) THEN formatMoney(gltrans_amount)"
               "            ELSE ''"
               "       END AS f_credit,"
               "       formatBoolYN(gltrans_exported) AS f_exported,"
               "       CASE WHEN (gltrans_amount < 0) THEN abs(gltrans_amount)"
               "            ELSE 0"
               "       END AS debit,"
               "       CASE WHEN (gltrans_amount > 0) THEN gltrans_amount"
               "            ELSE 0"
               "       END AS credit "
               "FROM gltrans, accnt "
               "WHERE ((gltrans_accnt_id=accnt_id)"
               " AND (gltrans_date BETWEEN :startDate AND :endDate)" );

  if (_selectedAccount->isChecked())
    sql += " AND (gltrans_accnt_id=:accnt_id)";

  if (_showExported->isChecked())
    sql += " AND (gltrans_exported)";
  else if (_showUnexported->isChecked())
    sql += " AND (NOT gltrans_exported)";
  
  if (_arDist->isChecked())
    sql += " AND ((gltrans_source='A/R') AND (gltrans_doctype IN ('IN', 'CM')))";
  else if (_apDist->isChecked())
    sql += " AND ((gltrans_source='A/P') AND (gltrans_doctype='VO'))";
  else
    sql += " AND (NOT ((gltrans_source='A/R') AND (gltrans_doctype IN ('IN', 'CM'))))"
           " AND (NOT ((gltrans_source='A/P') AND (gltrans_doctype='VO')))";

  sql += ") "
         "ORDER BY accnt_number, accnt_profit, accnt_sub, gltrans_journalnumber, gltrans_date, gltrans_docnumber;";

  q.prepare(sql);
  _dates->bindValue(q);
  q.bindValue(":accnt_id", _account->id());
  q.exec();

  double debit = 0.0;
  double credit = 0.0;
  XTreeWidgetItem *last =  0;
  while(q.next())
  {
    debit += q.value("debit").toDouble();
    credit += q.value("credit").toDouble();
    last = new XTreeWidgetItem( _gltrans, last, q.value("gltrans_id").toInt(),
                       q.value("f_date"), q.value("gltrans_source"), q.value("gltrans_doctype"),
                       q.value("gltrans_docnumber"), q.value("f_notes"),
                       q.value("f_accnt"), q.value("f_debit"), q.value("f_credit"), q.value("f_exported") );
  }
  last = new XTreeWidgetItem( _gltrans, last, -1, "", "", "", "", tr("Total:"), "", formatMoney(debit), formatMoney(credit));
}
示例#29
0
void dspTimePhasedPlannedREByPlannerCode::sFillList()
{
  if(_useAveragePrice->isChecked() && !(_startEvalDate->isValid() && _endEvalDate->isValid()))
  {
    QMessageBox::information(this, tr("Average Price Requires Dates"),
                                   tr("The Average Price option requires that you specify a valid\n"
                                      "date range to evaluate the average price."));
    return;
  }

  _plannedRE->clear();
  _plannedRE->setColumnCount(1);

  QString       sql("SELECT ");

  bool show    = FALSE;
  int  columns = 1;
  QList<QTreeWidgetItem*> selected = _periods->selectedItems();
  for (int i = 0; i < selected.size(); i++)
  {
    PeriodListViewItem *cursor = (PeriodListViewItem*)selected[i];
    if (show)
      sql += ",";
    else
      show = TRUE;

    sql += QString(" SUM(plannedCost(plancode_id, warehous_id, '%1', %2)) AS cost%3,")
	   .arg((_useStandardCost->isChecked()) ? 'S' : 'A')
	   .arg(cursor->id())
	   .arg(columns);

    if (_useListPrice->isChecked())
      sql += QString(" SUM(plannedRevenue(plancode_id, warehous_id, 'L', %1)) AS revenue%2 ")
	     .arg(cursor->id())
	     .arg(columns++);
    else
      sql += QString(" SUM(plannedRevenue(plancode_id, warehous_id, 'A', %1, date('%2'), date('%3'))) AS revenue%4 ")
	     .arg(cursor->id())
	     .arg(_startEvalDate->date().toString())    // NOT locale format
	     .arg(_endEvalDate->date().toString())      // NOT locale format
	     .arg(columns++);

    _plannedRE->addColumn(formatDate(cursor->startDate()), _qtyColumn, Qt::AlignRight);
    _columnDates.append(DatePair(cursor->startDate(), cursor->endDate()));
  }

  if (show)
  {
    sql += " FROM plancode, warehous";

    if (_warehouse->isSelected())
      sql += " WHERE ( (warehous_id=:warehous_id)";

    if (_plannerCode->isSelected())
    {
      if (_warehouse->isSelected())
        sql += " AND (plancode_id=:plancode_id)";
      else
        sql += " WHERE ( (plancode_id=:plancode_id)";
    }
    else if (_plannerCode->isPattern())
    {
      if (_warehouse->isSelected())
        sql += " AND (plancode_code ~ :plancode_pattern)";
      else
        sql += " WHERE ( (plancode_code ~ :plancode_pattern)";
    }

    if ( (_warehouse->isSelected()) || (!_plannerCode->isAll()) )
      sql += ");";
    else
      sql += ";";

    q.prepare(sql);
    _warehouse->bindValue(q);
    _plannerCode->bindValue(q);
    q.exec();
    if (q.first())
    {
      XTreeWidgetItem *cost    = new XTreeWidgetItem( _plannedRE, 0, QVariant(tr("Cost")),
                                                  formatMoney(q.value("cost1").toDouble()) );

      XTreeWidgetItem *revenue = new XTreeWidgetItem( _plannedRE, cost, 0, QVariant(tr("Revenue")),
                                                  formatMoney(q.value("revenue1").toDouble()) );

      XTreeWidgetItem *profit  = new XTreeWidgetItem( _plannedRE, revenue,  0, QVariant(tr("Gross Profit")),
                                                  formatMoney(q.value("revenue1").toDouble() - q.value("cost1").toDouble() ) );
                       
      for (int bucketCounter = 1; bucketCounter < columns; bucketCounter++)
      {
        cost->setText(bucketCounter, formatMoney(q.value(QString("cost%1").arg(bucketCounter)).toDouble()));
        revenue->setText(bucketCounter, formatMoney(q.value(QString("revenue%1").arg(bucketCounter)).toDouble()));

        profit->setText( bucketCounter,
                         formatMoney( q.value(QString("revenue%1").arg(bucketCounter)).toDouble() -
                                      q.value(QString("cost%1").arg(bucketCounter)).toDouble() ) );
      }
    }
  }
}
示例#30
0
void dspTimePhasedSalesByProductCategory::sCalculate()
{
  if (!_periods->isPeriodSelected())
  {
    if (isVisible())
      QMessageBox::warning( this, tr("Select Calendar Periods"),
                            tr("Please select one or more Calendar Periods") );
    return;
  }

  _sohist->clear();
  _sohist->setColumnCount(3);

  _columnDates.clear();

  QString sql("SELECT prodcat_id, warehous_id, prodcat_code, warehous_code");

  if (_salesDollars->isChecked())
    sql += ", TEXT('$') AS uom";
  
  else if (_inventoryUnits->isChecked())
    sql += ", uom_name AS uom";

  else if (_capacityUnits->isChecked())
    sql += ", itemcapuom(item_id) AS uom";

  else if (_altCapacityUnits->isChecked())
    sql += ", itemaltcapuom(item_id) AS uom";

  int columns = 1;
  QList<QTreeWidgetItem*> selected = _periods->selectedItems();
  for (int i = 0; i < selected.size(); i++)
  {
    PeriodListViewItem *cursor = (PeriodListViewItem*)selected[i];
    if (_salesDollars->isChecked())
      sql += QString(", SUM(shipmentsByItemValue(itemsite_id, %2)) AS bucket%1")
	     .arg(columns++)
	     .arg(cursor->id());

    else if (_inventoryUnits->isChecked())
      sql += QString(", SUM(shipmentsByItemQty(itemsite_id, %2)) AS bucket%1")
	     .arg(columns++)
	     .arg(cursor->id());

    else if (_capacityUnits->isChecked())
      sql += QString(", SUM(shipmentsByItemQty(itemsite_id, %2) * itemcapinvrat(item_id)) AS bucket%1")
	     .arg(columns++)
	     .arg(cursor->id());

    else if (_altCapacityUnits->isChecked())
      sql += QString(", SUM(shipmentsByItemQty(itemsite_id, %2) * itemaltcapinvrat(item_id)) AS bucket%1")
	     .arg(columns++)
	     .arg(cursor->id());

    _sohist->addColumn(formatDate(cursor->startDate()), _qtyColumn, Qt::AlignRight);
    _columnDates.append(DatePair(cursor->startDate(), cursor->endDate()));
  }

  sql += " FROM itemsite, item, uom, warehous, prodcat "
         "WHERE ( (itemsite_item_id=item_id)"
         " AND (item_inv_uom_id=uom_id)"
         " AND (itemsite_warehous_id=warehous_id)"
         " AND (item_prodcat_id=prodcat_id)";

  if (_warehouse->isSelected())
    sql += " AND (itemsite_warehous_id=:warehous_id)";
 
  if (_productCategory->isSelected())
    sql += "AND (prodcat_id=:prodcat_id)";
  else if (_productCategory->isPattern())
    sql += "AND (prodcat_code ~ :prodcat_pattern) ";

  sql += ") "
         "GROUP BY prodcat_id, warehous_id, prodcat_code, uom, warehous_code;";

  q.prepare(sql);
  _warehouse->bindValue(q);
  _productCategory->bindValue(q);
  q.exec();
  if (q.first())
  {
    Q3ValueVector<Numeric> totals(columns);;
    XTreeWidgetItem *last = 0;

    do
    {
      last = new XTreeWidgetItem( _sohist, last,
				 q.value("prodcat_id").toInt(),
				 q.value("warehous_id").toInt(),
				 q.value("prodcat_code"),
				 q.value("uom"),
				 q.value("warehous_code") );

      for (int column = 1; column < columns; column++)
      {
        QString bucketName = QString("bucket%1").arg(column);
        totals[column] += q.value(bucketName).toDouble();

        if ( (_inventoryUnits->isChecked()) || (_capacityUnits->isChecked()) || (_altCapacityUnits->isChecked()) )
          last->setText((column + 2), formatQty(q.value(bucketName).toDouble()));
        else if (_salesDollars->isChecked())
          last->setText((column + 2), formatMoney(q.value(bucketName).toDouble()));
      }
    }
    while (q.next());

//  Add the totals row
    XTreeWidgetItem *total = new XTreeWidgetItem(_sohist, last, -1, QVariant(tr("Totals:")));
    for (int column = 1; column < columns; column++)
    {
      if ( (_inventoryUnits->isChecked()) || (_capacityUnits->isChecked()) || (_altCapacityUnits->isChecked()) )
        total->setText((column + 2), formatQty(totals[column].toDouble()));
      else if (_salesDollars->isChecked())
        total->setText((column + 2), formatMoney(totals[column].toDouble()));
    }
  }
}