void DocumentFMController::getDocumentData()
{
     Invoice invoice;
     invoice.setDocumentType(symbol);
     invoice.setSymbol(view->getLineDocumentSymbol()->text());
     MethodOfPayment mop;
     mop.setId((view->getWayToPay()->itemData(view->getWayToPay()->currentIndex()).toInt()));
     invoice.setMethodOfPayment(mop);
     invoice.setDocumentPlace(view->getLineDocumentPlace()->text());
     invoice.setDocumentDate(view->getDateIssue());
     invoice.setSaleDate(view->getSaleOrStoreDate());
     invoice.setPaymentDate(view->getPaymentDate()->date());
     invoice.setTotal(view->getLineGoodsValueDiscount());
     invoice.setDiscount(view->getDiscountOrWaybillNo()->text().toDouble());
     if(ApplicationManager::getInstance()->containsModule(ModuleManager::Order))
     invoice.setOrder(view->getLineOrderSymbol()->text());
     invoice.setIssueName(view->getLineIssueName());
     invoice.setReceiveName(view->getLineReceiveName());
     invoice.setPaid(view->isPaid());
     invoice.setStoreResult(view->isStoreUpdating());
     invoice.setDocumentPositions(manager->getDocumentPosition());
     manager->getInvoicePolicy()->setDocumentData(invoice);
}
Example #2
0
bool
RecurringMaster::postOne(const Gltx& gltx, Id card_id)
{
    QDate nextDue = _curr.nextDue();
    Card card;
    _quasar->db()->lookup(card_id, card);

    General general;
    ItemAdjust adjustment;
    Invoice invoice;
    Receive receive;
    Cheque cheque;
    unsigned int i;

    switch (gltx.dataType()) {
    case DataObject::GENERAL:
	_quasar->db()->lookup(_curr.gltxId(), general);
	_quasar->db()->setActive(general, true);
	general.setNumber("#");
	general.setShiftId(INVALID_ID);
	general.setPostDate(nextDue);
	general.setPrinted(false);
	general.setPaid(false);
	general.payments().clear();

	if (!_quasar->db()->create(general)) {
	    QMessageBox::critical(this, tr("Error"), tr("Create failed"));
	    return false;
	}
	break;
    case DataObject::ITEM_ADJUST:
	_quasar->db()->lookup(_curr.gltxId(), adjustment);
	_quasar->db()->setActive(adjustment, true);
	adjustment.setNumber("#");
	adjustment.setShiftId(INVALID_ID);
	adjustment.setPostDate(nextDue);
	adjustment.setPrinted(false);
	adjustment.setPaid(false);
	adjustment.payments().clear();

	if (!_quasar->db()->create(adjustment)) {
	    QMessageBox::critical(this, tr("Error"), tr("Create failed"));
	    return false;
	}
	break;
    case DataObject::INVOICE:
	_quasar->db()->lookup(_curr.gltxId(), invoice);
	_quasar->db()->setActive(invoice, true);
	invoice.setNumber("#");
	invoice.setCustomerId(card_id);
	invoice.setCustomerAddress(card.address());
	invoice.setShiftId(INVALID_ID);
	invoice.setPostDate(nextDue);
	invoice.setPrinted(false);
	invoice.setPaid(false);
	invoice.payments().clear();

	// Recalculate item costs
	for (i = 0; i < invoice.items().size(); ++i) {
	    InvoiceItem& line = invoice.items()[i];
	    if (line.voided || line.item_id == INVALID_ID) continue;

	    Id store = invoice.storeId();
	    fixed qty = fabs(line.quantity);
	    fixed sign = line.quantity.sign();

	    Item item;
	    _quasar->db()->lookup(line.item_id, item);

	    fixed sell_cost;
	    _quasar->db()->itemSellingCost(item, line.size, store, qty,
					   line.ext_price, sell_cost);
	    line.inv_cost = sell_cost * sign;
	}

	// Fix gltx_card lines
	for (i = 0; i < invoice.cards().size(); ++i)
	    invoice.cards()[i].card_id = card_id;

	if (!_quasar->db()->create(invoice)) {
	    QMessageBox::critical(this, tr("Error"), tr("Create failed"));
	    return false;
	}
	break;
    case DataObject::RECEIVE:
	_quasar->db()->lookup(_curr.gltxId(), receive);
	_quasar->db()->setActive(receive, true);
	receive.setNumber("#");
	receive.setVendorId(card_id);
	receive.setVendorAddress(card.address());
	receive.setShiftId(INVALID_ID);
	receive.setPostDate(nextDue);
	receive.setInvoiceDate(nextDue);
	receive.setPrinted(false);
	receive.setPaid(false);
	receive.setClosed(false);
	receive.payments().clear();

	// Fix gltx_card lines
	for (i = 0; i < receive.cards().size(); ++i)
	    receive.cards()[i].card_id = card_id;

	if (!_quasar->db()->create(receive)) {
	    QMessageBox::critical(this, tr("Error"), tr("Create failed"));
	    return false;
	}
	break;
    case DataObject::CHEQUE:
	_quasar->db()->lookup(_curr.gltxId(), cheque);
	_quasar->db()->setActive(cheque, true);
	cheque.setNumber("#");
	cheque.setCardId(card_id);
	cheque.setAddress(card.address());
	cheque.setShiftId(INVALID_ID);
	cheque.setPostDate(nextDue);
	cheque.setPrinted(false);
	cheque.setPaid(false);
	cheque.payments().clear();

	if (!_quasar->db()->create(cheque)) {
	    QMessageBox::critical(this, tr("Error"), tr("Create failed"));
	    return false;
	}
	break;
    default:
	QString message = tr("Can't post %1 transactions yet")
	    .arg(gltx.dataTypeName());
	QMessageBox::critical(this, tr("Error"), message);
	return false;
    }

    return true;
}