001// -------------------------------------------------------------------------------- 002// Copyright 2002-2024 Echo Three, LLC 003// 004// Licensed under the Apache License, Version 2.0 (the "License"); 005// you may not use this file except in compliance with the License. 006// You may obtain a copy of the License at 007// 008// http://www.apache.org/licenses/LICENSE-2.0 009// 010// Unless required by applicable law or agreed to in writing, software 011// distributed under the License is distributed on an "AS IS" BASIS, 012// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013// See the License for the specific language governing permissions and 014// limitations under the License. 015// -------------------------------------------------------------------------------- 016 017package com.echothree.control.user.purchase.server.command; 018 019import com.echothree.control.user.purchase.common.form.CreatePurchaseOrderForm; 020import com.echothree.control.user.purchase.common.result.PurchaseResultFactory; 021import com.echothree.model.control.party.common.PartyTypes; 022import com.echothree.model.control.purchase.server.logic.PurchaseOrderLogic; 023import com.echothree.model.control.security.common.SecurityRoleGroups; 024import com.echothree.model.control.security.common.SecurityRoles; 025import com.echothree.model.data.user.common.pk.UserVisitPK; 026import com.echothree.util.common.command.BaseResult; 027import com.echothree.util.common.validation.FieldDefinition; 028import com.echothree.util.common.validation.FieldType; 029import com.echothree.util.server.control.BaseSimpleCommand; 030import com.echothree.util.server.control.CommandSecurityDefinition; 031import com.echothree.util.server.control.PartyTypeDefinition; 032import com.echothree.util.server.control.SecurityRoleDefinition; 033import java.util.Arrays; 034import java.util.Collections; 035import java.util.List; 036 037public class CreatePurchaseOrderCommand 038 extends BaseSimpleCommand<CreatePurchaseOrderForm> { 039 040 private final static CommandSecurityDefinition COMMAND_SECURITY_DEFINITION; 041 private final static List<FieldDefinition> FORM_FIELD_DEFINITIONS; 042 043 static { 044 COMMAND_SECURITY_DEFINITION = new CommandSecurityDefinition(Collections.unmodifiableList(Arrays.asList( 045 new PartyTypeDefinition(PartyTypes.UTILITY.name(), null), 046 new PartyTypeDefinition(PartyTypes.EMPLOYEE.name(), Collections.unmodifiableList(Arrays.asList( 047 new SecurityRoleDefinition(SecurityRoleGroups.PurchaseOrder.name(), SecurityRoles.Create.name()) 048 ))) 049 ))); 050 051 FORM_FIELD_DEFINITIONS = Collections.unmodifiableList(Arrays.asList( 052 new FieldDefinition("VendorName", FieldType.ENTITY_NAME, true, null, null), 053 new FieldDefinition("TermName", FieldType.ENTITY_NAME, false, null, null), 054 new FieldDefinition("HoldUntilComplete", FieldType.BOOLEAN, false, null, null), 055 new FieldDefinition("AllowBackorders", FieldType.BOOLEAN, false, null, null), 056 new FieldDefinition("AllowSubstitutions", FieldType.BOOLEAN, false, null, null), 057 new FieldDefinition("AllowCombiningShipments", FieldType.BOOLEAN, false, null, null), 058 new FieldDefinition("Reference", FieldType.STRING, false, 1L, 40L), 059 new FieldDefinition("FreeOnBoardName", FieldType.ENTITY_NAME, false, null, null), 060 new FieldDefinition("WorkflowEntranceName", FieldType.ENTITY_NAME, false, null, null) 061 )); 062 } 063 064 /** Creates a new instance of CreatePurchaseOrderCommand */ 065 public CreatePurchaseOrderCommand(UserVisitPK userVisitPK, CreatePurchaseOrderForm form) { 066 super(userVisitPK, form, COMMAND_SECURITY_DEFINITION, FORM_FIELD_DEFINITIONS, false); 067 } 068 069 @Override 070 protected BaseResult execute() { 071 var result = PurchaseResultFactory.getCreatePurchaseOrderResult(); 072 var vendorName = form.getVendorName(); 073 var termName = form.getTermName(); 074 var holdUntilComplete = form.getHoldUntilComplete(); 075 var allowBackorders = form.getAllowBackorders(); 076 var allowSubstitutions = form.getAllowSubstitutions(); 077 var allowCombiningShipments = form.getAllowCombiningShipments(); 078 var reference = form.getReference(); 079 var freeOnBoardName = form.getFreeOnBoardName(); 080 var workflowEntranceName = form.getWorkflowEntranceName(); 081 082 var order = PurchaseOrderLogic.getInstance().createPurchaseOrder(session, this, getUserVisit(), vendorName, 083 termName, holdUntilComplete, allowBackorders, allowSubstitutions, allowCombiningShipments, reference, 084 freeOnBoardName, workflowEntranceName, getParty()); 085 086 if(!hasExecutionErrors()) { 087 result.setOrderName(order.getLastDetail().getOrderName()); 088 result.setEntityRef(order.getPrimaryKey().getEntityRef()); 089 } 090 091 return result; 092 } 093 094}