273 lines
13 KiB
C#
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 });
|
|
}
|
|
}
|
|
}
|