public SIMSResponseData SaveAfterMarketFactoryOptions() { SIMSResponseData responseStatus; VehicleAfterMarketOptions vehicleFactoryOptions = new VehicleAfterMarketOptions(); AnswerWrapper answers = new AnswerWrapper(); answers.Answers = new List <ReconAnsKBB>(); foreach (var ans in AppDelegate.appDelegate.afterMarketOptions.aftermarketQuestions.data) { foreach (var item in ans.questions) { ReconAnsKBB answer = new ReconAnsKBB(); answer.label = item.label; answer.questionId = item.questionId; answer.questionType = item.questionType; answer.tags = item.tags; if (item.value == "true") { answer.value = "Yes"; } else { answer.value = "No"; } answer.value = item.value; answer.vehicleConditionCategory = item.vehicleConditionCategory; answer.vehicleConditionCategoryName = item.vehicleConditionCategoryName; answer.vehicleSectionId = item.vehicleSectionId; answer.vehicleSectionName = item.vehicleSectionName; answer.comment = item.comment; answers.Answers.Add(answer); } } vehicleFactoryOptions.Answer = new AnswerWrapper(); vehicleFactoryOptions.Answer.Answers = new List <ReconAnsKBB>(); vehicleFactoryOptions.Answer.VehicleID = AppDelegate.appDelegate.vehicleID; vehicleFactoryOptions.Answer.StoreID = AppDelegate.appDelegate.storeId; vehicleFactoryOptions.Answer.InvtrID = AppDelegate.appDelegate.invtrId; vehicleFactoryOptions.Answer.UserName = "******"; vehicleFactoryOptions.Answer.Answers = answers.Answers; vehicleFactoryOptions.vehicleFactoryOptions = new VehicleFactoryOptions(); vehicleFactoryOptions.vehicleFactoryOptions.AlternateFactoryOptionsLst = new List <AlternateFactoryOptions>(); if (AppDelegate.appDelegate.afterMarketOptions.sonicAfterMarketList.Count == 0) { AlternateFactoryOptions vehicleFactory = new AlternateFactoryOptions(); vehicleFactory.Description = "None"; vehicleFactory.Is_AfterMarketOption_Select = true; vehicleFactory.AfterMarketOptionId = 1; vehicleFactory.OptionKindId = "AMFO"; AppDelegate.appDelegate.afterMarketOptions.sonicAfterMarketList.Add(vehicleFactory); } vehicleFactoryOptions.vehicleFactoryOptions.AlternateFactoryOptionsLst = AppDelegate.appDelegate.afterMarketOptions.sonicAfterMarketList; vehicleFactoryOptions.vehicleFactoryOptions.VehicleID = AppDelegate.appDelegate.vehicleID; vehicleFactoryOptions.vehicleFactoryOptions.StoreID = AppDelegate.appDelegate.storeId; vehicleFactoryOptions.vehicleFactoryOptions.InvtrID = AppDelegate.appDelegate.invtrId; vehicleFactoryOptions.vehicleFactoryOptions.UserName = "******"; //Logic to add the Selected Factory options responseStatus = ServiceFactory.getWebServiceHandle().SaveAfterMarketFactoryOptions(vehicleFactoryOptions); return(responseStatus); }
/// <summary> /// Uses a native library to load an image and extract answers from it. /// Works with both image bytes as well as just an image file path. /// This method is unsafe. /// </summary> /// <param name="sheet">The path to the image containing answers to be extracted as a string or an array of image bytes.</param> /// <param name="studentNumberAnswers">This parameter will contain the student number answers extracted from the student number table.</param> /// <param name="extractedAnswers">This parameter will contain the answers extracted from the answer tables.</param> /// <returns>True if the process has succeeded and false otherwise.</returns> bool ExtractAnswers <T>(T sheet, out bool[,,] studentNumberAnswers, out bool[,,] extractedAnswers) { extractedAnswers = new bool[3, 8, 5]; studentNumberAnswers = new bool[1, 5, 10]; // the first row and the first column of the original tables were removed as they do not contain any answers int studentNumberRows = parameters.StudentTableRows - 1; int studentNumberColumns = parameters.StudentTableColumns - 1; int answerRows = parameters.AnswerTableRows - 1; int answerColumns = parameters.AnswerTableColumns - 1; NumberWrapper numberWrapper = new NumberWrapper(); AnswerWrapper answerWrapper = new AnswerWrapper(); bool success = false; unsafe { bool *numberPtr = numberWrapper.number; bool *answersPtr = answerWrapper.answers; bool *successPtr = &success; string sheetFilename; byte[] sheetImageBytes; // if the sheet has been passed as a filename if ((sheetFilename = sheet as string) != null) { NativeAPIWrapper.extract_answers_path_api(sheetFilename, parameters, numberPtr, answersPtr, successPtr); } // if the sheet has been passed as image bytes else if ((sheetImageBytes = sheet as byte[]) != null) { // the image is saved in PNG (or another format) so we need to convert it to BMP which the library can read Image sheetImage = ImageHandling.GetBitmap(sheetImageBytes); int imageRows = sheetImage.Height; int imageCols = sheetImage.Width; byte[] sheetImageBitmapBytes = ImageHandling.GetImageBytes(sheetImage, ImageFormat.Bmp); sheetImage.Dispose(); fixed(byte *imageBitmapBytesPtr = sheetImageBitmapBytes) { NativeAPIWrapper.extract_answers_image_api(imageBitmapBytesPtr, imageRows, imageCols, parameters, numberPtr, answersPtr, successPtr); } } else { return(false); } if (!success) { return(false); } // convert the student number values from a C-style array of answers to a C# multi-dimensional array for (int row = 0; row < studentNumberRows; row++) { for (int col = 0; col < studentNumberColumns; col++) { if (numberPtr[row * studentNumberColumns + col] == true) { studentNumberAnswers[0, row, col] = true; } else { studentNumberAnswers[0, row, col] = false; } } } // convert the answer table values from a C-style array to a C# multi-dimensional array for (int table = 0; table < parameters.TableCount - 1; table++) { for (int row = 0; row < answerRows; row++) { for (int col = 0; col < answerColumns; col++) { if (answersPtr[table * answerRows * answerColumns + row * answerColumns + col] == true) { extractedAnswers[table, row, col] = true; } else { extractedAnswers[table, row, col] = false; } } } } } return(true); }