Package com.jada.order.document

Source Code of com.jada.order.document.OrderEngineBase$ItemBalance

/*
* Copyright 2007-2010 JadaSite.

* This file is part of JadaSite.
* JadaSite is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.

* JadaSite is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.

* You should have received a copy of the GNU General Public License
* along with JadaSite.  If not, see <http://www.gnu.org/licenses/>.
*/

package com.jada.order.document;

import java.text.DecimalFormat;
import java.util.Iterator;
import java.util.Vector;

import com.jada.jpa.entity.Coupon;
import com.jada.jpa.entity.CreditDetail;
import com.jada.jpa.entity.CreditDetailTax;
import com.jada.jpa.entity.CreditHeader;
import com.jada.jpa.entity.InvoiceDetail;
import com.jada.jpa.entity.InvoiceDetailTax;
import com.jada.jpa.entity.InvoiceHeader;
import com.jada.jpa.entity.OrderDetailTax;
import com.jada.jpa.entity.OrderHeader;
import com.jada.jpa.entity.OrderItemDetail;
import com.jada.jpa.entity.ShipDetail;
import com.jada.jpa.entity.ShipHeader;
import com.jada.jpa.entity.Site;
import com.jada.jpa.entity.Tax;
import com.jada.order.payment.CreditCardInfo;
import com.jada.util.Constants;
import com.jada.util.Format;
import com.jada.util.Utility;

public class OrderEngineBase {
  Vector<String> itemSkuCds = new Vector<String>();
  Vector<Coupon> coupons = new Vector<Coupon>();
  CreditCardInfo creditCardInfo = null;
  DecimalFormat format = new DecimalFormat("0000000000");
 
  public void setDirty(String itemSkuCd) {
    itemSkuCds.add(itemSkuCd);
  }
 
  public void setDirty(Coupon coupon) {
    coupons.add(coupon);
  }
 
  public boolean isDirty(String itemSkuCd) {
    if (itemSkuCd == null) {
      return true;
    }
   
    Iterator<?> iterator = itemSkuCds.iterator();
    while (iterator.hasNext()) {
      String i = (String) iterator.next();
      if (i.equals(itemSkuCd)) {
        return true;
      }
    }
    return false;
  }

  public boolean isDirty(Coupon value) {
    Iterator<?> iterator = coupons.iterator();
    while (iterator.hasNext()) {
      Coupon coupon = (Coupon) iterator.next();
      if (coupon.equals(value)) {
        return true;
      }
    }
    return false;
  }
 
  public void clean() {
    itemSkuCds.clear();
    coupons.clear();
  }
 
  public boolean isOpen(OrderHeader orderHeader) {
    return orderHeader.getOrderStatus().equals(Constants.ORDERSTATUS_OPEN);
  }
 
  public boolean isProcessing(OrderHeader orderHeader) {
    return orderHeader.getOrderStatus().equals(Constants.ORDERSTATUS_PROCESSING);
  }
 
  public boolean isVoided(OrderHeader orderHeader) {
    return orderHeader.getOrderStatus().equals(Constants.ORDERSTATUS_VOIDED);
  }
 
  public boolean isCancelled(OrderHeader orderHeader) {
    return orderHeader.getOrderStatus().equals(Constants.ORDERSTATUS_CANCELLED);
  }
 
  public boolean isCompleted(OrderHeader orderHeader) {
    return orderHeader.getOrderStatus().equals(Constants.ORDERSTATUS_COMPLETED);
  }

  public boolean isClosed(OrderHeader orderHeader) {
    return orderHeader.getOrderStatus().equals(Constants.ORDERSTATUS_CLOSED);
  }
 
  public boolean isOnHold(OrderHeader orderHeader) {
    return orderHeader.getOrderStatus().equals(Constants.ORDERSTATUS_ONHOLD);
  }
 
  public boolean isAuthorized(OrderHeader orderHeader) {
    return orderHeader.getPaymentTran() != null;
  }
 
  public boolean isOpen(InvoiceHeader invoiceHeader) {
    return invoiceHeader.getInvoiceStatus().equals(Constants.ORDERSTATUS_OPEN);
  }

  public boolean isProcessing(InvoiceHeader invoiceHeader) {
    return invoiceHeader.getInvoiceStatus().equals(Constants.ORDERSTATUS_PROCESSING);
  }
 
  public boolean isCancelled(InvoiceHeader invoiceHeader) {
    return invoiceHeader.getInvoiceStatus().equals(Constants.ORDERSTATUS_CANCELLED);
  }
 
  public boolean isCompleted(InvoiceHeader invoiceHeader) {
    return invoiceHeader.getInvoiceStatus().equals(Constants.ORDERSTATUS_COMPLETED);
  }
 
  public boolean isClosed(InvoiceHeader invoiceHeader) {
    return invoiceHeader.getInvoiceStatus().equals(Constants.ORDERSTATUS_CLOSED);
  }
 
  public boolean isVoided(InvoiceHeader invoiceHeader) {
    return invoiceHeader.getInvoiceStatus().equals(Constants.ORDERSTATUS_VOIDED);
  }
 
  public boolean isOpen(ShipHeader shipHeader) {
    return shipHeader.getShipStatus().equals(Constants.ORDERSTATUS_OPEN);
  }
 
  public boolean isProcessing(ShipHeader shipHeader) {
    return shipHeader.getShipStatus().equals(Constants.ORDERSTATUS_PROCESSING);
  }
 
  public boolean isCancelled(ShipHeader shipHeader) {
    return shipHeader.getShipStatus().equals(Constants.ORDERSTATUS_CANCELLED);
  }
 
  public boolean isCompleted(ShipHeader shipHeader) {
    return shipHeader.getShipStatus().equals(Constants.ORDERSTATUS_COMPLETED);
  }
 
  public boolean isClosed(ShipHeader shipHeader) {
    return shipHeader.getShipStatus().equals(Constants.ORDERSTATUS_CLOSED);
  }
 
  public boolean isVoided(ShipHeader shipHeader) {
    return shipHeader.getShipStatus().equals(Constants.ORDERSTATUS_VOIDED);
  }
 
 
  public boolean isOpen(CreditHeader creditHeader) {
    return creditHeader.getCreditStatus().equals(Constants.ORDERSTATUS_OPEN);
  }
 
  public boolean isProcessing(CreditHeader creditHeader) {
    return creditHeader.getCreditStatus().equals(Constants.ORDERSTATUS_PROCESSING);
  }
 
  public boolean isCancelled(CreditHeader creditHeader) {
    return creditHeader.getCreditStatus().equals(Constants.ORDERSTATUS_CANCELLED);
  }
 
  public boolean isCompleted(CreditHeader creditHeader) {
    return creditHeader.getCreditStatus().equals(Constants.ORDERSTATUS_COMPLETED);
  }
 
  public boolean isClosed(CreditHeader creditHeader) {
    return creditHeader.getCreditStatus().equals(Constants.ORDERSTATUS_CLOSED);
  }
 
  public boolean isVoided(CreditHeader creditHeader) {
    return creditHeader.getCreditStatus().equals(Constants.ORDERSTATUS_VOIDED);
  }

  public String generateNumber(Site site, String sequenceId) throws Exception {
    Long sequenceNum = Utility.getNextSequenceNum(site, sequenceId);
    return format.format(sequenceNum.longValue());
  }
 
  public CreditCardInfo getCreditCardInfo() {
    return creditCardInfo;
  }

  public void setCreditCardInfo(CreditCardInfo creditCardInfo) {
    this.creditCardInfo = creditCardInfo;
  }
 
  public String calcStatus(OrderHeader orderHeader) throws Exception {
    if (orderHeader.getOrderStatus() != null) {
      if (orderHeader.getOrderStatus().equals(Constants.ORDERSTATUS_CANCELLED)) {
        return Constants.ORDERSTATUS_CANCELLED;
      }
      if (orderHeader.getOrderStatus().equals(Constants.ORDERSTATUS_ONHOLD)) {
        return Constants.ORDERSTATUS_ONHOLD;
      }
    }
   
    if (!Format.isNullOrEmpty(orderHeader.getOrderAbundantLoc())) {
      return Constants.ORDERSTATUS_OPEN;
    }
   
    boolean hasInvoice = false;
    boolean hasShip = false;
    boolean isAuthorized = false;
    int voidInvoiceQty = 0;
    if (orderHeader.getInvoiceHeaders().size() > 0) {
      hasInvoice = true;
    }
    for (InvoiceHeader invoiceHeader : orderHeader.getInvoiceHeaders()) {
      if (isVoided(invoiceHeader)) {
        for (InvoiceDetail invoiceDetail : invoiceHeader.getInvoiceDetails()) {
          voidInvoiceQty += invoiceDetail.getItemInvoiceQty();
        }
      }
    }

    if (orderHeader.getShipHeaders().size() > 0) {
      hasShip = true;
    }
    if (orderHeader.getPaymentTran() != null) {
      isAuthorized = true;
    }
    if (orderHeader.getPaymentGatewayProvider() == null) {
      isAuthorized = true;
    }
    if (!hasInvoice && !hasShip && !isAuthorized) {
      return Constants.ORDERSTATUS_OPEN;
    }
   
    int itemOrderQty = 0;
    for (OrderItemDetail orderItemDetail : orderHeader.getOrderItemDetails()) {
      itemOrderQty += orderItemDetail.getItemOrderQty();
    }
   
    int itemInvoiceQty = 0;
    for (InvoiceHeader invoiceHeader : orderHeader.getInvoiceHeaders()) {
      if (!isCompleted(invoiceHeader) && !isClosed(invoiceHeader) && !isVoided(invoiceHeader)) {
        continue;
      }
      for (InvoiceDetail invoiceDetail : invoiceHeader.getInvoiceDetails()) {
        itemInvoiceQty += invoiceDetail.getItemInvoiceQty();
      }
    }
   
    if (itemInvoiceQty != itemOrderQty) {
      return Constants.ORDERSTATUS_PROCESSING;
    }
    else {
      boolean allClosed = true;
      for (InvoiceHeader invoiceHeader : orderHeader.getInvoiceHeaders()) {
        if (isCompleted(invoiceHeader)) {
          allClosed = false;
          break;
        }
      }
      if (allClosed) {
        return Constants.ORDERSTATUS_CLOSED;
      }
      else {
        int itemShipQty = 0;
        for (ShipHeader shipHeader : orderHeader.getShipHeaders()) {
          if (!isCompleted(shipHeader) && !isClosed(shipHeader) && !isVoided(shipHeader)) {
            continue;
          }
          for (ShipDetail shipDetail : shipHeader.getShipDetails()) {
            itemShipQty += shipDetail.getItemShipQty();
          }
        }
        if (itemShipQty != itemOrderQty) {
          return Constants.ORDERSTATUS_PROCESSING;
        }
        else {
          return Constants.ORDERSTATUS_COMPLETED;
        }
      }
    }
  }
 
  public String calcStatus(InvoiceHeader invoiceHeader) throws Exception {
    if (Format.isNullOrEmpty(invoiceHeader.getInvoiceStatus())) {
      return Constants.ORDERSTATUS_PROCESSING;
    }
   
    int itemInvoiceQty = 0;
    for (InvoiceDetail invoiceDetail : invoiceHeader.getInvoiceDetails()) {
      itemInvoiceQty += invoiceDetail.getItemInvoiceQty();
    }
   
    int itemCreditQty = 0;
    for (CreditHeader creditHeader : invoiceHeader.getCreditHeaders()) {
      if (isVoided(creditHeader)) {
        continue;
      }
      if (isCancelled(creditHeader)) {
        continue;
      }
      for (CreditDetail creditDetail : creditHeader.getCreditDetails()) {
        itemCreditQty += creditDetail.getItemCreditQty();
      }
    }
   
    if (itemInvoiceQty == itemCreditQty) {
      return Constants.ORDERSTATUS_CLOSED;
    }
    return invoiceHeader.getInvoiceStatus();
  }
 
  public String calcStatus(CreditHeader creditHeader) throws Exception {
    if (Format.isNullOrEmpty(creditHeader.getCreditStatus())) {
      return Constants.ORDERSTATUS_PROCESSING;
    }
    return creditHeader.getCreditStatus();
  }
 
  public String calcStatus(ShipHeader shipHeader) throws Exception {
    if (Format.isNullOrEmpty(shipHeader.getShipStatus())) {
      return Constants.ORDERSTATUS_PROCESSING;
    }
    return shipHeader.getShipStatus();
  }

  public ItemBalance getItemBalance(OrderHeader orderHeader, String itemSkuCd, InvoiceHeader invoiceHeader, CreditHeader creditHeader, ShipHeader shipHeader) throws Exception {
    Iterator<?> iterator = orderHeader.getOrderItemDetails().iterator();
    boolean found = false;
    OrderItemDetail orderItemDetail = null;
    while (iterator.hasNext()) {
      orderItemDetail = (OrderItemDetail) iterator.next();
      if (orderItemDetail.getItemSkuCd().equals(itemSkuCd)) {
        found = true;
        break;
      }
    }
    if (!found) {
      throw new OrderItemNotFoundException("");
    }
   
    Vector<ItemTaxBalance> taxBalances = new Vector<ItemTaxBalance>();
    ItemBalance itemBalance = new ItemBalance();
    itemBalance.setOrderQty(orderItemDetail.getItemOrderQty().intValue());
    float orderAmount = orderItemDetail.getItemDetailAmount().floatValue() - orderItemDetail.getItemDetailDiscountAmount().floatValue();
    itemBalance.setOrderAmount(orderAmount);
    Iterator<?> taxes = orderItemDetail.getOrderDetailTaxes().iterator();
    while (taxes.hasNext()) {
      OrderDetailTax orderDetailTax = (OrderDetailTax) taxes.next();
      ItemTaxBalance itemTax = locateItemTax(orderDetailTax.getTax(), orderDetailTax.getTaxName(), taxBalances);
      itemTax.setOrderTaxAmount(orderDetailTax.getTaxAmount());
    }
   
    iterator = orderItemDetail.getInvoiceDetails().iterator();
    int invoiceQty = 0;
    float invoiceAmount = 0;
    while (iterator.hasNext()) {
      InvoiceDetail invoiceDetail = (InvoiceDetail) iterator.next();
      InvoiceHeader header = invoiceDetail.getInvoiceHeader();
      if (header.getInvoiceHeaderId() == null) {
        continue;
      }
      if (header.getInvoiceStatus().equals(Constants.ORDERSTATUS_CANCELLED) || header.getInvoiceStatus().equals(Constants.ORDERSTATUS_VOIDED)) {
        continue;
      }
      if (invoiceHeader != null) {
        if (header.getInvoiceHeaderId().equals(invoiceHeader.getInvoiceHeaderId())) {
          continue;
        }
      }
      invoiceQty += invoiceDetail.getItemInvoiceQty().intValue();
      invoiceAmount += invoiceDetail.getItemInvoiceAmount().floatValue();
     
      Iterator<?> invoiceTaxes = invoiceDetail.getInvoiceDetailTaxes().iterator();
      while (invoiceTaxes.hasNext()) {
        InvoiceDetailTax invoiceDetailTax = (InvoiceDetailTax) invoiceTaxes.next();
        ItemTaxBalance itemTax = locateItemTax(invoiceDetailTax.getTax(), invoiceDetailTax.getTaxName(), taxBalances);
        float taxAmount = itemTax.getInvoiceTaxAmount() + invoiceDetailTax.getTaxAmount();
        itemTax.setInvoiceTaxAmount(taxAmount);
      }
    }
    itemBalance.setInvoiceQty(invoiceQty);
    itemBalance.setInvoiceAmount(invoiceAmount);

    iterator = orderItemDetail.getShipDetails().iterator();
    int shipQty = 0;
    while (iterator.hasNext()) {
      ShipDetail shipDetail = (ShipDetail) iterator.next();
      ShipHeader header = shipDetail.getShipHeader();
      if (header.getShipHeaderId() == null) {
        continue;
      }
      if (header.getShipStatus().equals(Constants.ORDERSTATUS_CANCELLED) || header.getShipStatus().equals(Constants.ORDERSTATUS_VOIDED)) {
        continue;
      }
      if (shipHeader != null) {
        if (header.getShipHeaderId().equals(shipHeader.getShipHeaderId())) {
          continue;
        }
      }
      shipQty += shipDetail.getItemShipQty().intValue();
    }
    itemBalance.setShipQty(shipQty);
   
    iterator = orderItemDetail.getCreditDetails().iterator();
    int creditQty = 0;
    float creditAmount = 0;
    while (iterator.hasNext()) {
      CreditDetail creditDetail = (CreditDetail) iterator.next();
      CreditHeader header = creditDetail.getCreditHeader();
      if (header.getCreditHeaderId() == null) {
        continue;
      }
      if (header.getCreditStatus().equals(Constants.ORDERSTATUS_CANCELLED) || header.getCreditStatus().equals(Constants.ORDERSTATUS_VOIDED)) {
        continue;
      }
      if (creditHeader != null) {
        if (header.getCreditHeaderId().equals(creditHeader.getCreditHeaderId())) {
          continue;
        }
      }
      creditQty += creditDetail.getItemCreditQty().intValue();
      creditAmount += creditDetail.getItemCreditAmount().floatValue();
     
      Iterator<?> creditTaxes = creditDetail.getCreditDetailTaxes().iterator();
      while (creditTaxes.hasNext()) {
        CreditDetailTax creditDetailTax = (CreditDetailTax) creditTaxes.next();
        ItemTaxBalance itemTax = locateItemTax(creditDetailTax.getTax(), creditDetailTax.getTaxName(), taxBalances);
        float taxAmount = itemTax.getCreditTaxAmount() + creditDetailTax.getTaxAmount();
        itemTax.setCreditTaxAmount(taxAmount);
      }
    }
    ItemTaxBalance itemTaxBalances[] = new ItemTaxBalance[taxBalances.size()];
    taxBalances.copyInto(itemTaxBalances);
    itemBalance.setItemTaxBalances(itemTaxBalances);
    itemBalance.setCreditQty(creditQty);
    itemBalance.setCreditAmount(creditAmount);

    return itemBalance;
  }
 
  private ItemTaxBalance locateItemTax(Tax tax, String taxName, Vector<ItemTaxBalance> vector) {
    Iterator<?> iterator = vector.iterator();
    ItemTaxBalance itemTax = null;
    boolean found = false;
    while (iterator.hasNext()) {
      itemTax = (ItemTaxBalance) iterator.next();
      if (itemTax.getTax().getTaxId().equals(tax.getTaxId())) {
        found = true;
        break;
      }
    }
    if (!found) {
      itemTax = new ItemTaxBalance();
      itemTax.setTax(tax);
      itemTax.setTaxName(taxName);
      vector.add(itemTax);
    }
    return itemTax;
  }
 
  class ItemTaxBalance {
    Tax tax;
    String taxName;
    float orderTaxAmount;
    float invoiceTaxAmount;
    float creditTaxAmount;
    public Tax getTax() {
      return tax;
    }
    public void setTax(Tax tax) {
      this.tax = tax;
    }
    public String getTaxName() {
      return taxName;
    }
    public void setTaxName(String taxName) {
      this.taxName = taxName;
    }
    public float getOrderTaxAmount() {
      return orderTaxAmount;
    }
    public void setOrderTaxAmount(float orderTaxAmount) {
      this.orderTaxAmount = orderTaxAmount;
    }
    public float getInvoiceTaxAmount() {
      return invoiceTaxAmount;
    }
    public void setInvoiceTaxAmount(float invoiceTaxAmount) {
      this.invoiceTaxAmount = invoiceTaxAmount;
    }
    public float getCreditTaxAmount() {
      return creditTaxAmount;
    }
    public void setCreditTaxAmount(float creditTaxAmount) {
      this.creditTaxAmount = creditTaxAmount;
    }
  }
  class ItemBalance {
    public int orderQty;
    public float orderAmount;
    public int invoiceQty;
    public float invoiceAmount;
    public int shipQty;
    public int creditQty;
    public float creditAmount;
    ItemTaxBalance itemTaxBalances[];
    public int getOrderQty() {
      return orderQty;
    }
    public void setOrderQty(int orderQty) {
      this.orderQty = orderQty;
    }
    public int getInvoiceQty() {
      return invoiceQty;
    }
    public void setInvoiceQty(int invoiceQty) {
      this.invoiceQty = invoiceQty;
    }
    public int getShipQty() {
      return shipQty;
    }
    public void setShipQty(int shipQty) {
      this.shipQty = shipQty;
    }
    public int getCreditQty() {
      return creditQty;
    }
    public void setCreditQty(int creditQty) {
      this.creditQty = creditQty;
    }
    public float getOrderAmount() {
      return orderAmount;
    }
    public void setOrderAmount(float orderAmount) {
      this.orderAmount = orderAmount;
    }
    public float getInvoiceAmount() {
      return invoiceAmount;
    }
    public void setInvoiceAmount(float invoiceAmount) {
      this.invoiceAmount = invoiceAmount;
    }
    public float getCreditAmount() {
      return creditAmount;
    }
    public void setCreditAmount(float creditAmount) {
      this.creditAmount = creditAmount;
    }
    public ItemTaxBalance[] getItemTaxBalances() {
      return itemTaxBalances;
    }
    public void setItemTaxBalances(ItemTaxBalance[] itemTaxBalances) {
      this.itemTaxBalances = itemTaxBalances;
    }
  }
}
TOP

Related Classes of com.jada.order.document.OrderEngineBase$ItemBalance

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.
script>