Esempio n. 1
0
        public async Task <ActionResult> SaveAsync(List <ExchangeRateViewModel> exchangeRates)
        {
            if (!ModelState.IsValid)
            {
                return(this.InvalidModelState(this.ModelState));
            }

            if (exchangeRates == null || exchangeRates.Count().Equals(0))
            {
                return(this.InvalidModelState(this.ModelState));
            }



            var meta = await AppUsers.GetCurrentAsync().ConfigureAwait(true);

            int    officeId     = meta.OfficeId;
            string baseCurrency = meta.CurrencyCode;



            long id = await ExchangeRates.SaveAsync(this.Tenant, officeId, baseCurrency, exchangeRates).ConfigureAwait(false);

            return(this.Ok(id));
        }
Esempio n. 2
0
        protected override void Initialize(RequestContext context)
        {
            string tenant      = TenantConvention.GetTenant();
            string clientToken = context.HttpContext.Request.GetClientToken();
            var    provider    = new Provider();
            var    token       = provider.GetToken(clientToken);

            if (token != null)
            {
                bool isValid = AccessTokens.IsValidAsync(tenant, token.ClientToken, context.HttpContext.GetClientIpAddress(), context.HttpContext.GetUserAgent()).GetAwaiter().GetResult();

                if (isValid)
                {
                    AppUsers.SetCurrentLoginAsync(tenant, token.LoginId).GetAwaiter().GetResult();
                    var loginView = AppUsers.GetCurrentAsync(tenant, token.LoginId).GetAwaiter().GetResult();

                    this.AppUser = new AppUser
                    {
                        Tenant          = tenant,
                        ClientToken     = token.ClientToken,
                        LoginId         = loginView.LoginId,
                        UserId          = loginView.UserId,
                        Name            = loginView.Name,
                        OfficeId        = loginView.OfficeId,
                        OfficeName      = loginView.OfficeName,
                        Email           = loginView.Email,
                        RoleId          = loginView.RoleId,
                        RoleName        = loginView.RoleName,
                        IsAdministrator = loginView.IsAdministrator
                    };

                    var identity = new ClaimsIdentity(token.GetClaims(), DefaultAuthenticationTypes.ApplicationCookie,
                                                      ClaimTypes.NameIdentifier, ClaimTypes.Role);
                    identity.AddClaim(new Claim(ClaimTypes.NameIdentifier,
                                                token.LoginId.ToString(CultureInfo.InvariantCulture)));

                    if (loginView.RoleName != null)
                    {
                        identity.AddClaim(new Claim(ClaimTypes.Role, loginView.RoleName));
                    }

                    if (loginView.Email != null)
                    {
                        identity.AddClaim(new Claim(ClaimTypes.Email, loginView.Email));
                    }

                    context.HttpContext.User = new ClaimsPrincipal(identity);
                }
            }

            if (this.AppUser == null)
            {
                this.AppUser = new AppUser
                {
                    Tenant = tenant
                };
            }

            base.Initialize(context);
        }
Esempio n. 3
0
        public async Task <ActionResult> PostAsync(OpeningCash model)
        {
            if (!this.ModelState.IsValid)
            {
                return(this.InvalidModelState(this.ModelState));
            }

            var meta = await AppUsers.GetCurrentAsync(this.Tenant).ConfigureAwait(false);

            var dates = await Dates.GetFrequencyDatesAsync(this.Tenant, meta.OfficeId).ConfigureAwait(true);

            model.UserId          = meta.UserId;
            model.TransactionDate = dates.Today;

            try
            {
                await OpeningCashTransactions.AddAsync(this.Tenant, model).ConfigureAwait(true);

                return(this.Ok());
            }
            catch (Exception ex)
            {
                return(this.Failed(ex.Message, HttpStatusCode.InternalServerError));
            }
        }
Esempio n. 4
0
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            string path = this.OverridePath.Or(filterContext.HttpContext.Request.FilePath);

            var    my       = AppUsers.GetCurrentAsync().Result;
            int    userId   = my.UserId;
            int    officeId = my.OfficeId;
            string culture  = my.Culture;

            string tenant = TenantConvention.GetTenant();

            var policy = Menu.GetAsync(tenant, userId, officeId, culture).Result;

            if (!policy.Any(x => x.Url.Equals(path)))
            {
                if (this.StatusResponse)
                {
                    filterContext.Result = new HttpUnauthorizedResult("Access is denied.");
                }
                else
                {
                    filterContext.Result = new RedirectResult("/account/sign-in");
                }
            }
        }
        public async Task <ActionResult> ChangePasswordAsync(ChangePasswordInfo model)
        {
            var meta = await AppUsers.GetCurrentAsync(this.Tenant).ConfigureAwait(true);

            if (!meta.IsAdministrator)
            {
                return(this.AccessDenied());
            }

            if (!this.ModelState.IsValid)
            {
                return(this.InvalidModelState(this.ModelState));
            }


            if (model.Password != model.ConfirmPassword)
            {
                return(this.Failed(I18N.ConfirmPasswordDoesNotMatch, HttpStatusCode.BadRequest));
            }

            model.Email = meta.Email;

            try
            {
                await Users.ChangePasswordAsync(this.Tenant, meta.UserId, model).ConfigureAwait(true);

                return(this.Ok("OK"));
            }
            catch (Exception ex)
            {
                return(this.Failed(ex.Message, HttpStatusCode.InternalServerError));
            }
        }
Esempio n. 6
0
        public async Task <ActionResult> IndexAsync()
        {
            var meta = await AppUsers.GetCurrentAsync(this.Tenant).ConfigureAwait(true);

            var dates = await Dates.GetFrequencyDatesAsync(this.Tenant, meta.OfficeId).ConfigureAwait(true);

            var openingCash = await OpeningCashTransactions.GetAsync(this.Tenant, meta.UserId, dates.Today).ConfigureAwait(true);

            var closingCash = await ClosingCashTransactions.GetAsync(this.Tenant, meta.UserId, dates.Today).ConfigureAwait(true);

            var salesView = await ClosingCashTransactions.GetCashSalesViewAsync(this.Tenant, meta.UserId, dates.Today).ConfigureAwait(true);


            var model = new ClosingCashViewModel
            {
                OpeningCashInfo = openingCash ?? new OpeningCash {
                    TransactionDate = dates.Today
                },
                SalesView       = salesView ?? new List <SalesView>(),
                ClosingCashInfo = closingCash ?? new ClosingCash {
                    TransactionDate = dates.Today
                }
            };

            return(this.FrapidView(this.GetRazorView <AreaRegistration>("Tasks/ClosingCash/Index.cshtml", this.Tenant), model));
        }
        public async Task <ActionResult> Put(DTO.InventorySetup model)
        {
            if (!this.ModelState.IsValid)
            {
                return(this.InvalidModelState(this.ModelState));
            }


            var meta = await AppUsers.GetCurrentAsync(this.Tenant).ConfigureAwait(true);

            if (!meta.IsAdministrator)
            {
                return(this.AccessDenied());
            }


            try
            {
                await InventorySetup.SetAsync(this.Tenant, meta.OfficeId, model).ConfigureAwait(false);

                return(this.Ok());
            }
            catch (Exception ex)
            {
                return(this.Failed(ex.Message, HttpStatusCode.InternalServerError));
            }
        }
Esempio n. 8
0
        public async Task <ActionResult> AddAsync(UserInfo model)
        {
            var user = await AppUsers.GetCurrentAsync(this.Tenant).ConfigureAwait(true);

            if (!user.IsAdministrator)
            {
                return(this.AccessDenied());
            }

            if (!this.ModelState.IsValid)
            {
                return(this.InvalidModelState(this.ModelState));
            }


            if (model.Password != model.ConfirmPassword)
            {
                return(this.Failed("Confirm password does not match with the supplied password", HttpStatusCode.BadRequest));
            }

            try
            {
                await DAL.Users.CreateUserAsync(this.Tenant, user.UserId, model).ConfigureAwait(true);

                return(this.Ok("OK"));
            }
            catch (Exception ex)
            {
                return(this.Failed(ex.Message, HttpStatusCode.InternalServerError));
            }
        }
Esempio n. 9
0
        public async Task <ActionResult> PostAsync(Order model)
        {
            if (!this.ModelState.IsValid)
            {
                return(this.InvalidModelState(this.ModelState));
            }

            var meta = await AppUsers.GetCurrentAsync().ConfigureAwait(true);

            model.UserId               = meta.UserId;
            model.OfficeId             = meta.OfficeId;
            model.AuditUserId          = meta.UserId;
            model.AuditTs              = DateTimeOffset.UtcNow;
            model.TransactionTimestamp = DateTimeOffset.UtcNow;

            try
            {
                long tranId = await Orders.PostAsync(this.Tenant, model).ConfigureAwait(true);

                return(this.Ok(tranId));
            }
            catch (Exception ex)
            {
                return(this.Failed(ex.Message, HttpStatusCode.InternalServerError));
            }
        }
Esempio n. 10
0
        public async Task <ActionResult> PostAsync(Content content)
        {
            if (!this.ModelState.IsValid)
            {
                return(this.InvalidModelState(this.ModelState));
            }

            var meta = await AppUsers.GetCurrentAsync().ConfigureAwait(false);

            content.AuditUserId = meta.UserId;
            content.AuditTs     = DateTimeOffset.UtcNow;

            if (content.ContentId == 0)
            {
                content.AuthorId = meta.UserId;
            }

            try
            {
                int id = await Contents.AddOrEditAsync(this.Tenant, content).ConfigureAwait(false);

                return(this.Ok(id));
            }
            catch (Exception ex)
            {
                return(this.Failed(ex.Message, HttpStatusCode.InternalServerError));
            }
        }
        protected async Task <ActionResult> OnAuthenticatedAsync(LoginResult result, SignInInfo model = null)
        {
            if (!result.Status)
            {
                int delay = new Random().Next(1, 5) * 1000;

                await Task.Delay(delay).ConfigureAwait(false);

                return(new HttpStatusCodeResult(HttpStatusCode.Forbidden, JsonConvert.SerializeObject(result)));
            }


            Guid?applicationId = null;

            if (model != null)
            {
                applicationId = model.ApplicationId;
            }

            var loginView = await AppUsers.GetCurrentAsync(this.Tenant, result.LoginId).ConfigureAwait(false);

            var manager = new Provider(this.Tenant, applicationId, result.LoginId, loginView.UserId, loginView.OfficeId);
            var token   = manager.GetToken();

            await AccessTokens.SaveAsync(this.Tenant, token, this.RemoteUser.IpAddress, this.RemoteUser.UserAgent).ConfigureAwait(true);

            string domain = TenantConvention.GetDomain();

            this.AddAuthenticationCookie(domain, token);
            this.AddCultureCookie(domain, model?.Culture.Or("en-US"));

            return(this.Ok(token.ClientToken));
        }
Esempio n. 12
0
        public static async Task <AppUser> GetUserAsync(string tenant, HubCallerContext context)
        {
            var token = await GetTokenAsync(tenant, context).ConfigureAwait(false);

            if (token != null)
            {
                await AppUsers.SetCurrentLoginAsync(tenant, token.LoginId).ConfigureAwait(false);

                var loginView = await AppUsers.GetCurrentAsync(tenant, token.LoginId).ConfigureAwait(false);

                return(new AppUser
                {
                    Tenant = tenant,
                    ClientToken = token.ClientToken,
                    LoginId = token.LoginId,
                    UserId = loginView.UserId,
                    OfficeId = loginView.OfficeId,
                    Email = loginView.Email,
                    IsAdministrator = loginView.IsAdministrator,
                    RoleId = loginView.RoleId,
                    Name = loginView.Name,
                    RoleName = loginView.RoleName,
                    OfficeName = loginView.OfficeName
                });
            }

            return(null);
        }
Esempio n. 13
0
        public async Task <ActionResult> PostAsync(SalesReceipt model)
        {
            if (!this.ModelState.IsValid)
            {
                return(this.InvalidModelState(this.ModelState));
            }

            if (model.CashRepositoryId == 0 && model.BankAccountId == 0)
            {
                this.Failed(I18N.InvalidReceiptMode, HttpStatusCode.InternalServerError);
            }

            if (model.CashRepositoryId > 0 && (model.BankAccountId > 0 || !string.IsNullOrWhiteSpace(model.BankInstrumentCode) || !string.IsNullOrWhiteSpace(model.BankInstrumentCode)))
            {
                this.Failed(I18N.CashTransactionCannotContainBankTransactionDetails, HttpStatusCode.InternalServerError);
            }

            var meta = await AppUsers.GetCurrentAsync().ConfigureAwait(true);

            model.UserId   = meta.UserId;
            model.OfficeId = meta.OfficeId;
            model.LoginId  = meta.LoginId;

            try
            {
                long tranId = await Receipts.PostAsync(this.Tenant, model).ConfigureAwait(true);

                return(this.Ok(tranId));
            }
            catch (Exception ex)
            {
                return(this.Failed(ex.Message, HttpStatusCode.InternalServerError));
            }
        }
        public async Task <ActionResult> Index()
        {
            var meta = await AppUsers.GetCurrentAsync(this.Tenant).ConfigureAwait(true);

            var model = await InventorySetup.GetAsync(this.Tenant, meta.OfficeId).ConfigureAwait(true);

            return(this.FrapidView(this.GetRazorView <AreaRegistration>("Setup/IS.cshtml", this.Tenant), model));
        }
Esempio n. 15
0
        public async Task <ActionResult> GetNextTopFeedsAsync(long lastFeedId = 0, long parentFeedId = 0)
        {
            var meta = await AppUsers.GetCurrentAsync().ConfigureAwait(true);

            var model = await Feeds.GetFeedsAsync(this.Tenant, meta.UserId, lastFeedId, parentFeedId).ConfigureAwait(true);

            return(this.Ok(model));
        }
Esempio n. 16
0
        public async Task <ActionResult> IndexAsync()
        {
            var meta = await AppUsers.GetCurrentAsync().ConfigureAwait(true);

            var model = await Employees.GetEmployeesAsync(this.Tenant, meta.OfficeId).ConfigureAwait(true);

            return(this.FrapidView(this.GetRazorView <AreaRegistration>("Tasks/Attendance/Index.cshtml", this.Tenant), model));
        }
        public async Task <ActionResult> GetTodaysTotalSalesAsync()
        {
            var meta = await AppUsers.GetCurrentAsync().ConfigureAwait(true);

            decimal sales = await DAL.Backend.Summary.Sales.GetTodaysTotalSalesAsync(this.Tenant, meta.OfficeId).ConfigureAwait(true);

            return(this.Ok(sales));
        }
Esempio n. 18
0
        public async Task <ActionResult> IndexAsync()
        {
            var meta = await AppUsers.GetCurrentAsync().ConfigureAwait(true);

            var model = await Categories.GetMyCategoriesAsync(this.Tenant, meta.UserId).ConfigureAwait(true);

            return(this.FrapidView(this.GetRazorView <AreaRegistration>("Backend/Index.cshtml", this.Tenant), model));
        }
Esempio n. 19
0
        public async Task <ActionResult> GetMyNotificationAsync(Guid notificationId)
        {
            var meta = await AppUsers.GetCurrentAsync().ConfigureAwait(true);

            await Notifications.MarkAsSeenAsync(this.Tenant, notificationId, meta.UserId).ConfigureAwait(true);

            return(this.Ok());
        }
Esempio n. 20
0
        public async Task <ActionResult> GetMyNotificationAsync()
        {
            var meta = await AppUsers.GetCurrentAsync().ConfigureAwait(true);

            var model = await Notifications.GetMyNotificationsAsync(this.Tenant, meta.LoginId).ConfigureAwait(true);

            return(this.Ok(model));
        }
Esempio n. 21
0
        public async Task <ActionResult> PostAsync(Feed model)
        {
            var meta = await AppUsers.GetCurrentAsync().ConfigureAwait(true);

            var feedResult = await Feeds.PostAsync(this.Tenant, model, meta).ConfigureAwait(true);

            return(this.Ok(feedResult));
        }
Esempio n. 22
0
        public async Task <ActionResult> NewAsync()
        {
            var meta = await AppUsers.GetCurrentAsync().ConfigureAwait(true);

            var model = await OpeningInventories.GetModelAsync(this.Tenant, meta).ConfigureAwait(true);

            return(this.FrapidView(this.GetRazorView <AreaRegistration>("Setup/OpeningInventory/New.cshtml", this.Tenant), model));
        }
Esempio n. 23
0
        public async Task <ActionResult> GetBalanceAsync(string giftCardNumber)
        {
            var meta = await AppUsers.GetCurrentAsync().ConfigureAwait(true);

            decimal result = await GiftCardFunds.GetBalanceAsync(this.Tenant, giftCardNumber, meta.OfficeId).ConfigureAwait(true);

            return(this.Ok(result));
        }
Esempio n. 24
0
        public async Task <ActionResult> IndexAsync()
        {
            var meta = await AppUsers.GetCurrentAsync().ConfigureAwait(true);

            var model = await Items.GetItemsAsync(this.Tenant, meta.OfficeId).ConfigureAwait(true);

            return(this.Ok(model));
        }
Esempio n. 25
0
        public async Task <ActionResult> GetNextTopFeedsAsync(FeedQuery query)
        {
            var meta = await AppUsers.GetCurrentAsync().ConfigureAwait(true);

            var model = await Feeds.GetFeedsAsync(this.Tenant, meta.UserId, query).ConfigureAwait(true);

            return(this.Ok(model));
        }
Esempio n. 26
0
        public async Task <ActionResult> IndexAsync()
        {
            var meta = await AppUsers.GetCurrentAsync().ConfigureAwait(true);

            var model = await FiscalYears.GetFrequencyDatesAsync(this.Tenant, meta.OfficeId).ConfigureAwait(true);

            return(this.FrapidView(this.GetRazorView <AreaRegistration>("Tasks/EOD/Index.cshtml", this.Tenant), model));
        }
Esempio n. 27
0
        public async Task <ActionResult> GetHomeCurrencyAsync()
        {
            var meta = await AppUsers.GetCurrentAsync().ConfigureAwait(true);

            string homeCurrency = await Receipts.GetHomeCurrencyAsync(this.Tenant, meta.OfficeId).ConfigureAwait(true);

            return(this.Ok(homeCurrency));
        }
Esempio n. 28
0
        public async Task <ActionResult> GetCurrenciesAsync()
        {
            var currencies = await Currencies.GetCurrenciesAsync(this.Tenant).ConfigureAwait(true);

            string currencyCode = (await AppUsers.GetCurrentAsync().ConfigureAwait(true)).CurrencyCode;

            var model = currencies.Where(x => x.CurrencyCode != currencyCode).ToList();

            return(this.Ok(model));
        }
Esempio n. 29
0
        public async Task <ActionResult> IndexAsync()
        {
            var meta = await AppUsers.GetCurrentAsync(this.Tenant).ConfigureAwait(true);

            var dates = await Dates.GetFrequencyDatesAsync(this.Tenant, meta.OfficeId).ConfigureAwait(true);

            var model = await OpeningCashTransactions.GetAsync(this.Tenant, meta.UserId, dates.Today).ConfigureAwait(true) ??
                        new OpeningCash();

            return(this.FrapidView(this.GetRazorView <AreaRegistration>("Tasks/OpeningCash/Index.cshtml", this.Tenant), model));
        }
Esempio n. 30
0
        public async Task <ActionResult> GetAsync(JournalViewQuery query)
        {
            var appUser = await AppUsers.GetCurrentAsync().ConfigureAwait(true);

            query.OfficeId = appUser.OfficeId;
            query.UserId   = appUser.UserId;

            var model = await Journals.GetJournalViewAsync(this.Tenant, query).ConfigureAwait(true);

            return(this.Ok(model));
        }