lunes, 18 de diciembre de 2023

Generar numero aleatorio entre un rango especifico en JAVA


Generar número entero aleatorio entre un rango especifico:
int numeroAleatorio = (int) (Math.random() * (max - min + 1)) + min;

Generar número decimal aleatorio entre un rango especifico:
double numeroAleatorio = Math.random() * (max - min) + min;

miércoles, 6 de diciembre de 2023

Enum en java


ENUM
======
Un enum es una coleccion de valores constantes.

public enum Color {
    RED("rojo"),
    GREEN("verde"),
    YELLOW("amarillo");

    private final String color;

    Color(String color) {
        this.color = color;
    }

    public String getColor() {
        return color;
    }
}

public class Main {
    public static void main(String[] args) {
        Color red = Color.RED;
        System.out.println(red.getColor()); //rojo
    }
}

lunes, 4 de diciembre de 2023

Instalar Typescript

Instalar typescript
$> npm install -g typescript

Obtener version de typescript
$> tsc --version

Configuracion del archivo tsconfig.json
$> tsc -init
"rootDir": "./src",
"outDir": "./dist",
"noEmitOnError": false,
"removeComments":true,

Crear carpeta src y poner el archivo index.ts
en la terminal ejecutar : 
$> tsc 
Con el comando se generara el codigo javascript en la carpeta dist.

Compilar todos los archivos que se encuentran en la carpeta src
$> tsc --watch


jueves, 30 de noviembre de 2023

JAVAFX

JavaFX
======
Stage: Representa la ventana principal de la aplicacion
Se pueden crear nuevas instancias de la clase Stage que representan nuevas ventanas.

Scene: Es el que contiene todos los elementos que se encuentran en en Stage.

Node: Son todos los componentes individuales como botones,tablas, etc.

miércoles, 29 de noviembre de 2023

JAVAFX INSTALACION

JavaFX
=========


Descargar SceneBuilder
https://gluonhq.com/products/scene-builder/

Ruta por defecto de SceneBuilder
C:\Users\userPC\AppData\Local\SceneBuilder\

Configurar Scene builder en intellij idea
En Intellij idea >  Ir a Settings
  buscar JavaFX 
  Se le asigna la siguiente ruta:
  C:\Users\UserName\AppData\Local\SceneBuilder\SceneBuilder.exe

Descargar el sdk de JavaFX para jdk 11 y versiones posteriores
https://openjfx.io/

Descomprimir y copiar la carpeta en el Disco C junto al jdk de java.

Añadir el SDK de JavaFX como libreria.
Ir a Project Structure > libraries > Add
C:\Program Files\Eclipse Adoptium\javafx-sdk-21.0.1\lib

Agregar opciones a la VM.
Ir a la Clase Main > Alt + Enter >  modify Run Configuration
   Clic en Modify options > Add VM options > En VM options agregar:
-----------------------------------------------------------------------------------------------------
--module-path "C:\Program Files\Eclipse Adoptium\javafx-sdk-21.0.1\lib" --add-modules javafx.controls,javafx.fxml
-----------------------------------------------------------------------------------------------------








domingo, 26 de noviembre de 2023

Verificar si el form esta abierto (instancia única) WINDOWS FORM MDI

 


private void OpenChildForm(Form childForm)
{
        foreach (Form form in MdiChildren)
        {
            if (form.GetType() == childForm.GetType())
            {
                form.BringToFront();
                if (form.WindowState == FormWindowState.Minimized)
                {
                      form.WindowState = FormWindowState.Normal;
                }
                      return;
            } 
        }
        childForm.MdiParent = this;
        childForm.Show();

}

martes, 17 de octubre de 2023

Conexion a la base de datos con SQL SERVER en C#

Descargar e Instalar:
Microsoft.Data.SqlClient
System.Configuration.ConfigurationManager

En el App.config del proyecto principal:
Configuramos la cadena de conexión para SQL SERVER

<connectionStrings>
    <add name="SqlCn" connectionString="Data Source=TI\
MSSQLSERVER2022;Initial Catalog=salesdb;Integrated Security=True" />
</connectionStrings>
ó
<connectionStrings> 
     <add name="SqlCn" connectionString="Data Source=TI\MSSQLSERVER2022;Initial Catalog=testdb;User ID=sa;Password=123456" />
</connectionStrings>

Otra Forma:
string cadena = @"server = TI\MSSQLSERVER;database = Negocios2022;Trusted_Connection = True;MultipleActiveResultSets = True;TrustServerCertificate = False;Encrypt = False";

En el código C#
Creamos la clase Connection
------------------------------------------------------------------------------
public class Connection
{
    private static Connection instance;

    private Connection() { }

    public static Connection GetInstance()
    {
        if (instance == null)
        {
            instance = new Connection();
        }
        return instance;
    }

    public SqlConnection GetConnection()
    {
        string connectionString = ConfigurationManager.ConnectionStrings["cn"].ConnectionString;
        return new SqlConnection(connectionString);
    }
}
---------------------------------------------------------------------------------------------------------------
public class Connection
{
    private static Connection instance;
    private static readonly object _lock = new object();

    private Connection() { }

    public static Connection GetInstance()
    {
        if (instance == null)
        {
            lock (_lock)
            {
                if(instance == null)
                {
                    instance = new Connection();
                }
             }
        }
        return instance;
    }

    public SqlConnection GetConnection()
    {
        string connectionString = ConfigurationManager.ConnectionStrings["cn"].ConnectionString;
        return new SqlConnection(connectionString);
    }
}



lunes, 16 de octubre de 2023

Patrones de Diseño


Patrones de Diseño
=================
Patrón Singleton: El patrón singleton permite tener una única instancia de una clase para que sea utilizado durante toda la aplicación.

Ejemplo:

public class Connection
{
    private static Connection instance;

    private Connection() { }

    public static Connection GetInstance()
    {
        if (instance == null)
        {
            instance = new Connection();
        }
        return instance;
    }

    public SqlConnection GetConnection()
    {
        string connectionString = ConfigurationManager.ConnectionStrings["cn"].ConnectionString;
        return new SqlConnection(connectionString);
    }
}

    //Connection obj = Connection.GetInstance();


viernes, 29 de septiembre de 2023

Obtener la clave de tu licencia de windows 11

Obtener la clave de tu licencia de windows 11


Ejecutar como administrador la consola de windows
Ejecutar el siguiente comando:

$> wmic path softwarelicensingservice get OA3xOriginalProductKey

jueves, 10 de agosto de 2023

MAPSTRUCT JAVA 17

 


Dependencias de MapStruct y Lombok con MAVEN
Configuración de pom.xml:
==========================

<properties>
  <!-- ... -->
    <org.mapstruct.version>1.5.5.Final</org.mapstruct.version>
    <org.projectlombok.version>1.18.30</org.projectlombok.version>
    <lombok-mapstruct-binding.version>0.2.0</lombok-mapstruct-binding.version>
</properties>

<dependencies>
  <!-- ... -->

    <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct</artifactId>
        <version>${org.mapstruct.version}</version>
    </dependency>
</dependencies>


<build>
    <plugins>
        <plugin>
        <!-- ... --> 
        </plugin>  
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-compiler-plugin</artifactId>
                 <version>3.11.0</version>
            <configuration>
                  <source>17</source>
                  <target>17</target>
             <annotationProcessorPaths>
                 <path>
                   <groupId>org.mapstruct</groupId>
                   <artifactId>mapstruct-processor</artifactId>
                   <version>${org.mapstruct.version}</version>
                 </path>
                 <path>
                  <groupId>org.projectlombok</groupId>
                  <artifactId>lombok</artifactId>
                  <version>${org.projectlombok.version}</version>
                 </path>
                 <path>
                  <groupId>org.projectlombok</groupId>
                  <artifactId>lombok-mapstruct-binding</artifactId>
                  <version>${lombok-mapstruct-binding.version}</version>
   </path>
               </annotationProcessorPaths>
            </configuration>
       </plugin>
    </plugins>
</build>

martes, 8 de agosto de 2023

Thymeleaf

Thymeleaf
=========

Para usar el formato Fecha de tipo LocalDate en la vista, se debe agregar la siguiente dependencia en el archivo pom.xml :

<dependency>
    <groupId>org.thymeleaf.extras</groupId>
    <artifactId>thymeleaf-extras-java8time</artifactId>
    <version>3.0.4.RELEASE</version>
</dependency>

En el controller para pasar una fecha de tipo LocalDate a la vista se debe realizar lo siguiente:

            model.addAttribute("currentDate", LocalDate.now());

En la vista aplicamos el formato de fecha de tipo LocalDate. 

<body>
    <h1 th:text="'Hoy es ' + ${#temporals.format(currentDate,'dd/MM/yyyy')}"></h1>
    <h2 th:text="'Hoy es ' + ${#dates.format(fecha,'dd/MM/yyyy')}"></h2> //Fecha Date
</body>










lunes, 24 de julio de 2023

Agregar JSTL como dependencia de Maven

Agregar JSTL como dependencia de Maven
====================================

Para JDK 17
-------------------
 <dependency>
    <groupId>jakarta.servlet.jsp.jstl</groupId>
    <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
    <version>3.0.0</version>
 </dependency>
 <dependency>
    <groupId>org.glassfish.web</groupId>
    <artifactId>jakarta.servlet.jsp.jstl</artifactId>
    <version>3.0.1</version>
 </dependency>


Hasta JDK 11
------------
 <dependency>
     <groupId>javax.servlet</groupId>
     <artifactId>jstl</artifactId>
     <version>1.2</version>
 </dependency>


Importar las etiquetas JSTL en el JSP
=============================

Colocar al inicio de cada archivo JSP:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>



domingo, 23 de julio de 2023

Instalar Sass

Instalar Sass
======================
Descargar e instalar Sass https://sass-lang.com/
$> npm init -y
$> npm install -g sass

En el archivo package.json agregar en el script:
{
      .
      .
     "script": {
     "test": "echo \"Error: no test specified\" && exit 1",
     "sass": "sass --watch --style=compressed sass/index.scss public/bundle.css",
     "build": "rollup --watch --config"
     },
}

Ejecutar:
$> npm run sass

Validar la creación del archivo bundle.css en la carpeta public.
Vincular el archivo final 
bundle.css en el index.html
<link rel="stylesheet" href="./public/bundle.css" />



Instalacion Rollup


Instalación Rollup
====================

$> npm init -y
$> npm install rollup --save-dev

Crear archivo en la raíz del proyecto
rollup.config.js agregar el siguiente código:

export default {
    input: 'src/index.js',
    output: {
       file: 'public/bundle.js',
       format: 'cjs'
    }
};


En la raíz Crear carpeta src y crear el archivo index.js
En la raíz Crear carpeta public

En el archivo package.json agregar al inicio y en el script:

{
  "type" : "module",
   .
   .
  "script": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "build": "rollup --watch --config"
  },
}


Ejecutar:
$> npx rollup
$> npm run build

Validar la creación del archivo bundle.js en la carpeta public.
Vincular el archivo final bundle.js en el index.html
<script defer src="./public/bundle.js"></script> 



lunes, 15 de mayo de 2023

Procedimientos Almacenados MYSQL

Procedimientos Almacenados MYSQL
===============================
-- Procedimiento Listar
DELIMITER $$
CREATE PROCEDURE sp_getAllCategories()
BEGIN
    SELECT id,descripcion,estado 
    FROM category
    ORDER BY id DESC;
END $$
DELIMITER ;

call sp_getAllCategories();

-- Procedimiento Buscar
delimiter $$
create procedure sp_findCategory(in text varchar(50))
begin
    select name,description
    from category
    where upper(trim(name))  or upper(trim(description)) like concat('%',upper(trim(
text)),'%') and active=1
    order by name asc;
end $$
delimiter ;

delimiter $$
create procedure sp_findAllCategories()
begin
select id,name,description,active 
from category
order by name asc;
end $$
delimiter ;

delimiter $$
create procedure sp_insertCategory(in opt int, 
   in id int,
   in name varchar(50),
                                   in description varchar(255),
                                   in active int)
begin
if(opt=1) then
insert into category(name,descripcion)
values(name, description);
else
update category set name=name, description=description
where id=id;
end if;
end$$
delimiter ;

CALL sp_insertCategory(1,1,'bebidas','bebida inkcola', 1);

-- Procedimiento Eliminar
DELIMITER $$
CREATE PROCEDURE sp_deleteCategory(IN categoryId INT)
BEGIN
    DELETE 
    FROM category
    WHERE id = categoryId;
END $$
DELIMITER ;

CALL sp_deleteCategory(2);

domingo, 9 de abril de 2023

Herencia y polimorfismo en C#


Herencia y polimorfismo
=====================
1.

Solucion:

public class Person
    {
        private string name { get; set; }
        private string lastname { get; set; }
        private int age { get; set; }

        public Person(string name, string lastname, int age)
        {
            this.name = name;
            this.lastname = lastname;
            this.age = age;
        }

        public virtual string ShowData()
        {
            return name + "\n" + lastname + "\n" + age;
        }
    }

public class Student : Person
    {
        public int code { get; set; }
        public double finalNote { get; set; }

        public Student(string name, string lastname, int age, int code, double finalNote) : base(name, lastname, age)
        {
            this.code = code;
            this.finalNote = finalNote;
        }

        public override string ShowData()
        {
            return base.showData() + "\n" + code + "\n" + finalNote;
        }
    }

public class Program
    {
        static void Main(string[] args)
        {
            Student obj = new Student("David", "Perez", 23, 666, 18);
            Console.WriteLine(obj.showData());
            Console.ReadLine();
        }
    }

2. La empresa ABC, desea implementar una aplicación orientada a objetos, para registrar los trabajadores, los cuales están conformados por: Empleados, Vendedores, Directores y Practicantes.

La clase Trabajador (Padre) cuenta con los siguientes atributos:
DNI, NOMBRE, APELLIDO, FECHA INGRESO y CARGO.
Esta clase se definen los siguientes métodos:
Básico:
      cargo es Administrativo, sueldo básico es 4500.
      cargo es Auxiliar, sueldo básico es 1800.
      cargo es Seguridad, sueldo básico es 2500.
Deducción: el cual representa el 5% de su Sueldo Básico.
Neto que es la diferencia entre básico y Deducción.

____
A partir de la clase Trabajador, creamos la clase heredada Empleado, la cual hereda todos los atributos y métodos del padre.

Para esta clase el método bonificación se calcula:
si el cargo es Administrativo o Seguridad, representa el 5% del básico, si es Auxiliar es el 10% del básico.

La Deducción representara el 10% de la suma de básico y bonificación
El neto es Básico más bonificación menos la Deducción 

Defina las clases
Dibuja la GUI para el hijo Director
Programa el botón, instancia la clase, ingresa los datos y visualiza los resultados.

Solucion:

public class Worker
    {
        public string dni { get; set; }
        public string name { get; set; }
        public string lastname { get; set; }
        public DateTime admissionDate { get; set; }
        public string position { get; set; }


        public double Basic()
        {
            double basicSalary = 0.0;
            switch (position)
            {
                case "Administrativo":
                    basicSalary = 4500;
                    break;
                case "Auxiliar":
                    basicSalary = 1800;
                    break;
                case "Seguridad":
                    basicSalary = 2500;
                    break;
                default:
                    break;
            }
            return basicSalary;
        }

        public virtual double Deduction()
        {
            return 0.05 * Basic();
        }

        public virtual double Net()
        {
            return Basic() - Deduction();
        }
    }

public class Employee : Worker
    {

        public double Bonus()
        {
            double bonus = 0;
            if (position == "Administrativo" || position == "Seguridad")
            {
                bonus = 0.05 * Basic();
            }
            else if (position == "Auxiliar")
            {
                bonus = 0.1 * Basic();
            }
            return bonus;
        }

        public override double Deduction()
        {
            return 0.1 * (Basic() + Bonus());
        }

        public override double Net()
        {
            return (Basic() + Bonus()) - Deduction();
        }
    }

Button:
Employee obj = new Employee();
            obj.dni = txtDni.Text;
            obj.name = txtName.Text;
            obj.lastname = txtLastname.Text;
            obj.admissionDate = dtAdmissionDate.Value;
            obj.position = cboPosition.Text;

            dgEmployee.Rows.Add(obj.dni, obj.name, obj.lastname, obj.admissionDate, obj.position, obj.Basic(), obj.Deduction(), obj.Net());

jueves, 6 de abril de 2023

Atajos de Teclado Eclipse

Atajos de Teclado Eclipse
==========================

Auto Import:  Ctrl + Shift + O
Formatear Codigo:  Ctrl + Alt + L

sábado, 1 de abril de 2023

Conexion a la base de datos con MYSQL en JAVA

Conexión a la base de datos con MYSQL en JAVA
========================================


public class ConexionDB {
   private static final String DRIVER = "com.mysql.cj.jdbc.Driver";
   private static final String DB = "dbtest";
   private static final String URL = "jdbc:mysql://localhost:3306/";
   private static final String USER = "root";
   private static final String PASSWORD = "";

   public static Connection getConnection() {
        Connection conn = null;
        try {
            Class.forName(DRIVER);
            conn = DriverManager.getConnection(URL + DB, USER, PASSWORD);
            System.out.println("Successful Connection! ");
        } catch (ClassNotFoundException e) {
          System.out.println("Driver not found for database");
        } catch (SQLException e) {
          System.out.println("Failed 
Connection!" + e.getMessage());
        }
        return conn;
    }
}

viernes, 24 de marzo de 2023

Celdas de JTable no editables

Celdas de JTable no editables
==============================
Click derecho en el JTable -> Customize Code...
Agregar despues de la primera linea de codigo lo siguiente:


tblProducts.setFocusable(false);
tblProducts = new javax.swing.JTable() {
public boolean isCellEditable(int rowIndex,int colIndex){
return false;
}
};

martes, 28 de febrero de 2023

Laragon

-------------------------------------
Dominio Virtual Laragon
-------------------------------------

Ir a Menu Laragon -> Apache -> sites-enabled -> auto.XXX.test.conf

Editar Archivo 
DocumentRoot "D:/php/site1/public" 

------------------------------------------------------------------------------
Configurar var_dump en PHP con colores y ordenado
------------------------------------------------------------------------------
Crear archivo info.php en D:\php\projects
<?php
phpinfo();
?>


Ingresar al navegador a http://localhost/info.php
Copiar todo el contenido de info.php y pegar https://xdebug.org/wizard
Descargar php_xdebug-3.2.0-8.2-vs16-x86_64.dll
Copiar el archivo descargado en C:\laragon\bin\php\php-8.2.3-Win32-vs16-x64\ext

Editar el archivo php.ini y añadir al final
C:\laragon\bin\php\php-8.2.3-Win32-vs16-x64\php.ini
[xdebug]
xdebug.mode = develop,debug
xdebug.start_with_request=yes
xdebug.idekey=VSCODE
zend_extension = "C:\laragon\bin\php\php-8.2.3-Win32-vs16-x64\ext\php_xdebug-3.2.0-8.2-vs16-x86_64.dll"


Reiniciar Apache
Escribir el siguiente código:
<?php 
$arr = ["Lunes","Miercoles","Sabado"];
var_dump($arr);


Ingresar al navegador web y verificar
http://localhost/prueba.php

jueves, 26 de enero de 2023

Gestionar multiples versiones de JAVA CON JEnv

Gestionar multiples versiones de JAVA CON JEnv
===============================================
Clonar Repositorio con la terminal de Git Bash
$> mkdir /c/'Program Files'/JEnv
$> cd /c/'Program Files'/JEnv
$> git clone https://github.com/FelixSelter/JEnv-for-Windows.git
$> cd JEnv-for-Windows

Configurar variables de entorno
Variables de Usuario -> path -> New : C:\Program Files\JEnv\JEnv-for-Windows
 path -> New : C:\Program Files\Java\Amazon Corretto\jdk11.0.18_10\bin
Agregar JAVA_HOME -> New : C:\Program Files\Java\Amazon Corretto\jdk11.0.18_10

Otra Forma:
Desde Consola de windows, Agregar la ruta:
$> [Environment]::SetEnvironmentVariable("Path", [Environment]::GetEnvironmentVariable("Path", "User") + ";C:\Program Files\JEnv\JEnv-for-Windows", "User")

Reiniciar equipo 
Desde la consola de windows Ejecutar:
$> jenv

Añadir JDK
$> jenv add jdk-11.0.18.10  "C:\Program Files\Java\Amazon Corretto\jdk11.0.18_10"
$> jenv list

Establecer Versión Global de Java JDK
$> jenv use jdk-11.0.18.10
$> java -version

Cambiar de Versión de Java
$> jenv change jdk-17.0.6.10

Remover JDK de la lista JEnv
$> jenv remove jdk-7

lunes, 23 de enero de 2023

POSTGRESQL

POSTGRESQL
==============

Crear Usuario Postgresql
====================

Desde la consola:
Ingresar con el usuario postgres
$> psql -U postgres -h localhost -W

CREAR USUARIO
$> CREATE ROLE nameUser WITH SUPERUSER PASSWORD 'password'

Crear una base de datos con un usuario específico como propietario
$> CREATE DATABASE nameDatabase WITH OWNER nameUser;
$> GRANT ALL PRIVILEGES ON DATABASE nameDatabase TO nameUser;


Para ver la estructura de una tabla tenemos que ejecutar la siguiente consulta:
$> select column_name, data_type, is_nullable, character_maximum_length, column_default from INFORMATION_SCHEMA.COLUMNS where table_name = 'posts';


Crear  Tabla en POSTGRESQL
==================================

CREATE TABLE post(
    id BIGINT PRIMARY KEY NOT NULL,
    title VARCHAR(50) NOT NULL UNIQUE,
    description VARCHAR(150) NOT NULL,
    content VARCHAR(255) NOT NULL,
    status CHAR(1) DEFAULT '1' NOT NULL
);
CREATE SEQUENCE seq_post START 1;

INSERT INTO post(id,title,description,content) VALUES(nextval('seq_post'),'My New first Post','First Post description','This is my new first post');

INSERT INTO post(id,title,description,content) VALUES(nextval('seq_post'),'My second Post','Second Post description','This is my new second post');

UPDATE post 
set description='FOURTH POST DESCRIPTION' 
WHERE id=2;

domingo, 22 de enero de 2023

Plantilla THYMELEAF


<!DOCTYPE html>
<html lang="es" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>

</body>
</html>

sábado, 21 de enero de 2023

Anotaciones de JPA

Anotaciones de JPA
================
@Entity
@Table
@Id
@Column
@GeneratedValue
@Enumerated
@Temporal
@Transient
@OneToMany
@ManyToOne
@OneToOne
@ManyToMany

jueves, 19 de enero de 2023

Configuración de Entity Framework Core



Configuración de Entity Framework Core 
=================================
Instalar Microsoft.EntityFrameworkCore
Instalar Microsoft.EntityFrameworkCore.SqlServer
Instalar Microsoft.EntityFrameworkCore.Tools


//Crear Cadena de conexión
"ConnectionStrings": {
    "ConexionSQL": "Server=TI;Database=demoDB;Integrated Security=True;TrustServerCertificate=True"
  },

//Configuracion de la conexion SQL Server
builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("ConexionSQL"))
);

Crear migracion
$> add-migration CreacionTablaCategoriaBD

Ejecutar migracion
$> update-database


martes, 17 de enero de 2023

LinQ Sintaxis de Metodos C#


LinQ Sintaxis de Metodos 
=====================

1. int[] numeros = { 2, 3,  5, 6, 7, 8, 9, 10,12,14,15,16 };
Del arreglo muestre los números pares y que sean mayores  a 10.

Solucion:

List<int> consulta = numeros.Where(n => n % 2 == 0 && n>10).ToList();

foreach (int c in consulta)
     Console.WriteLine(c);  // 12 14 16

2. Se tiene una lista de objetos de tipo persona, crear la clase Persona con las siguientes          propiedades: Nombre, Edad, FechaIngresoEmpresa, Soltero.

List<Persona> personas = new List<Persona>()
            {
                new Persona {Nombre = "Eduardo",Edad=30,FechaIngresoEmpresa = new DateTime(2021,1,2),Soltero=true},
                new Persona {Nombre = "Nidia",Edad=19,FechaIngresoEmpresa = new DateTime(2015,11,12),Soltero=true},
                new Persona {Nombre = "Alejandro",Edad=45,FechaIngresoEmpresa = new DateTime(2020,4,12),Soltero=false},
                new Persona {Nombre = "Valentina",Edad=24,FechaIngresoEmpresa = new DateTime(2021,7,8),Soltero=false},
                new Persona {Nombre = "Roberto",Edad=61,FechaIngresoEmpresa = DateTime.Now.AddDays(-1),Soltero=false}
            };

a)  Listar el nombre y la edad de las personas menores o iguales de 25.
b)  Listar el nombre de las personas que son solteras. 
c)  Listar el nombre y la edad de las personas que son solteras y menores o iguales de 25. 
d)  Listar el nombre de las personas con menos de 3 meses en la empresa.
e)  Listar el nombre y la edad de las personas ordenadas por su edad de manera ascendente.
f)  Listar solo el nombre de las personas
g)  Listar el nombre y la edad de las personas, ordenadas por el nombre de manera ascendente.

Solución:

a)
            List<Persona> listPersons = personas.Where(p => p.Edad <= 25).ToList();

            foreach (Persona p in listPersons)
                Console.WriteLine($"{p.Nombre} {p.Edad}"); //Nidia

b)
            List<Persona> listPersons = personas.Where(p => p.Soltero).ToList();

            foreach (Persona p in listPersons)
                Console.WriteLine($"{p.Nombre}");

c)
            List<Persona> listPersons = personas.Where(p => p.Soltero && p.Edad<=25).ToList();

            foreach (Persona p in listPersons)
                Console.WriteLine($"{p.Nombre} {p.Edad}");


d)
            List<Persona> listPersons = personas.Where(p => p.FechaIngreso>=DateTime.Today.AddMonths(-3)).ToList();

            foreach (Persona p in listPersons)
                Console.WriteLine($"{p.Nombre}");

e)
           var result = personas.OrderBy(p=>p.Edad);

            foreach (Persona p in result)
                Console.WriteLine($"{p.Nombre} {p.Edad}");

f)
           var result = personas.Select(p=>p.Nombre);

            foreach (var nombre in result)
                Console.WriteLine(nombre);

g)
           var result = personas.OrderBy(p=>p.Nombre).Select(p=>new
           {
                Nombre = p.Nombre,
                Edad = p.Edad
            });

            foreach (var p in result)
                Console.WriteLine($"{p.Nombre} {p.Edad}");

3.  Se tiene una lista de empleados, donde tiene 3 propiedades el IdEmpleado, Nombre y el IdModalidad.

            List<Empleado> listaEmpleado = new List<Empleado>
            {
                new Empleado {IdEmpleado=1, Nombre="Pedro", IdModalidad=1},
                new Empleado {IdEmpleado=2, Nombre="Maria", IdModalidad=2},
                new Empleado {IdEmpleado=3, Nombre="Luis", IdModalidad=1},
                new Empleado {IdEmpleado=4, Nombre="Andrea", IdModalidad=3}
            };

Obtener una lista con los nombres de los empleados cuya IdModalidad es igual a 1.

Solución:
List<Empleado> listaEmpleado = new List<Empleado>
    {
        new Empleado {IdEmpleado=1, Nombre="Pedro", IdModalidad=1},
        new Empleado {IdEmpleado=2, Nombre="Maria", IdModalidad=2},
        new Empleado {IdEmpleado=3, Nombre="Luis", IdModalidad=1},
        new Empleado {IdEmpleado=4, Nombre="Andrea", IdModalidad=3}
    };

    var result = listaEmpleado.Where(e => e.IdModalidad == 1).ToList();

    foreach (var e in result)
    {
        Console.WriteLine($"{e.Nombre}");  // Pedro Luis
    }

------------------------------------------------------------------------------------------------------------------
LINQ INNER JOIN

1. Dadas las siguientes 2 listas de objetos, 
   Crear la clase Empleado con las siguientes propiedades: IdEmpleado, Nombre y el IdModalidad
   Crear la clase Modalidad Contrato con las siguientes propiedades: IdModalidad y el NombreM
             List<Empleado> listaEmpleado = new List<Empleado>
            {
                new Empleado {IdEmpleado=1, Nombre="Pedro",IdModalidad=1},
                new Empleado {IdEmpleado=2, Nombre="Jorge",IdModalidad=2},
                new Empleado {IdEmpleado=3, Nombre="Luis",IdModalidad=1},
                new Empleado {IdEmpleado=4, Nombre="Julio",IdModalidad=3},
            };

            List<ModalidadContrato> listaModalidad = new List<ModalidadContrato>
            {
                new ModalidadContrato {IdModalidad=1, NombreModalidad="CAS"},
                new ModalidadContrato {IdModalidad=2, NombreModalidad="TEMPORAL"},
                new ModalidadContrato {IdModalidad=3, NombreModalidad="INDEFINIDO"}
            };

Mediante una consulta linq Imprimir el siguiente resultado:
El empleado "nombre empleado" y el "nombre modalidad". 

Solución:

var consulta = listaModalidad.Join(
                listaEmpleado,
                m => m.IdModalidad,
                e => e.IdModalidad,
                (m, e) => new{NombreModalidad = m.NombreModalidad,NombreEmpleado = e.Nombre});

foreach (var c in consulta)
    Console.WriteLine($"{c.NombreEmpleado} {c.NombreModalidad}");

2. Dadas las siguientes 3 listas de objetos, 
   Crear la clase Empleado con las siguientes propiedades: IdEmpleado, NombreEmpleado y el IdModalidad
   Crear la clase ModalidadContrato con las siguientes propiedades: IdModalidad y el NombreM
   Crear la clase Producto con las siguientes propiedades: IdProducto,NombreProducto, Id

    List<Categoria> listaCategoria = new List<Categoria>
    {
    new Categoria{IdCategoria=1 , NombreCategoria="Fruta"},
    new Categoria {IdCategoria=2 ,NombreCategoria="Verdura"}
    };
List<Proveedor> listaProveedor = new List<Proveedor>
      {
new Proveedor{IdProveedor=1 , NombreProveedor="ABC"},
new Proveedor {IdProveedor=2 , NombreProveedor="XYZ"}
       };
List<Producto> listaProducto = new List<Producto>
    {
    new Producto{IdProducto=1 , NombreProducto="Fresa" , IdCategoria=1 , IdProveedor=2},
    new Producto {IdProducto=2 , NombreProducto="Tomate" , IdCategoria=2 , IdProveedor=1}
    };

Listar el nombre del producto, el nombre de la categoria y el nombre del proveedor.

Solucion:

var result = listaCategoria.Join(
    listaProducto,
    cat => cat.IdCategoria,
    prod => prod.IdCategoria,
    (cat, prod) => new { Categoria = cat, Producto = prod }
    ).Join(
    listaProveedor,
    prodcat => prodcat.Producto.IdProveedor,
    prov => prov.IdProveedor,
    (prodcat, prov) => new { ProductoCategoria = prodcat, Proveedor = prov }
    );

foreach (var c in result)
        Console.WriteLine($"{c.ProductoCategoria.Producto.NombreProducto} {c.ProductoCategoria.Categoria.NombreCategoria} {c.Proveedor.NombreProveedor}");



CONST Y ENUM EN C#



CONST Y ENUM EN C#
====================
Un enum es una coleccion de constantes.
No se pueden asignar valores de tipo cadena.
Se recomienda no asignar valores, solo mantener sus valores por defecto

Ejemplo ENUM:

public enum Meses
{
   Enero = 1,
   Febrero = 2,
   Marzo = 3,
   Abril  = 4,
   Mayo 
= 5, 
   Junio = 6,
   Julio = 7,
   Agosto = 8,
   Setiembre = 9,
   Octubre = 10,
   Noviembre = 11,
   Diciembre = 12
}

public class Program
{
    public static int Main()
   {
     Meses mes = Meses.Enero;
    Console.WriteLine((int)mes);   //1
    }
}

Ejemplo CONST:

public class TipoAfiliacion
 {
    public const double DescuentoAFP = 0.11;
    public const double DescuentoSNP = 0.06;
    public const double DescuentoESSALUD = 0.03;
 }

public class Program
{
public static int Main()
{
double a = TipoAfiliacion.DescuentoAFP ;
        double b = TipoAfiliacion.DescuentoAFP ;
        double c = TipoAfiliacion.DescuentoAFP ;
        Console.WriteLine(a);  //0.11
        Console.WriteLine(b);  //0.06
        Console.WriteLine(c);  //0.03
}
}



lunes, 16 de enero de 2023

Migración a Spring boot 3 - JAVA 17


Migración a Spring boot 3 - JAVA 17
=============================
1. Cambiar versión de Spring boot version 3.0.x en pom.xml
2. Cambiar el nombre del paquete de javax a jakarta
3. Eliminar y crear nueva database
4. Insertar registros en las tablas

Restablecer el puerto 8080


Restablecer el puerto 8080

$> netstat -ano | findstr :8080
     TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 6804

$> taskkill /PID 6804 /F

Instalar Powershell 7

Instalar Powershell Version 7 -------------------------------------- $> winget search powershell $> winget install Microsoft.Powershe...