예제 #1
0
        public void Calculate()
        {
            double tax = 00.00;
            double annualIncome;
            string currency = "";

            char[] currencySymbol = new char[] { 'R' };

            currency     = AnnualIncome.Trim(currencySymbol);
            annualIncome = Double.Parse(currency, NumberStyles.AllowCurrencySymbol | NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands, new CultureInfo("en-US"));

            switch (PostalCode)
            {
            case "7441":
                CalculatorHandler = new ProgressiveTaxCalculatorHandler();
                CalculatorHandler.Calculate(annualIncome, ref tax);
                break;

            case "A100":
                CalculatorHandler = new FlatValueTaxCalculatorHandler();
                CalculatorHandler.Calculate(annualIncome, ref tax);
                break;

            case "7000":
                CalculatorHandler = new FlatRateTaxCalculatorHandler();
                CalculatorHandler.Calculate(annualIncome, ref tax);
                break;

            case "1000":
                CalculatorHandler = new ProgressiveTaxCalculatorHandler();
                CalculatorHandler.Calculate(annualIncome, ref tax);
                break;
            }

            TaxPayable = Math.Round(tax, 2);
        }
예제 #2
0
        public override bool Equals(object other)
        {
            if (other is null || !(other is Employee))
            {
                return(false);
            }

            Employee emp = (Employee)other;

            if (!FirstName.Equals(emp.FirstName))
            {
                return(false);
            }

            if (!(LastName.Equals(emp.LastName)))
            {
                return(false);
            }

            if (!(AnnualIncome.Equals(emp.AnnualIncome)))
            {
                return(false);
            }

            if (!(SuperRate.Equals(emp.SuperRate)))
            {
                return(false);
            }

            if (this.Payslips.Except(emp.Payslips).Count() > 0 || emp.Payslips.Except(this.Payslips).Count() > 0)
            {
                return(false);
            }

            return(true);
        }
예제 #3
0
        /// <summary>
        /// Executes the workflow activity.
        /// </summary>
        /// <param name="executionContext">The execution context.</param>
        protected override void Execute(CodeActivityContext executionContext)
        {
            // Create the tracing service
            ITracingService tracingService = executionContext.GetExtension <ITracingService>();

            if (tracingService == null)
            {
                throw new InvalidPluginExecutionException("Failed to retrieve tracing service.");
            }

            tracingService.Trace("Entered " + _activityName + ".Execute(), Activity Instance Id: {0}, Workflow Instance Id: {1}",
                                 executionContext.ActivityInstanceId,
                                 executionContext.WorkflowInstanceId);

            // Create the context
            IWorkflowContext context = executionContext.GetExtension <IWorkflowContext>();

            if (context == null)
            {
                throw new InvalidPluginExecutionException("Failed to retrieve workflow context.");
            }

            tracingService.Trace(_activityName + ".Execute(), Correlation Id: {0}, Initiating User: {1}",
                                 context.CorrelationId,
                                 context.InitiatingUserId);

            IOrganizationServiceFactory serviceFactory = executionContext.GetExtension <IOrganizationServiceFactory>();
            IOrganizationService        service        = serviceFactory.CreateOrganizationService(context.UserId);

            try
            {
                //create a new myjsonrequest object from which data will be serialized
                JsonRequest myRequest = new JsonRequest();
                myRequest.InputObj = new CrmAzureMlDemo.Input1();
                Input input = new Input();

                string[] columns = { "address1_stateorprovince", "annualincome",            "lpa_age",
                                     "numberofchildren",         "educationcodename",       "familystatuscodename",
                                     "gendercodename",           "lpa_commutedistancename", "lpa_homeownername",
                                     "lpa_occupationname",       "lpa_numberofcarsowned",   "lpa_numberofchildrenathome" };

                object[] values = { StateOrProvince.Get(executionContext), AnnualIncome.Get(executionContext),    Age.Get(executionContext),
                                    NumChildren.Get(executionContext),     Education.Get(executionContext),       MaritalStatus.Get(executionContext),
                                    Gender.Get(executionContext),          CommuteDistance.Get(executionContext), Homeowner.Get(executionContext),
                                    Occupation.Get(executionContext),      NumCars.Get(executionContext),         NumChildrenAtHome.Get(executionContext) };

                input.Columns = columns;
                input.Values  = new object[][] { values };

                myRequest.InputObj.Inputs = new Input();
                myRequest.InputObj.Inputs = input;

                //serialize the myjsonrequest to json
                System.Runtime.Serialization.Json.DataContractJsonSerializer serializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(myRequest.GetType());
                MemoryStream ms = new MemoryStream();
                serializer.WriteObject(ms, myRequest);
                string jsonMsg = Encoding.Default.GetString(ms.ToArray());

                //create the webrequest object and execute it (and post jsonmsg to it)
                System.Net.WebRequest req = System.Net.WebRequest.Create(Endpoint.Get(executionContext));

                //must set the content type for json
                req.ContentType = "application/json";

                //must set method to post
                req.Method = "POST";

                //add authorization header
                req.Headers.Add(string.Format("Authorization:Bearer {0}", ApiKey.Get(executionContext)));

                tracingService.Trace("json request: {0}", jsonMsg);

                //create a stream
                byte[] bytes = System.Text.Encoding.ASCII.GetBytes(jsonMsg.ToString());
                req.ContentLength = bytes.Length;
                System.IO.Stream os = req.GetRequestStream();
                os.Write(bytes, 0, bytes.Length);
                os.Close();

                //get the response
                System.Net.WebResponse resp = req.GetResponse();

                Stream responseStream = CopyAndClose(resp.GetResponseStream());
                // Do something with the stream
                StreamReader reader         = new StreamReader(responseStream, Encoding.UTF8);
                String       responseString = reader.ReadToEnd();
                tracingService.Trace("json response: {0}", responseString);

                responseStream.Position = 0;
                //deserialize the response to a myjsonresponse object
                JsonResponse myResponse = new JsonResponse();
                System.Runtime.Serialization.Json.DataContractJsonSerializer deserializer = new System.Runtime.Serialization.Json.DataContractJsonSerializer(myResponse.GetType());
                myResponse = deserializer.ReadObject(responseStream) as JsonResponse;

                //set output values from the fields of the deserialzed myjsonresponse object
                BikeBuyer.Set(executionContext, myResponse.Results.Output1.Value.Values[0][0]);
            }

            catch (WebException exception)
            {
                string str = string.Empty;
                if (exception.Response != null)
                {
                    using (StreamReader reader =
                               new StreamReader(exception.Response.GetResponseStream()))
                    {
                        str = reader.ReadToEnd();
                    }
                    exception.Response.Close();
                }
                if (exception.Status == WebExceptionStatus.Timeout)
                {
                    throw new InvalidPluginExecutionException(
                              "The timeout elapsed while attempting to issue the request.", exception);
                }
                throw new InvalidPluginExecutionException(String.Format(CultureInfo.InvariantCulture,
                                                                        "A Web exception ocurred while attempting to issue the request. {0}: {1}",
                                                                        exception.Message, str), exception);
            }
            catch (FaultException <OrganizationServiceFault> e)
            {
                tracingService.Trace("Exception: {0}", e.ToString());

                // Handle the exception.
                throw;
            }
            catch (Exception e)
            {
                tracingService.Trace("Exception: {0}", e.ToString());
                throw;
            }

            tracingService.Trace("Exiting " + _activityName + ".Execute(), Correlation Id: {0}", context.CorrelationId);
        }
예제 #4
0
        static void Main(string[] args)
        {
            var people = Dataset.People;

            int[] a1 = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };

            //int sum = a1.Aggregate((prev1, curr) => prev1 + curr);
            int sum = a1.Product();

            string[] strs   = new string[] { "as", "asas", "asfafgsadgf" };
            string   concat = strs.Aggregate((p, c) => $"{c}---{p}");

            //object[] objs = new object[] { true, false, true};
            //var casted = objs.Cast<object>.ToArray();


            //Console.WriteLine($"{concat}");

            bool greatThenAny = a1.Any(x => x > 10); //проверка что есть элемент коллекции удовлетворяют условию
            bool greatAll     = a1.All(x => x > 10); //проверка что все элементы коллекции удовлетворяют условию

            bool isNotEmpty  = a1.Any();
            bool isNotEmpty1 = a1.Count() > 0;

            //var allLangs = people.SelectMany(p => p.Languages).ToArray();
            var allLangs = people.Select(p => p.Languages).Distinct().ToArray();

            int[] arr1  = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
            int[] arr2  = new int[] { 2, 3, 4, 7, 8 };
            bool  equal = arr1.SequenceEqual(arr2); //важен порядок элементов


            var inter = arr1.Intersect(arr2); //общие элементы

            var exclude = arr1.Except(arr2);  //исключить общие элементы

            var eq = arr1.Are(arr2);          // обе коллекции равны независимо от порядка следования элементов

            int[] arr7       = new int[] { 10, 20, 30, 40, 50, 60, 70, 80, 90 };
            var   taken      = arr7.Take(3);
            var   taken1     = arr7.Skip(2).Take(3);
            var   takenWhile = arr7.TakeWhile(x => x < 50);
            var   skipWhile  = arr7.SkipWhile(x => x < 50).TakeWhile(x => x > 70);

            var someone = people.Select(p => new { FirstName = p.Name, PeopAge = p.Age });

            var anonym = new { Make = "Honda", Year = 2012 }; //анонимный класс

            string[] langs   = new string[] { "en", "de", "ua", "it" };
            var      dtlangs = Dataset.Langs.ToArray();

            //inner join
            var q7 =
                from dl in dtlangs
                join l in langs on dl.Key equals l
                select l;

            //left  join
            var queryLeft =
                from dl in dtlangs
                join l in langs on dl.Key equals l
                into left
                select left.DefaultIfEmpty().ToArray();

            //отложенное выполнение
            var old    = people.Select(p => { p.Age = ChangeAge(); return(p); });
            var arrOld = old.ToArray();

            old.ToList().ForEach(p => p.Age = 75); // только для списка

            //запрос выполняется на ToList, ToArray, Count, foreach


            Console.WriteLine("Press any key...");
            //Console.ReadKey();

            //1) Получить число мужчин в коллекции; число женщин
            int menCount   = people.Count(p => p.Gender == Gender.Man);
            int womenCount = people.Count(p => p.Gender == Gender.Woman);

            Console.WriteLine($"Men count={menCount}; Women count={womenCount}");

            //2) Отсортировать персонажей по фамилии потом по имени, выбрать их описание в формате $"{Name} {SurName}, age {Age} lives in {City}, {Country}.
            //He (или she, решить тернарным опертором) is {Occupation} and makes {AnnualIncome} a year. {Family status to string}, speaks {Languages Count} languages

            var query1 = people.OrderBy(p => p.SurName).OrderBy(p => p.Name).Select(p => (
                                                                                        p.Name,
                                                                                        p.SurName,
                                                                                        p.Age,
                                                                                        p.Gender,
                                                                                        p.Occupation,
                                                                                        p.HomeAddress.City,
                                                                                        p.HomeAddress.City.Country.Name,
                                                                                        p.AnnualIncome,
                                                                                        p.FamilyStatus,
                                                                                        p.Languages

                                                                                        ));


            Console.WriteLine();
            foreach (var(Name, SurName, Age, Gender, Occupation, City, CountryName, AnnualIncome, FamilyStatus, Languages) in query1)
            {
                Console.WriteLine($"{Name} {SurName}, age {Age} lives in {City}, {CountryName}");
                string s = $"{(Gender == Gender.Man ? "He" : "She")} is {Occupation} and makes {AnnualIncome.ToMoney()} a year. " +
                           $"{FamilyStatus}, speaks {Languages.Length} languages: {String.Join(", ", Languages.Select(l => l.Name))}";

                Console.WriteLine(s);
            }

            //Найти тех, кто живет в странах с  населением больше 80 миллионов
            var q80mlnMore = people.Where(p => p.HomeAddress.City.Country.Population > 80 * 1000000).Select(p => (p.Name, p.SurName));

            Console.WriteLine();
            Console.WriteLine($"Найти тех, кто живет в странах с  населением больше 80 миллионов:");

            foreach (var(Name, SurName) in q80mlnMore)
            {
                Console.WriteLine($"{Name} {SurName}");
            }

            //Найти средний доход в группе персонажей(return decimal Average()) с высшим образованием(выше HECert - аналого нашего двухгодичного "младшего специалиста")
            decimal avrAnnualIncome = people.Where(p => p.EducationLevel >= EducationLevel.HECert).Average(p => p.AnnualIncome);

            Console.WriteLine();
            Console.WriteLine("Средний доход людей с высшим образованием:");
            Console.WriteLine($"{avrAnnualIncome.ToMoney()}");


            //Найти тех, чей годовой доход превышает годовой доход в их стране
            var q1 = people.Where(p => p.AnnualIncome > p.HomeAddress.City.Country.AvgIncome).Select(p => (p.Name, p.SurName));

            Console.WriteLine();
            Console.WriteLine("Найти тех, чей годовой доход превышает годовой доход в их стране");

            foreach (var(Name, SurName) in q1)
            {
                Console.WriteLine($"{Name} {SurName}");
            }

            //Найти максимальное число языков, которым владеет персонаж(return int Max()
            Console.WriteLine("Найти максимальное число языков, которым владеет персонаж");
            Console.WriteLine($"{people.Max(p => p.Languages.Length)}");

            //Найти виртуозного полиглота(для которого число языков равняется числу из п.6)
            Console.WriteLine();
            var polyglotPerson = people.First(p => p.Languages.Length == people.Max(polyglot => polyglot.Languages.Length));

            Console.WriteLine("Найти виртуозного полиглота(для которого число языков равняется числу из п.6");
            Console.WriteLine($"{polyglotPerson.Name} {polyglotPerson.SurName}");

            //8) Найти персонажа, который не владеет языком страны, в которой он проживает.Если такого нет - вернуть null
            //Person person = people.First(p=> !p.Languages.Contains(p.HomeAddress.City.Country.Language.Name))
            var mrx = people.FirstOrDefault(p => !p.Languages.Select(l => l.Id).Contains(p.HomeAddress.City.Country.Language.Id));

            Console.WriteLine($"{mrx.Name}");


            //9) Найти людей, проживающих в Германии, упорядочить по возрасту от большего до меньшего, выбрать в формате $"{Name} {Surname} {Age} {City}"
            var q2 = from p in people where p.HomeAddress.City.Country.Code == "de" orderby p.Age descending select(p.Name, p.SurName, p.Age, p.HomeAddress.City.Name);

            Console.WriteLine("");
            Console.WriteLine("Найти людей, проживающих в Германии, упорядочить по возрасту от большего до меньшего");
            foreach (var(Name, SurName, Age, CityName) in q2)
            {
                Console.WriteLine($"{Name} {SurName} {Age} {CityName}");
            }


            Console.WriteLine();
            //10)Найти процентную долю тех, кто состоит в браке от общего числа персонажей
            int totalPersonCount = people.Count();
            //можно ли найти количество через другую форму запроса?
            int married = people.Where(p => p.FamilyStatus == FamilyStatus.Married).Count();

            //int married = (from p in people where p.FamilyStatus == FamilyStatus.Married).Count();
            Console.WriteLine($"В браке состоит {Math.Round((double)married / totalPersonCount * 100, 1)}% людей");


            int[] arr = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };

            //11) Найти тех, кто владеет двумя и более языками но получает зарплату ниже средней по их стране
            var q3 = from p in people where (p.Languages.Length >= 2 && p.AnnualIncome < p.HomeAddress.City.Country.AvgIncome)select(p.Name, p.SurName);

            Console.WriteLine("");
            Console.WriteLine("Найти тех, кто владеет двумя и более языками но получает зарплату ниже средней по их стране");

            foreach (var(Name, SurName) in q3)
            {
                Console.WriteLine($"{Name}, {SurName}");
            }

            //12) Найти единственного кандидата наук, если такого нет либо если выборка больше 1 - вернуть ошибку
            var qDoctor = people.FirstOrDefault(p => p.EducationLevel == EducationLevel.PhD);

            Console.WriteLine($"12) Найти единственного кандидата наук, если такого нет либо если выборка больше 1 - вернуть ошибку");
            Console.WriteLine($"{qDoctor.Name} {qDoctor.SurName}");


            //13) Найти людей из испаноговорящих стран, вернуть в формате $"{Name} {Occupation} {City} {Country}"
            Console.WriteLine($"13) Найти людей из испаноговорящих стран");
            foreach (var p in people.Where(p => p.HomeAddress.City.Country.Language.Name == Dataset.Langs["es"].Name).Select(p => new { FirstName = p.Name, p.SurName, p.Occupation, Country = p.HomeAddress.City.Country.Name, City = p.HomeAddress.City.Name }))
            {
                Console.WriteLine($"{p.FirstName} {p.Occupation} {p.City} {p.Country}");
            }

            //14) Найти персонажа, который живет в городе с наименьшим населением(относительно места проживания других персонажей)
            var pLittleTown = people.First(p => p.HomeAddress.City.Population <= people.Min(pm => pm.HomeAddress.City.Population));

            Console.WriteLine($"Найти персонажа, который живет в городе с наименьшим населением");
            Console.WriteLine($"{pLittleTown.Name} {pLittleTown.SurName} {people.Min(pm => pm.HomeAddress.City.Population)}");

            //15) Найти персонажа, который живет в городе с наименьшим абсолютным населением(город с наименьшим населением в списке городов), если такого нет - вернуть налл
            Console.WriteLine($"Найти персонажа, который живет в городе с наименьшим абсолютным населением");
            var pAbsoluteMin = people.FirstOrDefault(p => p.HomeAddress.City.Population == Dataset.Cities.Min(pmin => pmin.Value.Population));

            Console.WriteLine($"{pAbsoluteMin?.Name} {pAbsoluteMin?.SurName}");

            //Console.WriteLine($"{Dataset.Cities.Min(p => p.Value.Population)}");


            //17) Определить, какая доля людей, владеющих английским, проживает не в англоговорящих странах по отношению ко всем людям из списка,
            //которые владеют английским
            var countEngLivedInNotEngCountres = people.Count(p => p.Languages.Contains(Dataset.Langs["en"]) && p.HomeAddress.City.Country.Language.Name != Dataset.Langs["en"].Name);
            var countTotalEng = people.Count(t => t.Languages.Contains(Dataset.Langs["en"]));
            var percent       = (double)countEngLivedInNotEngCountres / countTotalEng * 100;

            Console.WriteLine($"Определить, какая доля людей, владеющих английским, " +
                              $"проживает не в англоговорящих странах по отношению ко всем " +
                              $"людям из списка, которые владеют английским");

            Console.WriteLine($"{string.Format("{0:f}", percent)}%");

            var richest = people.First(p => p.AnnualIncome == people.Max(pmax => pmax.AnnualIncome));

            //18) Найти самого богатого персонажа
            Console.WriteLine("Найти самого богатого персонажа");
            Console.WriteLine($"{richest.Name} {richest.SurName}");

            //19) Найти персонажа с наименьшим доходом в Британии
            var minAnnualIncome =
                people.First(p =>
                             p.AnnualIncome == people.Where(m => m.HomeAddress.City.Country == Dataset.Countries["uk"]).Min(min => min.AnnualIncome) &&
                             p.HomeAddress.City.Country == Dataset.Countries["uk"]
                             );

            //новый комментарий

            Console.WriteLine($"Найти персонажа с наименьшим доходом в Британии");
            Console.WriteLine($"{minAnnualIncome.Name} {minAnnualIncome.SurName} {minAnnualIncome.AnnualIncome} {minAnnualIncome.HomeAddress.City.Country.Name}");


            //20) Отсортировать персонажей по доходу по нисходящей, потом по имени и по фамилии по восходящей
            Console.WriteLine($"Отсортировать персонажей по доходу по нисходящей, потом по имени и по фамилии по восходящей");
            //foreach (var person in people.OrderByDescending(p=>p.AnnualIncome).OrderBy(p=>p.Name).OrderBy(p => p.SurName))
            foreach (var person in people.OrderBy(p => p.SurName).OrderBy(p => p.Name).OrderByDescending(p => p.AnnualIncome))
            {
                Console.WriteLine($"{person.AnnualIncome} {person.Name} {person.SurName}");
            }


            Console.WriteLine("Press any key...");
            Console.ReadKey();
        }