Example #1
0
        public RocketChat(string serverUrl)
        {
            IRestClient            restClient            = new RestClient(serverUrl);
            IJsonSerializer        jsonSerializer        = new JsonSerializer();
            IAuthHelper            authHelper            = new AuthHelper();
            IRestClientService     restClientService     = new RestClientService(authHelper, restClient, jsonSerializer);
            IFileRestClientService fileRestClientService = new FileRestClientService(authHelper, restClient, jsonSerializer);
            IAuthenticationService authService           = new AuthenticationService(authHelper, restClientService);
            IChannelsService       channelsService       = new ChannelsService(restClientService);
            IGroupsService         groupsService         = new GroupsService(restClientService);
            IUsersService          usersService          = new UsersService(restClientService);
            IChatService           chatService           = new ChatService(restClientService);
            IRoomService           roomService           = new RoomService(restClientService);
            IAssetsService         assetsService         = new AssetsService(restClientService);
            IAutoTranslateService  autoTranslateService  = new AutoTranslateService(restClientService);
            ICommandsService       commandsService       = new CommandsService(restClientService);
            IEmojisService         emojisService         = new EmojisService(restClientService, fileRestClientService);

            Api = new RocketChatApi(
                chatService,
                usersService,
                groupsService,
                channelsService,
                authService,
                roomService,
                assetsService,
                autoTranslateService,
                commandsService,
                emojisService);
        }
Example #2
0
        public async Task ItCanGetAssets()
        {
            var request = new AssetListRequest(this.connectionSettings.AccessToken, this.connectionSettings.ClientSecret);
            var result  = await AssetsService.GetAssetsAsync(request);

            Assert.IsTrue(result.Data.Count() >= 0);
        }
Example #3
0
        public async Task ItCanGetAnAsset()
        {
            var request = new FortnoxApiRequest(this.connectionSettings.AccessToken, this.connectionSettings.ClientSecret);
            var result  = await AssetsService.GetAssetAsync(request, "1");

            Assert.AreEqual("1", result.Number);
        }
Example #4
0
        private async Task <AssetSubset> CreateAsset()
        {
            var currentDate = new DateTime(DateTime.UtcNow.Year, DateTime.UtcNow.Month, 1);
            var rand        = new Random();
            var asset       = new Asset()
            {
                Number                    = "TestProd" + rand.Next(9999999),
                Description               = "TEST PRODUCT",
                TypeId                    = "8",
                DepreciationMethod        = "0",
                AcquisitionValue          = 13000,
                DepreciateToResidualValue = 1300,
                AcquisitionDate           = currentDate,
                AcquisitionStart          = currentDate.AddMonths(1),
                DepreciationFinal         = currentDate.AddYears(1),
            };

            var request  = new FortnoxApiRequest(connectionSettings.AccessToken, connectionSettings.ClientSecret);
            var response = await AssetsService.CreateAssetAsync(request, asset);

            return(new AssetSubset()
            {
                Id = response.Id
            });
        }
Example #5
0
        public async Task ItCanWriteUpAndDownAnAsset()
        {
            var currentDate = new DateTime(DateTime.UtcNow.Year, DateTime.UtcNow.Month, 1);
            var request     = new FortnoxApiRequest(this.connectionSettings.AccessToken, this.connectionSettings.ClientSecret);
            var result      = await AssetsService.GetAssetAsync(request, "4");

            Assert.AreEqual("2", result.Number);

            var writeUp = new WriteUpOrDownAsset {
                Amount = 300, Comment = "WriteUp, Possible comment", Date = currentDate.AddMonths(1)
            };
            var writeUpAsset = await AssetsService.WriteUpAssetAsync(request, $"{result.Id}", writeUp);

            var latestWriteUp = writeUpAsset.History.Where(e => e.Date.Equals(writeUp.Date)).First();

            Assert.IsTrue(latestWriteUp.Notes.Contains(writeUp.Comment));

            var writeDown = new WriteUpOrDownAsset {
                Amount = 200, Comment = "WriteDown, Possible comment", Date = currentDate.AddMonths(1)
            };
            var writeDownAsset = await AssetsService.WriteDownAssetAsync(request, $"{result.Id}", writeDown);

            var latestWriteDown = writeDownAsset.History.Where(e => e.Date.Equals(writeDown.Date)).Last();

            Assert.IsTrue(latestWriteDown.Notes.Contains(writeDown.Comment));
        }
Example #6
0
        public async Task ItCanSellAnAsset()
        {
            var currentDate = new DateTime(DateTime.UtcNow.Year, DateTime.UtcNow.Month, 1);
            var rand        = new Random();
            var asset       = new Asset()
            {
                Number                    = "TestProd" + rand.Next(9999999),
                Description               = "TEST PRODUCT",
                TypeId                    = "8",
                DepreciationMethod        = "0",
                AcquisitionValue          = 13000,
                DepreciateToResidualValue = 1300,
                AcquisitionDate           = currentDate,
                AcquisitionStart          = currentDate.AddMonths(1),
                DepreciationFinal         = currentDate.AddYears(1),
            };

            var request = new FortnoxApiRequest(this.connectionSettings.AccessToken, this.connectionSettings.ClientSecret);
            var result  = await AssetsService.CreateAssetAsync(request, asset);

            Assert.AreEqual(asset.Number, result.Number);

            var sellAsset = new SellAsset {
                Percentage = 0, Price = 10000, Comment = "Sell comment", Date = currentDate.AddMonths(1).ToString("yyyy-MM-dd")
            };
            var soldAsset = await AssetsService.SellAssetAsync(request, $"{result.Id}", sellAsset);
        }
Example #7
0
 protected override void Loaded()
 {
     base.Loaded();
     this.assetsService   = Application.Current.Container.Resolve <AssetsService>();
     this.prefabsIdByName = WaveContentUtils.FindPrefabs();
     this.prefabsIdByName.Add("None", Guid.Empty);
     this.PrefabSetValue(this.PrefabGetValue());
 }
Example #8
0
        protected override void FillBody()
        {
            if (null == AssetsData)
            {
                return;
            }
            for (int index = 0; index < AssetsData.Count; index++)
            {
                AssetsMain main = AssetsData[index];
                TempRow = Sheet.CreateRow(NextRowIndex);

                TempRow.CreateCell(0).SetCellValue(index + 1);
                TempRow.CreateCell(1).SetCellValue(main.GoodsName);
                TempRow.CreateCell(2).SetCellValue(main.CatCode);
                TempRow.CreateCell(3).SetCellValue("");
                TempRow.CreateCell(4).SetCellValue(main.MeasurementUnits);
                TempRow.CreateCell(5).SetCellValue(main.UsingStyle);
                TempRow.CreateCell(6).SetCellValue(main.UsingState);
                TempRow.CreateCell(7).SetCellValue(main.GetWay);
                TempRow.CreateCell(8).SetCellValue(main.GetDate.ToShortDateString());

                var attrData = AssetsService.GetLand(main.AssetsNum);
                if (null != attrData)
                {
                    TempRow.CreateCell(9).SetCellValue(attrData.PropertyForm);
                    TempRow.CreateCell(10).SetCellValue(attrData.OwnershipCertificate);
                    TempRow.CreateCell(11).SetCellValue(attrData.OwnershipStyle);
                    TempRow.CreateCell(12).SetCellValue(attrData.OwnershipTime);
                    TempRow.CreateCell(13).SetCellValue(attrData.OwnershipCertifiateNum);
                    TempRow.CreateCell(14).SetCellValue(attrData.IssuingDate.ToShortDateString());
                    TempRow.CreateCell(15).SetCellValue(attrData.LandOwner);
                    TempRow.CreateCell(16).SetCellValue(attrData.LandUserStyle);
                    TempRow.CreateCell(17).SetCellValue(attrData.Location);
                    TempRow.CreateCell(18).SetCellValue(attrData.AllArea.ToString());
                    TempRow.CreateCell(19).SetCellValue(attrData.SharingArea.ToString());
                    TempRow.CreateCell(20).SetCellValue(attrData.SingleArea.ToString());
                }

                TempRow.CreateCell(21).SetCellValue(main.ValueType);
                TempRow.CreateCell(22).SetCellValue(main.Money.ToString());
                TempRow.CreateCell(23).SetCellValue(main.GovMoney.ToString());
                TempRow.CreateCell(24).SetCellValue(main.NoneGovMoney.ToString());
                TempRow.CreateCell(25).SetCellValue("");
                TempRow.CreateCell(26).SetCellValue("");
                TempRow.CreateCell(27).SetCellValue(main.NetWorth.ToString());
                TempRow.CreateCell(28).SetCellValue(main.PostingDate.ToShortDateString());
                TempRow.CreateCell(29).SetCellValue(main.AcountDocNum);
                TempRow.CreateCell(30).SetCellValue("");
                TempRow.CreateCell(31).SetCellValue(main.Memo);
                NextRowIndex++;
                Thread.Sleep(10);
            }
        }
Example #9
0
        protected override void FillBody()
        {
            if (null == AssetsData)
            {
                return;
            }
            for (int index = 0; index < AssetsData.Count; index++)
            {
                AssetsMain main = AssetsData[index];
                TempRow = Sheet.CreateRow(NextRowIndex);

                TempRow.CreateCell(0).SetCellValue(index + 1);
                TempRow.CreateCell(1).SetCellValue(main.GoodsName);
                TempRow.CreateCell(2).SetCellValue(main.CatCode);
                TempRow.CreateCell(3).SetCellValue("");
                TempRow.CreateCell(4).SetCellValue(main.MeasurementUnits);
                TempRow.CreateCell(5).SetCellValue(main.UsingAttribute);
                TempRow.CreateCell(6).SetCellValue(main.UsingStyle);
                TempRow.CreateCell(7).SetCellValue(main.UsingState);
                TempRow.CreateCell(8).SetCellValue(main.GetWay);

                var attrData = AssetsService.GetCar(main.AssetsNum);
                if (null != attrData)
                {
                    TempRow.CreateCell(9).SetCellValue(attrData.CarUser);
                    TempRow.CreateCell(10).SetCellValue(attrData.UsingType);
                    TempRow.CreateCell(11).SetCellValue(attrData.CarBrand);
                    TempRow.CreateCell(12).SetCellValue(attrData.Organization);
                    TempRow.CreateCell(13).SetCellValue(attrData.CarNum);
                    TempRow.CreateCell(14).SetCellValue(attrData.CarRecCode);
                    TempRow.CreateCell(15).SetCellValue(attrData.CarCertificateDate.ToShortDateString());
                    TempRow.CreateCell(16).SetCellValue(attrData.CarExhaust);
                    TempRow.CreateCell(17).SetCellValue(attrData.CarEngineNum);
                    TempRow.CreateCell(18).SetCellValue(attrData.CarErollDare.ToShortDateString());
                    TempRow.CreateCell(19).SetCellValue(attrData.CarOwner);
                }

                TempRow.CreateCell(20).SetCellValue(main.ValueType);
                TempRow.CreateCell(21).SetCellValue(main.Money.ToString());
                TempRow.CreateCell(22).SetCellValue(main.GovMoney.ToString());
                TempRow.CreateCell(23).SetCellValue(main.NoneGovMoney.ToString());
                TempRow.CreateCell(24).SetCellValue(main.Depreciation.ToString());
                TempRow.CreateCell(25).SetCellValue(main.AccumulateDepreciation.ToString());
                TempRow.CreateCell(26).SetCellValue(main.NetWorth.ToString());
                TempRow.CreateCell(27).SetCellValue(main.PostingDate.ToShortDateString());
                TempRow.CreateCell(28).SetCellValue(main.AcountDocNum);
                TempRow.CreateCell(29).SetCellValue(main.Memo);
                NextRowIndex++;
                Thread.Sleep(10);
            }
        }
Example #10
0
        public async Task ItCanUpdateAnAsset()
        {
            var updatedDescription = $"Changed {DateTime.UtcNow}";
            var asset = new Asset()
            {
                Id          = 1,
                Description = updatedDescription,
            };

            var request = new FortnoxApiRequest(this.connectionSettings.AccessToken, this.connectionSettings.ClientSecret);
            var result  = await AssetsService.UpdateAssetAsync(request, asset);

            Assert.AreEqual(updatedDescription, result.Description);
        }
Example #11
0
        protected override void FillBody()
        {
            if (null == AssetsData)
                return;
            for(int index=0;index<AssetsData.Count;index++)
            {
                AssetsMain main = AssetsData[index];
                TempRow = Sheet.CreateRow(NextRowIndex);   

                TempRow.CreateCell(0).SetCellValue(index+1);  //序号
                TempRow.CreateCell(1).SetCellValue(main.GoodsName); //资产名称
                TempRow.CreateCell(2).SetCellValue(main.CatCode);  //资产分类代码
                TempRow.CreateCell(3).SetCellValue(""); //资产分类名称
                TempRow.CreateCell(4).SetCellValue(main.MeasurementUnits);//计量单位
                TempRow.CreateCell(5).SetCellValue(main.UsingAttribute);        //使用属性
                TempRow.CreateCell(6).SetCellValue(main.UsingState);       //使用状况
                TempRow.CreateCell(7).SetCellValue(main.UsingStyle);       //使用方向
                TempRow.CreateCell(8).SetCellValue(main.GetWay);       //取得方式
               
                TempRow.CreateCell(9).SetCellValue(main.GetDate.ToShortDateString());       //取得时期

                var attrData = AssetsService.GetBook(main.AssetsNum);
                if (null != attrData)
                {
                    TempRow.CreateCell(10).SetCellValue(attrData.UseDate.ToShortTimeString());//投入使用日期
                    TempRow.CreateCell(11).SetCellValue(attrData.FileNum); //档案号
                    TempRow.CreateCell(12).SetCellValue(attrData.Press);//出版社
                    TempRow.CreateCell(13).SetCellValue(attrData.StoreYears);//保存年限
                    TempRow.CreateCell(14).SetCellValue(attrData.PressDate.ToShortTimeString()); //出版日期
                }
                TempRow.CreateCell(15).SetCellValue(main.Counts);
                TempRow.CreateCell(16).SetCellValue(main.ValueType);
                TempRow.CreateCell(17).SetCellValue(main.Money.ToString());
                TempRow.CreateCell(18).SetCellValue(main.GovMoney.ToString());
                TempRow.CreateCell(19).SetCellValue(main.NoneGovMoney.ToString());
                TempRow.CreateCell(20).SetCellValue(main.Depreciation.ToString());
                TempRow.CreateCell(21).SetCellValue(main.AccumulateDepreciation.ToString());
                TempRow.CreateCell(22).SetCellValue(main.NetWorth.ToString());
                TempRow.CreateCell(23).SetCellValue(main.PostingDate.ToShortDateString());
                TempRow.CreateCell(24).SetCellValue(main.AcountDocNum);
                TempRow.CreateCell(25).SetCellValue(main.Memo); //("备注");
                NextRowIndex++;
                Thread.Sleep(10);
            }
        }
Example #12
0
        protected override void FillBody()
        {
            if (null == AssetsData)
            {
                return;
            }
            for (int index = 0; index < AssetsData.Count; index++)
            {
                AssetsMain main = AssetsData[index];
                TempRow = Sheet.CreateRow(NextRowIndex);

                TempRow.CreateCell(0).SetCellValue(index + 1);
                TempRow.CreateCell(1).SetCellValue(main.GoodsName);
                TempRow.CreateCell(2).SetCellValue(main.CatCode);
                TempRow.CreateCell(3).SetCellValue("");
                TempRow.CreateCell(4).SetCellValue(main.MeasurementUnits);
                TempRow.CreateCell(5).SetCellValue(main.UsingAttribute);
                TempRow.CreateCell(6).SetCellValue(main.UsingStyle);
                TempRow.CreateCell(7).SetCellValue(main.UsingState);
                TempRow.CreateCell(8).SetCellValue(main.GetWay);
                TempRow.CreateCell(9).SetCellValue(main.GetDate.ToShortDateString());
                TempRow.CreateCell(10).SetCellValue(main.Brand);

                var attrData = AssetsService.GetGeneral(main.AssetsNum);
                if (null != attrData)
                {
                    TempRow.CreateCell(11).SetCellValue(attrData.DevUse);
                    TempRow.CreateCell(10).SetCellValue(attrData.DevFactory + "-" + main.Brand);
                }

                TempRow.CreateCell(12).SetCellValue(main.ValueType);
                TempRow.CreateCell(13).SetCellValue(main.Money.ToString());
                TempRow.CreateCell(14).SetCellValue(main.GovMoney.ToString());
                TempRow.CreateCell(15).SetCellValue(main.NoneGovMoney.ToString());
                TempRow.CreateCell(16).SetCellValue(main.Depreciation.ToString());
                TempRow.CreateCell(17).SetCellValue(main.AccumulateDepreciation.ToString());
                TempRow.CreateCell(18).SetCellValue(main.NetWorth.ToString());
                TempRow.CreateCell(19).SetCellValue(main.PostingDate.ToShortDateString());
                TempRow.CreateCell(20).SetCellValue(main.AcountDocNum);
                TempRow.CreateCell(21).SetCellValue("");
                NextRowIndex++;
                Thread.Sleep(10);
            }
        }
Example #13
0
        protected override void Load(ContainerBuilder builder)
        {
            builder.RegisterInstance(_log)
            .As <ILog>()
            .SingleInstance();

            builder.RegisterType <HealthService>()
            .As <IHealthService>()
            .SingleInstance();

            builder.RegisterType <StartupManager>()
            .As <IStartupManager>()
            .SingleInstance();

            builder.RegisterType <ShutdownManager>()
            .As <IShutdownManager>()
            .AutoActivate()
            .SingleInstance();

            builder.RegisterResourcesMonitoring(_log);

            var clientAccountClient = new ClientAccountClient(_appSettings.ClientAccountServiceClient.ServiceUrl);

            builder.RegisterInstance(clientAccountClient)
            .As <IClientAccountClient>()
            .SingleInstance();

            var assetsServiceClient = new AssetsService(new Uri(_appSettings.AssetsServiceClient.ServiceUrl), new HttpClient());

            builder.RegisterInstance(assetsServiceClient)
            .As <IAssetsService>()
            .SingleInstance();

            IDataChecker checker = RegisterCheckers(
                builder,
                clientAccountClient,
                assetsServiceClient);

            var periodicalHandler = new PeriodicalHandler(checker, _log);

            builder.RegisterInstance(periodicalHandler)
            .As <IStartStop>()
            .SingleInstance();
        }
Example #14
0
        public override void Initialize()
        {
            InitializeLogging();

            RxApp.DefaultExceptionHandler = new RxExceptionHandler();

            // Need to call ForContext *afer* calling InitializeLogging()
            var log = Log.ForContext <App>();

            log.Information("MHWAppearanceEditor v" + Assembly.GetExecutingAssembly() !.GetName().Version);
            log.Information("Cirilla.Core v" + Assembly.GetAssembly(typeof(Cirilla.Core.Models.SaveData)) !.GetName().Version);

            // Settings
            var settingsService = new SettingsService();

            Locator.CurrentMutable.RegisterConstant(settingsService);

            // Backup service
            Locator.CurrentMutable.RegisterConstant(new BackupService());

            // Start assets loading
            AssetsService assetsService = new AssetsService("assets");

            Task.Run(() => assetsService.Initialize());
            Locator.CurrentMutable.RegisterConstant(assetsService);

            Locator.CurrentMutable.RegisterConstant(new ColorValueConverter(), typeof(IBindingTypeConverter));
            Locator.CurrentMutable.RegisterConstant(new SteamWebApiService(SuperSecret.STEAM_WEB_API_KEY));

            Locator.CurrentMutable.Register(() => new StartScreenView(), typeof(IViewFor <StartScreenViewModel>));
            Locator.CurrentMutable.Register(() => new SaveDataView(), typeof(IViewFor <SaveDataViewModel>));
            Locator.CurrentMutable.Register(() => new ExceptionView(), typeof(IViewFor <ExceptionViewModel>));
            Locator.CurrentMutable.Register(() => new CharacterAssetView(), typeof(IViewFor <CharacterAssetViewModel>));

            // Tabs
            Locator.CurrentMutable.Register(() => new SaveDataInfoView(), typeof(IViewFor <SaveDataInfoViewModel>));
            Locator.CurrentMutable.Register(() => new SaveSlotView(), typeof(IViewFor <SaveSlotViewModel>));

            AvaloniaXamlLoader.Load(this);
        }
        private void RegisterExternalServices(ContainerBuilder builder)
        {
            builder.Register <IBitcoinApiClient>(x =>
            {
                var client = new BitcoinApiClient(_settings.CurrentValue.BitCoinCore.BitcoinCoreApiUrl);
                return(client);
            }).SingleInstance();


            builder.Register <IKycStatusService>(x =>
            {
                var assetsSrv = new KycStatusServiceClient(_settings.CurrentValue.KycServiceClient, _log);
                return(assetsSrv);
            }).SingleInstance();

            builder.Register <IAssetsService>(x =>
            {
                var assetsSrv = new AssetsService(new Uri(_settings.CurrentValue.AssetsServiceClient.ServiceUrl));
                return(assetsSrv);
            }).SingleInstance();

            builder.Register <IExchangeOperationsServiceClient>(x =>
            {
                var exchOpSrv = new ExchangeOperationsServiceClient(_settings.CurrentValue.ExchangeOperationsServiceClient.ServiceUrl);
                return(exchOpSrv);
            }).SingleInstance();

            builder.RegisterType <BalancesClient>()
            .As <IBalancesClient>()
            .WithParameter("serviceUrl", _settings.CurrentValue.BalancesServiceClient.ServiceUrl)
            .WithParameter("log", _log)
            .SingleInstance();

            builder.RegisterType <FirebaseService>()
            .As <IFirebaseService>()
            .WithParameter("settings", _settings.CurrentValue)
            .SingleInstance();
        }
Example #16
0
        public async Task ItCanDepreciateAnAsset()
        {
            var currentDate = new DateTime(DateTime.UtcNow.Year, DateTime.UtcNow.Month, 1);
            var rand        = new Random();
            var asset       = new Asset()
            {
                Number                    = "TestProd" + rand.Next(9999999),
                Description               = "TEST PRODUCT",
                TypeId                    = "8",
                DepreciationMethod        = "0",
                AcquisitionValue          = 13000,
                DepreciateToResidualValue = 1300,
                AcquisitionDate           = currentDate,
                AcquisitionStart          = currentDate.AddMonths(1),
                DepreciationFinal         = currentDate.AddYears(1),
            };

            var request = new FortnoxApiRequest(this.connectionSettings.AccessToken, this.connectionSettings.ClientSecret);
            var result  = await AssetsService.CreateAssetAsync(request, asset);

            Assert.AreEqual(asset.Number, result.Number);

            var depreciationDate = currentDate.AddMonths(2);

            depreciationDate = new DateTime(depreciationDate.Year, depreciationDate.Month, DateTime.DaysInMonth(depreciationDate.Year, depreciationDate.Month));
            var assetDepreciation = new DepreciateAssets {
                DepreciateUntil = depreciationDate, AssetIds = new List <int> {
                    result.Id
                }
            };
            var depreciatedAssetResponse = await AssetsService.DepreciateAssetAsync(request, assetDepreciation);

            var depreciationResult = depreciatedAssetResponse.Data.First();

            Assert.IsTrue(depreciationResult.FinancialYear == 3);
            Assert.IsTrue(depreciationResult.VoucherSeries.Equals("G"));
        }
Example #17
0
        private static void Main(string[] args)
        {
            if (args.Length < 3)
            {
                Console.WriteLine("You should provide assets service uri, web3 rpc endpoint uri and path to the list of contract addresses as arguments.");
            }

            if (!TryProcessArgs(args, out var processedArgs))
            {
                return;
            }

            _assetsService = new AssetsService(processedArgs.AssetsServiceUri);
            _web3          = new Web3(processedArgs.Web3Uri.ToString());

            var specification     = GetSpecification(processedArgs.SpecificationPath);
            var contracts         = specification.Tokens.ToArray();
            var groupsToAddTo     = specification.Groups.ToArray();
            var skipTransferCheck = args.Length >= 4 && args[3] == "--skip-transfer-check";


            Console.WriteLine($"Registering {contracts.Length} tokens...");

            var assetIds = CreateAssets(contracts, skipTransferCheck).ToArray();

            if (groupsToAddTo.Any())
            {
                AddAssetsToGroups(assetIds, groupsToAddTo);
            }

            EnableAssets(assetIds);

            Console.ResetColor();
            Console.WriteLine("Operation completed. Press enter to exit.");
            Console.ReadLine();
        }
Example #18
0
        protected override void FillBody()
        {
            if (null == AssetsData)
            {
                return;
            }
            for (int index = 0; index < AssetsData.Count; index++)
            {
                AssetsMain main = AssetsData[index];
                TempRow = Sheet.CreateRow(NextRowIndex);

                // 使用属性0
                TempRow.CreateCell(0).SetCellValue(main.UsingAttribute);
                // 资产编号1
                TempRow.CreateCell(1).SetCellValue(main.AssetsNum);
                // 资产分类代码2
                TempRow.CreateCell(2).SetCellValue(main.CatCode);
                // 资产分类名称3
                TempRow.CreateCell(3).SetCellValue("");
                // 资产名称4
                TempRow.CreateCell(4).SetCellValue(main.GoodsName);
                // 计量单位5
                TempRow.CreateCell(5).SetCellValue(main.MeasurementUnits);
                // 数量6
                TempRow.CreateCell(6).SetCellValue(main.Counts);
                // 品牌及规格型号7
                TempRow.CreateCell(7).SetCellValue(main.ModelSpecification);
                // 使用性质32
                TempRow.CreateCell(32).SetCellValue("");
                // 取得方式9
                TempRow.CreateCell(9).SetCellValue(main.UsingStyle);
                // 使用状况10
                TempRow.CreateCell(10).SetCellValue(main.UsingState);
                // 使用方向11
                TempRow.CreateCell(11).SetCellValue("");
                // 使用人12
                TempRow.CreateCell(12).SetCellValue(main.UsePeople);
                // 价值类型13
                TempRow.CreateCell(13).SetCellValue(main.ValueType);
                // 价值14
                TempRow.CreateCell(14).SetCellValue(main.Money.ToString());
                // 财政性资金15
                TempRow.CreateCell(15).SetCellValue(main.GovMoney.ToString());
                // 非财政性资金16
                TempRow.CreateCell(16).SetCellValue(main.NoneGovMoney.ToString());
                // 净值17
                TempRow.CreateCell(17).SetCellValue(main.NetWorth.ToString());
                // 取得日期19
                TempRow.CreateCell(19).SetCellValue(main.GetDate.ToShortDateString());
                // 使用管理部门20
                TempRow.CreateCell(20).SetCellValue(main.UseDepartment);
                // 入账形式21
                TempRow.CreateCell(21).SetCellValue("");
                // 入账科目22
                TempRow.CreateCell(22).SetCellValue("");
                // 入账日期23
                TempRow.CreateCell(23).SetCellValue(main.PostingDate.ToShortDateString());
                // 会计凭证号24
                TempRow.CreateCell(24).SetCellValue(main.AcountDocNum);
                // 存放地点25
                TempRow.CreateCell(25).SetCellValue(main.StorePlace);
                // 备注56
                TempRow.CreateCell(56).SetCellValue(main.Memo);

                // 附属信息
                if (string.IsNullOrEmpty(main.CatCode))
                {
                    NextRowIndex++;
                    continue;
                }

                var @type = main.CatCode.GetAssetsTypeByCatCode();

                switch (@type)
                {
                case AssetsTypes.Land:
                    //
                    //
                    //
                    var attrData = AssetsService.GetLand(main.AssetsNum);

                    if (null != attrData)
                    {
                        //////////////////////////////////////////////////////////////////
                        // 土地
                        //////////////////////////////////////////////////////////////////
                        // 产权形式39
                        TempRow.CreateCell(39).SetCellValue(attrData.PropertyForm);
                        // 权属证明40
                        TempRow.CreateCell(40).SetCellValue(attrData.OwnershipCertificate);
                        // 权属性质45
                        TempRow.CreateCell(45).SetCellValue(attrData.OwnershipStyle);
                        // 权属年限38
                        TempRow.CreateCell(38).SetCellValue(attrData.OwnershipTime);
                        // 权属证号44
                        TempRow.CreateCell(44).SetCellValue(attrData.OwnershipCertifiateNum);
                        // 发证日期36
                        TempRow.CreateCell(36).SetCellValue(attrData.IssuingDate.ToShortDateString());
                        // 土地使用权人46
                        TempRow.CreateCell(46).SetCellValue(attrData.LandOwner);
                        // 土地使用权类型41
                        TempRow.CreateCell(41).SetCellValue(attrData.LandUserStyle);
                        // 地类(用途)48
                        // 坐落位置55
                        TempRow.CreateCell(55).SetCellValue(attrData.Location);
                        // 土地使用权面积42
                        TempRow.CreateCell(42).SetCellValue(attrData.AllArea.ToString());
                        // 独用面积53
                        TempRow.CreateCell(53).SetCellValue(attrData.SingleArea.ToString());
                        // 分摊面积54
                        TempRow.CreateCell(54).SetCellValue(attrData.SharingArea.ToString());
                        //////////////////////////////////////////////////////////////////
                        // 土地
                        //////////////////////////////////////////////////////////////////
                    }
                    break;

                case AssetsTypes.Car:
                    //
                    //
                    //
                    var carAttr = AssetsService.GetCar(main.AssetsNum);

                    if (null != carAttr)
                    {
                        //////////////////////////////////////////////////////////////////
                        // 车辆
                        //////////////////////////////////////////////////////////////////
                        // 编制情况8
                        TempRow.CreateCell(8).SetCellValue(carAttr.Organization);
                        // 行驶证注册登记日期18
                        TempRow.CreateCell(18).SetCellValue(carAttr.CarErollDare);
                        // 号牌号码27
                        TempRow.CreateCell(27).SetCellValue(carAttr.CarNum);
                        // 发动机号码28
                        TempRow.CreateCell(28).SetCellValue(carAttr.CarEngineNum);
                        // 车辆识别代号(车架号)29
                        TempRow.CreateCell(29).SetCellValue(carAttr.CarRecCode);
                        // 排气量30
                        TempRow.CreateCell(30).SetCellValue(carAttr.CarExhaust);
                        // 车辆行驶证所有人31
                        TempRow.CreateCell(31).SetCellValue(carAttr.CarOwner);
                        // 车辆用途50
                        TempRow.CreateCell(50).SetCellValue(carAttr.CarUser);
                        //////////////////////////////////////////////////////////////////
                        // 车辆
                        //////////////////////////////////////////////////////////////////
                    }
                    break;

                case AssetsTypes.Building:
                    //
                    //
                    //
                    var buildAttr = AssetsService.GetBuilding(main.AssetsNum);

                    if (null != buildAttr)
                    {
                        //////////////////////////////////////////////////////////////////
                        // 构筑物
                        //////////////////////////////////////////////////////////////////
                        // 产权形式39
                        TempRow.CreateCell(39).SetCellValue(buildAttr.PropertyForm);
                        // 权属证号44
                        TempRow.CreateCell(44).SetCellValue(buildAttr.OwnershipCertifiateNum);
                        // 坐落位置55
                        TempRow.CreateCell(55).SetCellValue(buildAttr.Location);
                        //////////////////////////////////////////////////////////////////
                        // 构筑物
                        //////////////////////////////////////////////////////////////////
                    }
                    break;

                case AssetsTypes.Culturalrelic:
                    //
                    //
                    //
                    var culturaAttr = AssetsService.GetCulturalrelic(main.AssetsNum);

                    if (null != culturaAttr)
                    {
                        //////////////////////////////////////////////////////////////////
                        // 文物
                        //////////////////////////////////////////////////////////////////
                        // 文物等级33
                        TempRow.CreateCell(33).SetCellValue(culturaAttr.GoodsLevel);
                        // 藏品年代34
                        TempRow.CreateCell(34).SetCellValue(culturaAttr.Years);
                        // 来源地/产地35
                        TempRow.CreateCell(35).SetCellValue(culturaAttr.SourcePlace);
                        //////////////////////////////////////////////////////////////////
                        // 文物
                        //////////////////////////////////////////////////////////////////
                    }
                    break;

                case AssetsTypes.Animalandplant:
                    //
                    //
                    //
                    var animalAttr = AssetsService.GetAnimalandplant(main.AssetsNum);

                    if (null != animalAttr)
                    {
                        //////////////////////////////////////////////////////////////////
                        // 特种动植物
                        //////////////////////////////////////////////////////////////////
                        // 来源地/产地35
                        TempRow.CreateCell(35).SetCellValue(animalAttr.Palce);
                        //////////////////////////////////////////////////////////////////
                        // 特种动植物
                        //////////////////////////////////////////////////////////////////
                    }
                    break;

                case AssetsTypes.Furniture:

                    break;

                case AssetsTypes.GeneralEquipment:
                    //
                    //
                    //
                    var GenaalAttr = AssetsService.GetGeneral(main.AssetsNum);

                    if (null != GenaalAttr)
                    {
                        //////////////////////////////////////////////////////////////////
                        // 通用设备
                        //////////////////////////////////////////////////////////////////
                        // 设备用途49
                        TempRow.CreateCell(49).SetCellValue(GenaalAttr.DevUse);
                        // 生产厂家26
                        TempRow.CreateCell(26).SetCellValue(GenaalAttr.DevFactory);
                        //////////////////////////////////////////////////////////////////
                        // 通用设备
                        //////////////////////////////////////////////////////////////////
                    }
                    break;

                case AssetsTypes.House:
                    //
                    //
                    //
                    var houseAttr = AssetsService.GetHouse(main.AssetsNum);

                    if (null != houseAttr)
                    {
                        //////////////////////////////////////////////////////////////////
                        // 房屋
                        //////////////////////////////////////////////////////////////////
                        // 产权形式39
                        TempRow.CreateCell(39).SetCellValue(houseAttr.PropertyForm);
                        // 权属证明40
                        TempRow.CreateCell(40).SetCellValue(houseAttr.OwnershipCertificate);
                        // 权属证号44
                        TempRow.CreateCell(44).SetCellValue(houseAttr.OwnershipCertifiateNum);
                        // 权属年限38
                        TempRow.CreateCell(38).SetCellValue(houseAttr.OwnershipTime);
                        // 发证日期36
                        TempRow.CreateCell(36).SetCellValue(houseAttr.IssuingDate.ToShortDateString());
                        // 房屋所有权人47
                        TempRow.CreateCell(47).SetCellValue(houseAttr.HouseOwner);
                        // 设计用途51
                        TempRow.CreateCell(51).SetCellValue(houseAttr.DesignUse);
                        // 建筑结构52
                        TempRow.CreateCell(52).SetCellValue(houseAttr.BuildingStruccture);
                        // 坐落位置55
                        TempRow.CreateCell(55).SetCellValue(houseAttr.Location);
                        // 建筑面积43
                        TempRow.CreateCell(43).SetCellValue(houseAttr.Area.ToString());
                        //////////////////////////////////////////////////////////////////
                        // 房屋
                        //////////////////////////////////////////////////////////////////
                    }
                    break;

                case AssetsTypes.SpecialEquipment:
                    //
                    //
                    //
                    var specialAttr = AssetsService.GetSpecial(main.AssetsNum);

                    if (null != specialAttr)
                    {
                        //////////////////////////////////////////////////////////////////
                        // 专用设备
                        //////////////////////////////////////////////////////////////////
                        // 生产厂家26
                        TempRow.CreateCell(26).SetCellValue(specialAttr.DevFactory);
                        //////////////////////////////////////////////////////////////////
                        // 专用设备
                        //////////////////////////////////////////////////////////////////
                    }
                    break;

                case AssetsTypes.Book:
                    //
                    //
                    //
                    var bookAttr = AssetsService.GetBook(main.AssetsNum);

                    if (null != bookAttr)
                    {
                        //////////////////////////////////////////////////////////////////
                        // 图书
                        //////////////////////////////////////////////////////////////////
                        // 投入使用日期37
                        TempRow.CreateCell(37).SetCellValue(bookAttr.UseDate.ToShortDateString());
                        //////////////////////////////////////////////////////////////////
                        // 图书
                        //////////////////////////////////////////////////////////////////
                    }
                    break;
                }

                //
                // 换行
                //
                NextRowIndex++;
                Thread.Sleep(10);
            }
        }
Example #19
0
 private void Awake()
 {
     Instance = this;
 }
        private static async Task Execute(string settingsFilePath)
        {
            if (!File.Exists(settingsFilePath))
            {
                Console.WriteLine($"{settingsFilePath} file not exist");

                return;
            }

            var settings = new FileSettingsReader <ToolSettings>(settingsFilePath);

            var logFactory = LogFactory.Create()
                             .AddConsole();

            var assetServce = new AssetsService(new Uri(settings.CurrentValue.AssetServiceUrl));

            var retryPolicy = Policy.Handle <RetryNeededException>()
                              .WaitAndRetryAsync(10, retryAttempt => TimeSpan.FromSeconds(retryAttempt), onRetry:
                                                 (ex, delay, context, tsk) =>
            {
                Console.WriteLine($"Retrying exception {ex.ToAsyncString()}");
            });

            var clientAccountService = new Lazy <ClientAccountClient>(() =>
                                                                      new ClientAccountClient(settings.CurrentValue.ClientAccountUrl
                                                                                              ?? throw new ArgumentNullException(settings.CurrentValue.ClientAccountUrl)));

            IEnumerable <Asset> assets;

            if (!string.IsNullOrEmpty(settings.CurrentValue.AssetId))
            {
                var asset = await assetServce.AssetGetAsync(settings.CurrentValue.AssetId);

                if (asset == null)
                {
                    Console.WriteLine($"Asset not found {settings.CurrentValue.AssetId}");

                    return;
                }

                assets = new []
                {
                    asset
                };
            }
            else
            {
                assets = await assetServce.AssetGetAllAsync();
            }

            var balanceReaders = BalanceReaderFactory.GetBalanceReaders(assetServce, settings.CurrentValue).ToArray();

            const string csvDeliminator = ";";
            string       header         = $"ClientId;Address;Amount;AssetId;ReceivedAmount;SpentAmount;TransactionsCount{Environment.NewLine}";
            await File.AppendAllTextAsync(settings.CurrentValue.ResultFilePath, header);

            var    counter                 = 0;
            string continuationToken       = null;
            var    relatedAssetsDictionary = new ConcurrentDictionary <Type, IEnumerable <Asset> >();

            do
            {
                IEnumerable <string> clientIds;

                if (string.IsNullOrEmpty(settings.CurrentValue.ClientIdsFilePath))
                {
                    Console.WriteLine("Retrieving client ids batch");
                    var response = await clientAccountService.Value.GetIdsAsync(continuationToken);

                    continuationToken = response.ContinuationToken;
                    clientIds         = response.Ids;
                }
                else
                {
                    clientIds = await File.ReadAllLinesAsync(settings.CurrentValue.ClientIdsFilePath);
                }

                if (string.IsNullOrEmpty(settings.CurrentValue.AssetId) && settings.CurrentValue.IncludeZeroBalances)
                {
                    throw new ArgumentException("If AssetId is omitted, IncludeZeroBalances should be false.");
                }

                foreach (var clientId in clientIds)
                {
                    IEnumerable <(IBalanceReader balanceReader, string address)> addresses;

                    switch (settings.CurrentValue.WalletType)
                    {
                    case WalletTypes.Private:
                        addresses = await GetPrivateWalletAddresses(clientId,
                                                                    logFactory,
                                                                    settings,
                                                                    balanceReaders);

                        break;

                    case WalletTypes.Deposit:
                        addresses = await GetDepositWallets(clientId,
                                                            logFactory,
                                                            settings,
                                                            balanceReaders);

                        break;

                    default:
                        throw new ArgumentException("Unknown switch", nameof(ToolSettings.WalletType));
                    }

                    foreach (var balanceReaderAddresses in addresses.GroupBy(p => p.balanceReader.GetType()))
                    {
                        var balanceReader = balanceReaderAddresses.First().balanceReader;

                        //cache enumeration
                        var relatedAssets = relatedAssetsDictionary.GetOrAdd(balanceReader.GetType(),
                                                                             (type) => balanceReader.SelectRelatedAssetsAsync(assets).Result.ToList());

                        foreach (var address in balanceReader.SelectUniqueAddresses(balanceReaderAddresses.Select(p => p.address)))
                        {
                            try
                            {
                                var blockchainBalances = await retryPolicy.ExecuteAsync(
                                    () => balanceReader.ReadBalance(relatedAssets, address));

                                var transactionsInfo = await retryPolicy.ExecuteAsync(
                                    () => balanceReader.GetTransactionsInfoAsync(relatedAssets, address, settings.CurrentValue.AssetId, settings.CurrentValue.PrivateWalletsCount.FromDate,
                                                                                 settings.CurrentValue.PrivateWalletsCount.FromBlock));

                                foreach (var blockchainBalance in blockchainBalances
                                         .Where(p => p.amount != 0 || settings.CurrentValue.IncludeZeroBalances))
                                {
                                    await File.AppendAllTextAsync(settings.CurrentValue.ResultFilePath,
                                                                  string.Join(csvDeliminator,
                                                                              clientId,
                                                                              blockchainBalance.address,
                                                                              blockchainBalance.amount.ToString(CultureInfo.InvariantCulture),
                                                                              blockchainBalance.assetId,
                                                                              transactionsInfo.AssetId == blockchainBalance.assetId ? transactionsInfo.ReceivedAmount.ToString(CultureInfo.InvariantCulture) : "-",
                                                                              transactionsInfo.AssetId == blockchainBalance.assetId ? transactionsInfo.SpentAmount.ToString(CultureInfo.InvariantCulture) : "-",
                                                                              transactionsInfo.AssetId == blockchainBalance.assetId ? transactionsInfo.TransactionsCount.ToString(CultureInfo.InvariantCulture) : "-"
                                                                              )
                                                                  + Environment.NewLine);
                                }
                            }
                            catch (Exception e)
                            {
                                Console.WriteLine($"Exception during processing balance for client {clientId}, address: {address}: {e.ToAsyncString()}");

                                await File.AppendAllTextAsync(settings.CurrentValue.ErrorFilePath,
                                                              string.Join(csvDeliminator,
                                                                          DateTime.UtcNow,
                                                                          clientId,
                                                                          address,
                                                                          e.ToAsyncString())
                                                              + Environment.NewLine);
                            }
                        }
                    }

                    counter++;
                    Console.WriteLine($"[{DateTime.UtcNow}] {clientId} done -- {counter}");
                }
            } while (continuationToken != null);

            Console.WriteLine("All done");
        }
Example #21
0
        private async Task <List <AssetSubset> > GetAssets()
        {
            var request = new AssetListRequest(connectionSettings.AccessToken, connectionSettings.ClientSecret);

            return((await AssetsService.GetAssetsAsync(request)).Data.ToList());
        }
Example #22
0
 private async Task DeleteAsset(int assetId)
 {
     var request = new FortnoxApiRequest(connectionSettings.AccessToken, connectionSettings.ClientSecret);
     await AssetsService.DeleteAssetAsync(request, assetId.ToString());
 }
Example #23
0
        protected override void FillBody()
        {
            if (null == AssetsData)
            {
                return;
            }
            for (int index = 0; index < AssetsData.Count; index++)
            {
                AssetsMain main = AssetsData[index];
                TempRow = Sheet.CreateRow(NextRowIndex);

                TempRow.CreateCell(0).SetCellValue(index + 1);
                TempRow.CreateCell(1).SetCellValue(main.GoodsName);
                TempRow.CreateCell(2).SetCellValue(main.CatCode);
                TempRow.CreateCell(3).SetCellValue("");
                TempRow.CreateCell(4).SetCellValue(main.MeasurementUnits);

                //
                // 使用属性
                //
                if (!string.IsNullOrEmpty(main.UsingAttribute))
                {
                    TempRow.CreateCell(5).SetCellValue(main.UsingAttribute);
                }
                else
                {
                    TempRow.CreateCell(5).SetCellValue("01|办公设备");
                }

                //
                // 使用状况
                //
                if (!string.IsNullOrEmpty(main.UsingState))
                {
                    TempRow.CreateCell(6).SetCellValue(main.UsingState);
                }
                else
                {
                    TempRow.CreateCell(6).SetCellValue("01|在用");
                }

                //
                // 使用方向
                //
                if (!string.IsNullOrEmpty(main.UsingStyle))
                {
                    TempRow.CreateCell(7).SetCellValue(main.UsingState);
                }
                else
                {
                    TempRow.CreateCell(7).SetCellValue("01|自用");
                }

                //
                // 取得方式
                //
                if (!string.IsNullOrEmpty(main.GetWay))
                {
                    TempRow.CreateCell(8).SetCellValue(main.GetWay);
                }
                else
                {
                    TempRow.CreateCell(8).SetCellValue("01|购置");
                }

                //
                // 取得日期
                //
                if (!string.IsNullOrEmpty(main.GetDate.ToShortDateString()))
                {
                    TempRow.CreateCell(9).SetCellValue(main.GetDate.ToShortDateString());
                }
                else
                {
                    TempRow.CreateCell(9).SetCellValue(DateTime.Now.ToShortDateString());
                }


                var attrData = AssetsService.GetAnimalandplant(main.AssetsNum);
                if (null != attrData)
                {
                    TempRow.CreateCell(10).SetCellValue(attrData.Birthday.ToShortDateString());
                    TempRow.CreateCell(11).SetCellValue(attrData.Age);
                    TempRow.CreateCell(12).SetCellValue(attrData.Class);
                    TempRow.CreateCell(13).SetCellValue(attrData.Palce);
                }

                //
                // 取得方式
                //
                if (main.Counts > 0)
                {
                    TempRow.CreateCell(14).SetCellValue(main.Counts);
                }
                else
                {
                    TempRow.CreateCell(14).SetCellValue("01|购置");
                }
                TempRow.CreateCell(19).SetCellValue(main.Counts);
                TempRow.CreateCell(19).SetCellValue(main.ValueType);
                TempRow.CreateCell(20).SetCellValue(main.Money.ToString());
                TempRow.CreateCell(21).SetCellValue(main.GovMoney.ToString());
                TempRow.CreateCell(22).SetCellValue(main.NoneGovMoney.ToString());
                TempRow.CreateCell(26).SetCellValue(main.PostingDate.ToShortDateString());
                TempRow.CreateCell(27).SetCellValue(main.AcountDocNum);
                TempRow.CreateCell(28).SetCellValue(main.AssetsNum);
                NextRowIndex++;
                Thread.Sleep(10);
            }
        }
Example #24
0
        public Session()
        {
            AccountService        = new Riot.Services.AccountService(this);
            ChampionTradeService  = new Riot.Services.ChampionTradeService(this);
            ClientFacadeService   = new Riot.Services.ClientFacadeService(this);
            GameInvitationService = new Riot.Services.GameInvitationService(this);
            GameService           = new Riot.Services.GameService(this);
            InventoryService      = new Riot.Services.InventoryService(this);
            LcdsProxyService      = new Riot.Services.LcdsProxyService(this);
            LeaguesService        = new Riot.Services.LeaguesService(this);
            LoginService          = new Riot.Services.LoginService(this);
            MasteryBookService    = new Riot.Services.MasteryBookService(this);
            MatchmakingService    = new Riot.Services.MatchmakingService(this);
            PlayerStatsService    = new Riot.Services.PlayerStatsService(this);
            RerollService         = new Riot.Services.RerollService(this);
            SpellBookService      = new Riot.Services.SpellBookService(this);
            SummonerIconService   = new Riot.Services.SummonerIconService(this);
            SummonerRuneService   = new Riot.Services.SummonerRuneService(this);
            SummonerService       = new Riot.Services.SummonerService(this);
            SummonerTeamService   = new Riot.Services.SummonerTeamService(this);

            LootService             = new LootService(this, LcdsProxyService);
            ChampionMasteryService  = new ChampionMasteryService(this, LcdsProxyService);
            TeambuilderDraftService = new TeambuilderDraftService(this, LcdsProxyService);

            PlayerPreferencesService = new PlayerPreferencesService(this);
            MatchHistoryService      = new MatchHistoryService(this);

            var patcher = new PatcherService(this);

            this.chat = new ChatService(this);

            this.Maestro = new Maestro(chat, patcher);

            var settings = new SettingsService(this);

            var hextech   = new HextechService(this);
            var champions = new ChampionsService(this);
            var masteries = new MasteriesService(this);
            var runes     = new RunesService(this);

            var matches = new Server.Profile.MatchHistoryService(this);

            this.summoner = new SummonerService(this);
            this.Assets   = new AssetsService(patcher);

            var rooms = new ChatRoomService(this, chat);
            var login = new AuthService(this);

            var game   = new PlayLoopService(this, rooms);
            var invite = new InviteService(this, game);

            var meta  = new MetaService(this);
            var debug = new DebugService(this);

            var replay = new ReplayService(this);

            patcher.FinishWAD();

            var info = new InfoService(this, patcher);
        }
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            // CONFIGURATION SETTINGS

            var applicationConfiguration = Configuration.GetSection("Application");
            var applicationSettings      = new ApplicationSettings(
                applicationConfiguration["DefaultNickname"],
                applicationConfiguration.GetValue <double>("RadiusAround"),
                applicationConfiguration["UploadsFolderName"]);

            services.AddSingleton(applicationSettings);

            var securityConfiguration = Configuration.GetSection("Security");
            var securitySettings      = new SecuritySettings(
                securityConfiguration["EncryptionKey"],
                securityConfiguration["Issue"],
                securityConfiguration.GetValue <TimeSpan>("ExpirationPeriod"));

            services.AddSingleton(securitySettings);

            // REPOSITORIES

            IShyneesRepository shyneesRepository;

            if (Configuration.GetValue <bool>("Database:IsInMemory"))
            {
                shyneesRepository = new InMemoryShyneesRepository();
            }
            else
            {
                var dbConfiguration = Configuration.GetSection("Database:MongoDB");
                var dbSettings      = new DbSettings(
                    dbConfiguration["ConnectionString"],
                    dbConfiguration["Database"]);
                services.AddSingleton(dbSettings);
                var dbMapper  = new DbMapper();
                var dbContext = new DbContext(dbSettings);
                shyneesRepository = new ShyneesRepository(dbContext);
            }

            // SERVICES

            var shyneesService = new ShyneesService(shyneesRepository, applicationSettings);
            var assetsService  = new AssetsService(applicationSettings);

            services.AddSingleton <IShyneesService>(shyneesService);
            services.AddSingleton <IAssetsService>(assetsService);

            // OTHER DEPENDENCIES

            services.AddScoped <ModelValidationAttribute>();

            var jwtIssuer = new JwtIssuer(securitySettings);

            services.AddSingleton <IJwtIssuer>(jwtIssuer);

            services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(options =>
            {
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuer           = false,
                    ValidateAudience         = false,
                    ValidateLifetime         = true,
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey         = new SymmetricSecurityKey(
                        Encoding.UTF8.GetBytes(securitySettings.EncryptionKey))
                };
            });

            services
            .AddAuthorization(options =>
            {
                options.DefaultPolicy =
                    new AuthorizationPolicyBuilder(JwtBearerDefaults.AuthenticationScheme)
                    .RequireAuthenticatedUser().Build();
            });

            services.AddCors(options =>
            {
                options.AddPolicy("EnableCORS", builder =>
                {
                    builder.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod().AllowCredentials().Build();
                });
            });

            services.AddMvc(config =>
            {
                config.ReturnHttpNotAcceptable = true;
            });

            services.AddSwaggerGen(options =>
            {
                options.SwaggerDoc("v1", new Info
                {
                    Title       = Configuration["Swagger:Title"],
                    Version     = Configuration["Swagger:Version"],
                    Description = Configuration["Swagger:Description"]
                });
                options.AddSecurityDefinition("Bearer", new ApiKeyScheme
                {
                    Description =
                        "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"",
                    Name = "Authorization",
                    In   = "header",
                    Type = "apiKey"
                });
                options.IncludeXmlComments(string.Format(@"{0}/ShyneeBackend.Application.xml",
                                                         AppDomain.CurrentDomain.BaseDirectory));
                options.IncludeXmlComments(string.Format(@"{0}/ShyneeBackend.Domain.xml",
                                                         AppDomain.CurrentDomain.BaseDirectory));
                options.DescribeAllEnumsAsStrings();
            });
        }