-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathInformesCN.cs
130 lines (105 loc) · 4.93 KB
/
InformesCN.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using MSDNVideo.Comun;
using MSDNVideo.AccesoDatos;
using System.Security.Permissions;
namespace MSDNVideo.LogicaNegocio
{
/// <summary>
/// Lógica de negocio asociada a Informes
/// </summary>
public class InformesCN
{
#region Informe saldos
/// <summary>
/// Obtiene un informe con el estado de los saldos de socios
/// Seguridad: Administradores
/// </summary>
/// <param name="saludInforme">Estimación positiva, negativa o neutra de los resultados del informe</param>
/// <returns>Lista con los datos del informe</returns>
[PrincipalPermission(SecurityAction.Demand, Authenticated = true, Role = "Admin")]
public BindingList<InformeSaldos> ObtenerInformeSaldos(out SaludInforme saludInforme)
{
InformesAD informesAD = new InformesAD();
BindingList<InformeSaldos> informeSaldos;
informeSaldos = informesAD.ObtenerInformeSaldos();
// Calculamos salud informe
decimal saldosTotales, saldosBajos;
decimal porcentajeSaldosBajos;
saldosTotales = (from informeSaldo in informeSaldos select informeSaldo.Saldo).Sum();
saldosBajos = (from informeSaldo in informeSaldos where informeSaldo.Saldo < 10 select informeSaldo.Saldo).Sum();
porcentajeSaldosBajos = 100 * saldosBajos / saldosTotales;
if (porcentajeSaldosBajos > 60)
saludInforme = SaludInforme.Positivo;
else if(porcentajeSaldosBajos > 40)
saludInforme = SaludInforme.Neutro;
else
saludInforme = SaludInforme.Negativo;
return informeSaldos;
}
#endregion
#region Informe de Stock
/// <summary>
/// Obtiene un informe con el estado de las existencias de películas
/// Seguridad: Administradores
/// </summary>
/// <param name="saludInforme">Estimación positiva, negativa o neutra de los resultados del informe</param>
/// <returns>Lista con los datos del informe</returns>
[PrincipalPermission(SecurityAction.Demand, Authenticated = true, Role = "Admin")]
public BindingList<InformeStock> ObtenerInformeStock(out SaludInforme saludInforme)
{
InformesAD informesAD = new InformesAD();
BindingList<InformeStock> informeStocks;
informeStocks = informesAD.ObtenerInformeStock();
// Calculamos salud informe
int peliculasTotales, peliculasStockBajo;
int porcentajeStockBajo;
peliculasTotales = (from informeStock in informeStocks select informeStock.NumPeliculas).Sum();
peliculasStockBajo = (from informeStock in informeStocks where informeStock.Unidades <= 2 select informeStock.NumPeliculas).Sum();
porcentajeStockBajo = 100 * peliculasStockBajo / peliculasTotales;
if (porcentajeStockBajo > 30)
saludInforme = SaludInforme.Negativo;
else if (porcentajeStockBajo > 15)
saludInforme = SaludInforme.Neutro;
else
saludInforme = SaludInforme.Positivo;
return informeStocks;
}
#endregion
#region Informe de Ventas
/// <summary>
/// Obtiene un informe con el estado de las ventas por día
/// Seguridad: Administradores
/// </summary>
/// <param name="saludInforme">Estimación positiva, negativa o neutra de los resultados del informe</param>
/// <returns>Lista con los datos del informe</returns>
[PrincipalPermission(SecurityAction.Demand, Authenticated = true, Role = "Admin")]
public BindingList<InformeVentas> ObtenerInformeVentas(out SaludInforme saludInforme)
{
InformesAD informesAD = new InformesAD();
BindingList<InformeVentas> informeVentas;
informeVentas = informesAD.ObtenerInformeVentas();
// Calculamos salud informe
decimal ventasMedias;
decimal menorVenta;
decimal porcentajeDesvioMedia;
ventasMedias = (from informeVenta in informeVentas select (informeVenta.Ventas + informeVenta.Alquileres)).Sum() / 7;
if (informeVentas.Count < 7)
menorVenta = 0;
else
menorVenta = (from informeVenta in informeVentas select (informeVenta.Ventas + informeVenta.Alquileres)).Min();
porcentajeDesvioMedia = 100 * menorVenta / ventasMedias;
if (porcentajeDesvioMedia > 70)
saludInforme = SaludInforme.Positivo;
else if (porcentajeDesvioMedia > 50)
saludInforme = SaludInforme.Neutro;
else
saludInforme = SaludInforme.Negativo;
return informeVentas;
}
#endregion
}
}