public VO.AddressCustomer SaveOrUpdateAddress(VO.AddressCustomer address, Guid accountCode) { address.IsValid(); if (address.Purpose == AddressPurposeType.None || address.Purpose.IsNull()) { address.Purpose = AddressPurposeType.Shipping; } address.Country = address.Country.IsNullOrWhiteSpace() ? "Brasil" : address.Country; address.Status = address.Status.IsNull() ? true : address.Status; var account = accountRepository.Get(accountCode, true); if (account.IsNull()) { return(new VO.AddressCustomer()); } Entities.Customer _customer = account.Customer; if (!_customer.IsNull()) { List <AddressCustomer> resultAdresses = _customer.AddressData.Deserialize <List <VO.AddressCustomer> >(); var addressOld = resultAdresses.FirstOrDefault(a => a.AddressCustomerCode == address.AddressCustomerCode); if (addressOld.IsNull()) { if (!address.AddressCustomerCode.IsEmpty()) { throw new ArgumentException("Endereço não encontrado com esse código: {0}".ToFormat(address.AddressCustomerCode)); } addressOld = resultAdresses.FirstOrDefault(a => a.Number.ToLower() == address.Number.ToLower() && a.ZipCode.ClearStrings() == address.ZipCode.ClearStrings()); } if (addressOld.IsNull()) { address.AddressCustomerCode = Guid.NewGuid(); address.UpdateDate = DateTime.Now; resultAdresses.Add(address); } else { resultAdresses.ForEach(a => { if (a.Number.ToLower() == address.Number.ToLower() && a.ZipCode.ClearStrings() == address.ZipCode.ClearStrings() || addressOld.AddressCustomerCode == address.AddressCustomerCode) { a.AddressCustomerCode = a.AddressCustomerCode; a.Name = address.Name; a.ContactName = address.ContactName; a.Type = address.Type; a.Street = address.Street; a.Complement = address.Complement; a.District = address.District; a.City = address.City; a.ZipCode = address.ZipCode; a.Number = address.Number; a.State = address.State; a.Country = address.Country; a.Purpose = address.Purpose; a.Phones = address.Phones; a.UpdateDate = DateTime.Now; a.SaveDate = a.SaveDate; } }); } _customer.AddressData = resultAdresses.Serialize <List <AddressCustomer> >().RemoveHeaderXML(); _customer.UpdateDate = DateTime.Now; customerRepository.Save(_customer); address.AddressCustomerCode = !address.AddressCustomerCode.IsEmpty() ? address.AddressCustomerCode : addressOld.AddressCustomerCode; return(address); } return(new VO.AddressCustomer()); }
private List <VO.AddressCustomer> MakeAddress(string[] properties) { // Six address positions, but only one mandatory and the remaining optional int[] indexAddress = new int[] { 0, 1, 2, 3, 4, 5 }; List <VO.AddressCustomer> result = new List <VO.AddressCustomer>(); // Fields quantity for o endereço var positionCount = 12; indexAddress.ForEach(i => { // Get the next position of index var index = positionCount * i; // If last field exists in properties, address exists, get address if (properties.Length >= 18 + (index)) { if (index == 0 || !properties[ConstantsFileImport.ZipCode + index].Trim().IsNullorEmpty()) { var address = new VO.AddressCustomer { AddressCustomerCode = Guid.NewGuid(), ZipCode = properties[ConstantsFileImport.ZipCode + index].Trim().Replace("-", string.Empty).PadLeft(8, '0'), Street = properties[ConstantsFileImport.Street + index].Trim(), Number = properties[ConstantsFileImport.Number + index].Trim(), Complement = properties[ConstantsFileImport.Complement + index].Trim(), Type = MakeAddressType(properties[ConstantsFileImport.TypeAddress + index].Trim()), State = properties[ConstantsFileImport.State + index].Trim().ToUpper(), District = properties[ConstantsFileImport.District + index].Trim(), City = properties[ConstantsFileImport.City + index].Trim(), Name = properties[ConstantsFileImport.FirstName].Trim(), ContactName = properties[ConstantsFileImport.FirstName].Trim(), Purpose = i == 0 ? AddressPurposeType.Contact : AddressPurposeType.Shipping, Status = true, Removed = false }; address.Phones = new List <Hagrid.Core.Domain.ValueObjects.Phone>(); address.Phones.Add(new VO.Phone() { CodeCountry = "55", DDD = properties[ConstantsFileImport.PhoneDDD + index].Trim(), Number = properties[ConstantsFileImport.PhoneNumber + index].Trim(), Extension = string.Empty, PhoneType = PhoneType.Residencial }); if (!properties[ConstantsFileImport.CelDDD + index].Trim().IsNullOrWhiteSpace() && !properties[ConstantsFileImport.CelDDD + index].Trim().IsNullOrWhiteSpace()) { address.Phones.Add(new Hagrid.Core.Domain.ValueObjects.Phone() { CodeCountry = "55", DDD = properties[ConstantsFileImport.CelDDD + index].Trim(), Number = properties[ConstantsFileImport.CelNumber + index].Trim(), Extension = string.Empty, PhoneType = PhoneType.Celular }); } result.Add(address); } } }); return(result); }