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