--V&A mostrar diagrama de grantt

This commit is contained in:
2024-04-11 20:03:31 -07:00
parent e48a010b43
commit 61ed328d5d
2 changed files with 723 additions and 520 deletions

View File

@@ -18,6 +18,11 @@
.miGrid { .miGrid {
color: white; color: white;
} }
#chartdiv {
width: 100%;
height: 500px;
}
</style> </style>
</asp:Content> </asp:Content>
@@ -36,55 +41,8 @@
<asp:Content ID="Content4" ContentPlaceHolderID="C" runat="Server"> <asp:Content ID="Content4" ContentPlaceHolderID="C" runat="Server">
<asp:Panel ID="PnlGeneral" runat="server"> <asp:Panel ID="PnlGeneral" runat="server">
<ajax:TabContainer ID="Tab" runat="server" Width="100%" ActiveTabIndex="0">
<%--Calendario Tab--%>
<ajax:TabPanel ID="TabAlta" runat="server" HeaderText="Calendario">
<ContentTemplate>
<div class="portlet solid grey-cascade portlet-filter" id="idnecesaria">
<div class="portlet-title portlet-filterT smalltitle">
<div class="tools">
<asp:Button runat="server" Text="Consultar" class="btn btn-primary" OnClick="Consultar" />
<a href="javascript:;" class="expand"></a>
</div>
<div class="titlefiltros caption">
<div class="row" style="height: 32px;">
<label class="col-md-1">Tipo Vista: </label>
<div class="col-md-2">
<asp:RadioButtonList ID="RBTipoVista" runat="server" AutoPostBack="True" RepeatDirection="Horizontal">
<asp:ListItem Text="Fecha de Salida" Value="fecha" Selected="True" />
<asp:ListItem Text="Duración" Value="duracion" />
</asp:RadioButtonList>
</div>
</div>
</div>
</div>
<div class="portlet-body" style="display: none">
</div>
</div>
<div class="row"> <div class="row">
<div class="col-md-12 col-sm-12"> <div class="col-md-12">
<div class="portlet light calendar ">
<div class="tipo_vista">
<div>
<h4 class="bold ribbon-color-success">&nbsp;</h4>
</div>
</div>
<div class="portlet-body">
<div id="calendar">
</div>
</div>
</div>
</div>
</div>
</ContentTemplate>
</ajax:TabPanel>
<%--Contratos Tab--%>
<ajax:TabPanel ID="TabPanel1" runat="server" HeaderText="Contratos">
<ContentTemplate>
<%-- Filtros --%> <%-- Filtros --%>
<asp:UpdatePanel ID="UPFiltros" runat="server" UpdateMode="Conditional"> <asp:UpdatePanel ID="UPFiltros" runat="server" UpdateMode="Conditional">
<ContentTemplate> <ContentTemplate>
@@ -95,7 +53,6 @@
<asp:Button ID="BtnConsultar" runat="server" Text="Consultar" class="btn btn-primary" OnClick="BtnConsultar_Click" /> <asp:Button ID="BtnConsultar" runat="server" Text="Consultar" class="btn btn-primary" OnClick="BtnConsultar_Click" />
<a href="javascript:;" class="expand"></a> <a href="javascript:;" class="expand"></a>
</div> </div>
<div class="titlefiltros caption"> <div class="titlefiltros caption">
<div class="row" style="height: 32px;"> <div class="row" style="height: 32px;">
<%-- Fecha Inicial --%> <%-- Fecha Inicial --%>
@@ -112,8 +69,7 @@
</span> </span>
</div> </div>
<ajax:MaskedEditExtender ID="MEEFechaI" runat="server" TargetControlID="txtFechaI" <ajax:MaskedEditExtender ID="MEEFechaI" runat="server" TargetControlID="txtFechaI"
Mask="99/99/9999" MaskType="Date" DisplayMoney="Left" AcceptNegative="Left"> Mask="99/99/9999" MaskType="Date" DisplayMoney="Left" AcceptNegative="Left"></ajax:MaskedEditExtender>
</ajax:MaskedEditExtender>
<ajax:CalendarExtender runat="server" ID="Calendario" TargetControlID="txtFechaI" <ajax:CalendarExtender runat="server" ID="Calendario" TargetControlID="txtFechaI"
PopupButtonID="ImgCalendario" PopupPosition="BottomRight" Enabled="True"></ajax:CalendarExtender> PopupButtonID="ImgCalendario" PopupPosition="BottomRight" Enabled="True"></ajax:CalendarExtender>
</div> </div>
@@ -131,8 +87,7 @@
</span> </span>
</div> </div>
<ajax:MaskedEditExtender ID="MEEFechaF" runat="server" TargetControlID="txtFechaF" <ajax:MaskedEditExtender ID="MEEFechaF" runat="server" TargetControlID="txtFechaF"
Mask="99/99/9999" MaskType="Date" DisplayMoney="Left" AcceptNegative="Left"> Mask="99/99/9999" MaskType="Date" DisplayMoney="Left" AcceptNegative="Left"></ajax:MaskedEditExtender>
</ajax:MaskedEditExtender>
<ajax:CalendarExtender runat="server" ID="Calendario2" TargetControlID="txtFechaF" <ajax:CalendarExtender runat="server" ID="Calendario2" TargetControlID="txtFechaF"
PopupButtonID="imgCalendarioF" PopupPosition="BottomRight" Enabled="True"></ajax:CalendarExtender> PopupButtonID="imgCalendarioF" PopupPosition="BottomRight" Enabled="True"></ajax:CalendarExtender>
</div> </div>
@@ -187,6 +142,54 @@
</div> </div>
</ContentTemplate> </ContentTemplate>
</asp:UpdatePanel> </asp:UpdatePanel>
</div>
</div>
<div class="row">
<div class="col-md-12">
<ajax:TabContainer ID="Tab" runat="server" Width="100%" ActiveTabIndex="0">
<%--Calendario Tab--%>
<ajax:TabPanel ID="TabAlta" runat="server" HeaderText="Calendario">
<ContentTemplate>
<div class="portlet solid grey-cascade portlet-filter" id="idnecesaria">
<div class="portlet-title portlet-filterT smalltitle">
<div class="tools">
</div>
<div class="titlefiltros caption">
</div>
<div class="row" style="height: 32px;">
<label class="col-md-1">Tipo Vista: </label>
<div class="col-md-2">
<asp:RadioButtonList ID="RBTipoVista" runat="server" AutoPostBack="True" RepeatDirection="Horizontal">
<asp:ListItem Text="Fecha de Salida" Value="fecha" Selected="True" />
<asp:ListItem Text="Duración" Value="duracion" />
</asp:RadioButtonList>
</div>
</div>
</div>
<div class="portlet-body" style="display: none">
</div>
</div>
<div class="row">
<div class="col-md-12 col-sm-12">
<div class="portlet light calendar ">
<div class="tipo_vista">
<div>
<h4 class="bold ribbon-color-success">&nbsp;</h4>
</div>
</div>
<div class="portlet-body">
<div id="calendar">
</div>
</div>
</div>
</div>
</div>
</ContentTemplate>
</ajax:TabPanel>
<%--Contratos Tab--%>
<ajax:TabPanel ID="TabPanel1" runat="server" HeaderText="Contratos">
<ContentTemplate>
<%-- Contratos --%> <%-- Contratos --%>
<asp:UpdatePanel ID="UpTitulos" runat="server" UpdateMode="Conditional"> <asp:UpdatePanel ID="UpTitulos" runat="server" UpdateMode="Conditional">
<ContentTemplate> <ContentTemplate>
@@ -206,6 +209,7 @@
<HeaderTemplate> <HeaderTemplate>
Fecha<br /> Fecha<br />
Salida Salida
</HeaderTemplate> </HeaderTemplate>
<ItemTemplate> <ItemTemplate>
<asp:Literal ID="LtlFechaI" runat="server" Text='<%# Eval("FechaInicial", "{0:dd/MM/yyyy HH:mm}") %>'></asp:Literal> <asp:Literal ID="LtlFechaI" runat="server" Text='<%# Eval("FechaInicial", "{0:dd/MM/yyyy HH:mm}") %>'></asp:Literal>
@@ -246,13 +250,14 @@
<HeaderTemplate> <HeaderTemplate>
Fecha<br /> Fecha<br />
Regreso Regreso
</HeaderTemplate> </HeaderTemplate>
<ItemTemplate> <ItemTemplate>
<asp:Literal ID="LtlFechaFinal" runat="server" Text='<%# Eval("FechaFinal", "{0:d}") %>'></asp:Literal> <asp:Literal ID="LtlFechaFinal" runat="server" Text='<%# Eval("FechaFinal", "{0:d}") %>'></asp:Literal>
</ItemTemplate> </ItemTemplate>
</asp:TemplateField> </asp:TemplateField>
<asp:TemplateField HeaderText="Estatus" > <asp:TemplateField HeaderText="Estatus">
<ItemTemplate> <ItemTemplate>
<asp:Label ID="LtlContrato" runat="server" Text='<%# Eval("ContratoEstatus") %>'> <asp:Label ID="LtlContrato" runat="server" Text='<%# Eval("ContratoEstatus") %>'>
</asp:Label> </asp:Label>
@@ -271,7 +276,29 @@
</asp:UpdatePanel> </asp:UpdatePanel>
</ContentTemplate> </ContentTemplate>
</ajax:TabPanel> </ajax:TabPanel>
<%--Calendario Tab--%>
<ajax:TabPanel ID="TabGrantt" runat="server" HeaderText="Cronograma">
<ContentTemplate>
<div class="row">
<div class="col-md-12 col-sm-12">
<div class="portlet light calendar ">
<div class="tipo_vista">
<div>
<h4 class="bold ribbon-color-success">&nbsp;</h4>
</div>
</div>
<div class="portlet-body">
<div id="chartdiv">
</div>
</div>
</div>
</div>
</div>
</ContentTemplate>
</ajax:TabPanel>
</ajax:TabContainer> </ajax:TabContainer>
</div>
</div>
</asp:Panel> </asp:Panel>
<%-- Modal --%> <%-- Modal --%>
<div id="ModalActualizar" class="modal ADS fade" role="dialog"> <div id="ModalActualizar" class="modal ADS fade" role="dialog">
@@ -314,7 +341,7 @@
<label class="col-md-4">Servicio:</label> <label class="col-md-4">Servicio:</label>
<div class="col-md-8"> <div class="col-md-8">
<asp:TextBox ID="TxtDescripcion" runat="server" Width="100%" TextMode="MultiLine" <asp:TextBox ID="TxtDescripcion" runat="server" Width="100%" TextMode="MultiLine"
Rows="2" ></asp:TextBox> Rows="2"></asp:TextBox>
</div> </div>
</div> </div>
@@ -322,7 +349,7 @@
<label class="col-md-4">Observaciones:</label> <label class="col-md-4">Observaciones:</label>
<div class="col-md-8"> <div class="col-md-8">
<asp:TextBox ID="TxtObservaciones" runat="server" Width="100%" TextMode="MultiLine" <asp:TextBox ID="TxtObservaciones" runat="server" Width="100%" TextMode="MultiLine"
Rows="2" ></asp:TextBox> Rows="2"></asp:TextBox>
</div> </div>
</div> </div>
@@ -454,7 +481,148 @@
</asp:Content> </asp:Content>
<asp:Content ID="Content5" ContentPlaceHolderID="JS" runat="Server"> <asp:Content ID="Content5" ContentPlaceHolderID="JS" runat="Server">
<script src="https://cdn.amcharts.com/lib/5/index.js"></script>
<script src="https://cdn.amcharts.com/lib/5/xy.js"></script>
<script src="https://cdn.amcharts.com/lib/5/themes/Animated.js"></script>
<script> <script>
function cargaDiagramaGrant(data, categorias) {
am5.ready(function () {
// Create root element
// https://www.amcharts.com/docs/v5/getting-started/#Root_element
var root = am5.Root.new("chartdiv");
root.dateFormatter.setAll({
dateFormat: "dd/MM/yyyy HH:mm",
dateFields: ["valueX", "openValueX"]
});
var am5locales_es_ES = {
"Jan": "Enero",
"Feb": "Febrero",
"Mar": "Marzo",
"Apr": "Abril",
"May": "Mayo",
"Jun": "Junio",
"Jul": "Julio",
"Aug": "Agosto",
"Sep": "Septiembre",
"Oct": "Octubre",
"Nov": "Noviembre",
"Dec": "Diciembre",
"January": "Enero",
"February": "Febrero",
"March": "Marzo",
"April": "Abril",
"May": "Mayo",
"June": "Junio",
"July": "Julio",
"August": "Agosto",
"September": "Septiembre",
"October": "Octubre",
"November": "Noviembre",
"December": "Diciembre",
}
//root.language.setTranslationsAny({
// "January!": "¡Hola!",
// "Bye": "Adios"
//});
root.locale = am5locales_es_ES;
// Set themes
// https://www.amcharts.com/docs/v5/concepts/themes/
root.setThemes([
am5themes_Animated.new(root)
]);
// Create chart
// https://www.amcharts.com/docs/v5/charts/xy-chart/
var chart = root.container.children.push(am5xy.XYChart.new(root, {
panX: false,
panY: false,
wheelX: "panX",
wheelY: "zoomX",
layout: root.verticalLayout,
paddingLeft: 0
}));
// Add legend
// https://www.amcharts.com/docs/v5/charts/xy-chart/legend-xy-series/
var legend = chart.children.push(am5.Legend.new(root, {
centerX: am5.p50,
x: am5.p50
}))
var colors = chart.get("colors");
// Create axes
// https://www.amcharts.com/docs/v5/charts/xy-chart/axes/
var yAxis = chart.yAxes.push(
am5xy.CategoryAxis.new(root, {
categoryField: "category",
renderer: am5xy.AxisRendererY.new(root, {
inversed: true,
minorGridEnabled: true
}),
tooltip: am5.Tooltip.new(root, {
themeTags: ["axis"],
animationDuration: 200
})
})
);
yAxis.data.setAll(categorias);
var xAxis = chart.xAxes.push(
am5xy.DateAxis.new(root, {
baseInterval: { timeUnit: "minute", count: 1 },
renderer: am5xy.AxisRendererX.new(root, {
minorGridEnabled: true,
minGridDistance: 90
})
})
);
// Add series
// https://www.amcharts.com/docs/v5/charts/xy-chart/series/
var series = chart.series.push(am5xy.ColumnSeries.new(root, {
xAxis: xAxis,
yAxis: yAxis,
openValueXField: "fromDate",
valueXField: "toDate",
categoryYField: "category",
sequencedInterpolation: true
}));
series.columns.template.setAll({
templateField: "columnSettings",
strokeOpacity: 0,
tooltipText: "{category}: {openValueX} - {valueX}"
});
series.data.processor = am5.DataProcessor.new(root, {
dateFields: ["fromDate", "toDate"],
dateFormat: "yyyy-MM-dd HH:mm"
});
series.data.setAll(data);
// Add scrollbars
chart.set("scrollbarX", am5.Scrollbar.new(root, {
orientation: "horizontal"
}));
// Make stuff animate on load
// https://www.amcharts.com/docs/v5/concepts/animations/
series.appear();
chart.appear(1000, 100);
}); // end am5.ready()
}
var PrimeraCargaCalendario = true; var PrimeraCargaCalendario = true;
var currentUpdateEvent; var currentUpdateEvent;
var addStartDate; var addStartDate;

View File

@@ -5,6 +5,8 @@ Imports ADSNetLibrary.SIGAPI.Helpers
Imports Extensiones.ModExtensiones Imports Extensiones.ModExtensiones
Imports GemBox.Spreadsheet Imports GemBox.Spreadsheet
Imports Microsoft.Reporting.WebForms Imports Microsoft.Reporting.WebForms
Imports Newtonsoft.Json.Linq
Partial Class RepContratosCalendario Partial Class RepContratosCalendario
Inherits ClsPaginas Inherits ClsPaginas
@@ -29,8 +31,6 @@ Partial Class RepContratosCalendario
#End Region #End Region
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then If Not IsPostBack Then
txtFechaI.Text = DateTime.Now.AddMonths(-1).ToShortDateString txtFechaI.Text = DateTime.Now.AddMonths(-1).ToShortDateString
txtFechaF.Text = DateTime.Now.AddDays(7).ToShortDateString txtFechaF.Text = DateTime.Now.AddDays(7).ToShortDateString
@@ -39,7 +39,6 @@ Partial Class RepContratosCalendario
CargaDatos() CargaDatos()
End If End If
InicializaCalendar() InicializaCalendar()
End Sub End Sub
Private Sub CargaDatos() Private Sub CargaDatos()
Dim ObjContratos As New ClsContratos Dim ObjContratos As New ClsContratos
@@ -49,16 +48,56 @@ Partial Class RepContratosCalendario
If CveCliente = 0 Then CveCliente = -1 If CveCliente = 0 Then CveCliente = -1
If ObjContratos.GetContratosReporte(UsuarioActual.CveEmpresa, txtFechaI.Text.ToDate, txtFechaF.Text.ToDate, DdlCliente.SelectedValue.ToEntero, CveSubProyecto:=DdlSubProyectos.SelectedValue.ToEntero, CveEstatus:=DdlEstatusConsulta.SelectedValue.ToEntero, CveTipoContrato:=34) Then If ObjContratos.GetContratosReporte(UsuarioActual.CveEmpresa, txtFechaI.Text.ToDate, txtFechaF.Text.ToDate, DdlCliente.SelectedValue.ToEntero, CveSubProyecto:=DdlSubProyectos.SelectedValue.ToEntero, CveEstatus:=DdlEstatusConsulta.SelectedValue.ToEntero, CveTipoContrato:=34) Then
GvContratos.DataSource = ObjContratos.DtResultados DtAvance = ObjContratos.DtResultados.Copy()
End If End If
DtAvance = ObjContratos.DtResultados GvContratos.DataSource = DtAvance
ObjContratos.Dispose() ObjContratos.Dispose()
GvContratos.DataBind() GvContratos.DataBind()
UpTitulos.Update() UpTitulos.Update()
CargaCronograma()
End Sub
Private Sub CargaCronograma()
If DtAvance IsNot Nothing Then
For Each Row As DataRow In DtAvance.Rows
If String.IsNullOrEmpty(Row("NombreAF").ToString()) Then
Row("NombreAF") = "Unidad no asignada"
End If
Next
Dim jsonData As New JArray()
Dim jsonCategorias As New JArray()
Dim random = New Random()
'DATOS
For Each Row As DataRow In DtAvance.FiltraParametros("NombreAF <> ''").Rows
Dim obj As New JObject(
New JProperty("category", Row("NombreAF")),
New JProperty("fromDate", Row("FechaInicial").ToString().ToDateTime().ToString("dd/MM/yyyy HH:mm").ToDateTime()),
New JProperty("toDate", Row("FechaFinal").ToString().ToDateTime().ToString("dd/MM/yyyy HH:mm").ToDateTime()),
New JProperty("columnSettings", New JObject(
New JProperty("fill", String.Format("#{0:X6}", random.Next(16777216)))
))
)
jsonData.Add(obj)
Next
'CATEGORIAS
For Each Row As DataRow In DtAvance.FiltraParametros("NombreAF <> ''", "", {"NombreAF"}).Rows
Dim obj As New JObject(
New JProperty("category", Row("NombreAF"))
)
jsonCategorias.Add(obj)
Next
RegistraScript($"cargaDiagramaGrant({jsonData.ToString()},{jsonCategorias.ToString()});", "A1")
End If
End Sub End Sub
Private Sub InicializaCalendar() Private Sub InicializaCalendar()
RegistraScript("InitCalendar();") RegistraScript("InitCalendar();")
DirectCast(Master.FindControl("TSM"), ScriptManager).EnablePageMethods = True DirectCast(Master.FindControl("TSM"), ScriptManager).EnablePageMethods = True
End Sub End Sub
@@ -158,10 +197,6 @@ Partial Class RepContratosCalendario
UpModal.Update() UpModal.Update()
RegistraScript("$('#ModalActualizar').modal('show');") RegistraScript("$('#ModalActualizar').modal('show');")
End Sub End Sub
Protected Sub Consultar(sender As Object, e As EventArgs)
End Sub
Protected Sub LnkExcel_Click(sender As Object, e As EventArgs) Handles LnkExcel.Click Protected Sub LnkExcel_Click(sender As Object, e As EventArgs) Handles LnkExcel.Click
GvContratos.ExportToExcel("ReporteCompras" & NowADS().ToShortDateString) GvContratos.ExportToExcel("ReporteCompras" & NowADS().ToShortDateString)
End Sub End Sub