public async Task <OperationResult> AssignInstallations(InstallationsAssignModel installationsAssignModel) { using (var transaction = await _installationCheckingContext.Database.BeginTransactionAsync()) { try { var core = await _coreHelper.GetCore(); var options = _options.Value; foreach (var id in installationsAssignModel.InstallationIds) { var installation = await _installationCheckingContext.Installations .Include(i => i.Meters).FirstOrDefaultAsync(x => x.Id == id); if (installation.State != InstallationState.NotAssigned) { return(new OperationResult(false, _localizationService.GetString("InstallationCannotBeAssigned"))); } MainElement mainElement; if (installation.Type == InstallationType.Installation) { var language = await core.DbContextHelper.GetDbContext().Languages.SingleAsync(x => x.LanguageCode.ToLower() == "da"); mainElement = await core.ReadeForm(int.Parse(options.InstallationFormId), language); mainElement.Label = installation.CompanyName; var dataElement = (DataElement)mainElement.ElementList[0]; dataElement.Label = installation.CompanyName; dataElement.Description.InderValue = installation.CompanyAddress; dataElement.Description.InderValue += string.IsNullOrEmpty(installation.CompanyAddress2) ? "" : $"<br>{installation.CompanyAddress2}"; dataElement.Description.InderValue += string.IsNullOrEmpty(installation.ZipCode) ? "" : $"<br>{installation.ZipCode}"; dataElement.Description.InderValue += string.IsNullOrEmpty(installation.CityName) ? "" : $"<br>{installation.CityName}"; dataElement.Description.InderValue += string.IsNullOrEmpty(installation.CountryCode) ? "" : $"<br>{installation.CountryCode}"; var dataItem = (Text)dataElement.DataItemList[0]; dataItem.Value = installation.CadastralNumber; dataItem = (Text)dataElement.DataItemList[1]; dataItem.Value = installation.PropertyNumber; dataItem = (Text)dataElement.DataItemList[2]; dataItem.Value = installation.ApartmentNumber; var dataItemSelect = (EntitySelect)dataElement.DataItemList[3]; var model = await core.Advanced_EntityGroupAll( "id", "eform-angular-installationchecking-plugin-editable-CadastralType", 0, 1, Constants.FieldTypes.EntitySelect, false, Constants.WorkflowStates.NotRemoved); foreach (var entityItem in model.EntityGroups.First().EntityGroupItemLst) { if (entityItem.Id == int.Parse(installation.CadastralType)) { dataItemSelect.DefaultValue = entityItem.Id; } } var dataItemNumber = (Number)dataElement.DataItemList[4]; if (installation.YearBuilt != null) { dataItemNumber.DefaultValue = (int)installation.YearBuilt; } dataItemNumber = (Number)dataElement.DataItemList[5]; if (installation.LivingFloorsNumber != null) { dataItemNumber.DefaultValue = (int)installation.LivingFloorsNumber; } mainElement.Repeated = 1; mainElement.EndDate = DateTime.Now.AddYears(10).ToUniversalTime(); mainElement.StartDate = DateTime.Now.ToUniversalTime(); installation.InstallationEmployeeId = installationsAssignModel.EmployeeId; installation.InstallationSdkCaseId = await core.CaseCreate(mainElement, "", installationsAssignModel.EmployeeId, null); installation.State = InstallationState.Assigned; installation.UpdatedByUserId = _userService.UserId; await installation.Update(_installationCheckingContext); } else { var language = await core.DbContextHelper.GetDbContext().Languages.SingleAsync(x => x.LanguageCode.ToLower() == "da"); mainElement = await core.ReadeForm(int.Parse(options.RemovalFormId), language); mainElement.Label = installation.CompanyName; var dataElement = (DataElement)mainElement.ElementList[0]; var removalDate = DateTime.UtcNow.ToString("yyyy-MM-dd"); dataElement.Label = installation.CompanyName; dataElement.Description.InderValue = installation.CompanyAddress; dataElement.Description.InderValue += string.IsNullOrEmpty(installation.CompanyAddress2) ? "" : $"<br>{installation.CompanyAddress2}"; dataElement.Description.InderValue += string.IsNullOrEmpty(installation.ZipCode) ? "" : $"<br>{installation.ZipCode}"; dataElement.Description.InderValue += string.IsNullOrEmpty(installation.CityName) ? "" : $"<br>{installation.CityName}"; dataElement.Description.InderValue += string.IsNullOrEmpty(installation.CountryCode) ? "" : $"<br>{installation.CountryCode}"; dataElement.Description.InderValue += $"<br><b>Nedtagningsdato: {removalDate}</b>"; var model = await core.Advanced_EntityGroupAll( "id", $"eform-angular-installationchecking-plugin_{installation.Id}_hidden", 0, 1, Constants.FieldTypes.EntitySearch, false, Constants.WorkflowStates.NotRemoved); EntityGroup entityGroup; if (!model.EntityGroups.Any()) { entityGroup = await core.EntityGroupCreate( Constants.FieldTypes.EntitySearch, $"eform-angular-installationchecking-plugin_{installation.Id}_hidden", "");// TODO description is empty string } else { entityGroup = model.EntityGroups.First(); } #region Image to PDF section // Read image from file try { var filename = installation.InstallationImageName.Replace(",", ""); var tempFilePath = Path.Combine("tmp", filename); Directory.CreateDirectory("tmp"); Log.LogEvent($"[DBG] InstallationsService.AssignInstallations: tempFilePath is {tempFilePath}"); if (core.GetSdkSetting(Settings.swiftEnabled).Result.ToLower() == "true") { Log.LogEvent($"[DBG] InstallationsService.AssignInstallations: swiftEnabled is true"); var ss = await core.GetFileFromSwiftStorage(filename); var fileStream = File.Create(tempFilePath); ss.ObjectStreamContent.CopyTo(fileStream); fileStream.Close(); fileStream.Dispose(); ss.ObjectStreamContent.Close(); ss.ObjectStreamContent.Dispose(); } else { if (core.GetSdkSetting(Settings.s3Enabled).Result.ToLower() == "true") { Log.LogEvent($"[DBG] InstallationsService.AssignInstallations: s3Enabled is true"); var ss = await core.GetFileFromS3Storage(filename); var fileStream = File.Create(tempFilePath); ss.ResponseStream.CopyTo(fileStream); fileStream.Close(); fileStream.Dispose(); ss.ResponseStream.Close(); ss.ResponseStream.Dispose(); } } using (var image = new ImageMagick.MagickImage(tempFilePath)) { Log.LogEvent($"[DBG] InstallationsService.AssignInstallations: MagickImage converting"); // Create pdf file with a single page image.Write(tempFilePath .Replace("png", "pdf") .Replace("jpg", "pdf") .Replace("jpeg", "pdf")); } Log.LogEvent($"[DBG] InstallationsService.AssignInstallations: Uploading PDF to Microting"); var resultId = await core.PdfUpload(tempFilePath .Replace("png", "pdf") .Replace("jpg", "pdf") .Replace("jpeg", "pdf")); var showPdf = (ShowPdf)dataElement.DataItemList[0]; showPdf.Value = resultId; Log.LogEvent($"[DBG] InstallationsService.AssignInstallations: PDF set for field"); } catch (Exception ex) { Log.LogException($"[ERR] InstallationsService.AssignInstallations convert image to pdf failed and got exception : {ex.Message}"); } #endregion var i = 2; foreach (var meter in installation.Meters.Where(x => !x.QR.IsNullOrEmpty())) { await core.EntitySearchItemCreate( entityGroup.Id, meter.QR, "", i.ToString() ); var entity = (EntitySearch)dataElement.DataItemList[i]; entity.EntityTypeId = int.Parse(entityGroup.MicrotingUUID); entity.DisplayOrder = i; i += 1; } var validFields = installation.Meters.Count(x => !x.QR.IsNullOrEmpty()) + 2; try { for (var j = validFields; j < 52; j++) { var dataItem = (EntitySearch)dataElement.DataItemList[validFields]; dataElement.DataItemList.Remove(dataItem); } } catch (Exception ex) { Log.LogException(ex.Message); } installation.RemovalFormId = int.Parse(options.RemovalFormId); mainElement.Repeated = 1; mainElement.EndDate = DateTime.Now.AddYears(10).ToUniversalTime(); mainElement.StartDate = DateTime.Now.ToUniversalTime(); installation.RemovalEmployeeId = installationsAssignModel.EmployeeId; installation.RemovalSdkCaseId = await core.CaseCreate(mainElement, "", installationsAssignModel.EmployeeId, null); installation.State = InstallationState.Assigned; installation.UpdatedByUserId = _userService.UserId; await installation.Update(_installationCheckingContext); } } transaction.Commit(); return(new OperationResult(true, _localizationService.GetString("InstallationAssignedSuccessfully"))); } catch (Exception e) { transaction.Rollback(); Trace.TraceError(e.Message); return(new OperationResult(false, _localizationService.GetString("ErrorWhileAssigningInstallation"))); } } }
public async Task <OperationResult> AssignInstallation([FromBody] InstallationsAssignModel installationsAssignModel) { return(await _installationsService.AssignInstallations(installationsAssignModel)); }