com.cosw.productsmaster.main.Funciones.java Source code

Java tutorial

Introduction

Here is the source code for com.cosw.productsmaster.main.Funciones.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.cosw.productsmaster.main;

import com.cosw.productsmaster.persistencia.DetalleCompra;
import com.cosw.productsmaster.persistencia.DetalleCompraId;
import com.cosw.productsmaster.persistencia.Envio;
import com.cosw.productsmaster.persistencia.EstadoEnvio;
import com.cosw.productsmaster.persistencia.Factura;
import com.cosw.productsmaster.persistencia.Lugar;
import com.cosw.productsmaster.persistencia.Pedido;
import com.cosw.productsmaster.persistencia.Producto;
import java.util.Date;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.hibernate.Query;
import org.hibernate.Session;

/**
 *
 * @author hcadavid
 */
public class Funciones {

    private Funciones() {
    }

    /**
     * Crea un nuevo pedido
     * @param s La sesion
     * @param direccion La direccion del pedido
     * @param fecha La fecha de envio del pedido
     * @param idProductos Los productos que se van a aregistrar al pedido
     * @param cantidades Las cantidad de los producto que van a ser registrados
     * @return El valor total del pedido
     * @throws Exception En caso de que cantidaddes.length != idProductos
     */
    public static int registroPedido(Session s, String direccion, Date fecha, int[] idProductos, int[] cantidades)
            throws Exception {
        if (idProductos.length != cantidades.length)
            throw new Exception("cantidades no corresponder al numero de productos a pedir");

        int valorPedido = 0;
        Set<DetalleCompra> detallesCompra = new HashSet<>();
        Pedido pedido = new Pedido(direccion, fecha, 0);
        int idPedido = (int) s.save(pedido);

        for (int i = 0; i < idProductos.length; i++) {
            int idProducto = idProductos[i];
            DetalleCompraId idDetalle = new DetalleCompraId(idPedido, idProducto);
            Producto producto = (Producto) s.load(Producto.class, idProducto);

            valorPedido += cantidades[i] * producto.getPrecioLista();

            DetalleCompra detalleCompra = new DetalleCompra(idDetalle, producto, cantidades[i],
                    producto.getPrecioLista());
            detallesCompra.add(detalleCompra);
            s.save(detalleCompra);
        }

        pedido.setDetalleCompras(detallesCompra);
        pedido.setValorTotal(valorPedido);

        s.update(pedido);

        return valorPedido;
    }

    /**
     * Pedidos de los ltimos N das que tengan en comn productos de un mismo proveedor.
     * @param s La sesion
     * @param dia Cantidad de los ultimos dias
     * @param idProveedor El proveedor
     * @return La lista de los pedidos que se encontraron
     */
    public static List<Pedido> pedidosNDiasProductos(Session s, int dia, int idProveedor) {
        Query q2 = s.createQuery(
                "SELECT e.pedidos from Envio e inner join e.pedidos as p inner join p.detalleCompras as detalleP inner join detalleP.productos as prod inner join prod.proveedores as prov where (prov.idProveedores = ?) and (day(e.fechaSalida) < day(:finalDate)) GROUP BY prov");
        Date fecha = new Date();
        Date fechaFinal = new Date(fecha.getYear(), fecha.getMonth(), fecha.getDate() - dia);
        return null;
    }

    /**
     * Registra un nuevo envio de los pedidos que llegan por parametro
     * @param s La sesion
     * @param idPedidos El array de los id de los pedidos que van a ser asociados al pedido
     * @param idLugar El identificador del lugar donde inicialmente se encuentra el envio
     * @return  El id del envio registrado
     */
    public static int registroEnvio(Session s, int[] idPedidos, int idLugar, Date fechaSalida) {
        //FALTA VERIFICAR QUE LOS PEDIDOS QUE LLEGUEN POR PARAMETRO NO SE ENCUENTREN ACTUALMENTE EN UN ENVIO
        Envio e = new Envio(fechaSalida);
        Lugar l = (Lugar) s.load(Lugar.class, idLugar);
        EstadoEnvio ev = new EstadoEnvio(e, l, EstadoEnvio.OFICINA, "Este es un envio de prueba",
                "LATITUD:4248'47\"589_LONGITUD:138'52\"684");
        e.getEstadoEnvios().add(ev);
        for (int i = 0; i < idPedidos.length; i++) {
            Pedido p = (Pedido) s.load(Pedido.class, idPedidos[i]);
            e.getPedidos().add(p);
        }
        s.save(e);
        return e.getIdEnvio();
    }

    /**
     * Valor a pagar, por proveedor, de un pedido
     * @param s La sesion
     * @param idPedido El identificador del pedido
     * @return Retorna una lista con el proveedor y el valor a pagar.
     */
    public static List<Object[]> valorPagarProveedorPedido(Session s, int idPedido) {
        Query q1 = s.createQuery("SELECT proveedor, SUM(detail.cantidad * detail.precioUnitario)" + "FROM Pedido p "
                + "INNER JOIN p.detalleCompras detail " + "INNER JOIN detail.productos product "
                + "INNER JOIN product.proveedores proveedor " + "WHERE p.idPedidos = :idPedido "
                + "GROUP BY proveedor");
        q1.setInteger("idPedido", idPedido);
        return q1.list();
    }
}