<script src="componentes/talento-humano/recursos/js/go.js"></script>
<div id="myDiagramDiv" style="border: solid 1px black; height: 580px"></div>
<script type="text/javascript" >
var JsonNodo = {
"class": "go.TreeModel",
"nodeDataArray": [
{% for Colaborador in Colaboradores %}
{% if Colaborador.colaboradorJEFEINMEDIATO %}
{
"key":{{Colaborador.colaboradorID}},
"parent":{{Colaborador.colaboradorJEFEINMEDIATO}},
"usuario": {% if Colaborador.usuarioID %}{{Colaborador.usuarioID}}{% else %}0{% endif %},
"login": "{% if Colaborador.usuarioID %}{{Colaborador.usuarioNOMBRE}}{% endif %}",
"cedula":"{{Colaborador.personaIDENTIFICACION}}",
"responsable":"{{Colaborador.personaNOMBRES|striptags}} {{Colaborador.personaAPELLIDOS|raw|nl2br}}",
"cargo":"{{Colaborador.cargoTITULO}}",
"foto": "{{Colaborador.colaboradorFOTO}}"
},
{% endif %}
{% endfor %}
]
};
var levelColors = ["#3333ff", "#927fff", "#7c66ff", "#664cff", "#5133ff", "#3b19ff", "#2100e5", "#2500ff"];
function textStyle() {
return { font: "9pt Segoe UI,sans-serif", stroke: "white" };
}
function fotoColaborador(foto) {
if( foto)
return foto
return 'archivo/colaboradores/fotos/sin-foto.png';
}
function dobleClicNodo(e, obj) {
if( obj.part.data.usuario === 0){
alertaInformacion( "Este colaborador no tiene un usuario asignado." );
}else{
cargarVista(
'usuarios', 'UsuariosColaborador', 'mostrarFormularioEditar',
'UsuariosColaboradorID=' + obj.part.data.key
);
}
}
// this is used to determine feedback during drags
function sePuedenAsociarNodos(node1, node2) {
if (!(node1 instanceof go.Node)) return false; // must be a Node
if (node1 === node2) return false; // cannot work for yourself
if (node2.isInTreeOf(node1)) return false; // cannot work for someone who works for you
return true;
}
function pasarArrastrandoNodoEncimaOtroNodo(e, node, prev) {
var diagram = node.diagram;
var selnode = diagram.selection.first();
var shape = node.findObject("SHAPE");
if (sePuedenAsociarNodos(selnode, node)) {
if (shape) {
shape._prevFill = shape.fill; // remember the original brush
shape.fill = "green";
}
}else{
if (shape) {
shape._prevFill = shape.fill; // remember the original brush
shape.fill = "red";
}
}
}
function salirArrastrandoNodoEncimaOtroNodo(e, node, next) {
var shape = node.findObject("SHAPE");
if (shape && shape._prevFill) {
shape.fill = shape._prevFill; // restore the original brush
}
}
function soltarNodoEncimaOtroNodo(e, node) {
var diagram = node.diagram;
var selnode = diagram.selection.first(); // assume just one Node in selection
var idJefe = node.part.data.key;
var idColaborador = selnode.part.data.key;
var nombreJefe = node.part.data.responsable;
var nombreColaborador = selnode.part.data.responsable;
var cargoJefe = node.part.data.cargo;
var cargoColaborador = selnode.part.data.cargo;
if (sePuedenAsociarNodos(selnode, node)) {
var link = selnode.findTreeParentLink();
if (link !== null) { // reconnect any existing link
confirmacionOperacion("Vinculación de Nuevo Jefe Inmediato","¿Segur@ que desea asociar a "+nombreJefe+" ("+cargoJefe+") como JEFE INMEDIATO de " +nombreColaborador+ " ("+cargoColaborador+") ?", function(){
ejecutarOperacion(
"talento-humano", "colaboradores", "cambiarJefeInmediato",
"colaboradorID="+idColaborador+"&jefeInmediatoID="+idJefe,
function(){
link.fromNode = node;
}
);
});
} else {
confirmacionOperacion("Vinculación de Nuevo Jefe Inmediato","¿Segur@ que desea asociar a "+nombreJefe+" ("+cargoJefe+") como JEFE INMEDIATO de " +nombreColaborador+ " ("+cargoColaborador+") ?", function(){
ejecutarOperacion(
"talento-humano", "colaboradores", "cambiarJefeInmediato",
"colaboradorID="+idColaborador+"&jefeInmediatoID="+idJefe,
function(){
diagram.toolManager.linkingTool.insertLink(node, node.port, selnode, selnode.port);
}
);
});
}
}
}
function init() {
var $ = go.GraphObject.make;
myDiagram =
$(go.Diagram, "myDiagramDiv", {
initialContentAlignment: go.Spot.Center,
//initialAutoScale: go.Diagram.UniformToFill,
allowZoom: true,
maxSelectionCount: 1, // users can select only one part at a time
validCycle: go.Diagram.CycleDestinationTree, // make sure users can only create trees
layout: $(go.TreeLayout, {
treeStyle: go.TreeLayout.StyleLastParents,
arrangement: go.TreeLayout.ArrangementHorizontal,
// properties for most of the tree:
angle: 90,
layerSpacing: 78,
// properties for the "last parents":
alternateAngle: 90,
alternateLayerSpacing: 78,
alternateAlignment: go.TreeLayout.AlignmentBus,
alternateNodeSpacing: 78
}
),
});
myDiagram.layout.commitNodes = function() {
go.TreeLayout.prototype.commitNodes.call(myDiagram.layout);
myDiagram.layout.network.vertexes.each(function(v) {
if (v.node) {
var level = v.level % (levelColors.length);
var color = levelColors[level];
var shape = v.node.findObject("SHAPE");
if (shape) shape.fill = $(go.Brush, "Linear", { 0: color, 1: go.Brush.lightenBy(color, 0.05), start: go.Spot.Left, end: go.Spot.Right });
}
});
};
myDiagram.nodeTemplate =
$(go.Node, "Auto",
{ doubleClick: dobleClicNodo },
// define the node's outer shape
$(go.Shape, "Rectangle", {
name: "SHAPE",
fill: "white",
stroke: null,
cursor: "pointer"
}),
$(go.Panel, "Vertical",
$(go.Picture, {
name: "Picture",
desiredSize: new go.Size(128, 128),
margin: new go.Margin(3, 3, 3, 3),
background: "white",
// border: new go.Border(1, 1, 1, 1),
},
new go.Binding("source", "foto", fotoColaborador)
),
$(go.Panel, "Table", {
maxSize: new go.Size(170, 999),
margin: new go.Margin(6, 10, 0, 3),
defaultAlignment: go.Spot.Center
},
$(go.RowColumnDefinition, {
column: 1,
width: 4
}),
$(go.TextBlock, textStyle(),
{
row: 0,
column: 0,
font: "9pt Segoe UI,sans-serif",
minSize: new go.Size(10, 16)
},
new go.Binding("text", "cargo").makeTwoWay()
),
$(go.TextBlock, textStyle(),
{
row: 1,
column: 0,
font: "11pt Segoe UI,sans-serif",
minSize: new go.Size(10, 14),
margin: new go.Margin(0, 0, 0, 3)
},
new go.Binding("text", "responsable").makeTwoWay()
),
$(go.TextBlock, textStyle(),
{
row: 2,
column: 0,
font: "italic 9pt sans-serif",
minSize: new go.Size(10, 14)
},
new go.Binding("text", "login").makeTwoWay()
),
$(go.TextBlock, textStyle(),
{
row: 3,
column: 0,
font: "italic 9pt sans-serif",
minSize: new go.Size(10, 14)
},
new go.Binding("text", "cedula").makeTwoWay()
)
) // end Table Panel
), // end Horizontal Panel
{ doubleClick: dobleClicNodo },
{ mouseDragEnter: pasarArrastrandoNodoEncimaOtroNodo},
{ mouseDragLeave: salirArrastrandoNodoEncimaOtroNodo},
{ mouseDrop: soltarNodoEncimaOtroNodo},
); // end Node
myDiagram.linkTemplate =
$(go.Link, go.Link.Orthogonal,
{ corner: 5, relinkableFrom: true, relinkableTo: true },
$(go.Shape, { strokeWidth: 4, stroke: "#00a4a4" })); // the link shape
// read in the JSON-format data from the "mySavedModel" element
myDiagram.model = go.Model.fromJson(JsonNodo);
}
init();
</script>