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.sales.server.command; 018 019import com.echothree.control.user.sales.common.form.CreateSalesOrderForm; 020import com.echothree.control.user.sales.common.result.SalesResultFactory; 021import com.echothree.model.control.party.common.PartyTypes; 022import com.echothree.model.control.sales.server.logic.SalesOrderLogic; 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 CreateSalesOrderCommand 038 extends BaseSimpleCommand<CreateSalesOrderForm> { 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.SalesOrder.name(), SecurityRoles.Create.name()) 048 ))) 049 ))); 050 051 FORM_FIELD_DEFINITIONS = Collections.unmodifiableList(Arrays.asList( 052 new FieldDefinition("BatchName", FieldType.ENTITY_NAME, false, null, null), 053 new FieldDefinition("SourceName", FieldType.ENTITY_NAME, false, null, null), 054 new FieldDefinition("CurrencyIsoName", FieldType.ENTITY_NAME, false, null, null), 055 new FieldDefinition("TermName", FieldType.ENTITY_NAME, false, null, null), 056 new FieldDefinition("BillToPartyName", FieldType.ENTITY_NAME, false, null, null), 057 new FieldDefinition("OrderPriorityName", FieldType.ENTITY_NAME, false, null, null), 058 new FieldDefinition("HoldUntilComplete", FieldType.BOOLEAN, false, null, null), 059 new FieldDefinition("AllowBackorders", FieldType.BOOLEAN, false, null, null), 060 new FieldDefinition("AllowSubstitutions", FieldType.BOOLEAN, false, null, null), 061 new FieldDefinition("AllowCombiningShipments", FieldType.BOOLEAN, false, null, null), 062 new FieldDefinition("Reference", FieldType.STRING, false, 1L, 40L), 063 new FieldDefinition("FreeOnBoardName", FieldType.ENTITY_NAME, false, null, null), 064 new FieldDefinition("Taxable", FieldType.BOOLEAN, false, null, null), 065 new FieldDefinition("WorkflowEntranceName", FieldType.ENTITY_NAME, false, null, null) 066 )); 067 } 068 069 /** Creates a new instance of CreateSalesOrderCommand */ 070 public CreateSalesOrderCommand(UserVisitPK userVisitPK, CreateSalesOrderForm form) { 071 super(userVisitPK, form, COMMAND_SECURITY_DEFINITION, FORM_FIELD_DEFINITIONS, false); 072 } 073 074 @Override 075 protected BaseResult execute() { 076 var result = SalesResultFactory.getCreateSalesOrderResult(); 077 var batchName = form.getBatchName(); 078 var sourceName = form.getSourceName(); 079 var billToPartyName = form.getBillToPartyName(); 080 var orderPriorityName = form.getOrderPriorityName(); 081 var currencyIsoName = form.getCurrencyIsoName(); 082 var termName = form.getTermName(); 083 var holdUntilComplete = form.getHoldUntilComplete(); 084 var allowBackorders = form.getAllowBackorders(); 085 var allowSubstitutions = form.getAllowSubstitutions(); 086 var allowCombiningShipments = form.getAllowCombiningShipments(); 087 var reference = form.getReference(); 088 var freeOnBoardName = form.getFreeOnBoardName(); 089 var strTaxable = form.getTaxable(); 090 var workflowEntranceName = form.getWorkflowEntranceName(); 091 092 var order = SalesOrderLogic.getInstance().createSalesOrder(session, this, getUserVisit(), batchName, sourceName, 093 billToPartyName, orderPriorityName, currencyIsoName, termName, holdUntilComplete, allowBackorders, 094 allowSubstitutions, allowCombiningShipments, reference, freeOnBoardName, strTaxable, workflowEntranceName, 095 getParty()); 096 097 if(!hasExecutionErrors()) { 098 result.setOrderName(order.getLastDetail().getOrderName()); 099 result.setEntityRef(order.getPrimaryKey().getEntityRef()); 100 } 101 102 return result; 103 } 104 105}