예제 #1
0
        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));
 }