Files
everything2/EveryThing/Pages/Index.cshtml.cs
David Štaleker 03b92525d7 Prvi commit
2023-05-12 09:00:07 +02:00

273 lines
13 KiB
C#

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Threading.Tasks;
using EveryThing.Data;
using EveryThing.Models;
using EveryThing.Models.Project;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Logging;
namespace EveryThing.Pages
{
[Authorize]
public class IndexModel : PageModel
{
private readonly ILogger<IndexModel> _logger;
private readonly ApplicationDbContext _context;
private readonly UserManager<IdentityApplicationUser> _userManager;
private readonly SignInManager<IdentityApplicationUser> _loginManager;
private readonly RoleManager<IdentityApplicationRole> _roleManager;
public IndexModel(ApplicationDbContext context, UserManager<IdentityApplicationUser> userManager, SignInManager<IdentityApplicationUser> loginManager, RoleManager<IdentityApplicationRole> roleManager)
{
_context = context;
_userManager = userManager;
_loginManager = loginManager;
_roleManager = roleManager;
}
public string Year { get; set; }
public IActionResult OnGet(string year)
{
//_logger.LogInformation("Index");
Year = year;
Year ??= DateTime.Now.Year.ToString();
ViewData["Years"] = new SelectList(Enumerable.Range(2022, (DateTime.Now.Year - 2022) + 2));
return Page();
}
public IActionResult OnGetData(int year)
{
var user = _userManager.GetUserAsync(User).Result;
var dateMonthFrom = new DateTime(DateTime.Now.AddDays(-31).Year, DateTime.Now.AddDays(-31).Month, DateTime.Now.AddDays(-31).Day, 0, 0, 0);
var dateMonthTo = new DateTime(DateTime.Now.AddDays(-1).Year, DateTime.Now.AddDays(-1).Month, DateTime.Now.AddDays(-1).Day, 23, 59, 59);
var xAxisMonth = Enumerable.Range(0, 1 + dateMonthTo.Subtract(dateMonthFrom).Days)
.Select(offset => dateMonthFrom.AddDays(offset))
.OrderBy(x => x)
.Select(x => x.ToString("dd.MM.yy"))
.Distinct()
.ToList();
var projectPartItemsMonth = _context.ProjectPartItems
.Include(x => x.ProjectPart)
.ThenInclude(x => x.Project)
.Where(x => x.ProjectPart.Project.IdCompanyFk == user.IdCompanyFk && x.ShippingDate >= dateMonthFrom && x.ShippingDate <= dateMonthTo)
.ToList();
//Neka fora z chart JS da ne pozicionira prav ce ni nastavjleno y=0 za prazne
//var month = new
//{
// xAxis = xAxisMonth,
// diferenceInPrice = projectPartItemsMonth
// .GroupBy(x => new DateTime(((DateTime)x.ShippingDate).Year, ((DateTime)x.ShippingDate).Month, ((DateTime)x.ShippingDate).Day))
// .Select(x => new { x = x.Key.ToString("dd.MM.yy"), y = x.Sum(y => y.DifferenceInPriceValue) }),
// sales = projectPartItemsMonth
// .GroupBy(x => new DateTime(((DateTime)x.ShippingDate).Year, ((DateTime)x.ShippingDate).Month, ((DateTime)x.ShippingDate).Day))
// .Select(x => new { x = x.Key.ToString("dd.MM.yy"), y = x.Sum(y => y.SellingValue) }),
// expenses = projectPartItemsMonth
// .GroupBy(x => new DateTime(((DateTime)x.ShippingDate).Year, ((DateTime)x.ShippingDate).Month, ((DateTime)x.ShippingDate).Day))
// .Select(x => new { x = x.Key.ToString("dd.MM.yy"), y = x.Sum(y => y.MaterialValue + y.WorkValue) })
//};
var dicDiferenceInPriceMonth = new Dictionary<string, double>();
var dicSalesMonth = new Dictionary<string, double>();
var dicExpensesMonth = new Dictionary<string, double>();
xAxisMonth.ForEach(x =>
{
dicDiferenceInPriceMonth[x] = 0;
dicSalesMonth[x] = 0;
dicExpensesMonth[x] = 0;
});
foreach (var day in projectPartItemsMonth
.GroupBy(x => new DateTime(((DateTime)x.ShippingDate).Year, ((DateTime)x.ShippingDate).Month, ((DateTime)x.ShippingDate).Day))
.OrderBy(x => x.Key))
{
var x = day.Key.ToString("dd.MM.yy");
dicDiferenceInPriceMonth[x] = day.Sum(x => x.DifferenceInPriceValue);
dicSalesMonth[x] = day.Sum(x => x.SellingValue);
dicExpensesMonth[x] = day.Sum(x => x.WorkValue + x.MaterialValue);
}
var month = new
{
xAxis = xAxisMonth,
diferenceInPrice = dicDiferenceInPriceMonth.Select(x => new {x = x.Key, y = Math.Round(x.Value, 2) }),
sales = dicSalesMonth.Select(x => new {x = x.Key, y = Math.Round(x.Value, 2) }),
expenses = dicExpensesMonth.Select(x => new {x = x.Key, y = Math.Round(x.Value, 2) }),
};
//Leto
var dateYearTo = new DateTime(year, 12, 31, 23, 59, 59);
var dateYearFrom = new DateTime(year, 1, 1, 1, 0, 0, 0);
var xAxisYear = Enumerable.Range(0, 1 + dateYearTo.Subtract(dateYearFrom).Days)
.Select(offset => dateYearFrom.AddDays(offset))
.OrderBy(x => x)
.Select(x => x.ToString("MM.yy"))
.Distinct()
.ToList();
var projectPartItemsYear = _context.ProjectPartItems
.Include(x => x.ProjectPart)
.ThenInclude(x => x.Project)
.Where(x => x.ProjectPart.Project.IdCompanyFk == user.IdCompanyFk && x.ShippingDate >= dateYearFrom && x.ShippingDate <= dateYearTo)
.ToList();
//Neka fora z chart JS da ne pozicionira prav ce ni nastavjleno y=0 za prazne
//var month = new
//{
// xAxis = xAxisMonth,
// diferenceInPrice = projectPartItemsMonth
// .GroupBy(x => new DateTime(((DateTime)x.ShippingDate).Year, ((DateTime)x.ShippingDate).Month, ((DateTime)x.ShippingDate).Day))
// .Select(x => new { x = x.Key.ToString("dd.MM.yy"), y = x.Sum(y => y.DifferenceInPriceValue) }),
// sales = projectPartItemsMonth
// .GroupBy(x => new DateTime(((DateTime)x.ShippingDate).Year, ((DateTime)x.ShippingDate).Month, ((DateTime)x.ShippingDate).Day))
// .Select(x => new { x = x.Key.ToString("dd.MM.yy"), y = x.Sum(y => y.SellingValue) }),
// expenses = projectPartItemsMonth
// .GroupBy(x => new DateTime(((DateTime)x.ShippingDate).Year, ((DateTime)x.ShippingDate).Month, ((DateTime)x.ShippingDate).Day))
// .Select(x => new { x = x.Key.ToString("dd.MM.yy"), y = x.Sum(y => y.MaterialValue + y.WorkValue) })
//};
var dicDiferenceInPriceYear = new Dictionary<string, double>();
var dicSalesYear = new Dictionary<string, double>();
var dicExpensesYear = new Dictionary<string, double>();
xAxisYear.ForEach(x =>
{
dicDiferenceInPriceYear[x] = 0;
dicSalesYear[x] = 0;
dicExpensesYear[x] = 0;
});
foreach (var day in projectPartItemsYear
.GroupBy(x => new DateTime(((DateTime)x.ShippingDate).Year, ((DateTime)x.ShippingDate).Month, ((DateTime)x.ShippingDate).Day))
.OrderBy(x => x.Key))
{
var x = day.Key.ToString("MM.yy");
dicDiferenceInPriceYear[x] = day.Sum(x => x.DifferenceInPriceValue);
dicSalesYear[x] = day.Sum(x => x.SellingValue);
dicExpensesYear[x] = day.Sum(x => x.WorkValue + x.MaterialValue);
}
var yearData = new
{
xAxis = xAxisYear,
diferenceInPrice = dicDiferenceInPriceYear.Select(x => new { x = x.Key, y = Math.Round(x.Value, 2) }),
sales = dicSalesYear.Select(x => new { x = x.Key, y = Math.Round(x.Value, 2) }),
expenses = dicExpensesYear.Select(x => new { x = x.Key, y = Math.Round(x.Value, 2) }),
};
//Zgornji napisi - labels
var dateLabelsFrom = new DateTime(DateTime.Now.AddDays(-31).Year, DateTime.Now.AddDays(-31).Month, DateTime.Now.AddDays(-31).Day, 0, 0, 0);
var dateLabelsTo = new DateTime(DateTime.Now.AddDays(-1).Year, DateTime.Now.AddDays(-1).Month, DateTime.Now.AddDays(-1).Day, 23, 59, 59);
var projectPartItemsLabels = _context.ProjectPartItems
.Include(x => x.ProjectPart)
.ThenInclude(x => x.Project)
.Where(x => x.ProjectPart.Project.IdCompanyFk == user.IdCompanyFk && x.ShippingDate >= dateLabelsFrom && x.ShippingDate <= dateLabelsTo)
.ToList();
var labels = new
{
diferenceInPrice = Math.Round(projectPartItemsLabels.Sum(x => x.DifferenceInPriceValue),2).ToString("#,###,##0.00", new CultureInfo("sl-SI")),
sales = Math.Round(projectPartItemsLabels.Sum(x => x.SellingValue), 2).ToString("#,###,##0.00", new CultureInfo("sl-SI")),
expenses = Math.Round(projectPartItemsLabels.Sum(x => x.WorkValue + x.MaterialValue), 2).ToString("#,###,##0.00", new CultureInfo("sl-SI")),
activeProjects = _context.Projects.Count(x => x.IdCompanyFk == user.IdCompanyFk && x.Status != ProjectStatus.Finished)
};
//Graf po partnerjih preteklo leto
var datePartnersYearTo = new DateTime(year, 12, 31, 23, 59, 59);
var datePartnersYearFrom = new DateTime(year, 1, 1, 1, 0, 0, 0);
var projectPartItemsPartnersYear = _context.ProjectPartItems
.Include(x => x.ProjectPart)
.ThenInclude(x => x.Project)
.ThenInclude(x => x.Partner)
.Where(x => x.ProjectPart.Project.IdCompanyFk == user.IdCompanyFk && x.ShippingDate >= datePartnersYearFrom && x.ShippingDate <= datePartnersYearTo)
.ToList();
var diferenceInPricePartnersYear = new List<dynamic>();
var salesPartnersYear = new List<dynamic>();
var expensesPartnersYear = new List<dynamic>();
var xAxisPartnersYear = new List<string>();
foreach (var partner in projectPartItemsPartnersYear
.GroupBy(x => x.ProjectPart.Project.Partner.Title)
.OrderBy(x => x.Key))
{
var x = partner.Key;
if (x.Length > 20)
x = x.Substring(0, 20);
xAxisPartnersYear.Add(x);
diferenceInPricePartnersYear.Add(new {x = x, y = Math.Round(partner.Sum(x => x.DifferenceInPriceValue))});
salesPartnersYear.Add(new {x = x, y = Math.Round(partner.Sum(x => x.SellingValue))});
expensesPartnersYear.Add(new {x = x, y = Math.Round(partner.Sum(x => x.WorkValue+ x.MaterialValue))});
}
var partnersYear = new
{
xAxis = xAxisPartnersYear,
diferenceInPrice = diferenceInPricePartnersYear,
sales = salesPartnersYear,
expenses = expensesPartnersYear,
};
//Graf po projetkih preteklo leto
var dateProjectsYearTo = new DateTime(year, 12, 31, 23, 59, 59);
var dateProjectsYearFrom = new DateTime(year, 1, 1, 1, 0, 0, 0);
var projectPartItemsProjectsYear = _context.ProjectPartItems
.Include(x => x.ProjectPart)
.ThenInclude(x => x.Project)
.Where(x => x.ProjectPart.Project.IdCompanyFk == user.IdCompanyFk && x.ShippingDate >= dateProjectsYearFrom && x.ShippingDate <= dateProjectsYearTo)
.ToList();
var diferenceInPriceProjectsYear = new List<dynamic>();
var salesProjectsYear = new List<dynamic>();
var expensesProjectsYear = new List<dynamic>();
var xAxisProjectsYear = new List<string>();
foreach (var partner in projectPartItemsProjectsYear
.GroupBy(x => x.ProjectPart.Project.Title)
.OrderBy(x => x.Key))
{
var x = partner.Key;
if (x.Length > 20)
x = x.Substring(0, 20);
xAxisProjectsYear.Add(x);
diferenceInPriceProjectsYear.Add(new { x = x, y = Math.Round(partner.Sum(x => x.DifferenceInPriceValue)) });
salesProjectsYear.Add(new { x = x, y = Math.Round(partner.Sum(x => x.SellingValue)) });
expensesProjectsYear.Add(new { x = x, y = Math.Round(partner.Sum(x => x.WorkValue + x.MaterialValue)) });
}
var projectsYear = new
{
xAxis = xAxisProjectsYear,
diferenceInPrice = diferenceInPriceProjectsYear,
sales = salesProjectsYear,
expenses = expensesProjectsYear,
};
var data = new { month, year = yearData, labels, partnersYear, projectsYear };
return new JsonResult(new { data, error = "", successful = true });
}
}
}