/*
* The Kuali Financial System, a comprehensive financial management system for higher education.
*
* Copyright 2005-2014 The Kuali Foundation
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.kuali.kfs.module.purap.fixture;
import org.kuali.kfs.module.purap.businessobject.PurchasingItem;
import org.kuali.kfs.module.purap.businessobject.RequisitionItem;
import org.kuali.kfs.module.purap.document.RequisitionDocument;
import org.kuali.kfs.vnd.businessobject.CommodityCode;
import org.kuali.kfs.vnd.fixture.CommodityCodeFixture;
import org.kuali.rice.krad.util.ObjectUtils;
public enum RequisitionItemFixture {
REQ_QTY_UNRESTRICTED_ITEM_1(false, // itemRestrictedIndicator
PurApItemFixture.BASIC_QTY_ITEM_1, // purApItemFixture
new RequisitionAccountingLineFixture[] { RequisitionAccountingLineFixture.BASIC_REQ_ACCOUNT_1 } // requisitionAccountMultiFixtures
),
REQ_QTY_UNRESTRICTED_ITEM_2(false, // itemRestrictedIndicator
PurApItemFixture.BASIC_QTY_ITEM_1, // purApItemFixture
new RequisitionAccountingLineFixture[] { RequisitionAccountingLineFixture.BASIC_REQ_ACCOUNT_2 } // requisitionAccountMultiFixtures
),
REQ_QTY_UNRESTRICTED_ITEM_3(false, // itemRestrictedIndicator
PurApItemFixture.BASIC_QTY_ITEM_1, // purApItemFixture
new RequisitionAccountingLineFixture[] { RequisitionAccountingLineFixture.APO_REQ_ACCOUNT_2, RequisitionAccountingLineFixture.APO_REQ_ACCOUNT_3 } // requisitionAccountMultiFixtures
),
REQ_QTY_ITEM_NEGATIVE_AMOUNT(false, // itemRestrictedIndicator
PurApItemFixture.BASIC_QTY_ITEM_NEGATIVE, // purApItemFixture
new RequisitionAccountingLineFixture[] { RequisitionAccountingLineFixture.REQ_ACCOUNT_NEGATIVE_AMOUNT } // requisitionAccountMultiFixtures
),
REQ_QTY_APO_ITEM_1(false, // itemRestrictedIndicator
PurApItemFixture.APO_QTY_ITEM_1, // purApItemFixture
new RequisitionAccountingLineFixture[] { RequisitionAccountingLineFixture.APO_REQ_ACCOUNT_1 } // requisitionAccountMultiFixtures
), REQ_SERVICE_APO_ITEM_1(false, // itemRestrictedIndicator
PurApItemFixture.APO_SERVICE_ITEM_1, // purApItemFixture
new RequisitionAccountingLineFixture[] { RequisitionAccountingLineFixture.APO_REQ_ACCOUNT_2, RequisitionAccountingLineFixture.APO_REQ_ACCOUNT_3 } // requisitionAccountMultiFixtures
), REQ_FREIGHT_ITEM_1(false, // itemRestrictedIndicator
PurApItemFixture.APO_FREIGHT_ITEM_1, // purApItemFixture
new RequisitionAccountingLineFixture[] { RequisitionAccountingLineFixture.APO_REQ_ACCOUNT_4 } // requisitionAccountMultiFixtures
),
REQ_MULTI_ITEM_QUANTITY(false, // itemRestrictedIndicator
PurApItemFixture.REQ_MULTI_ITEM_QUANTITY, // purApItemFixture
new RequisitionAccountingLineFixture[] { RequisitionAccountingLineFixture.REQ_ACCOUNT_MULTI_QUANTITY } // requisitionAccountMultiFixtures
),
REQ_MULTI_ITEM_NON_QUANTITY(false, // itemRestrictedIndicator
PurApItemFixture.REQ_MULTI_ITEM_NON_QUANTITY, // purApItemFixture
new RequisitionAccountingLineFixture[] { RequisitionAccountingLineFixture.REQ_ACCOUNT_MULTI_NON_QUANTITY } // requisitionAccountMultiFixtures
),
REQ_ITEM_NO_APO(false, // itemRestrictedIndicator
PurApItemFixture.BASIC_QTY_ITEM_NO_APO, // purApItemFixture
new RequisitionAccountingLineFixture[] { RequisitionAccountingLineFixture.BASIC_REQ_ACCOUNT_1 } // requisitionAccountMultiFixtures
),
REQ_ITEM_NO_APO_2(false, // itemRestrictedIndicator
PurApItemFixture.BASIC_QTY_ITEM_NO_APO, // purApItemFixture
new RequisitionAccountingLineFixture[] { RequisitionAccountingLineFixture.BASIC_REQ_ACCOUNT_2 } // requisitionAccountMultiFixtures
),
REQ_ITEM_PERFORMANCE(false, // itemRestrictedIndicator
PurApItemFixture.BASIC_QTY_ITEM_PERFORMANCE, // purApItemFixture
new RequisitionAccountingLineFixture[] { RequisitionAccountingLineFixture.PERFORMANCE_ACCOUNT } // requisitionAccountMultiFixtures
),
REQ_ITEM_NO_APO_TOTAL_NOT_GREATER_THAN_ZERO(false, // itemRestrictedIndicator
PurApItemFixture.BASIC_QTY_ITEM_NO_APO_TOTAL_NOT_GREATER_THAN_ZERO, // purApItemFixture
new RequisitionAccountingLineFixture[] { RequisitionAccountingLineFixture.BASIC_REQ_ACCOUNT_1 } // requisitionAccountMultiFixtures
),
REQ_ITEM_NO_APO_RESTRICTED_ITEM (
true, // itemRestrictedIndicator
PurApItemFixture.APO_QTY_ITEM_1, // purApItemFixture
new RequisitionAccountingLineFixture[] {RequisitionAccountingLineFixture.APO_REQ_ACCOUNT_1} // requisitionAccountMultiFixtures
),
REQ_ITEM_NO_APO_CONTAIN_RESTRICTED_ITEM(true, // itemRestrictedIndicator
PurApItemFixture.BASIC_QTY_ITEM_1, // purApItemFixture
new RequisitionAccountingLineFixture[] { RequisitionAccountingLineFixture.BASIC_REQ_ACCOUNT_1 } // requisitionAccountMultiFixtures
),
REQ_VALID_FREIGHT_ITEM(false, // itemRestrictedIndicator
PurApItemFixture.VALID_FREIGHT_ITEM, // purApItemFixture
new RequisitionAccountingLineFixture[] { RequisitionAccountingLineFixture.BASIC_REQ_ACCOUNT_1 } // requisitionAccountMultiFixtures
),
REQ_VALID_SHIPPING_AND_HANDLING_ITEM(false, // itemRestrictedIndicator
PurApItemFixture.VALID_SHIPPING_AND_HANDLING_ITEM, // purApItemFixture
new RequisitionAccountingLineFixture[] { RequisitionAccountingLineFixture.BASIC_REQ_ACCOUNT_1 } // requisitionAccountMultiFixtures
),
REQ_WITH_MISC_CREDIT_ITEM(false, // itemRestrictedIndicator
PurApItemFixture.VALID_MISC_CREDIT_ITEM, // purApItemFixture
new RequisitionAccountingLineFixture[] { RequisitionAccountingLineFixture.BASIC_REQ_ACCOUNT_1 } // requisitionAccountMultiFixtures
),
REQ_WITH_NEGATIVE_FREIGHT_ITEM(false, // itemRestrictedIndicator
PurApItemFixture.NEGATIVE_FREIGHT_ITEM, // purApItemFixture
new RequisitionAccountingLineFixture[] { RequisitionAccountingLineFixture.BASIC_REQ_ACCOUNT_1 } // requisitionAccountMultiFixtures
),
REQ_WITH_NEGATIVE_SHIPPING_AND_HANDLING_ITEM(false, // itemRestrictedIndicator
PurApItemFixture.NEGATIVE_SHIPPING_AND_HANDLING_ITEM, // purApItemFixture
new RequisitionAccountingLineFixture[] { RequisitionAccountingLineFixture.BASIC_REQ_ACCOUNT_1 } // requisitionAccountMultiFixtures
),
REQ_WITH_ZERO_FREIGHT_ITEM(false, // itemRestrictedIndicator
PurApItemFixture.ZERO_FREIGHT_ITEM, // purApItemFixture
new RequisitionAccountingLineFixture[] { RequisitionAccountingLineFixture.BASIC_REQ_ACCOUNT_1 } // requisitionAccountMultiFixtures
),
REQ_WITH_ZERO_SHIPPING_AND_HANDLING_ITEM(false, // itemRestrictedIndicator
PurApItemFixture.ZERO_SHIPPING_AND_HANDLING_ITEM, // purApItemFixture
new RequisitionAccountingLineFixture[] { RequisitionAccountingLineFixture.BASIC_REQ_ACCOUNT_1 } // requisitionAccountMultiFixtures
),
REQ_WITH_MISC_ITEM_NO_DESC(false, // itemRestrictedIndicator
PurApItemFixture.MISC_ITEM_NO_DESC, // purApItemFixture
new RequisitionAccountingLineFixture[] { RequisitionAccountingLineFixture.BASIC_REQ_ACCOUNT_1 } // requisitionAccountMultiFixtures
),
REQ_ITEM_NO_APO_BASIC_ACTIVE_COMMODITY_CODE(false, // itemRestrictedIndicator
PurApItemFixture.BASIC_QTY_ITEM_NO_APO, // purApItemFixture
new RequisitionAccountingLineFixture[] { RequisitionAccountingLineFixture.BASIC_REQ_ACCOUNT_1 }, // requisitionAccountMultiFixtures
CommodityCodeFixture.COMMODITY_CODE_BASIC_ACTIVE //commodityCodeFixture
),
REQ_ITEM_NO_APO_BASIC_INACTIVE_COMMODITY_CODE(false, // itemRestrictedIndicator
PurApItemFixture.BASIC_QTY_ITEM_NO_APO, // purApItemFixture
new RequisitionAccountingLineFixture[] { RequisitionAccountingLineFixture.BASIC_REQ_ACCOUNT_1 }, // requisitionAccountMultiFixtures
CommodityCodeFixture.COMMODITY_CODE_BASIC_INACTIVE //commodityCodeFixture
),
REQ_ITEM_NO_APO_NON_EXISTENCE_COMMODITY_CODE(false, // itemRestrictedIndicator
PurApItemFixture.BASIC_QTY_ITEM_NO_APO, // purApItemFixture
new RequisitionAccountingLineFixture[] { RequisitionAccountingLineFixture.BASIC_REQ_ACCOUNT_1 }, // requisitionAccountMultiFixtures
CommodityCodeFixture.COMMODITY_CODE_NON_EXISTENCE //commodityCodeFixture
),
REQ_ITEM_APO_BASIC_INACTIVE_COMMODITY_CODE(false, // itemRestrictedIndicator
PurApItemFixture.APO_QTY_ITEM_1, // purApItemFixture
new RequisitionAccountingLineFixture[] { RequisitionAccountingLineFixture.BASIC_REQ_ACCOUNT_1 }, // requisitionAccountMultiFixtures
CommodityCodeFixture.COMMODITY_CODE_BASIC_INACTIVE //commodityCodeFixture
),
REQ_ITEM_APO_COMMODITY_CODE_WITH_SENSITIVE_DATA(false, // itemRestrictedIndicator
PurApItemFixture.APO_QTY_ITEM_1, // purApItemFixture
new RequisitionAccountingLineFixture[] { RequisitionAccountingLineFixture.BASIC_REQ_ACCOUNT_1 }, // requisitionAccountMultiFixtures
CommodityCodeFixture.COMMODITY_CODE_WITH_SENSITIVE_DATA //commodityCodeFixture
),
REQ_ITEM_INVALID_QUANTITY_BASED_NO_QUANTITY(false, // itemRestrictedIndicator
PurApItemFixture.INVALID_QTY_ITEM_NULL_QUANTITY, // purApItemFixture
new RequisitionAccountingLineFixture[] { RequisitionAccountingLineFixture.BASIC_REQ_ACCOUNT_1 } // requisitionAccountMultiFixtures
),
REQ_ITEM_VALID_CAPITAL_ASSET(false, // itemRestrictedIndicator
PurApItemFixture.APO_QTY_ITEM_1, // purApItemFixture
new RequisitionAccountingLineFixture[] {
RequisitionAccountingLineFixture.APO_ACCOUNT_VALID_CAPITAL_ASSET_OBJECT_CODE } // requisitionAccountMultiFixtures
),
REQ_ITEM_INVALID_CAPITAL_ASSET(false, // itemRestrictedIndicator
PurApItemFixture.APO_QTY_ITEM_1, // purApItemFixture
new RequisitionAccountingLineFixture[] {
RequisitionAccountingLineFixture.APO_ACCOUNT_VALID_CAPITAL_ASSET_OBJECT_CODE_50_PERCENT,
RequisitionAccountingLineFixture.APO_ACCOUNT_VALID_EXPENSE_OBJECT_CODE_50_PERCENT } // requisitionAccountMultiFixtures
),
REQ_QTY_B2B_ITEM_1(false, // itemRestrictedIndicator
PurApItemFixture.BASIC_B2B_QTY_ITEM_1, // purApItemFixture
new RequisitionAccountingLineFixture[] { RequisitionAccountingLineFixture.BASIC_REQ_ACCOUNT_1 } // requisitionAccountMultiFixtures
),
;
private boolean itemRestrictedIndicator;
private PurApItemFixture purApItemFixture;
private RequisitionAccountingLineFixture[] requisitionAccountingLineFixtures;
private CommodityCodeFixture commodityCodeFixture;
private RequisitionItemFixture(boolean itemRestrictedIndicator, PurApItemFixture purApItemFixture, RequisitionAccountingLineFixture[] requisitionAccountingLineFixtures) {
this.itemRestrictedIndicator = itemRestrictedIndicator;
this.purApItemFixture = purApItemFixture;
this.requisitionAccountingLineFixtures = requisitionAccountingLineFixtures;
}
private RequisitionItemFixture(boolean itemRestrictedIndicator, PurApItemFixture purApItemFixture, RequisitionAccountingLineFixture[] requisitionAccountingLineFixtures, CommodityCodeFixture commodityCodeFixture) {
this.itemRestrictedIndicator = itemRestrictedIndicator;
this.purApItemFixture = purApItemFixture;
this.requisitionAccountingLineFixtures = requisitionAccountingLineFixtures;
this.commodityCodeFixture = commodityCodeFixture;
}
public void addTo(RequisitionDocument requisitionDocument) {
RequisitionItem item = null;
boolean active = true;
boolean restrictedItemsIndicator = true;
item = (RequisitionItem) this.createRequisitionItem();
if (item.getCommodityCode() != null) {
active = item.getCommodityCode().isActive();
restrictedItemsIndicator = item.getCommodityCode().isRestrictedItemsIndicator();
}
requisitionDocument.addItem(item);
//Just for unit tests, we need these following lines so that we could set the commodity codes active status to true/false
//and set the restricted indicator to true/false as we need to.
if (ObjectUtils.isNotNull(item.getCommodityCode())) {
item.getCommodityCode().setActive(active);
item.getCommodityCode().setRestrictedItemsIndicator(restrictedItemsIndicator);
}
// iterate over the accounts
for (RequisitionAccountingLineFixture requisitionAccountMultiFixture : requisitionAccountingLineFixtures) {
requisitionAccountMultiFixture.addTo(item);
}
}
public PurchasingItem createRequisitionItem() {
RequisitionItem item = (RequisitionItem) purApItemFixture.createPurApItem(RequisitionItem.class);
item.setItemRestrictedIndicator(itemRestrictedIndicator);
if (commodityCodeFixture != null) {
CommodityCode commodityCode = commodityCodeFixture.createCommodityCode();
item.setCommodityCode(commodityCode);
item.setPurchasingCommodityCode(commodityCode.getPurchasingCommodityCode());
}
return item;
}
public PurchasingItem createRequisitionItemForCapitalAsset() {
RequisitionItem item = (RequisitionItem)createRequisitionItem();
if (requisitionAccountingLineFixtures.length > 0) {
for(int i = 0; i < requisitionAccountingLineFixtures.length ; i++) {
requisitionAccountingLineFixtures[i].addTo(item);
}
}
return item;
}
/**
* @return
*/
// public PurApItem createRequisitionItem() {
// return createRequisitionItem(defaultItemFixture);
// }
//
//
//
// /**
// *
// * This method adds an item to a document
// * @param document
// * @param purApItemFixture
// * @throws IllegalAccessException
// * @throws InstantiationException
// */
// public RequisitionItem addTo(PurchasingAccountsPayableDocument document, PurApItemFixture purApItemFixture)
// throws IllegalAccessException, InstantiationException {
// RequisitionItem item = (RequisitionItem)this.createRequisitionItem(purApItemFixture);
// document.addItem(item);
// return item;
//
// }
}