Пример #1
0
        public static Money GetPriceForRent(TimeSpan duration, new_carclass carClass)
        {
            int pricePerDay = Decimal.ToInt32(carClass.new_Price.Value);
            int totalDays   = duration.Days;

            return(new Money(pricePerDay * totalDays));
        }
Пример #2
0
        public static void Run(int recordsNumber)
        {
            CrmServiceClient crmSvc = new CrmServiceClient(ConfigurationManager.ConnectionStrings["MyCRMServer"].ConnectionString);

            using (svcContext context = new svcContext(crmSvc))
            {
                List <new_car>      cars       = context.new_carSet.ToList <new_car>();
                List <new_carclass> carClasses = context.new_carclassSet.ToList <new_carclass>();
                List <Contact>      contacts   = context.ContactSet.ToList <Contact>();

                try
                {
                    var createRentsReq = new ExecuteMultipleRequest()
                    {
                        Requests = new OrganizationRequestCollection(),
                        Settings = new ExecuteMultipleSettings
                        {
                            ContinueOnError = false,
                            ReturnResponses = true
                        }
                    };

                    Random random = new Random();
                    for (int i = 0; i < recordsNumber; i++)
                    {
                        DateTime reservedPickup =
                            Helpers.GenerateDateInRange(
                                new DateTime(Constants.RentDuration.YearFrom, Constants.RentDuration.MonthFrom, Constants.RentDuration.DayFrom),
                                new DateTime(Constants.RentDuration.YearTo, Constants.RentDuration.MonthTo, Constants.RentDuration.DayTo),
                                random);
                        TimeSpan     rentDuration        = Helpers.GenerateRentDuraton(random);
                        DateTime     reservedReturn      = reservedPickup.Add(rentDuration);
                        new_carclass carClass            = Helpers.GetCarClass(carClasses, random);
                        Guid         classId             = carClass.Id;
                        Guid         carId               = Helpers.GetCarIdByClassId(classId, cars, random);
                        Guid         customerId          = Helpers.GetCustomerId(contacts, random);
                        int          pickupLocationValue = Helpers.GetLocationValue(random);
                        int          returnLocationValue = Helpers.GetLocationValue(random);
                        Money        price               = Helpers.GetPriceForRent(rentDuration, carClass);


                        new_rent rent = new new_rent
                        {
                            new_ReservedPickup   = reservedPickup,
                            new_ReservedHandover = reservedReturn,
                            new_Price            = price,
                            new_CarClass         = new EntityReference(new_carclass.EntityLogicalName, classId),
                            new_Car            = new EntityReference(new_car.EntityLogicalName, carId),
                            new_Customer       = new EntityReference(Contact.EntityLogicalName, customerId),
                            new_PickupLocation = new OptionSetValue(pickupLocationValue),
                            new_ReturnLocation = new OptionSetValue(returnLocationValue)
                        };

                        var createRequest = new CreateRequest()
                        {
                            Target = rent
                        };
                        createRentsReq.Requests.Add(createRequest);
                    }

                    var rentsResponse = (ExecuteMultipleResponse)crmSvc.Execute(createRentsReq);

                    //--------- CREATE LISTS WITH RENTS IDS-----
                    List <string> created      = new List <string>();
                    int           createdInd   = (int)(recordsNumber * 0.05);
                    List <string> confirmed    = new List <string>();
                    int           confirmedInd = createdInd + (int)(recordsNumber * 0.05);
                    List <string> renting      = new List <string>();
                    int           rentingInd   = confirmedInd + (int)(recordsNumber * 0.05);
                    List <string> returned     = new List <string>();
                    int           returnedInd  = rentingInd + (int)(recordsNumber * 0.75);
                    List <string> canceled     = new List <string>();
                    int           canceledInd  = returnedInd + (int)(recordsNumber * 0.1);

                    int recordsCounter = 0;
                    foreach (var r in rentsResponse.Responses)
                    {
                        if (r.Response != null)
                        {
                            Console.WriteLine("Success on creation record#: " + recordsCounter);
                            if (recordsCounter < createdInd)
                            {
                                created.Add(r.Response.Results["id"].ToString());
                            }
                            else if (recordsCounter < confirmedInd)
                            {
                                confirmed.Add(r.Response.Results["id"].ToString());
                            }
                            else if (recordsCounter < rentingInd)
                            {
                                renting.Add(r.Response.Results["id"].ToString());
                            }
                            else if (recordsCounter < returnedInd)
                            {
                                returned.Add(r.Response.Results["id"].ToString());
                            }
                            else if (recordsCounter < canceledInd)
                            {
                                canceled.Add(r.Response.Results["id"].ToString());
                            }
                        }
                        else if (r.Fault != null)
                        {
                            Console.WriteLine(r.Fault);
                        }
                        recordsCounter++;
                    }

                    //------ UPDATE RENTS WITH REPORTS ----
                    var multipleRequest = new ExecuteMultipleRequest()
                    {
                        Requests = new OrganizationRequestCollection(),
                        Settings = new ExecuteMultipleSettings
                        {
                            ContinueOnError = false,
                            ReturnResponses = true
                        }
                    };

                    //------ CONFIRMED ----
                    for (int i = 0; i < confirmed.Count; i++)
                    {
                        Guid rentId = Guid.Parse(confirmed[i]);

                        new_rent newRent = new new_rent
                        {
                            Id         = Guid.Parse(confirmed[i]),
                            new_Paid   = i < Math.Round(confirmed.Count * 0.9),
                            statuscode = new OptionSetValue(Constants.RentStatus.Confirmed)
                        };

                        UpdateRequest updateRentRequest = new UpdateRequest {
                            Target = newRent
                        };
                        multipleRequest.Requests.Add(updateRentRequest);
                    }
                    //------ RENTING ----
                    for (int i = 0; i < renting.Count; i++)
                    {
                        Guid rentId = Guid.Parse(renting[i]);

                        new_rent currentRent = (new_rent)crmSvc.Retrieve(new_rent.EntityLogicalName, rentId, new ColumnSet(true));

                        new_cartransferreport newReport = new new_cartransferreport
                        {
                            new_Type = Constants.ReportType.Pickup,
                            new_Date = currentRent.new_ReservedPickup,
                            new_Car  = currentRent.new_Car,
                        };

                        CreateRequest createReportRequest = new CreateRequest {
                            Target = newReport
                        };
                        CreateResponse cresp    = (CreateResponse)crmSvc.Execute(createReportRequest);
                        Guid           reportId = cresp.id;

                        new_rent newRent = new new_rent
                        {
                            Id               = rentId,
                            new_Paid         = i < Math.Round(renting.Count * 0.999),
                            statuscode       = new OptionSetValue(Constants.RentStatus.Renting),
                            new_PickupReport = new EntityReference(new_cartransferreport.EntityLogicalName, reportId)
                        };

                        UpdateRequest updateRentRequest = new UpdateRequest {
                            Target = newRent
                        };
                        multipleRequest.Requests.Add(updateRentRequest);
                    }

                    //------ RETURNED -----
                    for (int i = 0; i < returned.Count; i++)
                    {
                        Guid rentId = Guid.Parse(returned[i]);

                        new_rent currentRent = (new_rent)crmSvc.Retrieve(new_rent.EntityLogicalName, rentId, new ColumnSet(true));

                        new_cartransferreport newPickupReport = new new_cartransferreport
                        {
                            new_Type = Constants.ReportType.Pickup,
                            new_Date = currentRent.new_ReservedPickup,
                            new_Car  = currentRent.new_Car,
                        };

                        bool hasDamage = i < Math.Round(returned.Count * 0.5);
                        new_cartransferreport newReturnReport = new new_cartransferreport
                        {
                            new_Type              = Constants.ReportType.Return,
                            new_Damages           = hasDamage,
                            new_DamageDescription = hasDamage ? "damage" : null,
                            new_Date              = currentRent.new_ReservedHandover,
                            new_Car = currentRent.new_Car,
                        };

                        CreateRequest createPickupReportRequest = new CreateRequest {
                            Target = newPickupReport
                        };
                        CreateResponse crespPickup    = (CreateResponse)crmSvc.Execute(createPickupReportRequest);
                        Guid           pickupReportId = crespPickup.id;

                        CreateRequest createReturnReportRequest = new CreateRequest {
                            Target = newReturnReport
                        };
                        CreateResponse crespReturn    = (CreateResponse)crmSvc.Execute(createReturnReportRequest);
                        Guid           returnReportId = crespReturn.id;

                        new_rent updRent = new new_rent
                        {
                            Id               = rentId,
                            new_Paid         = i < Math.Round(returned.Count * 0.9998),
                            statecode        = new_rentState.Inactive,
                            statuscode       = new OptionSetValue(Constants.RentStatus.Returned),
                            new_PickupReport = new EntityReference(new_cartransferreport.EntityLogicalName, pickupReportId),
                            new_ReturnReport = new EntityReference(new_cartransferreport.EntityLogicalName, returnReportId),
                        };

                        UpdateRequest updateRentRequest = new UpdateRequest {
                            Target = updRent
                        };
                        multipleRequest.Requests.Add(updateRentRequest);
                    }

                    //------ CANCELED -----
                    foreach (var id in canceled)
                    {
                        Guid rentId = Guid.Parse(id);

                        new_rent newRent = new new_rent
                        {
                            Id         = rentId,
                            statecode  = new_rentState.Inactive,
                            statuscode = new OptionSetValue(Constants.RentStatus.Canceled),
                        };

                        UpdateRequest updateRentRequest = new UpdateRequest {
                            Target = newRent
                        };
                        multipleRequest.Requests.Add(updateRentRequest);
                    }

                    var multipleResponse = (ExecuteMultipleResponse)crmSvc.Execute(multipleRequest);

                    int updatedIndex = 0;
                    foreach (var r in multipleResponse.Responses)
                    {
                        if (r.Response != null)
                        {
                            Console.WriteLine("succes on update: " + updatedIndex);
                        }
                        else if (r.Fault != null)
                        {
                            Console.WriteLine(r.Fault);
                        }
                        updatedIndex++;
                    }
                    Console.WriteLine("Press ANY key to Continue");
                    //Console.ReadLine();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    Console.ReadLine();
                }
            }
        }