001// -------------------------------------------------------------------------------- 002// Copyright 2002-2026 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.vendor.server.command; 018 019import com.echothree.control.user.vendor.common.edit.VendorEdit; 020import com.echothree.control.user.vendor.common.edit.VendorEditFactory; 021import com.echothree.control.user.vendor.common.form.EditVendorForm; 022import com.echothree.control.user.vendor.common.result.EditVendorResult; 023import com.echothree.control.user.vendor.common.result.VendorResultFactory; 024import com.echothree.control.user.vendor.common.spec.VendorUniversalSpec; 025import com.echothree.model.control.accounting.common.AccountingConstants; 026import com.echothree.model.control.accounting.server.control.AccountingControl; 027import com.echothree.model.control.cancellationpolicy.common.CancellationKinds; 028import com.echothree.model.control.cancellationpolicy.server.control.CancellationPolicyControl; 029import com.echothree.model.control.item.server.control.ItemControl; 030import com.echothree.model.control.party.common.PartyTypes; 031import com.echothree.model.control.party.server.control.PartyControl; 032import com.echothree.model.control.returnpolicy.common.ReturnKinds; 033import com.echothree.model.control.returnpolicy.server.control.ReturnPolicyControl; 034import com.echothree.model.control.security.common.SecurityRoleGroups; 035import com.echothree.model.control.security.common.SecurityRoles; 036import com.echothree.model.control.vendor.server.control.VendorControl; 037import com.echothree.model.control.vendor.server.logic.VendorLogic; 038import com.echothree.model.data.accounting.server.entity.Currency; 039import com.echothree.model.data.accounting.server.entity.GlAccount; 040import com.echothree.model.data.cancellationpolicy.server.entity.CancellationPolicy; 041import com.echothree.model.data.item.server.entity.ItemAliasType; 042import com.echothree.model.data.party.server.entity.DateTimeFormat; 043import com.echothree.model.data.party.server.entity.Language; 044import com.echothree.model.data.party.server.entity.Party; 045import com.echothree.model.data.party.server.entity.TimeZone; 046import com.echothree.model.data.returnpolicy.server.entity.ReturnPolicy; 047import com.echothree.model.data.user.common.pk.UserVisitPK; 048import com.echothree.model.data.vendor.server.entity.Vendor; 049import com.echothree.util.common.command.EditMode; 050import com.echothree.util.common.form.BaseForm; 051import com.echothree.util.common.message.ExecutionErrors; 052import com.echothree.util.common.validation.FieldDefinition; 053import com.echothree.util.common.validation.FieldType; 054import com.echothree.util.server.control.BaseAbstractEditCommand; 055import com.echothree.util.server.control.CommandSecurityDefinition; 056import com.echothree.util.server.control.PartyTypeDefinition; 057import com.echothree.util.server.control.SecurityRoleDefinition; 058import com.echothree.util.server.persistence.EntityPermission; 059import com.echothree.util.server.string.AmountUtils; 060import com.echothree.util.server.validation.Validator; 061import java.util.List; 062import org.apache.commons.codec.language.Soundex; 063import javax.enterprise.context.Dependent; 064import javax.inject.Inject; 065 066@Dependent 067public class EditVendorCommand 068 extends BaseAbstractEditCommand<VendorUniversalSpec, VendorEdit, EditVendorResult, Party, Party> { 069 070 private final static CommandSecurityDefinition COMMAND_SECURITY_DEFINITION; 071 private final static List<FieldDefinition> SPEC_FIELD_DEFINITIONS; 072 private final static List<FieldDefinition> EDIT_FIELD_DEFINITIONS; 073 074 static { 075 COMMAND_SECURITY_DEFINITION = new CommandSecurityDefinition(List.of( 076 new PartyTypeDefinition(PartyTypes.UTILITY.name(), null), 077 new PartyTypeDefinition(PartyTypes.EMPLOYEE.name(), List.of( 078 new SecurityRoleDefinition(SecurityRoleGroups.Vendor.name(), SecurityRoles.Edit.name()) 079 )) 080 )); 081 082 SPEC_FIELD_DEFINITIONS = List.of( 083 new FieldDefinition("VendorName", FieldType.ENTITY_NAME, false, null, null), 084 new FieldDefinition("PartyName", FieldType.ENTITY_NAME, false, null, null), 085 new FieldDefinition("EntityRef", FieldType.ENTITY_REF, false, null, null), 086 new FieldDefinition("Uuid", FieldType.UUID, false, null, null) 087 ); 088 089 EDIT_FIELD_DEFINITIONS = List.of( 090 new FieldDefinition("VendorName", FieldType.ENTITY_NAME, true, null, null), 091 new FieldDefinition("VendorTypeName", FieldType.ENTITY_NAME, true, null, null), 092 new FieldDefinition("MinimumPurchaseOrderLines", FieldType.UNSIGNED_INTEGER, false, null, null), 093 new FieldDefinition("MaximumPurchaseOrderLines", FieldType.UNSIGNED_INTEGER, false, null, null), 094 new FieldDefinition("MinimumPurchaseOrderAmount", FieldType.UNSIGNED_COST_LINE, false, null, null), 095 new FieldDefinition("MaximumPurchaseOrderAmount", FieldType.UNSIGNED_COST_LINE, false, null, null), 096 new FieldDefinition("UseItemPurchasingCategories", FieldType.BOOLEAN, true, null, null), 097 new FieldDefinition("DefaultItemAliasTypeName", FieldType.ENTITY_NAME, false, null, null), 098 new FieldDefinition("CancellationPolicyName", FieldType.ENTITY_NAME, false, null, null), 099 new FieldDefinition("ReturnPolicyName", FieldType.ENTITY_NAME, false, null, null), 100 new FieldDefinition("ApGlAccountName", FieldType.ENTITY_NAME, false, null, null), 101 new FieldDefinition("PersonalTitleId", FieldType.ID, false, null, null), 102 new FieldDefinition("FirstName", FieldType.STRING, false, 1L, 20L), 103 new FieldDefinition("MiddleName", FieldType.STRING, false, 1L, 20L), 104 new FieldDefinition("LastName", FieldType.STRING, false, 1L, 20L), 105 new FieldDefinition("NameSuffixId", FieldType.ID, false, null, null), 106 new FieldDefinition("Name", FieldType.STRING, false, 1L, 60L), 107 new FieldDefinition("PreferredLanguageIsoName", FieldType.ENTITY_NAME, false, null, null), 108 new FieldDefinition("PreferredCurrencyIsoName", FieldType.ENTITY_NAME, false, null, null), 109 new FieldDefinition("PreferredJavaTimeZoneName", FieldType.STRING, false, null, null), 110 new FieldDefinition("PreferredDateTimeFormatName", FieldType.ENTITY_NAME, false, null, null), 111 new FieldDefinition("HoldUntilComplete", FieldType.BOOLEAN, true, null, null), 112 new FieldDefinition("AllowBackorders", FieldType.BOOLEAN, true, null, null), 113 new FieldDefinition("AllowSubstitutions", FieldType.BOOLEAN, true, null, null), 114 new FieldDefinition("AllowCombiningShipments", FieldType.BOOLEAN, true, null, null), 115 new FieldDefinition("RequireReference", FieldType.BOOLEAN, true, null, null), 116 new FieldDefinition("AllowReferenceDuplicates", FieldType.BOOLEAN, true, null, null), 117 new FieldDefinition("ReferenceValidationPattern", FieldType.REGULAR_EXPRESSION, false, null, null) 118 ); 119 } 120 121 @Inject 122 AccountingControl accountingControl; 123 124 @Inject 125 CancellationPolicyControl cancellationPolicyControl; 126 127 @Inject 128 ItemControl itemControl; 129 130 @Inject 131 PartyControl partyControl; 132 133 @Inject 134 ReturnPolicyControl returnPolicyControl; 135 136 @Inject 137 VendorControl vendorControl; 138 139 @Inject 140 VendorLogic vendorLogic; 141 142 143 /** Creates a new instance of EditVendorCommand */ 144 public EditVendorCommand() { 145 super(COMMAND_SECURITY_DEFINITION, SPEC_FIELD_DEFINITIONS, EDIT_FIELD_DEFINITIONS); 146 } 147 148 @Override 149 protected void setupValidatorForEdit(Validator validator, BaseForm specForm) { 150 var vendorName = spec.getVendorName(); 151 152 if(vendorName != null) { 153 var vendor = vendorControl.getVendorByNameForUpdate(vendorName); 154 155 if(vendor != null) { 156 validator.setCurrency(partyControl.getPreferredCurrency(vendor.getParty())); 157 } 158 } 159 } 160 161 @Override 162 public EditVendorResult getResult() { 163 return VendorResultFactory.getEditVendorResult(); 164 } 165 166 @Override 167 public VendorEdit getEdit() { 168 return VendorEditFactory.getVendorEdit(); 169 } 170 171 @Override 172 public Party getEntity(EditVendorResult result) { 173 Vendor vendor; 174 175 if(editMode.equals(EditMode.LOCK) || editMode.equals(EditMode.ABANDON)) { 176 vendor = vendorLogic.getVendorByUniversalSpec(this, spec); 177 } else { // EditMode.UPDATE 178 vendor = vendorLogic.getVendorByUniversalSpecForUpdate(this, spec); 179 } 180 181 if(!hasExecutionErrors()) { 182 result.setVendor(vendorControl.getVendorTransfer(getUserVisit(), vendor)); 183 } 184 185 return vendor.getParty(); 186 } 187 188 @Override 189 public Party getLockEntity(Party party) { 190 return party; 191 } 192 193 @Override 194 public void fillInResult(EditVendorResult result, Party party) { 195 result.setVendor(vendorControl.getVendorTransfer(getUserVisit(), party)); 196 } 197 198 @Override 199 public void doLock(VendorEdit edit, Party party) { 200 var vendor = vendorControl.getVendor(party); 201 var amountUtils = AmountUtils.getInstance(); 202 var vendorPreferredCurrency = getPreferredCurrency(party); 203 var partyDetail = party.getLastDetail(); 204 var partyGroup = partyControl.getPartyGroup(party); 205 var apGlAccount = vendor.getApGlAccount(); 206 var cancellationPolicy = vendor.getCancellationPolicy(); 207 var returnPolicy = vendor.getReturnPolicy(); 208 var minimumPurchaseOrderLines = vendor.getMinimumPurchaseOrderLines(); 209 var maximumPurchaseOrderLines = vendor.getMaximumPurchaseOrderLines(); 210 var minimumPurchaseOrderAmount = vendor.getMinimumPurchaseOrderAmount(); 211 var maximumPurchaseOrderAmount = vendor.getMaximumPurchaseOrderAmount(); 212 var itemAliasType = vendor.getDefaultItemAliasType(); 213 var preferredLanguage = partyDetail.getPreferredLanguage(); 214 var preferredCurrency = partyDetail.getPreferredCurrency(); 215 var preferredTimeZone = partyDetail.getPreferredTimeZone(); 216 var dateTimeFormat = partyDetail.getPreferredDateTimeFormat(); 217 var person = partyControl.getPerson(party); 218 var personalTitle = person == null ? null : person.getPersonalTitle(); 219 var nameSuffix = person == null ? null : person.getNameSuffix(); 220 221 edit.setVendorName(vendor.getVendorName()); 222 edit.setVendorTypeName(vendor.getVendorType().getLastDetail().getVendorTypeName()); 223 edit.setMinimumPurchaseOrderLines(minimumPurchaseOrderLines == null ? null : minimumPurchaseOrderLines.toString()); 224 edit.setMaximumPurchaseOrderLines(maximumPurchaseOrderLines == null ? null : maximumPurchaseOrderLines.toString()); 225 edit.setMinimumPurchaseOrderAmount(minimumPurchaseOrderAmount == null ? null : amountUtils.formatCostLine(vendorPreferredCurrency, minimumPurchaseOrderAmount)); 226 edit.setMaximumPurchaseOrderAmount(maximumPurchaseOrderAmount == null ? null : amountUtils.formatCostLine(vendorPreferredCurrency, maximumPurchaseOrderAmount)); 227 edit.setUseItemPurchasingCategories(vendor.getUseItemPurchasingCategories().toString()); 228 edit.setCancellationPolicyName(cancellationPolicy == null ? null : cancellationPolicy.getLastDetail().getCancellationPolicyName()); 229 edit.setReturnPolicyName(returnPolicy == null ? null : returnPolicy.getLastDetail().getReturnPolicyName()); 230 edit.setApGlAccountName(apGlAccount == null ? null : apGlAccount.getLastDetail().getGlAccountName()); 231 edit.setHoldUntilComplete(vendor.getHoldUntilComplete().toString()); 232 edit.setAllowBackorders(vendor.getAllowBackorders().toString()); 233 edit.setAllowSubstitutions(vendor.getAllowSubstitutions().toString()); 234 edit.setAllowCombiningShipments(vendor.getAllowCombiningShipments().toString()); 235 edit.setRequireReference(vendor.getRequireReference().toString()); 236 edit.setAllowReferenceDuplicates(vendor.getAllowReferenceDuplicates().toString()); 237 edit.setReferenceValidationPattern(vendor.getReferenceValidationPattern()); 238 edit.setDefaultItemAliasTypeName(itemAliasType == null ? null : itemAliasType.getLastDetail().getItemAliasTypeName()); 239 edit.setPersonalTitleId(personalTitle == null ? null : personalTitle.getPrimaryKey().getEntityId().toString()); 240 edit.setFirstName(person == null ? null : person.getFirstName()); 241 edit.setMiddleName(person == null ? null : person.getMiddleName()); 242 edit.setLastName(person == null ? null : person.getLastName()); 243 edit.setNameSuffixId(nameSuffix == null ? null : nameSuffix.getPrimaryKey().getEntityId().toString()); 244 edit.setName(partyGroup == null ? null : partyGroup.getName()); 245 edit.setPreferredLanguageIsoName(preferredLanguage == null ? null : preferredLanguage.getLanguageIsoName()); 246 edit.setPreferredCurrencyIsoName(preferredCurrency == null ? null : preferredCurrency.getCurrencyIsoName()); 247 edit.setPreferredJavaTimeZoneName(preferredTimeZone == null ? null : preferredTimeZone.getLastDetail().getJavaTimeZoneName()); 248 edit.setPreferredDateTimeFormatName(dateTimeFormat == null ? null : dateTimeFormat.getLastDetail().getDateTimeFormatName()); 249 } 250 251 CancellationPolicy cancellationPolicy; 252 ReturnPolicy returnPolicy; 253 GlAccount apGlAccount; 254 ItemAliasType defaultItemAliasType; 255 Language preferredLanguage; 256 TimeZone preferredTimeZone; 257 DateTimeFormat preferredDateTimeFormat; 258 Currency preferredCurrency; 259 260 @Override 261 public void canUpdate(Party party) { 262 var vendor = vendorControl.getVendorForUpdate(party); 263 var vendorName = edit.getVendorName(); 264 var duplicateVendor = vendorControl.getVendorByName(vendorName); 265 266 if(duplicateVendor == null || duplicateVendor.getPrimaryKey().equals(vendor.getPrimaryKey())) { 267 var vendorTypeName = edit.getVendorTypeName(); 268 var vendorType = vendorControl.getVendorTypeByName(vendorTypeName); 269 270 if(vendorType != null) { 271 var cancellationPolicyName = edit.getCancellationPolicyName(); 272 273 if(cancellationPolicyName != null) { 274 var cancellationKind = cancellationPolicyControl.getCancellationKindByName(CancellationKinds.VENDOR_CANCELLATION.name()); 275 276 cancellationPolicy = cancellationPolicyControl.getCancellationPolicyByName(cancellationKind, cancellationPolicyName); 277 } 278 279 if(cancellationPolicyName == null || cancellationPolicy != null) { 280 var returnPolicyName = edit.getReturnPolicyName(); 281 282 if(returnPolicyName != null) { 283 var returnKind = returnPolicyControl.getReturnKindByName(ReturnKinds.VENDOR_RETURN.name()); 284 285 returnPolicy = returnPolicyControl.getReturnPolicyByName(returnKind, returnPolicyName); 286 } 287 288 if(returnPolicyName == null || returnPolicy != null) { 289 var apGlAccountName = edit.getApGlAccountName(); 290 291 apGlAccount = apGlAccountName == null ? null : accountingControl.getGlAccountByName(apGlAccountName); 292 293 if(apGlAccountName == null || apGlAccount != null) { 294 var glAccountCategoryName = apGlAccount == null ? null : apGlAccount.getLastDetail().getGlAccountCategory().getLastDetail().getGlAccountCategoryName(); 295 296 if(glAccountCategoryName == null || glAccountCategoryName.equals(AccountingConstants.GlAccountCategory_ACCOUNTS_PAYABLE)) { 297 var defaultItemAliasTypeName = edit.getDefaultItemAliasTypeName(); 298 299 defaultItemAliasType = itemControl.getItemAliasTypeByName(defaultItemAliasTypeName); 300 301 if(defaultItemAliasTypeName == null || defaultItemAliasType != null) { 302 if(defaultItemAliasType == null || !defaultItemAliasType.getLastDetail().getAllowMultiple()) { 303 var preferredLanguageIsoName = edit.getPreferredLanguageIsoName(); 304 preferredLanguage = preferredLanguageIsoName == null ? null : partyControl.getLanguageByIsoName(preferredLanguageIsoName); 305 306 if(preferredLanguageIsoName == null || (preferredLanguage != null)) { 307 var preferredJavaTimeZoneName = edit.getPreferredJavaTimeZoneName(); 308 preferredTimeZone = preferredJavaTimeZoneName == null ? null : partyControl.getTimeZoneByJavaName(preferredJavaTimeZoneName); 309 310 if(preferredJavaTimeZoneName == null || (preferredTimeZone != null)) { 311 var preferredDateTimeFormatName = edit.getPreferredDateTimeFormatName(); 312 preferredDateTimeFormat = preferredDateTimeFormatName == null ? null : partyControl.getDateTimeFormatByName(preferredDateTimeFormatName); 313 314 if(preferredDateTimeFormatName == null || (preferredDateTimeFormat != null)) { 315 var preferredCurrencyIsoName = edit.getPreferredCurrencyIsoName(); 316 317 if(preferredCurrencyIsoName == null) { 318 preferredCurrency = null; 319 } else { 320 preferredCurrency = accountingControl.getCurrencyByIsoName(preferredCurrencyIsoName); 321 } 322 323 if(preferredCurrencyIsoName != null && (preferredCurrency == null)) { 324 addExecutionError(ExecutionErrors.UnknownCurrencyIsoName.name(), preferredCurrencyIsoName); 325 } 326 } else { 327 addExecutionError(ExecutionErrors.UnknownDateTimeFormatName.name(), preferredDateTimeFormatName); 328 } 329 } else { 330 addExecutionError(ExecutionErrors.UnknownJavaTimeZoneName.name(), preferredJavaTimeZoneName); 331 } 332 } else { 333 addExecutionError(ExecutionErrors.UnknownLanguageIsoName.name(), preferredLanguageIsoName); 334 } 335 } else { 336 addExecutionError(ExecutionErrors.InvalidItemAliasType.name(), defaultItemAliasTypeName); 337 } 338 } else { 339 addExecutionError(ExecutionErrors.UnknownDefaultItemAliasTypeName.name(), defaultItemAliasTypeName); 340 } 341 } else { 342 addExecutionError(ExecutionErrors.InvalidGlAccountCategory.name(), glAccountCategoryName); 343 } 344 } else { 345 addExecutionError(ExecutionErrors.UnknownApGlAccountName.name(), apGlAccountName); 346 } 347 } else { 348 addExecutionError(ExecutionErrors.UnknownReturnPolicyName.name(), returnPolicyName); 349 } 350 } else { 351 addExecutionError(ExecutionErrors.UnknownCancellationPolicyName.name(), cancellationPolicyName); 352 } 353 } else { 354 addExecutionError(ExecutionErrors.UnknownVendorTypeName.name(), vendorTypeName); 355 } 356 } else { 357 addExecutionError(ExecutionErrors.DuplicateVendorName.name(), vendorName); 358 } 359 } 360 361 @Override 362 public void doUpdate(Party party) { 363 var soundex = new Soundex(); 364 var vendor = vendorControl.getVendorForUpdate(party); 365 var vendorValue = vendorControl.getVendorValue(vendor); 366 var partyDetailValue = partyControl.getPartyDetailValueForUpdate(party); 367 var partyGroup = partyControl.getPartyGroupForUpdate(party); 368 var person = partyControl.getPersonForUpdate(party); 369 var minimumPurchaseOrderLines = edit.getMinimumPurchaseOrderLines(); 370 var maximumPurchaseOrderLines = edit.getMaximumPurchaseOrderLines(); 371 var minimumPurchaseOrderAmount = edit.getMinimumPurchaseOrderAmount(); 372 var maximumPurchaseOrderAmount = edit.getMaximumPurchaseOrderAmount(); 373 var personalTitleId = edit.getPersonalTitleId(); 374 var personalTitle = personalTitleId == null ? null : partyControl.convertPersonalTitleIdToEntity(personalTitleId, EntityPermission.READ_ONLY); 375 var firstName = edit.getFirstName(); 376 var firstNameSdx = soundex.encode(firstName); 377 var middleName = edit.getMiddleName(); 378 var middleNameSdx = middleName == null ? null : soundex.encode(middleName); 379 var lastName = edit.getLastName(); 380 var lastNameSdx = soundex.encode(lastName); 381 var nameSuffixId = edit.getNameSuffixId(); 382 var nameSuffix = nameSuffixId == null ? null : partyControl.convertNameSuffixIdToEntity(nameSuffixId, EntityPermission.READ_ONLY); 383 var name = edit.getName(); 384 var updatedBy = getPartyPK(); 385 386 vendorValue.setVendorName(edit.getVendorName()); 387 vendorValue.setMinimumPurchaseOrderLines(minimumPurchaseOrderLines == null ? null : Integer.valueOf(minimumPurchaseOrderLines)); 388 vendorValue.setMaximumPurchaseOrderLines(maximumPurchaseOrderLines == null ? null : Integer.valueOf(maximumPurchaseOrderLines)); 389 vendorValue.setMinimumPurchaseOrderAmount(minimumPurchaseOrderAmount == null ? null : Long.valueOf(minimumPurchaseOrderAmount)); 390 vendorValue.setMaximumPurchaseOrderAmount(maximumPurchaseOrderAmount == null ? null : Long.valueOf(maximumPurchaseOrderAmount)); 391 vendorValue.setUseItemPurchasingCategories(Boolean.valueOf(edit.getUseItemPurchasingCategories())); 392 vendorValue.setDefaultItemAliasTypePK(defaultItemAliasType == null ? null : defaultItemAliasType.getPrimaryKey()); 393 vendorValue.setCancellationPolicyPK(cancellationPolicy == null ? null : cancellationPolicy.getPrimaryKey()); 394 vendorValue.setReturnPolicyPK(returnPolicy == null ? null : returnPolicy.getPrimaryKey()); 395 vendorValue.setApGlAccountPK(apGlAccount == null ? null : apGlAccount.getPrimaryKey()); 396 vendorValue.setHoldUntilComplete(Boolean.valueOf(edit.getHoldUntilComplete())); 397 vendorValue.setAllowBackorders(Boolean.valueOf(edit.getAllowBackorders())); 398 vendorValue.setAllowSubstitutions(Boolean.valueOf(edit.getAllowSubstitutions())); 399 vendorValue.setAllowCombiningShipments(Boolean.valueOf(edit.getAllowCombiningShipments())); 400 vendorValue.setRequireReference(Boolean.valueOf(edit.getRequireReference())); 401 vendorValue.setAllowReferenceDuplicates(Boolean.valueOf(edit.getAllowReferenceDuplicates())); 402 vendorValue.setReferenceValidationPattern(edit.getReferenceValidationPattern()); 403 404 partyDetailValue.setPreferredLanguagePK(preferredLanguage == null ? null : preferredLanguage.getPrimaryKey()); 405 partyDetailValue.setPreferredTimeZonePK(preferredTimeZone == null ? null : preferredTimeZone.getPrimaryKey()); 406 partyDetailValue.setPreferredDateTimeFormatPK(preferredDateTimeFormat == null ? null : preferredDateTimeFormat.getPrimaryKey()); 407 partyDetailValue.setPreferredCurrencyPK(preferredCurrency == null ? null : preferredCurrency.getPrimaryKey()); 408 409 if(name != null) { 410 if(partyGroup != null) { 411 var partyGroupValue = partyControl.getPartyGroupValue(partyGroup); 412 413 partyGroupValue.setName(name); 414 partyControl.updatePartyGroupFromValue(partyGroupValue, updatedBy); 415 } else { 416 partyControl.createPartyGroup(party, name, updatedBy); 417 } 418 } else { 419 if(partyGroup != null) { 420 partyControl.deletePartyGroup(partyGroup, updatedBy); 421 } 422 } 423 424 if(personalTitle != null || firstName != null || middleName != null || lastName != null || nameSuffix != null) { 425 if(person != null) { 426 var personValue = partyControl.getPersonValue(person); 427 428 personValue.setPersonalTitlePK(personalTitle == null ? null : personalTitle.getPrimaryKey()); 429 personValue.setFirstName(firstName); 430 personValue.setFirstNameSdx(firstNameSdx); 431 personValue.setMiddleName(middleName); 432 personValue.setMiddleNameSdx(middleNameSdx); 433 personValue.setLastName(lastName); 434 personValue.setLastNameSdx(lastNameSdx); 435 personValue.setNameSuffixPK(nameSuffix == null ? null : nameSuffix.getPrimaryKey()); 436 partyControl.updatePersonFromValue(personValue, updatedBy); 437 } else { 438 partyControl.createPerson(party, personalTitle, firstName, firstNameSdx, middleName, 439 middleNameSdx, lastName, lastNameSdx, nameSuffix, updatedBy); 440 } 441 } else { 442 if(person != null) { 443 partyControl.deletePerson(person, updatedBy); 444 } 445 } 446 447 vendorControl.updateVendorFromValue(vendorValue, updatedBy); 448 partyControl.updatePartyFromValue(partyDetailValue, updatedBy); 449 } 450 451}