Advertisement
Cristian-Paolini

Controller Deep Entity

Aug 31st, 2022
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
JavaScript 18.46 KB | Gaming | 0 0
  1. sap.ui.define([
  2.     "sap/ui/core/mvc/Controller",
  3.     "sap/m/MessageToast",
  4.     "sap/ui/core/UIComponent",
  5.     "sap/ui/model/json/JSONModel",
  6.     "sap/ui/core/Fragment",
  7.     "sap/m/MessageBox",
  8.     "academia2022/zjuegospa/model/formatter",
  9.     "sap/ui/model/Filter",
  10.     "sap/ui/model/FilterOperator"
  11. ],
  12.     /**
  13.      * @param {typeof sap.ui.core.mvc.Controller} Controller
  14.      */
  15.     function (Controller, MessageToast, UIComponent, JSONModel, Fragment, MessageBox, formatter, Filter, FilterOperator) {
  16.         "use strict";
  17.         var oThis;
  18.         return Controller.extend("academia2022.zjuegospa.controller.CompaniaDetalle", {
  19.             formatter: formatter,
  20.  
  21.             onInit: function () {
  22.                 oThis = this;
  23.  
  24.                 //modelo usado para configuraciones de la vista
  25.                 var oViewModel = new JSONModel({
  26.                     esEditarJuego: false
  27.                 });
  28.                 this.getView().setModel(oViewModel, "vista");
  29.  
  30.                 //modelo usado para la creación y modificación de juegos (JSON - cliente)
  31.                 var oJuegoModel = new JSONModel();
  32.                 this.getView().setModel(oJuegoModel, "juego");
  33.  
  34.                 var oJuegosModel = new JSONModel();
  35.                 this.getView().byId("idTablaCompaniaDetalle").setModel(oJuegosModel, "juegosJson");
  36.  
  37.                 let oRouter = UIComponent.getRouterFor(this);
  38.                 oRouter.getRoute("RouteCompaniaDetalle").attachPatternMatched(this._onRouteMatched, this);
  39.                
  40.             },
  41.  
  42.             /* ----------------------------------- */
  43.                     //CRUD - GET ENTITY SET
  44.             /* ----------------------------------- */
  45.             traerJuegos: function () {
  46.                 let oModel = this.getView().getModel();
  47.                 oModel.read("/JuegoSet", {
  48.                     success: function (oData) {
  49.                         this.getView().byId("idTablaCompaniaDetalle").getModel("juegosJson").setData(oData.results);
  50.                     }.bind(this),
  51.                     error: function (oError) {
  52.                         this.getView().byId("idTablaCompaniaDetalle").getModel("juegosJson").setData([]);
  53.                     }.bind(this)
  54.                 });
  55.             },
  56.  
  57.             onAfterRendering: function () {
  58.                 this.traerJuegos();
  59.             },
  60.            
  61.             _onRouteMatched: function (oEvent) {
  62.                 let IdCompania = oEvent.getParameter("arguments").IdCompania;
  63.                 IdCompania = parseInt(IdCompania);
  64.                 this._IdCompania = IdCompania;
  65.  
  66.                 this.getView().getModel().metadataLoaded().then(
  67.                     function () {
  68.                         let path = this.getView().getModel().createKey("/CompaniaSet", {
  69.                             IdCompania: IdCompania
  70.                         });
  71.  
  72.                         this.getView().bindElement({ path: path });
  73.                         this.getView().getModel().refresh();
  74.                        
  75.                     }.bind(this)
  76.                 );
  77.  
  78.             },
  79.              // Dispara un Popup para iniciar la carga de juegos
  80.             onAddJuegos: function () {
  81.                 if (!this.dialogAddJuegos) {
  82.                    
  83.                     Fragment.load({
  84.                         name: "academia2022.zjuegospa.view.fragments.AgregarJuegos",
  85.                         controller: this,
  86.                         id: this.getView().getId()
  87.                     }).then(function (oPopup) {
  88.    
  89.                         //se asigna un control en una variable, para poder capturarlo luego
  90.                         this._oDialogAddJuegos = oPopup;
  91.                         this.getView().addDependent(oPopup);
  92.    
  93.                         //destruirlo cuando lo cierro
  94.                         this._oDialogAddJuegos.attachAfterClose(function (oEvent) {
  95.                             oEvent.getSource().destroy();
  96.                         });
  97.    
  98.                         //Modelo inicial cuando abre el popup
  99.                         this._oDialogAddJuegos.attachAfterOpen(function () {
  100.                             var oModeloJuegos = new JSONModel([
  101.                                 {
  102.                                     NombreJuego: "",
  103.                                     UrlLogoJuego: "",
  104.                                     Precio: "",
  105.                                     FechaLanzamiento: new Date(),
  106.                                     Multijugador: "",
  107.                                     EnLinea: ""
  108.                                 }
  109.                             ]);
  110.                             this._oDialogAddJuegos.setModel(oModeloJuegos, "AgregarJuegos");
  111.                         }.bind(this));
  112.                             this._oDialogAddJuegos.open();
  113.                     }.bind(this));
  114.                 }
  115.                 // this.traerJuegos();
  116.             },
  117.  
  118.             onCloseDialogJuegos: function () {
  119.                 this._oDialogAddJuegos.close();
  120.             },
  121.  
  122.             onCloseDialogJuego: function () {
  123.                 this._oDialogJuego.close();
  124.             },
  125.  
  126.             onAddLineaJuego: function () {
  127.                 var aJuegos = this._oDialogAddJuegos.getModel("AgregarJuegos").getData();
  128.  
  129.                 aJuegos.push({
  130.                     NombreJuego: "",
  131.                     UrlLogoJuego: "",
  132.                     Precio: "",
  133.                     FechaLanzamiento: new Date(),
  134.                     Multijugador: "",
  135.                     EnLinea: ""
  136.                 });
  137.                 this._oDialogAddJuegos.getModel("AgregarJuegos").setData(aJuegos);
  138.             },
  139.  
  140.             validarArrayJuegos: function (aJuegos) {
  141.                 let valido = true;
  142.                 var urlLogoJuegoregex = /(http(s?):)([/|.|\w|\s|-])*\.(?:jpg|gif|png)/;
  143.                 var nombreJuegoregex = /[A-Za-z\d\s]/;
  144.                 var nombreSinEspacioJuegoregex = /^([ \u00c0-\u01ffa-zA-Z'\-])+$/;
  145.                 var precioJuegoregex = /^[0-9]+$/;
  146.                 aJuegos.forEach(juego => {
  147.                
  148.                     if (juego.UrlLogoJuego == "" || !urlLogoJuegoregex.test(juego.UrlLogoJuego)) {
  149.                         valido = false;
  150.                     }
  151.                     if (juego.NombreJuego == "" || (!nombreSinEspacioJuegoregex.test(juego.NombreJuego) && !nombreJuegoregex.test(juego.NombreJuego))) {
  152.                         valido = false;
  153.                     }
  154.                     if (juego.Precio == "" || !precioJuegoregex.test(juego.Precio)) {
  155.                         valido = false;
  156.                     }
  157.  
  158.                 });
  159.                 return valido;
  160.             },
  161.  
  162.             /* ----------------------------------- */
  163.                     //CRUD - CREATE DEEP ENTITY (1 O MUCHOS)
  164.             /* ----------------------------------- */
  165.             onSaveJuegos: function (params) {
  166.                 var aJuegos = this._oDialogAddJuegos.getModel("AgregarJuegos").getData();
  167.                 var oData = {
  168.                     IdCompania: this._IdCompania
  169.                 };
  170.  
  171.                  formatter.formatearSelects(aJuegos);
  172.                  oData.To_Juegos = aJuegos;
  173.                
  174.                  if (this.validarArrayJuegos(aJuegos)) {
  175.                    
  176.                     this.getView().getModel().create("/CompaniaSet" , oData, {
  177.                         success: function (aJuegos) {
  178.                             MessageToast.show("Éxito");
  179.                             this.onCloseDialogJuegos();
  180.                             this.getView().getModel().refresh();
  181.                         }.bind(this),
  182.                         error: function (oError) {
  183.                             MessageToast.show("Error");
  184.                         }.bind(this)
  185.                        
  186.                     });
  187.                
  188.                 } else {
  189.                     MessageToast.show("No se pudo agregar ningún juego. Verifique todos los ingresos");                  
  190.                 }
  191.             },
  192.            
  193.             /* ----------------------------------- */
  194.                     //CRUD - DELETE ENTITY
  195.             /* ----------------------------------- */
  196.             borrarJuego: function (oEvent) {
  197.                 let oModel = this.getView().getModel();
  198.  
  199.                 let path = oEvent.getSource().getBindingContext().getPath();
  200.  
  201.                 MessageBox.warning("Se borrará el juego seleccionado. ¿Desea continuar?", {
  202.                     actions: [MessageBox.Action.OK, MessageBox.Action.CANCEL],
  203.                     emphasizedAction: MessageBox.Action.OK,
  204.                     onClose: function (sAction) {
  205.                         if (sAction === 'OK') {
  206.                             oModel.remove(path, {
  207.                                 success: function (JuegoBack) {
  208.                                     let sMsg = "Se eliminó el juego";
  209.                                     MessageToast.show(sMsg);
  210.                                 }.bind(this),
  211.                                 error: function (oError) {
  212.                                     MessageToast.show("Error al conectar con SAP");
  213.                                 }.bind(this)
  214.                             });
  215.                         }
  216.                     }.bind(this)
  217.                 });
  218.             },
  219.  
  220.             validarUrlLogoJuego: function () {
  221.                 var urlLogoJuego = this.getView().byId("urlLogoJuego").getValue();
  222.                
  223.                 var urlLogoJuegoregex = /(http(s?):)([/|.|\w|\s|-])*\.(?:jpg|gif|png)/;
  224.  
  225.                 if (urlLogoJuego == "" || !urlLogoJuegoregex.test(urlLogoJuego)) {
  226.                     return false;
  227.                 } else {
  228.                     return true;
  229.                 }
  230.             },
  231.  
  232.             validarNombreJuego: function () {
  233.                 var nombreJuego = this.getView().byId("nombreJuego").getValue();
  234.                
  235.                 var nombreJuegoregex = /[A-Za-z\d\s]/;
  236.                 var nombreSinEspacioJuegoregex = /^([ \u00c0-\u01ffa-zA-Z'\-])+$/;
  237.                
  238.                 if (nombreJuego == "" || (!nombreSinEspacioJuegoregex.test(nombreJuego) && !nombreJuegoregex.test(nombreJuego))) {
  239.                     return false;
  240.                 } else {
  241.                     return true;
  242.                 }
  243.             },
  244.  
  245.             validarPrecio: function () {
  246.                 var precioJuego = this.getView().byId("precio").getValue();
  247.  
  248.                 var precioJuegoregex = /^\d+(\.\d+)*$/;
  249.  
  250.                 if (precioJuego == "" || !precioJuegoregex.test(precioJuego)) {
  251.                     return false;
  252.                 } else {
  253.                     return true;
  254.                 }
  255.             },
  256.  
  257.             validarSelectMultijugador: function () {
  258.                 var multijugador = this.getView().byId("selectMultijugador").getSelectedKey();
  259.                 if (multijugador == "D" || multijugador == "N") {
  260.                     return true;
  261.                 } else {
  262.                     return false;
  263.                 }
  264.             },
  265.            
  266.             validarSelectEnLinea: function () {
  267.                 var enLinea = this.getView().byId("selectEnLinea").getSelectedKey();
  268.                 if (enLinea == "D" || enLinea == "N") {
  269.                     return true;
  270.                 } else {
  271.                     return false;
  272.                 }    
  273.             },
  274.  
  275.             /* ----------------------------------- */
  276.                     //CRUD - UPDATE ENTITY
  277.             /* ----------------------------------- */
  278.             editarJuego: function (oEvent) {
  279.                 let oModel = this.getView().getModel();
  280.                 let oJuego = this.getView().getModel("juego").getData();
  281.                 formatter.formatearSelect(oJuego);
  282.  
  283.                 let path = oModel.createKey("/JuegoSet", {
  284.                     IdJuego: oJuego.IdJuego,
  285.                     IdCompania: oJuego.IdCompania
  286.                 });
  287.  
  288.                 if (!this.validarUrlLogoJuego()) {
  289.                     this.getView().byId("urlLogoJuego").setValueState(sap.ui.core.ValueState.Error);
  290.                 }
  291.                 if (!this.validarNombreJuego()) {
  292.                     this.getView().byId("nombreJuego").setValueState(sap.ui.core.ValueState.Error);
  293.                 }
  294.                 if (!this.validarPrecio()) {
  295.                     this.getView().byId("precio").setValueState(sap.ui.core.ValueState.Error);
  296.                 }
  297.                 if (!this.validarSelectMultijugador()) {
  298.                     this.getView().byId("selectMultijugador").setValueState(sap.ui.core.ValueState.Error);
  299.                 }
  300.                 if (!this.validarSelectEnLinea()) {
  301.                     this.getView().byId("selectEnLinea").setValueState(sap.ui.core.ValueState.Error);
  302.                 }
  303.                 if (this.validarUrlLogoJuego() && this.validarNombreJuego() && this.validarPrecio() &&
  304.                     this.validarSelectMultijugador() && this.validarSelectEnLinea()) {
  305.                     oModel.update(path, oJuego, {
  306.                         success: function (JuegoBack) {
  307.                             let sMsg = "Se modificó el juego " + oJuego.NombreJuego;
  308.                             MessageToast.show(sMsg);
  309.                             this.onCloseDialogJuego();
  310.                         }.bind(this),
  311.  
  312.                         error: function (oError) {
  313.                             MessageToast.show("Error al conectar con SAP");
  314.                         }
  315.                     });
  316.                 } else {
  317.                     MessageToast.show("No se pudo modificar el juego. Por favor, verifique los datos ingresados");
  318.  
  319.                 }
  320.             },
  321.             _abrirPopUpJuego: function () {
  322.                 if (!this.dialogAddJuegos) {
  323.                     Fragment.load({
  324.                         name: "academia2022.zjuegospa.view.fragments.PopUpJuego",
  325.                         controller: this,
  326.                         id: this.getView().getId()
  327.                     }).then(function (oPopup) {
  328.                         this._oDialogJuego = oPopup;
  329.                         this.getView().addDependent(oPopup);
  330.                         this._oDialogJuego.attachAfterClose(function (oEvent) {
  331.                             oEvent.getSource().destroy();
  332.                         });
  333.                         this._oDialogJuego.open();
  334.                     }.bind(this));
  335.                 }
  336.                
  337.             },
  338.            
  339.             abrirPopUpEdicion: function (evento) {
  340.                 this.getView().getModel("vista");
  341.                 let Juego = evento.getSource().getBindingContext().getObject();
  342.                 this.getView().getModel("juego").setData(Juego);
  343.                 this._abrirPopUpJuego();
  344.             },
  345.  
  346.             onCancelar: function () {
  347.                 this._oDialogJuego.close();
  348.             },
  349.  
  350.             onSearch: function () {
  351.                 var nombreJuego = this.getView().byId("inputNombreJuego").getValue();
  352.                 var multijugador = this.getView().byId("selectFilterMultijugador").getSelectedKey();
  353.                 var enLinea = this.getView().byId("selectFilterEnLinea").getSelectedKey();
  354.  
  355.                 if (multijugador == "D") {
  356.                     multijugador = true;
  357.                 } else if (multijugador == "N") {
  358.                     multijugador = false;
  359.                 }
  360.  
  361.                 if (enLinea == "D") {
  362.                     enLinea = true;
  363.                 } else if (enLinea == "N") {
  364.                     enLinea = false;
  365.                 }
  366.  
  367.                 var aFilters = [];
  368.  
  369.                 if (nombreJuego) {
  370.                     aFilters.push(new Filter("NombreJuego", FilterOperator.Contains, nombreJuego));
  371.                 }
  372.                 // Solo ejecuta los filtros de select si tienen true o false para comparar con BD
  373.                 if (multijugador == true || multijugador == false) {
  374.                     aFilters.push(new Filter("Multijugador", FilterOperator.EQ, multijugador));
  375.                 }
  376.  
  377.                 if (enLinea == true || enLinea == false) {
  378.                     aFilters.push(new Filter("EnLinea", FilterOperator.EQ, enLinea));
  379.                 }
  380.  
  381.                 var oTabla = this.getView().byId("idTablaCompaniaDetalle");
  382.                 oTabla.getBinding("items").filter(aFilters);
  383.             },
  384.  
  385.             navegarJuegoDetalle: function (oEvent) {
  386.                 let Juego = oEvent.getSource().getBindingContext().getObject();
  387.  
  388.                 var oRouter = UIComponent.getRouterFor(this);
  389.  
  390.                 oRouter.navTo("RouteJuegoDetalle", {
  391.                     IdJuego: Juego.IdJuego,
  392.                     IdCompania: Juego.IdCompania
  393.                 });
  394.             },
  395.  
  396.             onVolverACompanias: function () {
  397.                 var oRouter = UIComponent.getRouterFor(this);
  398.  
  399.                 oRouter.navTo("RouteCompanias", { });
  400.             },
  401.  
  402.             abrirValueHelp: function(oEvent){
  403.                 if(!this._oValueHelpJuego){
  404.                     Fragment.load({
  405.                         name: "academia2022.zjuegospa.view.fragments.valueHelpJuegos",
  406.                         controller: this,
  407.                         id: this.getView().getId()
  408.                     }).then(function (oPopup) {
  409.                         this._oValueHelpJuego = oPopup;
  410.                         this.getView().addDependent(oPopup);
  411.                         this._oValueHelpJuego.open();
  412.                     }.bind(this));
  413.                 } else {
  414.                     this._oValueHelpJuego.open();
  415.                 }
  416.             },
  417.             cerrarValueHelp: function(oEvent){
  418.                 var aContexts = oEvent.getParameter("selectedContexts");
  419.                 if (aContexts && aContexts.length) {
  420.                     // MessageToast.show("You have chosen " + aContexts.map(function (oContext) { return oContext.getObject().Name; }).join(", "));
  421.                     this.getView().byId("inputNombreJuego").setValue(aContexts[0].getProperty("NombreJuego"))
  422.                 }
  423.             },
  424.  
  425.             buscarJuego: function (oEvent) {
  426.                 var sValue = oEvent.getParameter("value");
  427.                 var oFilter = new Filter("NombreJuego", FilterOperator.Contains, sValue);
  428.  
  429.                 if (sValue) {
  430.                     var oBinding = oEvent.getParameter("itemsBinding");
  431.                     oBinding.filter([oFilter]);  
  432.                 } else {
  433.                     var oBinding = oEvent.getParameter("itemsBinding");
  434.                     oBinding.filter([]);  
  435.                 }
  436.             }
  437.         });
  438.     });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement