Example #1
0
        public async Task Handle(eFormCompleted message)
        {
            ContractInspectionItem contractInspectionItem =
                _dbContext.ContractInspectionItem.SingleOrDefault(x => x.SDKCaseId == message.caseId);

            if (contractInspectionItem != null)
            {
                contractInspectionItem.Status = 100;
                var caseDto = await _sdkCore.CaseLookupMUId(message.caseId);

                var microtingUId      = caseDto.MicrotingUId;
                var microtingCheckUId = caseDto.CheckUId;
                if (microtingUId != null && microtingCheckUId != null)
                {
                    // var theCase = _sdkCore.CaseRead((int) microtingUId, (int) microtingCheckUId);

                    ContractInspection contractInspection =
                        await _dbContext.ContractInspection.SingleOrDefaultAsync(x =>
                                                                                 x.Id == contractInspectionItem.ContractInspectionId);

                    Contract contract = await _dbContext.Contract.SingleOrDefaultAsync(x => x.Id == contractInspection.ContractId);

                    if (contract.Status != 100)
                    {
                        contract.Status = 100;

                        contractInspectionItem.Status = 100;
                        contractInspection.DoneAt     = DateTime.UtcNow;

                        await contract.Update(_dbContext);

                        await contractInspectionItem.Update(_dbContext);

                        await contractInspection.Update(_dbContext);
                    }
                    await RetractFromMicroting(contract.Id);
                }
            }
        }
        public async Task <OperationResult> Update(ContractInspectionModel contractInspectionUpdateModel)
        {
            try
            {
                ContractInspection contractInspection =
                    await _dbContext.ContractInspection.SingleOrDefaultAsync(x =>
                                                                             x.Id == contractInspectionUpdateModel.Id);

                if (contractInspection != null)
                {
                    contractInspection.ContractId = contractInspectionUpdateModel.ContractId;
                    contractInspection.DoneAt     = contractInspectionUpdateModel.DoneAt;
                    await contractInspection.Update(_dbContext);
                }
                return(new OperationResult(true));
            }
            catch (Exception e)
            {
                Trace.TraceError(e.Message);
                _logger.LogError(e.Message);
                return(new OperationResult(true, _rentableItemsLocalizationService.GetString("ErrorWhileUpdatingContractInspection")));
            }
        }
        public async Task <string> DownloadEFormPdf(int id, string token, string fileType)
        {
            Core core = await _coreHelper.GetCore();

            var locale = await _userService.GetCurrentUserLocale();

            var    language = core.DbContextHelper.GetDbContext().Languages.Single(x => x.LanguageCode.ToLower() == locale.ToLower());
            string microtingUId;
            string microtingCheckUId;
            int    caseId  = 0;
            int    eFormId = 0;

            ContractInspection contractInspection =
                await _dbContext.ContractInspection.SingleOrDefaultAsync(x => x.Id == id);

            Contract contract = _dbContext.Contract.Single(x => x.Id == contractInspection.ContractId);

            int      i          = 0;
            XElement xmlContent = new XElement("ContractInspection");

            foreach (ContractRentableItem contractRentableItem in _dbContext.ContractRentableItem
                     .Where(x => x.ContractId == contract.Id &&
                            x.WorkflowState == Constants.WorkflowStates.Created)
                     .ToList())
            {
                RentableItem rentableItem = _dbContext.RentableItem.Single(x => x.Id == contractRentableItem.RentableItemId);
                xmlContent.Add(new XElement($"Brand_{i}", rentableItem.Brand));
                xmlContent.Add(new XElement($"ModelName_{i}", rentableItem.ModelName));
                xmlContent.Add(new XElement($"Serial_{i}", rentableItem.SerialNumber));
                xmlContent.Add(new XElement($"RegistrationDate_{i}", rentableItem.RegistrationDate));
                xmlContent.Add(new XElement($"vinNumber_{i}", rentableItem.VinNumber));
                xmlContent.Add(new XElement($"PlateNumber_{i}", rentableItem.PlateNumber));
                i += 1;
            }

            Customer customer =
                _customerDbContext.Customers.Single(x => x.Id == contract.CustomerId);

            xmlContent.Add(new XElement("CustomerCustomerNo", customer.CustomerNo));
            xmlContent.Add(new XElement("CustomerCompanyName", customer.CompanyName));
            xmlContent.Add(new XElement("CustomerContactPerson", customer.ContactPerson));
            xmlContent.Add(new XElement("CustomerCompanyAddress", customer.CompanyAddress));
            xmlContent.Add(new XElement("CustomerCompanyAddress2", customer.CompanyAddress2));
            xmlContent.Add(new XElement("CustomerCityName", customer.CityName));
            xmlContent.Add(new XElement("CustomerZipCode", customer.ZipCode));
            xmlContent.Add(new XElement("CustomerCountryCode", customer.CountryCode));
            xmlContent.Add(new XElement("CustomerEanCode", customer.EanCode));
            xmlContent.Add(new XElement("CustomerVatNumber", customer.VatNumber));
            xmlContent.Add(new XElement("CustomerEmail", customer.Email));
            xmlContent.Add(new XElement("CustomerPhone", customer.Phone));
            xmlContent.Add(new XElement("CustomerDescription", customer.Description));

            _coreHelper.LogEvent($"DownloadEFormPdf: xmlContent is {xmlContent}");
            ContractInspectionItem contractInspectionItem =
                _dbContext.ContractInspectionItem.FirstOrDefault(x =>
                                                                 x.ContractInspectionId == contractInspection.Id);

            CaseDto caseDto = await core.CaseLookupMUId(contractInspectionItem.SDKCaseId);

            caseId  = (int)caseDto.CaseId;
            eFormId = caseDto.CheckListId;

            if (caseId != 0 && eFormId != 0)
            {
                _coreHelper.LogEvent($"DownloadEFormPdf: caseId is {caseId}, eFormId is {eFormId}");
                var filePath = await core.CaseToPdf(caseId, eFormId.ToString(),
                                                    DateTime.Now.ToString("yyyyMMddHHmmssffff"),
                                                    $"{await core.GetSdkSetting(Settings.httpServerAddress)}/" + "api/template-files/get-image/", xmlContent.ToString(), language);

                if (!File.Exists(filePath))
                {
                    throw new FileNotFoundException();
                }

                return(filePath);
            }

            throw new Exception("could not find case of eform!");
        }
        public async Task <OperationResult> Create(ContractInspectionModel contractInspectionCreateModel)
        {
            try
            {
                Core core = await _coreHelper.GetCore();

                await using MicrotingDbContext context = core.DbContextHelper.GetDbContext();

                // finde eform fra settings
                List <ContractRentableItem> contractRentableItem =
                    await _dbContext.ContractRentableItem.Where(x =>
                                                                x.ContractId == contractInspectionCreateModel.ContractId && x.WorkflowState != Constants.WorkflowStates.Removed).ToListAsync();

                foreach (var item in contractRentableItem)
                {
                    int rentableItemId = item.RentableItemId;

                    RentableItem rentableItem =
                        await _dbContext.RentableItem.FirstOrDefaultAsync(x => x.Id == rentableItemId);

                    int eFormId = rentableItem.eFormId;

                    Contract dbContract =
                        await _dbContext.Contract.FirstOrDefaultAsync(x =>
                                                                      x.Id == contractInspectionCreateModel.ContractId);

                    Customer dbCustomer =
                        await _customersPnDbContext.Customers.SingleOrDefaultAsync(x => x.Id == dbContract.CustomerId);

                    Site site = await context.Sites.SingleAsync(x => x.Id == contractInspectionCreateModel.SiteId);

                    Language language = await context.Languages.SingleAsync(x => x.Id == site.LanguageId);

                    MainElement mainElement = await core.ReadeForm(eFormId, language);

                    mainElement.Repeated  = 1;
                    mainElement.EndDate   = DateTime.Now.AddDays(14).ToUniversalTime();
                    mainElement.StartDate = DateTime.Now.ToUniversalTime();
                    mainElement.Label     = "";
                    mainElement.Label    += string.IsNullOrEmpty(rentableItem.SerialNumber)
                        ? ""
                        : $"{rentableItem.SerialNumber}";
                    mainElement.Label += string.IsNullOrEmpty(rentableItem.VinNumber)
                        ? ""
                        : $"{rentableItem.VinNumber}";
                    mainElement.Label += string.IsNullOrEmpty(rentableItem.Brand)
                        ? ""
                        : $"<br>{rentableItem.Brand}";
                    mainElement.Label += string.IsNullOrEmpty(rentableItem.ModelName)
                        ? ""
                        : $"<br>{rentableItem.ModelName}";
                    mainElement.Label += string.IsNullOrEmpty(dbCustomer.ContactPerson)
                        ? ""
                        : $"<br>{dbCustomer.ContactPerson}";

                    CDataValue cDataValue = new CDataValue();
                    cDataValue.InderValue  = $"<b>Kontrakt Nr:<b>{dbContract.ContractNr.ToString()}<br>";
                    cDataValue.InderValue += $"<b>Kunde Nr:<b>{dbContract.CustomerId.ToString()}";

                    List <SiteDto> sites = new List <SiteDto>();

                    int?sdkCaseId = await core.CaseCreate(mainElement, "", (int)site.MicrotingUid, null);

                    if (sdkCaseId != null)
                    {
                        ContractInspection contractInspection = new ContractInspection
                        {
                            ContractId = contractInspectionCreateModel.ContractId
                        };
                        await contractInspection.Create(_dbContext);

                        ContractInspectionItem contractInspectionItem = new ContractInspectionItem
                        {
                            ContractInspectionId = contractInspection.Id,
                            RentableItemId       = rentableItemId,
                            SiteId    = site.Id,
                            SDKCaseId = (int)sdkCaseId,
                            Status    = 33
                        };
                        await contractInspectionItem.Create(_dbContext);
                    }
                }

                return(new OperationResult(true, "Inspection Created Successfully"));
            }
            catch (Exception e)
            {
                Trace.TraceError(e.Message);
                _logger.LogError(e.Message);
                return(new OperationResult(false, _rentableItemsLocalizationService.GetString("ErrorWhileCreatingContractInspection")));
            }
        }
        public async Task ContractInspectionItem_Update_DoesUpdate()
        {
            //Arrange
            Random   rnd           = new Random();
            DateTime contractEnd   = DateTime.Now;
            DateTime contractStart = DateTime.Now;
            Contract contract      = new Contract
            {
                Status        = 66,
                ContractEnd   = contractEnd,
                ContractNr    = rnd.Next(1, 255),
                ContractStart = contractStart,
                CustomerId    = rnd.Next(1, 255)
            };
            await contract.Create(DbContext);

            Contract contract2 = new Contract
            {
                Status        = 100,
                ContractEnd   = contractEnd,
                ContractNr    = rnd.Next(1, 255),
                ContractStart = contractStart,
                CustomerId    = rnd.Next(1, 255)
            };
            await contract2.Create(DbContext);

            RentableItem rentableItem = new RentableItem
            {
                ModelName        = Guid.NewGuid().ToString(),
                Brand            = Guid.NewGuid().ToString(),
                RegistrationDate = DateTime.Now,
                VinNumber        = Guid.NewGuid().ToString(),
                PlateNumber      = Guid.NewGuid().ToString(),
                SerialNumber     = Guid.NewGuid().ToString(),
                eFormId          = rnd.Next(1, 255)
            };
            RentableItem rentableItem2 = new RentableItem
            {
                Brand            = Guid.NewGuid().ToString(),
                ModelName        = Guid.NewGuid().ToString(),
                VinNumber        = Guid.NewGuid().ToString(),
                SerialNumber     = Guid.NewGuid().ToString(),
                PlateNumber      = Guid.NewGuid().ToString(),
                RegistrationDate = DateTime.Now.AddDays(1)
            };

            ContractInspection contractInspection = new ContractInspection
            {
                ContractId = contract.Id,
                DoneAt     = DateTime.Now,
            };
            await contractInspection.Create(DbContext);

            ContractInspection contractInspection2 = new ContractInspection
            {
                ContractId = contract2.Id,
                DoneAt     = DateTime.Now.AddDays(1)
            };

            ContractInspectionItem inspectionItem = new ContractInspectionItem
            {
                ContractInspectionId = contractInspection.Id,
                RentableItemId       = rentableItem.Id,
                SDKCaseId            = rnd.Next(1, 66),
                SiteId = rnd.Next(1, 999999),
                Status = 66
            };
            await inspectionItem.Create(DbContext);

            inspectionItem.Status               = 100;
            inspectionItem.SDKCaseId            = rnd.Next(1, 255);
            inspectionItem.SiteId               = rnd.Next(1, 255);
            inspectionItem.ContractInspectionId = contractInspection2.Id;
            inspectionItem.RentableItemId       = rentableItem2.Id;
            //Act
            await inspectionItem.Update(DbContext);

            ContractInspectionItem dbInspectionItem =
                await DbContext.ContractInspectionItem.AsNoTracking().FirstAsync();

            List <ContractInspectionItem> inspectionItems =
                await DbContext.ContractInspectionItem.AsNoTracking().ToListAsync();

            List <ContractInspectionItemVersion> versionList =
                await DbContext.ContractInspectionItemVersion.AsNoTracking().ToListAsync();

            //Assert
            Assert.NotNull(dbInspectionItem);
            Assert.NotNull(inspectionItems);
            Assert.NotNull(versionList);

            Assert.AreEqual(inspectionItem.Status, dbInspectionItem.Status);
            Assert.AreEqual(inspectionItem.ContractInspectionId, dbInspectionItem.ContractInspectionId);
            Assert.AreEqual(inspectionItem.RentableItemId, dbInspectionItem.RentableItemId);
            Assert.AreEqual(inspectionItem.SDKCaseId, dbInspectionItem.SDKCaseId);
            Assert.AreEqual(inspectionItem.SiteId, dbInspectionItem.SiteId);
        }