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