public static PartnerModel Map(List <Branch> branches, CategoryModel[] categories)
        {
            var partner = new PartnerModel {
                Contacts = new List <ContactModel>()
            };

            if (branches == null || branches.Count == 0)
            {
                return(partner);
            }

            if (categories == null)
            {
                categories = new CategoryModel[0];
            }

            var contacts = new List <ContactModel>();

            partner = FromBranchToPartnerModel(branches.First(), categories);

            for (var i = 0; i < branches.Count; i++)
            {
                var branch = branches[i];

                var coordinates = MapGeoJsonToString(branch);
                var contact     = ContactMapper.MapToContactModels(branch.Address, branch.Phones, coordinates, branch.Id);
                contacts.Add(contact);
            }

            partner.Contacts = contacts;
            return(partner);
        }
        private static Branch FromPartnerModelToBranch(PartnerModel partner, int numberOfContact)
        {
            Branch branch = new Branch();

            branch.PartnerId    = partner.Id;
            branch.Comment      = partner.Comment;
            branch.Image        = partner.Image;
            branch.Icon         = partner.Logo;
            branch.WebAddresses = WebAddressMapper.MapToWebAddresses(partner.WebAddresses);
            branch.Name         = SetValue(partner.Name_Ru, partner.Name_En);
            branch.Description  = SetValue(partner.Description_Ru, partner.Description_En);

            List <string> categoryIds = new List <string>();

            foreach (var category in partner.Categories)
            {
                categoryIds.Add(category.Id);
            }

            branch.CategoryIds = categoryIds;

            List <Discount> discounts = new List <Discount>();
            Discount        discount  = new Discount();

            discount.DiscountType = partner.SelectDiscount;
            var discountNames = SetValue(partner.Discount.ToString(CultureInfo.InvariantCulture), partner.Discount.ToString(CultureInfo.InvariantCulture));

            discount.Name = discountNames;
            discounts.Add(discount);
            branch.Discounts = discounts;

            branch.Address = ContactMapper.MapFromContactModelToAddress(partner.Contacts.ElementAt(numberOfContact));
            branch.Phones  = ContactMapper.MapFromContactModelToPhone(partner.Contacts.ElementAt(numberOfContact));
            branch.Id      = partner.Contacts.ElementAt(numberOfContact).Id;

            if (!string.IsNullOrEmpty(partner.Contacts.ElementAt(numberOfContact).Coordinates))
            {
                var stringCoords = partner.Contacts.ElementAt(numberOfContact).Coordinates.Split(CoordSeparator);
                var latitude     = double.Parse(stringCoords[0], CultureInfo.InvariantCulture);
                var longitude    = double.Parse(stringCoords[1], CultureInfo.InvariantCulture);
                branch.Location = new GeoJsonPoint <GeoJson2DGeographicCoordinates>(new GeoJson2DGeographicCoordinates(longitude, latitude));
            }

            return(branch);
        }