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)); }
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(); } } }