This commit is contained in:
2024-10-14 17:51:55 -07:00
4 changed files with 659 additions and 136 deletions

View File

@@ -7753,25 +7753,23 @@ Partial Class OC_OC
TxtRetIVA.Text = TxtRetIVA.Text.FormatoNumero TxtRetIVA.Text = TxtRetIVA.Text.FormatoNumero
HdnRetIVA.Value = TxtRetIVA.Text HdnRetIVA.Value = TxtRetIVA.Text
Dim Porcentaje As Decimal = TxtRetIVA.Text.ToDecimal / DtDetalle.SUMD("Total") Dim IvaTotal As Decimal = DtDetalle.FiltraParametros("IVA > 0").SUMD("Total")
Dim Porcentaje As Decimal = TxtRetIVA.Text.ToDecimal / IvaTotal
Dim LastDr As DataRow = Nothing Dim LastDr As DataRow = Nothing
For Each Dr As DataRow In DtDetalle.Rows For Each Dr As DataRow In DtDetalle.Rows
'Dr("RetIVA") = (Math.Truncate((Dr("Total").ToString.ToDecimal * Porcentaje) * 100)) / 100
Dr("RetIVA") = Math.Round((Dr("Total").ToString.ToDecimal * Porcentaje), 2)
'Dr("RetIVA") = Math.Round((Dr("Cantidad").ToString.ToDecimal * Dr("Importe").ToString.ToDecimal * Porcentaje), 2)
Dr("RetIVAPorcentaje") = Porcentaje
' Tipo Dato '0' es Cuando es Nuevo, '1' para editar y '2' viene de la BD
Dr("TipoDato") = If(Dr("TipoDato").ToString.ToEntero = 0, 0, 1)
LastDr = Dr
Next
'If Not IsNothing(LastDr) Then
' Dim Fdes As Decimal = TxtRetIVA.Text.ToDecimal - DtDetalle.SUM("RetIVA").ToString.ToDecimal
' If Fdes > 0 Then
' LastDr("RetIVA") = LastDr("RetIVA").ToString.ToDecimal + Fdes
' End If
'End If
'Alert(String.Format("Descuento:{0}", DtDetalle.SUM("Descuento"))) If Dr("IVA").ToString.ToDecimal > 0 Then
'Dr("RetIVA") = (Math.Truncate((Dr("Total").ToString.ToDecimal * Porcentaje) * 100)) / 100
Dr("RetIVA") = Math.Round((Dr("Total").ToString.ToDecimal * Porcentaje), 2)
'Dr("RetIVA") = Math.Round((Dr("Cantidad").ToString.ToDecimal * Dr("Importe").ToString.ToDecimal * Porcentaje), 2)
Dr("RetIVAPorcentaje") = Porcentaje
' Tipo Dato '0' es Cuando es Nuevo, '1' para editar y '2' viene de la BD
Dr("TipoDato") = If(Dr("TipoDato").ToString.ToEntero = 0, 0, 1)
LastDr = Dr
End If
Next
CalculaGenerales() CalculaGenerales()

View File

@@ -1,31 +1,38 @@
<%@ Page Title="Transportes V&A - Calendario" Language="VB" MasterPageFile="~/Site.master" <%@ Page Title="Transportes V&A - Calendario" Language="VB" MasterPageFile="~/Site.master" EnableEventValidation="false"
AutoEventWireup="false" CodeFile="RepContratosCalendario.aspx.vb" Inherits="RepContratosCalendario" %> AutoEventWireup="false" CodeFile="RepContratosCalendario.aspx.vb" Inherits="RepContratosCalendario" %>
<%@ Register Assembly="TimePicker" Namespace="MKB.TimePicker" TagPrefix="cc1" %> <%@ Register Assembly="TimePicker" Namespace="MKB.TimePicker" TagPrefix="cc1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="Css" runat="Server"> <asp:Content ID="Content1" ContentPlaceHolderID="Css" runat="Server">
<style type="text/css"> <style type="text/css">
/* #chartdiv {
width: 100%;
height: 100%;
} */
/*
.tipo_vista { .tipo_vista {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 2rem; gap: 2rem;
} }*/
.my-1 { .my-1 {
margin-block: 1rem; margin-block: 1rem;
} }
.miGrid { /* .miGrid {
color: white; color: white;
} }*/
/*
#chartdiv { #chartdiv {
width: 100%; width: 100%;
height: 600px; height: 600px;
} }*/
.fc-month-view .fc-day { /* .fc-month-view .fc-day {
border-left: 4px solid #464646; border-left: 4px solid #464646;
border-right: 4px solid #464646 border-right: 4px solid #464646
} }
@@ -36,7 +43,7 @@
} }
.fc-month-view .fc-row.fc-week.fc-widget-content:last-of-type { .fc-month-view .fc-row.fc-week.fc-widget-content:last-of-type {
border-bottom: 4px solid #464646!important; border-bottom: 4px solid #464646!important;
} } */
@@ -53,7 +60,7 @@
<style> <style>
.gantt-samples-banner_controls_bar.controls_bar { .gantt-samples-banner_controls_bar.controls_bar {
margin: 0; margin: 0;
//position: absolute; /*position: absolute;*/
top: -30px; top: -30px;
width: 100%; width: 100%;
right: 0; right: 0;
@@ -83,11 +90,21 @@
} }
#gantt_here { #gantt_here {
scroll-behavior: smooth; /* Aplica un desplazamiento suave */
overflow-y: auto; /* Asegura que el desplazamiento vertical esté activo */ width: 100%; /* El ancho será el 100% del contenedor padre */
} height: 400px; /* Puedes ajustar esta altura según necesites */
border: 1px solid #ccc; /* Opcional: Un borde para visualizar mejor el área del Gantt */
box-sizing: border-box; /* Asegura que el padding y el borde no afecten el tamaño total */
}
.gantt_parent_task {
background-color: #ffcccc !important; /* Color para las tareas principales */
}
.gantt_child_task {
background-color: #cce5ff !important; /* Color para las sub-tareas */
}
</style> </style>
<link rel="stylesheet" href="/Metronic/assets/global/plugins/dhtmlxgantt/dhtmlxgantt.css" type="text/css"> <link rel="stylesheet" href="/Metronic/assets/global/plugins/dhtmlxgantt/dhtmlxgantt.css" type="text/css">
@@ -99,12 +116,21 @@
</asp:Content> </asp:Content>
<asp:Content ID="Content3" ContentPlaceHolderID="H" runat="Server"> <asp:Content ID="Content3" ContentPlaceHolderID="H" runat="Server">
<li> <asp:UpdatePanel runat="server" ID="UpAcciones" UpdateMode="Conditional">
<asp:LinkButton ID="LnkPdf" runat="server"><i class="fa fa-ad-pdf"></i> Generar PDF</asp:LinkButton> <ContentTemplate>
</li> <li>
<li> <asp:LinkButton ID="LnkPdf" runat="server"><i class="fa fa-ad-pdf"></i> Generar PDF</asp:LinkButton>
<asp:LinkButton ID="LnkExcel" runat="server"><i class="fa fa-ad-excel"></i> Generar Excel</asp:LinkButton> </li>
</li> <li>
<asp:LinkButton ID="LnkExcel" runat="server"><i class="fa fa-ad-excel"></i> Generar Excel</asp:LinkButton>
</li>
</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="LnkPdf" />
<asp:PostBackTrigger ControlID="LnkExcel" />
</Triggers>
</asp:UpdatePanel>
</asp:Content> </asp:Content>
<asp:Content ID="Content4" ContentPlaceHolderID="C" runat="Server"> <asp:Content ID="Content4" ContentPlaceHolderID="C" runat="Server">
@@ -356,11 +382,35 @@
<ajax:TabPanel ID="TabGrantt" runat="server" HeaderText="Cronograma"> <ajax:TabPanel ID="TabGrantt" runat="server" HeaderText="Cronograma">
<ContentTemplate> <ContentTemplate>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Always">
<ContentTemplate>
<div class="portlet solid grey-cascade portlet-filter">
<div class="portlet-title portlet-filterT smalltitle">
<div class="tools">
<a href="javascript:;" class="expand"></a>
</div>
<div class="titlefiltros caption">
<div class="row" style="height: 32px;">
<label class="col-md-1 truncate">Tipo Vista:</label>
<div class="col-md-1">
<asp:DropDownList ID="DdlTipoVistaCalendario" AutoPostBack="true" OnSelectedIndexChanged="DdlTipoVistaCalendario_SelectedIndexChanged" CssClass="form-control select2me input-sm select2me Widthall"
Style="width: 100%;" runat="server">
<asp:ListItem Text="Todos" Value="-1"></asp:ListItem>
<asp:ListItem Text="Solo Viaje" Value="1"></asp:ListItem>
</asp:DropDownList>
</div>
</div>
</div>
</div>
</div>
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel ID="UPGat" runat="server" UpdateMode="Conditional"> <asp:UpdatePanel ID="UPGat" runat="server" UpdateMode="Conditional">
<ContentTemplate> <ContentTemplate>
<div> <div style="display:none">
<div class="gantt-samples-banner_controls_bar controls_bar"> <div class="gantt-samples-banner_controls_bar controls_bar" style="display:none!important">
<strong>Formato: &nbsp; </strong> <strong>Formato: &nbsp; </strong>
<label> <label>
@@ -403,7 +453,7 @@
</label> </label>
</div> </div>
</div> </div>
<div id="gantt_here" style='width: 100%; height: 100vh;'></div> <div id="gantt_here"></div>
</div> </div>
@@ -412,7 +462,7 @@
<asp:UpdatePanel ID="UPPGantt" runat="server" UpdateMode="Conditional"> <asp:UpdatePanel ID="UPPGantt" runat="server" UpdateMode="Conditional">
<ContentTemplate> <ContentTemplate>
<div class="portlet solid grey-cascade portlet-filter"> <div class="portlet solid grey-cascade portlet-filter" style="display:none!important">
<div class="portlet-title portlet-filterT smalltitle"> <div class="portlet-title portlet-filterT smalltitle">
<div class="tools"> <div class="tools">
<a href="javascript:;" class="expand"></a> <a href="javascript:;" class="expand"></a>
@@ -433,6 +483,7 @@
</div> </div>
</ContentTemplate> </ContentTemplate>
</asp:UpdatePanel> </asp:UpdatePanel>
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-12">
<div id="chartdiv"></div> <div id="chartdiv"></div>
@@ -716,10 +767,258 @@
"December": "Diciembre", "December": "Diciembre",
}; };
var dateAxis; let dateAxis;
let yAxis;
function cargaDiagramaGrant(data, categorias, TipoVista) { function cargaDiagramaGrant(data, categorias, TipoVista) {
am5.ready(function () {
// SI YA HAY GRÁFICA, QUITA LA ACTUAL PARA HACER UNA NUEVA
root.container.children.clear();
root.dateFormatter.setAll({
dateFormat: "yyyy-MM-dd HH:mm:ss",
dateFields: ["valueX", "openValueX"]
});
root.locale = am5locales_es_ES;
// Establecer temas
root.setThemes([
am5themes_Animated.new(root)
]);
// Crear gráfico
let chart = root.container.children.push(am5xy.XYChart.new(root, {
panX: false,
panY: false, // Habilita el desplazamiento vertical
wheelX: "none",
wheelY: "none", // Habilita el scroll vertical con la rueda del mouse
layout: root.verticalLayout,
paddingLeft: 0
}));
// Deshabilitar el enmascaramiento en el plotContainer
//chart.plotContainer.set("mask", null); // quita rendimiento
// Agregar leyenda
let legend = chart.children.push(am5.Legend.new(root, {
centerX: am5.p50,
x: am5.p50
}));
let colors = chart.get("colors");
// Definir cellSize para el tamaño fijo de cada categoría en el eje Y
let cellSize = 45;
//if (TipoVista == 1) {
// cellSize = 60;
//}
// Crear eje Y (CategoryAxis)
chart.paddingTop = 40;
yAxis = chart.yAxes.push(
am5xy.CategoryAxis.new(root, {
categoryField: "category",
renderer: am5xy.AxisRendererY.new(root, {
inversed: false,
minGridDistance: cellSize, // Asigna el tamaño fijo a cada unidad
minorGridEnabled: true,
neverHide: true,
forceHidden: false,
oversizedBehavior: "none",
location: 0.5,
fontSize: 12, // Ajusta el tamaño de fuente si es necesario
visible: true, // Asegura que las etiquetas sean visibles
minPosition: 0.001,
maxPosition: 0.999,
minGridDistance: 1, // Reduced from cellSize to 1
}),
tooltip: am5.Tooltip.new(root, {
themeTags: ["axis"],
animationDuration: 200
})
})
);
//yAxis.renderer.grid.template.disabled = !showgrid;
//yAxis.paddingLeft = 10;
//yAxis.paddingRight = 10;
//yAxis.layout = "absolute";
// Set up axis title
//yAxis.title.text = "Unidades";
//yAxis.title.rotation = 0;
//yAxis.title.align = "center";
//yAxis.title.valign = "top";
yAxis.set('strictMinMax', true);
yAxis.set('maxDeviation', 0);
yAxis.set('start', 0);
yAxis.set('end', 1);
yAxis.data.setAll(categorias);
// Asegurar que las etiquetas del eje Y siempre se muestren
//yAxis.get("renderer").labels.template.setAll({
// forceHidden: false,
// oversizedBehavior: "none",
// location: 0.5,
// fontSize: 12, // Ajusta el tamaño de fuente si es necesario
// visible: true, // Asegura que las etiquetas sean visibles
// minPosition: 0.001,
// maxPosition: 0.999
//});
// Configurar el eje Y para evitar zoom automático
// Obtener valores de las cajas de texto
let fechaI = document.getElementById('<%= txtFechaI.ClientID %>').value;
let fechaF = document.getElementById('<%= txtFechaF.ClientID %>').value;
// Convertir valores a objetos Date
let minDate = new Date(fechaI.split("/").reverse().join("-"));
let maxDate = new Date(fechaF.split("/").reverse().join("-"));
maxDate.setHours(23, 59, 59, 999);
// Crear eje X (DateAxis)
let xAxis = am5xy.DateAxis.new(root, {
baseInterval: { timeUnit: "hour", count: 1 },
renderer: am5xy.AxisRendererX.new(root, {
opposite: true,
minorGridEnabled: true,
minGridDistance: 50 // Ajusta según sea necesario para evitar superposición
}),
min: minDate.getTime(),
max: maxDate.getTime(),
groupData: false,
markUnitChange: false
});
// Agregar el eje X al contenedor superior
chart.topAxesContainer.children.push(xAxis);
// Asegurar que todas las etiquetas se muestren
xAxis.get("renderer").labels.template.setAll({
forceHidden: false,
minPosition: 0.001,
maxPosition: 0.999,
location: 0.5,
fontSize: 14, // Tamaño de fuente
fontWeight: "bold"
});
// Formatear las etiquetas de fecha
xAxis.get("renderer").labels.template.adapters.add("text", function (text, target) {
let dataItem = target.dataItem;
if (dataItem) {
let value = dataItem.get('value');
let date = new Date(value);
let day = date.getDate().toString().padStart(2, '0');
let month = (date.getMonth() + 1).toString().padStart(2, '0');
return day + '/' + month;
} else {
return text;
}
});
// Añadir la serie
let 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: "UNIDAD: {category}-{unidad} \nCONTRATO: {contrato} \nDURACIÓN: {openValueX} - {valueX}"
});
series.data.processor = am5.DataProcessor.new(root, {
dateFields: ["fromDate", "toDate"],
dateFormat: "yyyy-MM-dd HH:mm:ss"
});
series.data.setAll(data);
//// Scrollbar X
//var scrollbarX = am5.Scrollbar.new(root, {
// orientation: "horizontal"
//});
//chart.set("scrollbarX", scrollbarX);
//chart.bottomAxesContainer.children.push(scrollbarX);
// Scrollbar Y
//let scrollbarY = am5.Scrollbar.new(root, {
// orientation: "vertical"
//});
//chart.set("scrollbarY", scrollbarY);
//chart.rightAxesContainer.children.push(scrollbarY);
// MOSTRAR MODAL DE CONTRATO AL HACER CLICK
series.columns.template.events.on("click", e => {
let cveContrato = e.target.dataItem.dataContext.cveContrato;
$('#<%=HdnCveContrato.ClientID%>').val(cveContrato);
let url = '/Ashx/CargaEventos.ashx?METODO=contrato_transportes';
let parametros = '&cveContrato=' + cveContrato + '&U=' + '<%= UsuarioActual.CveUsuario %>' + '&E=' + '<%= UsuarioActual.CveEmpresa %>' + '&tipoVista=' + '<%= RBTipoVista.Text %>' + '&CveUsuarioPara:' + $('#DdlTecnico').val() + '&CveSubProyecto:' + $('#DdlSubProyecto').val();
fetch(url + parametros).then(response => response.json()).then(json => {
updateEvent(json[0], null, false);
}).catch(err => console.log('Solicitud fallida', err));
});
series.events.on("datavalidated", function (ev) {
let xAxisHeight = xAxis.height();
let chartHeight = categorias.length * cellSize + xAxisHeight + chart.get("paddingTop", 0) + chart.get("paddingBottom", 0);
// Establece la altura calculada en el contenedor del gráfico
chart.root.dom.style.height = chartHeight + "px";
// Asegurar que el eje Y no esté con zoom
yAxis.zoom(0, 1);
});
// Animaciones al cargar
series.appear();
chart.appear(1000, 100);
}); // end am5.ready()
}
function zoomAxisy(inicio,fin) {
setTimeout(() => {
//yAxis.zoomToIndexes(inicio, fin);
}, 100);
}
function zoomAxis(anioI, mesI, diaI, anioF, mesF, diaF) {
setTimeout(() => {
// dateAxis.zoomToDates(new Date(anioI, mesI, diaI), new Date(anioF, mesF, diaF));
}, 1500);
}
<%--function cargaDiagramaGrant(data, categorias, TipoVista) {
am5.ready(function () { am5.ready(function () {
//SI YA HAY GRAFICA, QUITA LA ACTUAL PARA HACER UNA NUEVA //SI YA HAY GRAFICA, QUITA LA ACTUAL PARA HACER UNA NUEVA
root.container.children.clear(); root.container.children.clear();
@@ -740,10 +1039,10 @@
// Create chart // Create chart
// https://www.amcharts.com/docs/v5/charts/xy-chart/ // https://www.amcharts.com/docs/v5/charts/xy-chart/
var chart = root.container.children.push(am5xy.XYChart.new(root, { var chart = root.container.children.push(am5xy.XYChart.new(root, {
panX: true, panX: false,
panY: false, panY: false,
wheelX: "panX", wheelX: "none",
wheelY: "zoomX", wheelY: "none",
layout: root.verticalLayout, layout: root.verticalLayout,
paddingLeft: 0 paddingLeft: 0
})); }));
@@ -783,23 +1082,46 @@
var minDate = new Date(fechaI.split("/").reverse().join("-")); var minDate = new Date(fechaI.split("/").reverse().join("-"));
var maxDate = new Date(fechaF.split("/").reverse().join("-")); var maxDate = new Date(fechaF.split("/").reverse().join("-"));
dateAxis = am5xy.DateAxis.new(root, {
baseInterval: { timeUnit: "day", count: 1 }, var xAxis = chart.xAxes.push(
renderer: am5xy.AxisRendererX.new(root, { am5xy.DateAxis.new(root, {
minorGridEnabled: true, baseInterval: { timeUnit: "day", count: 1 },
minGridDistance: 90 renderer: am5xy.AxisRendererX.new(root, {
}), opposite: true,
min: minDate.getTime(), minorGridEnabled: true,
max: maxDate.getTime() minGridDistance: 30 // Ajusta según sea necesario
//min: new Date(2024, 6, 15).getTime(), }),
//max: new Date(2024, 6, 31).getTime() min: minDate.getTime(),
max: maxDate.getTime(),
groupData: false,
markUnitChange: false
})
);
// Asegurar que todas las etiquetas se muestren
xAxis.get("renderer").labels.template.setAll({
forceHidden: false,
minPosition: 0.001,
maxPosition: 0.999,
location: 0.5 // Centra las etiquetas
}); });
var xAxis = chart.xAxes.push(
dateAxis
);
chart.topAxesContainer.children.push(dateAxis); // Formatear las etiquetas de fecha
xAxis.get("renderer").labels.template.adapters.add("text", function (text, target) {
var dataItem = target.dataItem;
if (dataItem) {
var value = dataItem.get('value');
var date = new Date(value);
var day = date.getDate().toString().padStart(2, '0');
var month = (date.getMonth() + 1).toString().padStart(2, '0');
return day + '/' + month;
} else {
return text; // O puedes devolver una cadena vacía: return '';
}
});
//chart.topAxesContainer.children.push(dateAxis);
// Add series // Add series
// https://www.amcharts.com/docs/v5/charts/xy-chart/series/ // https://www.amcharts.com/docs/v5/charts/xy-chart/series/
@@ -812,6 +1134,7 @@
sequencedInterpolation: true sequencedInterpolation: true
})); }));
series.columns.template.setAll({ series.columns.template.setAll({
templateField: "columnSettings", templateField: "columnSettings",
strokeOpacity: 0, strokeOpacity: 0,
@@ -824,11 +1147,7 @@
}); });
series.data.setAll(data); series.data.setAll(data);
// Add scrollbars
//chart.set("scrollbarX", am5.Scrollbar.new(root, {
// orientation: "horizontal"
//}));
// Scrollbar X // Scrollbar X
var scrollbarX = am5.Scrollbar.new(root, { var scrollbarX = am5.Scrollbar.new(root, {
orientation: "horizontal" orientation: "horizontal"
@@ -884,14 +1203,9 @@
}); // end am5.ready() }); // end am5.ready()
} }--%>
function zoomAxis(anioI, mesI, diaI, anioF, mesF, diaF) {
setTimeout(() => {
dateAxis.zoomToDates(new Date(anioI, mesI, diaI), new Date(anioF, mesF, diaF));
}, 1500);
}
var PrimeraCargaCalendario = true; var PrimeraCargaCalendario = true;
var currentUpdateEvent; var currentUpdateEvent;
@@ -1332,22 +1646,22 @@
var datosGant = []; var datosGant = [];
function loadGant() { function loadGant() {
gantt.config.date_format = "%Y-%m-%d %H:%i"; gantt.config.date_format = "%Y-%m-%d %H:%i";
gantt.config.order_branch = true; gantt.config.order_branch = true;
gantt.i18n.setLocale("es"); gantt.config.order_branch_free = true;
gantt.init("gantt_here"); gantt.config.open_tree_initially = true;
gantt.config.show_tasks_outside_timescale = true;
gantt.config.drag_move = false; // Desactiva mover tareas gantt.config.drag_move = false; // Desactiva mover tareas
gantt.config.drag_resize = false; // Desactiva redimensionar tareas gantt.config.drag_resize = false; // Desactiva redimensionar tareas
gantt.config.drag_progress = false; // Desactiva mover la barra de progreso gantt.config.drag_progress = false; // Desactiva mover la barra de progreso
//gantt.config.smart_scales = false;// Desactiva el salto automático entre escalas de tiempo gantt.i18n.setLocale("es");
//gantt.config.scroll_size = 1; gantt.init("gantt_here");
// gantt.config.scroll_on_click = false; // Desactiva el scroll automático al hacer clic
//gantt.config.autosize = "xy";
//gantt.config.smart_rendering = false;
gantt.config.columns = [ gantt.config.columns = [
//{ name: "text", label: "Contrato ", width: "*", min_width: 150, tree: true, resize: true, template: function (obj) { return "<a href=\"/Transportes/RepContratoDetalle.aspx?CveContrato=" + obj.id + "\" target=\"_Blank\">" + obj.text + " </a>" } }, //{ name: "text", label: "Contrato ", width: "*", min_width: 150, tree: true, resize: true, template: function (obj) { return "<a href=\"/Transportes/RepContratoDetalle.aspx?CveContrato=" + obj.id + "\" target=\"_Blank\">" + obj.text + " </a>" } },
{ name: "codigoaf", label: "Unidad", max_width: 50, align: "left" },
//{ name: "start_date", label: "Inicio", min_width: 90, align: "center" }, //{ name: "start_date", label: "Inicio", min_width: 90, align: "center" },
//{ name: "end_date", label: "Fin", min_width: 90, align: "center" } //{ name: "end_date", label: "Fin", min_width: 90, align: "center" }
@@ -1362,10 +1676,13 @@
data: datosGant data: datosGant
}); });
// Agregar evento para hover y mostrar tooltip // Agregar evento para hover y mostrar tooltip
gantt.attachEvent("onMouseMove", function (id, e) { gantt.attachEvent("onMouseMove", function (id, e) {
if (id) { if (id) {
var task = gantt.getTask(id); var task = gantt.getTask(id);
// Mostrar el tooltip burbuja // Mostrar el tooltip burbuja
var tooltip = document.getElementById("gantt_tooltip"); var tooltip = document.getElementById("gantt_tooltip");
@@ -1401,36 +1718,34 @@
// Cancelar el comportamiento predeterminado // Cancelar el comportamiento predeterminado
return false; return false;
}); });
gantt.attachEvent("onBeforeTaskMove", function (id, parent, tindex) {
console.log(tindex)
var task = gantt.getTask(id);
if (task.parent != parent)
return false;
return true;
});
gantt.attachEvent("onRowDragEnd", function (id, target, tindex) {
console.log(tindex)
debugger;
drag_id = null;
gantt.render();
});
gantt.attachEvent("onTaskLoading", function (task) {
if (task.hidden) {
task.$rendered = false; // Evitar que la tarea se renderice
}
return true;
});
} }
gantt.attachEvent("onBeforeTaskMove", function (id, parent, tindex) {
console.log(tindex)
var task = gantt.getTask(id);
if (task.parent != parent)
return false;
return true;
});
gantt.attachEvent("onRowDragEnd", function (id, target, tindex) {
console.log(tindex)
debugger;
drag_id = null;
gantt.render();
});
gantt.attachEvent("onGanttScroll", function (left, top) {
// var step = 50; // Define cuánto avanzar con cada paso del scroll
//var newTop = top + step; // Incrementa el scroll vertical en 50 píxeles
//gantt.scrollTo(left, newTop); // Establece el nuevo valor de scroll vertical
console.log("Scroll vertical: ", top);
return false; // Previene el scroll predeterminado para que solo se aplique el manual
//return true;
});
loadGant(); loadGant();

View File

@@ -72,7 +72,8 @@ Partial Class RepContratosCalendario
CveTipoAF:=DdlTipoUnidad.SelectedValue.ToEntero, CveTipoAF:=DdlTipoUnidad.SelectedValue.ToEntero,
CveChofer:=DdlChoferFiltro.SelectedValue.ToEntero) Then CveChofer:=DdlChoferFiltro.SelectedValue.ToEntero) Then
DtAvance = ObjContratos.DtResultados.Copy() DtAvance = ObjContratos.DtResultados.Copy()
CargaCronograma(DdlTipoVista.SelectedValue.ToEntero) CargaCronograma(DdlTipoVistaCalendario.SelectedValue.ToEntero)
CargaDiagramadeGant(DdlTipoVista.SelectedValue.ToEntero)
End If End If
GvContratos.DataSource = DtAvance GvContratos.DataSource = DtAvance
DdlEstatusContrato.Enabled = UsuarioActual.TienePermisoProceso(173) DdlEstatusContrato.Enabled = UsuarioActual.TienePermisoProceso(173)
@@ -91,9 +92,9 @@ Partial Class RepContratosCalendario
Private Sub CargaCronograma(Optional TipoVista As Integer = -1) Private Sub CargaCronograma(Optional TipoVista As Integer = -1)
If DtAvance IsNot Nothing Then If DtAvance IsNot Nothing Then
Dim separator As String = "" 'Dim separator As String = ""
Dim str As New StringBuilder() 'Dim str As New StringBuilder()
str.AppendLine("datosGant=[") 'str.AppendLine("datosGant=[")
Dim StrFiltro As String = "" Dim StrFiltro As String = ""
@@ -110,30 +111,32 @@ Partial Class RepContratosCalendario
'DATOS 'DATOS
Dim strAF As New StringBuilder Dim strAF As New StringBuilder
'se quitan los estatus cancelados 'se quitan los estatus cancelados
Dim randomNumber As New Random
For Each Row As DataRow In DtAvance.FiltraParametros("CodigoAF <> '' AND TipoEstatus <> 3").Rows For Each Row As DataRow In DtAvance.FiltraParametros("CodigoAF <> '' AND TipoEstatus <> 3").Rows
Dim obj As New JObject( Dim obj As New JObject(
New JProperty("category", Row("CodigoAF")), New JProperty("category", Row("CodigoAF")),
New JProperty("fromDate", Row("FechaInicial").ToString().ToDateTime().ToString("dd/MM/yyyy HH:mm").ToDateTime()), New JProperty("fromDate", Row("FechaInicial").ToString().ToDateTime().ToString("yyyy-MM-dd HH:mm:ss")),
New JProperty("toDate", Row("FechaFinal").ToString().ToDateTime.ToString("dd/MM/yyyy HH:mm").ToDateTime()), New JProperty("toDate", Row("FechaFinal").ToString().ToDateTime.ToString("yyyy-MM-dd HH:mm:ss")),
New JProperty("columnSettings", New JObject( New JProperty("columnSettings", New JObject(
New JProperty("fill", String.Format("#{0:X6}", random.Next(16777216))) New JProperty("fill", String.Format("#{0:X6}", random.Next(16777216)))
)), )),
New JProperty("unidad", Row("NombreAF")), New JProperty("unidad", Row("NombreAF")),
New JProperty("cveContrato", Row("CveContrato")), New JProperty("cveContrato", Row("CveContrato")),
New JProperty("contrato", Row("NumeroContrato")), New JProperty("contrato", Row("NumeroContrato")),
New JProperty("fechaFinalViaje", Row("FechaFinal").ToString().ToDateTime().ToString("dd/MM/yyyy HH:mm")) New JProperty("fechaFinalViaje", Row("FechaFinal").ToString().ToDateTime().ToString("yyyy-MM-dd HH:mm:ss"))
) )
jsonData.Add(obj) jsonData.Add(obj)
strAF.AppendFormat("{0},", Row("CveAF")) strAF.AppendFormat("{0},", Row("CveAF"))
'uniad contrato y duracion 'uniad contrato y duracion
Dim unidad As String = $"{Row("CodigoAF")}-{Row("NombreAF")}" 'Dim unidad As String = $"{Row("CodigoAF")}-{Row("NombreAF")}"
Dim duracion As String = $"{Row("FechaInicial").ToString.ToDate.ToString("dd/MM/yyyy HH:mm")} - {Row("FechaFinal").ToString.ToDate.ToString("dd/MM/yyyy HH:mm")}" 'Dim duracion As String = $"{Row("FechaInicial").ToString.ToDate.ToString("dd/MM/yyyy HH:mm")} - {Row("FechaFinal").ToString.ToDate.ToString("dd/MM/yyyy HH:mm")}"
str.AppendLine(String.Format("{0}{{id: {1}, text: ""{2}"", start_date: ""{3:yyyy/MM/dd HH:mm}"", end_date: ""{4:yyyy/MM/dd HH:mm}"", parent: {5}, progress:{6}, open: true, unidad: ""{7}"",duracion: ""{8}""}}", 'str.AppendLine(String.Format("{0}{{id: {1}, text: ""{2}"", start_date: ""{3:yyyy/MM/dd HH:mm}"", end_date: ""{4:yyyy/MM/dd HH:mm}"", parent: {5}, progress:{6}, open: true, unidad: ""{7}"",duracion: ""{8}"", color: ""{9}"",codigoaf: ""{10}""}}",
separator, Row("CveContrato"), Row("NumeroContrato").ToString().Replace("\\", "\\\\").Replace("""", "\"""), Row("FechaInicial"), Row("FechaFinal"), 0, 100, unidad, duracion)) ' separator, Row("CveContrato"), Row("NumeroContrato").ToString().Replace("\\", "\\\\").Replace("""", "\"""), Row("FechaInicial"), Row("FechaFinal"), 0, 100, unidad, duracion, ColorAleatorio(randomNumber), Row("CodigoAF").ToString))
separator = "," 'separator = ","
Next Next
@@ -151,18 +154,188 @@ Partial Class RepContratosCalendario
Dim FechaI = txtFechaI.Text.ToDateTime() Dim FechaI = txtFechaI.Text.ToDateTime()
Dim FechaF = txtFechaF.Text.ToDateTime() Dim FechaF = txtFechaF.Text.ToDateTime()
Dim ScriptZoom = $"zoomAxis({FechaI.Year},{FechaI.Month - 1},{FechaI.Day},{FechaF.Year},{FechaF.Month - 1},{FechaF.Day});" Dim ScriptZoomx = $"zoomAxis({FechaI.Year},{FechaI.Month - 1},{FechaI.Day},{FechaF.Year},{FechaF.Month - 1},{FechaF.Day});"
RegistraScript($"cargaDiagramaGrant({jsonData.ToString()},{jsonCategorias.ToString()},{TipoVista});{ScriptZoom}", "A1") Dim ScriptZoomy = $"zoomAxisy(0,{If(jsonCategorias.Count > 9, 9, jsonCategorias.Count - 1)});"
RegistraScript($"cargaDiagramaGrant({jsonData.ToString()},{jsonCategorias.ToString()},{TipoVista});{ScriptZoomx};{ScriptZoomy};", "A1")
'RegistraScript($"cargaDiagramaGrant({jsonData.ToString()},{jsonCategorias.ToString()},{TipoVista});", "A1")
str.AppendLine("];loadGant();") 'str.AppendLine("];loadGant();")
RegistraScript(str.ToString()) 'RegistraScript(str.ToString())
UPPGantt.Update() UPPGantt.Update()
UPGat.Update() UPGat.Update()
End If End If
End Sub End Sub
Private Sub CargaDiagramadeGant(Optional TipoVista As Integer = -1)
Dim randomNumber As New Random
If DtAvance IsNot Nothing Then
Dim str As New StringBuilder()
str.AppendLine("datosGant=[")
If TipoVista = 1 Then 'solo con viajes
Else
Dim StrFiltro As String = ""
If DdlTipoUnidad.SelectedValue.ToEntero > 0 Then StrFiltro = " AND CveTipoActivoFijo = " & DdlTipoUnidad.SelectedValue
Dim DtUnidades As DataTable = GlobalDTActivoFijos(UsuarioActual.CveEmpresa).FiltraParametros("Codigo <> '' AND MedidaVehicular IN (2,3) " & StrFiltro, Orderby:=" TipoActivoFijo ASC, CodigoNumeroOrden ASC", DistinctColumns:={"Codigo", "CveActivoFijo"})
Dim separator As String = ""
Dim encontrados As Integer = 0
Dim CvePadre As Integer = -1
For Each dRowUnidad As DataRow In DtUnidades.Rows
Dim CveActivoFijo As Integer = dRowUnidad("CveActivoFijo").ToString.ToEntero
Dim CodigoAF As String = dRowUnidad("Codigo").ToString
'Dim unidad As String = $"{dRowUnidad("Codigo").ToString}-{dRowUnidad("Descripcion").tostring}"
Dim SeEncontro As Boolean = False
Dim EsHijo As Boolean = False
For Each Row As DataRow In DtAvance.FiltraParametros("CodigoAF <> '' AND TipoEstatus <> 3").Rows
Dim CveActivoFijoContrato As Integer = Row("CveAF").ToString.ToEntero
'If CveActivoFijo = CveActivoFijoContrato Then
' str.AppendLine(String.Format("{0}", separator))
' SeEncontro = True
' Dim unidad As String = $"{Row("CodigoAF")}-{Row("NombreAF")}"
' Dim duracion As String = $"{Row("FechaInicial").ToString.ToDate.ToString("dd/MM/yyyy HH:mm")} - {Row("FechaFinal").ToString.ToDate.ToString("dd/MM/yyyy HH:mm")}"
' str.AppendLine(String.Format("{{id: {1}, text: ""{2}"", start_date: ""{3:yyyy/MM/dd HH:mm}"", end_date: ""{4:yyyy/MM/dd HH:mm}"", parent: {5}, progress:{6}, open: true, unidad: ""{7}"",duracion: ""{8}"", color: ""{9}"",codigoaf: ""{10}""}} ",
' separator, Row("CveContrato"), Row("NumeroContrato").ToString().Replace("\\", "\\\\").Replace("""", "\"""), Row("FechaInicial"), Row("FechaFinal"), 0, 100, unidad, duracion, ColorAleatorio(randomNumber), Row("CodigoAF").ToString))
' separator = ","
' encontrados = encontrados + 1
'End If
If CveActivoFijo = CveActivoFijoContrato Then
str.AppendLine(String.Format("{0}", separator))
SeEncontro = True
Dim unidad As String = $"{Row("CodigoAF")}-{Row("NombreAF")}"
Dim duracion As String = $"{Row("FechaInicial").ToString.ToDate.ToString("dd/MM/yyyy HH:mm")} - {Row("FechaFinal").ToString.ToDate.ToString("dd/MM/yyyy HH:mm")}"
If EsHijo Then
str.AppendLine(String.Format("{{id: {1}, text: ""{2}"", start_date: ""{3:yyyy/MM/dd HH:mm}"", end_date: ""{4:yyyy/MM/dd HH:mm}"", progress:{6}, open: true, unidad: ""{7}"",duracion: ""{8}"", color: ""{9}"",codigoaf: ""{10}"", cvecontrato: ""{11}"", parent: {12} }} ",
separator, Row("CveContrato").ToString, Row("NumeroContrato").ToString().Replace("\\", "\\\\").Replace("""", "\"""), Row("FechaInicial"), Row("FechaFinal"), 0, 100, unidad, duracion, ColorAleatorio(randomNumber), Row("CodigoAF").ToString, Row("CveContrato").ToString, CvePadre)
)
Else
str.AppendLine(String.Format("{{id: {1}, text: ""{2}"", start_date: ""{3:yyyy/MM/dd HH:mm}"", end_date: ""{4:yyyy/MM/dd HH:mm}"", progress:{6}, open: true, unidad: ""{7}"",duracion: ""{8}"", color: ""{9}"",codigoaf: ""{10}"", cvecontrato: ""{11}"",parent: 0 }} ",
separator, Row("CveContrato").ToString, Row("NumeroContrato").ToString().Replace("\\", "\\\\").Replace("""", "\"""), Row("FechaInicial"), Row("FechaFinal"), 0, 100, unidad, duracion, ColorAleatorio(randomNumber), Row("CodigoAF").ToString, Row("CveContrato").ToString)
)
End If
If Not EsHijo Then
CvePadre = Row("CveContrato").ToString.ToEntero
EsHijo = True
End If
separator = ","
encontrados = encontrados + 1
Else
EsHijo = False
End If
Next
'If Not SeEncontro Then
' If encontrados > 0 Then
' separator = ","
' End If
' str.AppendLine(String.Format("{0}", separator))
' str.AppendLine(String.Format("{{id: {1}, text: ""{2}"", start_date: ""{3}"", end_date: ""{4}"", parent: {5}, progress:{6}, open: true, unidad: ""{7}"",duracion: ""{8}"", color: ""{9}"",codigoaf: ""{10}"", hidden: true}} ",
' "", CveActivoFijo, -1, txtFechaF.Text.ToDate.ToString("yyyy/MM/dd HH:mm"), txtFechaF.Text.ToDate.ToString("yyyy/MM/dd HH:mm"), 0, 100, "", "", ColorAleatorio(randomNumber), CodigoAF))
' separator = ","
'End If
'str.AppendLine(String.Format("}"))
Next
End If
str.AppendLine("];loadGant();")
'RegistraScript(str.ToString())
UPPGantt.Update()
UPGat.Update()
End If
End Sub
Private Function ColorAleatorio(randomNumber As Random) As String
Dim listaColores As New List(Of String)
listaColores.Add("#94f35a")
listaColores.Add("#1989a9")
listaColores.Add("#5a3c98")
listaColores.Add("#556855")
listaColores.Add("#e199cf")
listaColores.Add("#50cc77")
listaColores.Add("#559f9d")
listaColores.Add("#ede805")
listaColores.Add("#f1e489")
listaColores.Add("#c381f6")
listaColores.Add("#f2496b")
listaColores.Add("#c4d7dc")
listaColores.Add("#f3f9f9")
listaColores.Add("#fd8ffe")
listaColores.Add("#f2496b")
listaColores.Add("#5a8f9c")
listaColores.Add("#87bfbd")
listaColores.Add("#fb01fd")
listaColores.Add("#6836dc")
listaColores.Add("#67627e")
listaColores.Add("#1b9f44")
listaColores.Add("#3a54dc")
listaColores.Add("#fb66f1")
listaColores.Add("#24f6b4")
listaColores.Add("#60feee")
listaColores.Add("#82a199")
listaColores.Add("#93a9e1")
listaColores.Add("#ff8809")
listaColores.Add("#8379ba")
listaColores.Add("#f62ea2")
listaColores.Add("#41cf69")
listaColores.Add("#8624b2")
listaColores.Add("#f4948a")
listaColores.Add("#205da6")
listaColores.Add("#9f38b6")
listaColores.Add("#540466")
listaColores.Add("#7a4e49")
listaColores.Add("#bd22ce")
listaColores.Add("#6d89a0")
listaColores.Add("#7e6d8c")
listaColores.Add("#124a70")
listaColores.Add("#c3d2c2")
listaColores.Add("#506702")
listaColores.Add("#058106")
listaColores.Add("#0485f2")
listaColores.Add("#401685")
Dim ranNumber As Integer = randomNumber.Next(0, listaColores.Count - 1)
Return listaColores(ranNumber)
End Function
'Public Sub loadEvento() 'Public Sub loadEvento()
' Dim separator As String = "" ' Dim separator As String = ""
' Dim str As New StringBuilder() ' Dim str As New StringBuilder()
@@ -487,16 +660,47 @@ Partial Class RepContratosCalendario
End Sub 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)
Dim SubProyecto As String = ""
SubProyecto = DdlSubProyectos.SelectedItem.Text
Dim SbFiltros As New StringBuilder()
SbFiltros.AppendFormat($"Fecha Inicio: {txtFechaI.Text} Fecha Fin: {txtFechaF.Text}|")
SbFiltros.AppendFormat("SubProyecto: {0}|", SubProyecto)
GvContratos.ExportToExcelGembox($"Reporte_Contratos_{NowADS.ToString("yyyyMMddHHmmss")}", UsuarioActual, "Reporte Contratos", DatoTituloExtra:=$"", DatosFiltros:=SbFiltros.ToString())
End Sub
Public Overrides Sub VerifyRenderingInServerForm(ByVal control As Control)
' Esto es necesario para permitir la renderización del control fuera de un formulario servidor
' No se requiere implementación específica, solo la anulación.
End Sub End Sub
Protected Sub LnkPDF_Click(sender As Object, e As EventArgs) Handles LnkPdf.Click
Protected Sub LnkPDF_Click(sender As Object, e As EventArgs) Handles LnkPdf.Click
ImprimirReporte()
End Sub
Private Sub ImprimirReporte(Optional Formato As String = "PDF")
Dim ObjContratos As New ClsContratos Dim ObjContratos As New ClsContratos
Dim DTDatos As New DataTable
If ObjContratos.GetContratos(-1, UsuarioActual.CveEmpresa, TipoContrato:=2) Then If ObjContratos.GetContratos(-1, UsuarioActual.CveEmpresa, TipoContrato:=2) Then
DTDatos = ObjContratos.DtResultados
Else
Alert("No hay datos consultados", TipoMensaje.MsgAdvertencia)
End If
ObjContratos.Dispose()
If DTDatos IsNot Nothing Then
Dim Imagen As New IO.FileInfo($"{UsuarioActual.Empresa.Ruta}/Logo.png") Dim Imagen As New IO.FileInfo($"{UsuarioActual.Empresa.Ruta}/Logo.png")
Dim logouri As String = String.Format("{0}://{1}:{2}/Empresas/{3}/Logo.png", Request.Url.Scheme, Request.Url.Host, Request.Url.Port, UsuarioActual.CveEmpresa) Dim logouri As String = String.Format("{0}://{1}:{2}/Empresas/{3}/Logo.png", Request.Url.Scheme, Request.Url.Host, Request.Url.Port, UsuarioActual.CveEmpresa)
Dim Cliente As String = If(DdlClientes.SelectedValue = "-1", "", $"&emsp;<b>Cliente:</b>&nbsp;{DdlClientes.SelectedText}") Dim Cliente As String = If(DdlClientes.SelectedValue = "-1", "", $"&emsp;<b>Cliente:</b>&nbsp;{DdlClientes.SelectedText}")
Dim dt As DataTable = ObjContratos.DtResultados
Dim params As New List(Of ReportParameter) From { Dim params As New List(Of ReportParameter) From {
New ReportParameter("NombreEmpresa", UsuarioActual.Empresa.Empresa), New ReportParameter("NombreEmpresa", UsuarioActual.Empresa.Empresa),
New ReportParameter("FechaInicio", "-1"), New ReportParameter("FechaInicio", "-1"),
@@ -506,23 +710,25 @@ Partial Class RepContratosCalendario
New ReportParameter("FechaImpresion", NowADS().ToDateTime.ToShortDateString), New ReportParameter("FechaImpresion", NowADS().ToDateTime.ToShortDateString),
New ReportParameter("LogoPath", If(Imagen.Exists, $"file://{Imagen.FullName}", "")) New ReportParameter("LogoPath", If(Imagen.Exists, $"file://{Imagen.FullName}", ""))
} }
ImprimirPDF("Empresas/Grales/Formatos/RepContratos.rdlc", dt, params, NombreArchivo:="Reporte Contratos") ImprimirPDF("Empresas/Grales/Formatos/RepContratos.rdlc", DTDatos, params, NombreArchivo:="Reporte Contratos", Formato:=Formato)
Else End If
Alert("No hay datos consultados", TipoMensaje.MsgAdvertencia)
End If
ObjContratos.Dispose()
End Sub End Sub
Protected Sub BtnConsultar_Click(sender As Object, e As EventArgs) Protected Sub BtnConsultar_Click(sender As Object, e As EventArgs)
CargaDatos() CargaDatos()
End Sub End Sub
Protected Sub RBTipoVista_SelectedIndexChanged(sender As Object, e As EventArgs) Protected Sub RBTipoVista_SelectedIndexChanged(sender As Object, e As EventArgs)
InicializaCalendar() InicializaCalendar()
CargaCronograma() CargaCronograma()
CargaDiagramadeGant()
End Sub End Sub
Protected Sub DdlTipoVista_SelectedIndexChanged(sender As Object, e As EventArgs) Protected Sub DdlTipoVista_SelectedIndexChanged(sender As Object, e As EventArgs)
CargaCronograma(DdlTipoVista.SelectedValue.ToEntero)
CargaDiagramadeGant(DdlTipoVista.SelectedValue.ToEntero)
End Sub End Sub
@@ -537,4 +743,8 @@ Partial Class RepContratosCalendario
End Sub End Sub
Protected Sub DdlTipoVistaCalendario_SelectedIndexChanged(sender As Object, e As EventArgs)
CargaCronograma(DdlTipoVistaCalendario.SelectedValue.ToEntero)
End Sub
End Class End Class

View File

@@ -158,7 +158,7 @@ Partial Class Ventas_Promociones
PermisoAutorizPromocionPorcentaje = UsuarioActual.TienePermisoProceso(386) PermisoAutorizPromocionPorcentaje = UsuarioActual.TienePermisoProceso(386)
EmpresaGrupoDiaz = If(UsuarioActual.Empresa.Funcionalidad(382) = "1", True, False) 'Grupo díaz EmpresaGrupoDiaz = If(UsuarioActual.Empresa.Funcionalidad(382) = "1", True, False) 'Grupo díaz
'EmpresaGrupoDiaz = True ''Para pruebas EmpresaGrupoDiaz = True ''Para pruebas
If EmpresaGrupoDiaz Then If EmpresaGrupoDiaz Then
DVModalClasificacion.Visible = False DVModalClasificacion.Visible = False