예제 #1
0
        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());
        }
예제 #2
0
        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);
        }