public async Task <OperationResult> Update(RentableItemModel rentableItemPnUpdateModel)
        {
            try
            {
                RentableItem rentableItem = await _dbContext.RentableItem.SingleOrDefaultAsync(x => x.Id == rentableItemPnUpdateModel.Id);

                if (rentableItem != null)
                {
                    rentableItem.Brand            = rentableItemPnUpdateModel.Brand;
                    rentableItem.ModelName        = rentableItemPnUpdateModel.ModelName;
                    rentableItem.RegistrationDate = rentableItemPnUpdateModel.RegistrationDate;
                    rentableItem.SerialNumber     = rentableItemPnUpdateModel.SerialNumber;
                    rentableItem.VinNumber        = rentableItemPnUpdateModel.VinNumber;
                    rentableItem.PlateNumber      = rentableItemPnUpdateModel.PlateNumber;
                    rentableItem.eFormId          = rentableItemPnUpdateModel.EFormId;

                    await rentableItem.Update(_dbContext);
                }
                return(new OperationDataResult <RentableItemsModel>(true,
                                                                    _rentableItemsLocalizationService.GetString("RentableItemUpdatedSuccessfully")));
            }
            catch (Exception e)
            {
                Trace.TraceError(e.Message);
                _logger.LogError(e.Message);
                return(new OperationDataResult <RentableItemsModel>(false,
                                                                    _rentableItemsLocalizationService.GetString("ErrorWhileUpdatingRentableItemInfo")));
            }
        }
예제 #2
0
        public async Task RentableItem_Create_DoesCreate()
        {
            //Arrange
            RentableItem rentableItem = 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
            };
            //Act
            await rentableItem.Create(DbContext);

            RentableItem               dbRentableItem = DbContext.RentableItem.AsNoTracking().First();
            List <RentableItem>        itemList       = DbContext.RentableItem.AsNoTracking().ToList();
            List <RentableItemVersion> versionList    = DbContext.RentableItemsVersion.AsNoTracking().ToList();

            // Assert
            Assert.NotNull(rentableItem);

            Assert.AreEqual(1, itemList.Count());

            Assert.AreEqual(1, versionList.Count());

            Assert.AreEqual(rentableItem.Brand, dbRentableItem.Brand);
            Assert.AreEqual(rentableItem.ModelName, dbRentableItem.ModelName);
            Assert.AreEqual(rentableItem.PlateNumber, dbRentableItem.PlateNumber);
            Assert.AreEqual(rentableItem.VinNumber, dbRentableItem.VinNumber);
            Assert.AreEqual(rentableItem.SerialNumber, dbRentableItem.SerialNumber);
            Assert.AreEqual(rentableItem.RegistrationDate.ToString(), dbRentableItem.RegistrationDate.ToString());
            Assert.AreEqual(rentableItem.WorkflowState, dbRentableItem.WorkflowState);
        }
        public async Task <OperationResult> Create(RentableItemModel rentableItemPnCreateModel)
        {
            try
            {
                RentableItem rentableItem = new RentableItem
                {
                    Brand            = rentableItemPnCreateModel.Brand,
                    ModelName        = rentableItemPnCreateModel.ModelName,
                    RegistrationDate = rentableItemPnCreateModel.RegistrationDate,
                    VinNumber        = rentableItemPnCreateModel.VinNumber,
                    SerialNumber     = rentableItemPnCreateModel.SerialNumber,
                    PlateNumber      = rentableItemPnCreateModel.PlateNumber,
                    eFormId          = rentableItemPnCreateModel.EFormId
                };

                await rentableItem.Create(_dbContext);

                //_dbContext.RentableItem.Add(rentableItemPn);
                //_dbContext.SaveChanges();
                return(new OperationResult(true,
                                           _rentableItemsLocalizationService.GetString("RentableItemCreated", rentableItemPnCreateModel.Brand,
                                                                                       rentableItemPnCreateModel.ModelName)));
            }
            catch (Exception e)
            {
                Trace.TraceError(e.Message);
                _logger.LogError(e.Message);
                return(new OperationResult(true, _rentableItemsLocalizationService.GetString("ErrorWhileCreatingRentableItem")));
            }
        }
        public async Task <OperationDataResult <RentableItemsModel> > Index(int contractId)
        {
            try
            {
                RentableItemsModel          rentableItemsModel = new RentableItemsModel();
                List <ContractRentableItem> itemContractsQuery = await
                                                                 _dbContext.ContractRentableItem.Where(x => x.ContractId == contractId && x.WorkflowState == Constants.WorkflowStates.Created).ToListAsync();

                foreach (var rentableItemContract in itemContractsQuery)
                {
                    RentableItemModel rentableItemModel = new RentableItemModel();
                    RentableItem      rentableItem      = await
                                                          _dbContext.RentableItem.FirstOrDefaultAsync(y => y.Id == rentableItemContract.RentableItemId);

                    rentableItemModel.Brand            = rentableItem.Brand;
                    rentableItemModel.VinNumber        = rentableItem.VinNumber;
                    rentableItemModel.RegistrationDate = rentableItem.RegistrationDate;
                    rentableItemModel.PlateNumber      = rentableItem.PlateNumber;
                    rentableItemModel.ModelName        = rentableItem.ModelName;
                    rentableItemModel.SerialNumber     = rentableItem.SerialNumber;
                    rentableItemModel.Id = rentableItem.Id;
                    rentableItemsModel.RentableItems.Add(rentableItemModel);
                    rentableItemsModel.RentableItemIds.Add(rentableItemContract.RentableItemId);
                }
                return(new OperationDataResult <RentableItemsModel>(true, rentableItemsModel));
            }
            catch (Exception e)
            {
                Trace.TraceError(e.Message);
                _logger.LogError(e.Message);
                return(new OperationDataResult <RentableItemsModel>(false, "Could not find any rentable items"));
            }
        }
        private async Task <RentableItem> FindRentableItem(bool brandExists, int brandColumn, bool modelExists, int modelColumn,
                                                           bool registrationDateExists, int registrationDateColumn, bool vinNumberExists, int vinNumberColumn,
                                                           JToken headers, JToken rentableObj)
        {
            RentableItem rentableItem = null;

            if (brandExists)
            {
                string brand = rentableObj[brandColumn].ToString();
                rentableItem = await _dbContext.RentableItem.SingleOrDefaultAsync(x => x.Brand == brand && x.WorkflowState == Constants.WorkflowStates.Created);
            }
            if (modelExists)
            {
                string model = rentableObj[modelColumn].ToString();
                rentableItem = await _dbContext.RentableItem.SingleOrDefaultAsync(x => x.ModelName == model && x.WorkflowState == Constants.WorkflowStates.Created);
            }
            if (registrationDateExists)
            {
                DateTime registrationDate = (DateTime)rentableObj[registrationDateColumn];
                rentableItem =
                    await _dbContext.RentableItem.SingleOrDefaultAsync(x => x.RegistrationDate == registrationDate && x.WorkflowState == Constants.WorkflowStates.Created);
            }
            if (vinNumberExists)
            {
                string vinNumber = rentableObj[vinNumberColumn].ToString();
                rentableItem = await _dbContext.RentableItem.SingleOrDefaultAsync(x => x.VinNumber == vinNumber && x.WorkflowState == Constants.WorkflowStates.Created);
            }
            return(rentableItem);
        }
        public async Task ContractRentableItem_Delete_DoesDelete()
        {
            //Arrange
            RentableItem rentableItem = 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
            };
            await rentableItem.Create(DbContext);

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

            ContractRentableItem contractRentableItem = new ContractRentableItem
            {
                ContractId     = contract.Id,
                RentableItemId = rentableItem.Id
            };
            await contractRentableItem.Create(DbContext);

            //Act
            await contractRentableItem.Delete(DbContext);

            ContractRentableItem               dbContractRentableItem = DbContext.ContractRentableItem.AsNoTracking().First();
            List <ContractRentableItem>        contractRentableItems  = DbContext.ContractRentableItem.AsNoTracking().ToList();
            List <ContractRentableItemVersion> versionList            =
                DbContext.ContractRentableItemVersion.AsNoTracking().ToList();

            //Assert
            Assert.NotNull(dbContractRentableItem);

            Assert.AreEqual(1, contractRentableItems.Count);
            Assert.AreEqual(2, versionList.Count);

            Assert.AreEqual(contractRentableItem.ContractId, dbContractRentableItem.ContractId);
            Assert.AreEqual(contractRentableItem.RentableItemId, dbContractRentableItem.RentableItemId);
            Assert.AreEqual(Constants.WorkflowStates.Removed, dbContractRentableItem.WorkflowState);
        }
        public async Task <OperationResult> Delete(int id)
        {
            RentableItem rentableItem = await _dbContext.RentableItem.SingleOrDefaultAsync(x => x.Id == id);

            try
            {
                if (rentableItem != null)
                {
                    await rentableItem.Delete(_dbContext);
                }
                return(new OperationDataResult <RentableItemsModel>(true));
            }
            catch (Exception e)
            {
                Trace.TraceError(e.Message);
                _logger.LogError(e.Message);
                return(new OperationDataResult <RentableItemsModel>(true,
                                                                    _rentableItemsLocalizationService.GetString("ErrorWhileDeletingRentableItem")));
            }
        }
        public async Task <OperationDataResult <RentableItemModel> > Read(int id)
        {
            RentableItem rentableItem = await _dbContext.RentableItem.SingleOrDefaultAsync(x => x.Id == id);

            if (rentableItem != null)
            {
                RentableItemModel rentableItemModel = new RentableItemModel
                {
                    Id               = rentableItem.Id,
                    Brand            = rentableItem.Brand,
                    ModelName        = rentableItem.ModelName,
                    VinNumber        = rentableItem.VinNumber,
                    SerialNumber     = rentableItem.SerialNumber,
                    PlateNumber      = rentableItem.PlateNumber,
                    RegistrationDate = rentableItem.RegistrationDate,
                    FullName         = $"{rentableItem.Brand} - {rentableItem.ModelName} - {rentableItem.SerialNumber} - {rentableItem.VinNumber} - {rentableItem.PlateNumber}"
                };
                return(new OperationDataResult <RentableItemModel>(true, rentableItemModel));
            }
            return(new OperationDataResult <RentableItemModel>(false, _rentableItemsLocalizationService.GetString("ErrorWhileReadingRentableItemInfo")));
        }
예제 #9
0
        public async Task <OperationResult> Read(string token)
        {
            var pluginConfiguration = await _dbContext.PluginConfigurationValues.SingleOrDefaultAsync(x => x.Name == "RentableItemBaseSettings:Token");

            if (pluginConfiguration == null)
            {
                return(new OperationResult(false));
            }

            if (token == pluginConfiguration.Value)
            {
                UserCredential credential;
                pluginConfiguration = await _dbContext.PluginConfigurationValues.SingleOrDefaultAsync(x => x.Name == "RentableItemBaseSettings:GmailCredentials");

                GoogleClientSecrets secrets = NewtonsoftJsonSerializer.Instance.Deserialize <GoogleClientSecrets>(pluginConfiguration.Value);
                pluginConfiguration = await _dbContext.PluginConfigurationValues.SingleOrDefaultAsync(x => x.Name == "RentableItemBaseSettings:GmailUserName");

                string gmailUserName = pluginConfiguration.Value;
                pluginConfiguration = await _dbContext.PluginConfigurationValues.SingleOrDefaultAsync(x => x.Name == "RentableItemBaseSettings:MailFrom");

                string mailFrom = pluginConfiguration.Value;
                pluginConfiguration = await _dbContext.PluginConfigurationValues.SingleOrDefaultAsync(x => x.Name == "RentableItemBaseSettings:GmailEmail");

                string gmailEmail = pluginConfiguration.Value;
                pluginConfiguration = await _dbContext.PluginConfigurationValues.SingleOrDefaultAsync(x => x.Name == "RentableItemBaseSettings:SdkeFormId");

                int eFormId = int.Parse(pluginConfiguration.Value);

                try
                {
                    string credPath = "token.json";
                    credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                        secrets.Secrets,
                        Scopes,
                        gmailUserName,
                        CancellationToken.None,
                        new FileDataStore(credPath, true)).Result;

                    var service = new GmailService(new BaseClientService.Initializer
                    {
                        HttpClientInitializer = credential,
                        ApplicationName       = ApplicationName
                    });

                    var emailListRequest = service.Users.Messages.List(gmailEmail);
                    emailListRequest.LabelIds         = "INBOX";
                    emailListRequest.IncludeSpamTrash = false;
                    emailListRequest.Q          = $"from:{mailFrom}";
                    emailListRequest.MaxResults = 1;

                    var emailListResponse = await emailListRequest.ExecuteAsync();

                    if (emailListResponse != null && emailListResponse.Messages != null)
                    {
                        foreach (var email in emailListResponse.Messages)
                        {
                            var emailInfoRequest  = service.Users.Messages.Get(gmailEmail, email.Id);
                            var emailInfoResponse = await emailInfoRequest.ExecuteAsync();

                            if (emailInfoResponse != null)
                            {
                                IList <MessagePart> parts = emailInfoResponse.Payload.Parts;
                                foreach (var part in parts)
                                {
                                    if (!string.IsNullOrEmpty(part.Filename))
                                    {
                                        string          attId      = part.Body.AttachmentId;
                                        MessagePartBody attachPart = service.Users.Messages.Attachments
                                                                     .Get(gmailEmail, email.Id, attId).Execute();

                                        string attachData = attachPart.Data.Replace("-", "+");
                                        attachData = attachData.Replace("_", "/");

                                        byte[] data = Convert.FromBase64String(attachData);

                                        var      bytesAsString = Encoding.Default.GetString(data);
                                        string[] rawFile       = bytesAsString.Split("\n");

                                        var importList = rawFile.Skip(2);

                                        string[] list = importList.ToArray();

                                        var headers = rawFile[0].Split(",");

                                        foreach (string s in list)
                                        {
                                            string[] lSplit = s.Split("\",\"");
                                            if (lSplit.Length == 8)
                                            {
                                                Contract             contract             = null;
                                                Customer             customer             = null;
                                                ContractRentableItem contractRentableItem = null;
                                                try
                                                {
                                                    customer = _customerDbContext.Customers.SingleOrDefault(x => x.CompanyName == lSplit[1] || x.ContactPerson == lSplit[1]);
                                                    if (customer == null)
                                                    {
                                                        customer = new Customer
                                                        {
                                                            CompanyName = lSplit[1]
                                                        };
                                                        await customer.Create(_customerDbContext);
                                                    }
                                                }
                                                catch (Exception e)
                                                {
                                                    Console.WriteLine(e);
                                                    throw;
                                                }

                                                RentableItem rentableItem = null;
                                                try
                                                {
                                                    rentableItem = _dbContext.RentableItem.SingleOrDefault(x => x.Brand == lSplit[2] && x.ModelName == lSplit[3] && x.RegistrationDate == DateTime.Parse(lSplit[4]));
                                                    if (rentableItem == null)
                                                    {
                                                        rentableItem = new RentableItem
                                                        {
                                                            Brand            = lSplit[2],
                                                            ModelName        = lSplit[3],
                                                            RegistrationDate = DateTime.Parse(lSplit[4]),
                                                            VinNumber        = lSplit[5],
                                                            eFormId          = eFormId
                                                        };
                                                        await rentableItem.Create(_dbContext);
                                                    }
                                                }
                                                catch (Exception e)
                                                {
                                                    Console.WriteLine(e);
                                                    throw;
                                                }

                                                try
                                                {
                                                    contract = _dbContext.Contract.SingleOrDefault(x =>
                                                                                                   x.ContractNr == int.Parse(lSplit[0].Replace("\"", "")));
                                                    if (contract == null)
                                                    {
                                                        contract = new Contract
                                                        {
                                                            ContractNr    = int.Parse(lSplit[0].Replace("\"", "")),
                                                            ContractStart = DateTime.Parse(lSplit[6]),
                                                            ContractEnd   = DateTime.Parse(lSplit[7].Replace("\r", "").Replace("\"", "")),
                                                            CustomerId    = customer.Id,
                                                            Status        = 0
                                                        };
                                                        await contract.Create(_dbContext);
                                                    }
                                                }
                                                catch (Exception e)
                                                {
                                                    Console.WriteLine(e);
                                                    throw;
                                                }

                                                try
                                                {
                                                    contractRentableItem =
                                                        _dbContext.ContractRentableItem.SingleOrDefault(x =>
                                                                                                        x.ContractId == contract.Id &&
                                                                                                        x.RentableItemId == rentableItem.Id);
                                                    if (contractRentableItem == null)
                                                    {
                                                        contractRentableItem = new ContractRentableItem
                                                        {
                                                            ContractId     = contract.Id,
                                                            RentableItemId = rentableItem.Id
                                                        };
                                                        await contractRentableItem.Create(_dbContext);
                                                    }
                                                }
                                                catch (Exception e)
                                                {
                                                    Console.WriteLine(e);
                                                    throw;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                    throw;
                }
            }
            return(new OperationResult(true));
        }
        public async Task <OperationDataResult <ContractInspectionsModel> > Index(ContractInspectionsRequestModel contractInspectionsPnRequestModel)
        {
            try
            {
                ContractInspectionsModel contractInspectionsModel = new ContractInspectionsModel();
                Core _core = await _coreHelper.GetCore();

                IQueryable <ContractInspection> contractInspectionsQuery = _dbContext.ContractInspection.
                                                                           Where(x => x.WorkflowState != Constants.WorkflowStates.Removed).AsQueryable();
                if (!string.IsNullOrEmpty(contractInspectionsPnRequestModel.SortColumnName) &&
                    contractInspectionsPnRequestModel.SortColumnName != "")
                {
                    if (contractInspectionsPnRequestModel.IsSortDsc)
                    {
                        contractInspectionsQuery = contractInspectionsQuery.CustomOrderByDescending(contractInspectionsPnRequestModel.SortColumnName);
                    }
                    else
                    {
                        contractInspectionsQuery = contractInspectionsQuery.CustomOrderBy(contractInspectionsPnRequestModel.SortColumnName);
                    }
                }
                contractInspectionsModel.Total = await contractInspectionsQuery.CountAsync(x => x.WorkflowState != Constants.WorkflowStates.Removed);

                contractInspectionsQuery
                    = contractInspectionsQuery
                      .Where(x => x.WorkflowState != Constants.WorkflowStates.Removed)
                      .Skip(contractInspectionsPnRequestModel.Offset)
                      .Take(contractInspectionsPnRequestModel.PageSize);
                List <ContractInspection> contractInspections = await contractInspectionsQuery.ToListAsync();

                contractInspections.ForEach(contractInspection =>
                {
                    ContractInspectionItem contractInspectionItem =
                        _dbContext.ContractInspectionItem.FirstOrDefault(x =>
                                                                         x.ContractInspectionId == contractInspection.Id);

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

                    Customer customer =
                        _customerDbContext.Customers.Single(x => x.Id == contract.CustomerId);
                    RentableItemCustomerModel rentableItemCustomerModel = new RentableItemCustomerModel
                    {
                        Id              = customer.Id,
                        CustomerNo      = customer.CustomerNo,
                        CompanyName     = customer.CompanyName,
                        ContactPerson   = customer.ContactPerson,
                        CompanyAddress  = customer.CompanyAddress,
                        CompanyAddress2 = customer.CompanyAddress2,
                        CityName        = customer.CityName,
                        ZipCode         = customer.ZipCode,
                        CountryCode     = customer.CountryCode,
                        EanCode         = customer.EanCode,
                        VatNumber       = customer.VatNumber,
                        Email           = customer.Email,
                        Phone           = customer.Phone,
                        Description     = customer.Description
                    };
                    List <RentableItemModel> rentableItemModels = new List <RentableItemModel>();
                    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);
                        RentableItemModel rentableItemModel = new RentableItemModel
                        {
                            Id               = rentableItem.Id,
                            Brand            = rentableItem.Brand,
                            ModelName        = rentableItem.ModelName,
                            PlateNumber      = rentableItem.PlateNumber,
                            VinNumber        = rentableItem.VinNumber,
                            SerialNumber     = rentableItem.SerialNumber,
                            RegistrationDate = rentableItem.RegistrationDate,
                            EFormId          = rentableItem.eFormId
                        };
                        rentableItemModels.Add(rentableItemModel);
                    }

                    using (var dbContext = _core.DbContextHelper.GetDbContext())
                    {
                        if (contractInspectionItem != null)
                        {
                            contractInspectionsModel.ContractInspections.Add(new ContractInspectionModel
                            {
                                SdkCaseApiId = contractInspectionItem.SDKCaseId,
                                SdkCaseId    = dbContext.Cases
                                               .Single(x => x.MicrotingUid == contractInspectionItem.SDKCaseId).Id,
                                eFormId              = rentableItemModels.First().EFormId,
                                ContractId           = contractInspection.ContractId,
                                ContractStart        = contract.ContractStart,
                                ContractEnd          = contract.ContractEnd,
                                DoneAt               = contractInspection.DoneAt,
                                Id                   = contractInspection.Id,
                                Status               = contractInspectionItem.Status,
                                RentableItemCustomer = rentableItemCustomerModel,
                                RentableItems        = rentableItemModels
                            });
                        }
                    }
                });
                return(new OperationDataResult <ContractInspectionsModel>(true, contractInspectionsModel));
            }
            catch (Exception e)
            {
                Trace.TraceError(e.Message);
                _logger.LogError(e.Message);
                return(new OperationDataResult <ContractInspectionsModel>(false,
                                                                          _rentableItemsLocalizationService.GetString("ErrorObtainingContractInspectionInfo")));
            }
        }
        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);
        }
예제 #14
0
        public async Task <OperationDataResult <ContractsModel> > Index(ContractsRequestModel contractsPnRequestModel)
        {
            try
            {
                ContractsModel        contractsModel = new ContractsModel();
                IQueryable <Contract> contractsQuery = _dbContext.Contract.
                                                       Where(x => x.WorkflowState != Constants.WorkflowStates.Removed).AsQueryable();
                if (!string.IsNullOrEmpty(contractsPnRequestModel.SortColumnName))
                {
                    if (contractsPnRequestModel.IsSortDsc)
                    {
                        contractsQuery = contractsQuery.CustomOrderByDescending(contractsPnRequestModel.SortColumnName);
                    }
                    else
                    {
                        contractsQuery = contractsQuery.CustomOrderBy(contractsPnRequestModel.SortColumnName);
                    }
                }
                contractsModel.Total = contractsQuery.Count();
                contractsQuery
                    = contractsQuery
                      .Where(x => x.WorkflowState != Constants.WorkflowStates.Removed)
                      .Skip(contractsPnRequestModel.Offset)
                      .Take(contractsPnRequestModel.PageSize);
                List <Contract> contracts = await contractsQuery.ToListAsync();

                contracts.ForEach(contract =>
                {
                    var customer =
                        _customerDbContext.Customers.Single(x => x.Id == contract.CustomerId);
                    RentableItemCustomerModel rentableItemCustomerModel = new RentableItemCustomerModel
                    {
                        Id              = customer.Id,
                        CustomerNo      = customer.CustomerNo,
                        CompanyName     = customer.CompanyName,
                        ContactPerson   = customer.ContactPerson,
                        CompanyAddress  = customer.CompanyAddress,
                        CompanyAddress2 = customer.CompanyAddress2,
                        CityName        = customer.CityName,
                        ZipCode         = customer.ZipCode,
                        CountryCode     = customer.CountryCode,
                        EanCode         = customer.EanCode,
                        VatNumber       = customer.VatNumber,
                        Email           = customer.Email,
                        Phone           = customer.Phone,
                        Description     = customer.Description
                    };

                    List <RentableItemModel> rentableItemModels = new List <RentableItemModel>();
                    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);
                        RentableItemModel rentableItemModel = new RentableItemModel
                        {
                            Id               = rentableItem.Id,
                            Brand            = rentableItem.Brand,
                            ModelName        = rentableItem.ModelName,
                            PlateNumber      = rentableItem.PlateNumber,
                            VinNumber        = rentableItem.VinNumber,
                            SerialNumber     = rentableItem.SerialNumber,
                            RegistrationDate = rentableItem.RegistrationDate
                        };
                        rentableItemModels.Add(rentableItemModel);
                    }

                    contractsModel.Contracts.Add(new ContractModel
                    {
                        ContractEnd          = contract.ContractEnd,
                        ContractNr           = contract.ContractNr,
                        ContractStart        = contract.ContractStart,
                        CustomerId           = contract.CustomerId,
                        RentableItemCustomer = rentableItemCustomerModel,
                        RentableItems        = rentableItemModels,
                        Id = contract.Id,
                    });
                });
                return(new OperationDataResult <ContractsModel>(true, contractsModel));
            }
            catch (Exception e)
            {
                Trace.TraceError(e.Message);
                _logger.LogError(e.Message);
                return(new OperationDataResult <ContractsModel>(false,
                                                                _rentableItemsLocalizationService.GetString("ErrorObtainingContracts")));
            }
        }
        public async Task <OperationResult> Import(ImportModel importModel)
        {
            try
            {
                JToken rawJson        = JToken.Parse(importModel.ImportList);
                int    eFormId        = importModel.eFormId;
                JToken rawHeadersJson = JToken.Parse(importModel.Headers);

                JToken headers = rawHeadersJson;
                IEnumerable <JToken> rentableObjects = rawJson.Skip(2);

                Core core = await _coreHelper.GetCore();

                foreach (JToken rentableObject in rentableObjects)
                {
                    Customer customer          = null;
                    bool     companyNameExists = int.TryParse(headers[1]["headerValue"].ToString(), out int companyNameColumn);

                    if (companyNameExists)
                    {
                        customer = await FindCustomer(companyNameExists, companyNameColumn, headers, rentableObject);

                        if (customer == null)
                        {
                            CustomerFullModel customerModel =
                                CustomerHelper.ComposeValues(new CustomerFullModel(), headers, rentableObject);

                            customer = new Customer
                            {
                                CompanyName = customerModel.CompanyName
                            };
                            await customer.Create(_customerDbContext);
                        }
                    }

                    RentableItem rentableItem           = null;
                    bool         brandExists            = int.TryParse(headers[2]["headerValue"].ToString(), out int brandColumn);
                    bool         modelExists            = int.TryParse(headers[3]["headerValue"].ToString(), out int modelColumn);
                    bool         registrationDateExists =
                        int.TryParse(headers[4]["headerValue"].ToString(), out int registrationDateColumn);
                    bool vinNumberExists = int.TryParse(headers[5]["headerValue"].ToString(), out int vinNumberColumn);

                    if (brandExists &&
                        modelExists &&
                        registrationDateExists &&
                        vinNumberExists)
                    {
                        rentableItem = await FindRentableItem(brandExists, brandColumn, modelExists, modelColumn,
                                                              registrationDateExists, registrationDateColumn, vinNumberExists, vinNumberColumn, headers,
                                                              rentableObject);

                        if (rentableItem == null)
                        {
                            RentableItemModel rentableItemModel =
                                RentableItemHelper.ComposeValues(new RentableItemModel(), headers, rentableObject);

                            rentableItem = new RentableItem
                            {
                                Brand            = rentableItemModel.Brand,
                                ModelName        = rentableItemModel.ModelName,
                                RegistrationDate = rentableItemModel.RegistrationDate,
                                VinNumber        = rentableItemModel.VinNumber,
                                eFormId          = eFormId
                            };
                            await rentableItem.Create(_dbContext);
                        }
                    }

                    Contract contract             = null;
                    bool     contractNumberExists =
                        int.TryParse(headers[0]["headerValue"].ToString(), out int contractNumberColumn);
                    bool contractStartExists =
                        int.TryParse(headers[6]["headerValue"].ToString(), out int contractStartColumn);
                    bool contractEndExists = int.TryParse(headers[7]["headerValue"].ToString(), out int contractEndColumn);
                    int  customerID        = customer.Id;
                    if (contractNumberExists &&
                        contractStartExists &&
                        contractEndExists &&
                        customerID != null)
                    {
                        contract = await FindContract(contractNumberExists, contractNumberColumn, contractStartExists,
                                                      contractStartColumn, contractEndExists, contractEndColumn, customerID, headers, rentableObject);

                        if (contract == null)
                        {
                            ContractModel contractModel =
                                ContractsHelper.ComposeValues(new ContractModel(), headers, rentableObject);

                            contract = new Contract
                            {
                                CustomerId    = customerID,
                                ContractEnd   = contractModel.ContractEnd,
                                ContractStart = contractModel.ContractStart,
                                ContractNr    = contractModel.ContractNr
                            };
                            await contract.Create(_dbContext);
                        }
                    }

                    ContractRentableItem contractRentableItem = null;
                    if (contract.Id != null && rentableItem.Id != null)
                    {
                        contractRentableItem = await FindtContractRentableItem(contract.Id, rentableItem.Id);

                        if (contractRentableItem == null)
                        {
                            contractRentableItem = new ContractRentableItem
                            {
                                ContractId     = contract.Id,
                                RentableItemId = rentableItem.Id
                            };
                            await contractRentableItem.Create(_dbContext);
                        }
                    }
                }
                return(new OperationResult(true, "Import Successful"));
            }
            catch (Exception e)
            {
                Trace.TraceError(e.Message);
                _logger.LogError(e.Message);
                return(new OperationResult(false, "You goofed up"));
            }
        }