/* BusinessLogicImplVenta.java * */

Share Embed Donate


Short Description

Download /* BusinessLogicImplVenta.java * */...

Description

/* * BusinessLogicImplVenta.java * */ package org.app.antares.businesslogic; import org.elf.businesslayer.*; import org.elf.businesslayer.kernel.services.record.*; import org.elf.businesslayer.kernel.services.record.businesslogic.*; import org.elf.common.MiscUtil; import org.elf.datalayer.*; public class BusinessLogicImplVenta extends BusinessLogic { /** * Método que se llama antes de hacer una acción sobre el Record * y que debe comprobar si los datos que hay en el Record * con correctos. * * @param blv Contexto desde el que se llama a la lógica de negocio */ public void validate(BusinessLogicContextValidate blv) { if (blv.getOperation()==BusinessLogicOperation.INSERT) { {//Validar el Nº de tarjeta en la inserción String numTarjeta=(String)blv.getFields().getValue("NumTarjeta"); String tipoTarjeta=(String)blv.getFields().getValue("Id_TPTarjeta"); if ((numTarjeta!=null) && (tipoTarjeta!=null)) { //Validar el Nº de tarjeta según el tipo

1

if (isValidCardType(numTarjeta,tipoTarjeta)==false) { blv.getMessages().addMessage("La numeración no es válida para el tipo de tarjeta"); } //Validar el dÃ−gito de control if (isValidCCNumber(numTarjeta)==false) { blv.getMessages().addMessage("El número de la tarjeta no es válido"); } } } {//Validar si los importes son correctos if (!blv.getFields().getValue("Total_Importe").equals(getTotalImporte((Integer)blv.getFields().getValue("Id_Venta")))) { blv.getMessages().addMessage("El importe total no es correcto"); }

if (!blv.getFields().getValue("Total_Gastos").equals(getTotalGastos((Integer)blv.getFields().getValue("Id_Venta"),(Strin { blv.getMessages().addMessage("El total de los gastos no correcto"); } } { //Validar Si las entradas pertencen a la sesión

int idSesion=((RecordImplSesion)BLSession.createRecord("Sesion")).findIdSesion((String)blv.getFields().getValue("Id_C RecordSet rstEntradasSesion; Parameters entradasSesionParameters=new Parameters(); entradasSesionParameters.addParameter(idSesion,DataType.DT_INT); entradasSesionParameters.addParameter(blv.getFields().getValue("Id_Venta"),DataType.DT_INT); String sql="SELECT * FROM Entrada E WHERE E.Id_Sesion? AND E.Id_Venta=?"; 2

rstEntradasSesion=DLSession.getConnection().executeQuery(sql,entradasSesionParameters); if (rstEntradasSesion.next()) { //Si entramos pos aqui es qe hay entradas para esta venta en otra sesión y eso no puede ser blv.getMessages().addMessage("Ya existen entradas para otra sesión en esta venta,debe borrarlas primero"); } } } } /** * Método que se llama después de crear una nueva fila en memoria * * @param bl Contexto desde el que se llama a la lógica de negocio */ public void postNew(BusinessLogicContext bl) { //Poner la hora de la venta bl.getFields().setValue("Fecha_Venta",new DLDateTime()); } /** * Método que se llama antes de actualizar una fila en la base de datos * * @param bl Contexto desde el que se llama a la lógica de negocio */ public void preUpdate(BusinessLogicContext bl) { //Calculamos el Id_Sesion bl.getFields().setValue("Id_Sesion",getIdSesion(bl.getFields())); }

3

/** * Método que se llama antes de insertar una nueva fila en la base de datos * * @param bl Contexto desde el que se llama a la lógica de negocio */ public void preInsert(BusinessLogicContext bl) { //Calculamos el Id_Sesion en función del resto de datos virtuales del Record bl.getFields().setValue("Id_Sesion",getIdSesion(bl.getFields())); } public void postRead(BusinessLogicContext bl) { { //Obtener los datos de la SESION y ponerlos en los campos virtuales del Record Messages messages=new Messages(); Record rstSesion=BLSession.createRecord("Sesion"); rstSesion.getFields().setValue("Id_Sesion",bl.getFields().getValue("Id_Sesion")); if (rstSesion.read(messages,false)==false) { throw new RuntimeException("No existe la sesión:" + bl.getFields().getValue("Id_Sesion")); } bl.getFields().setValue("Id_Cine",rstSesion.getFields().getValue("Id_Cine")); bl.getFields().setValue("Id_Sala",rstSesion.getFields().getValue("Id_Sala")); bl.getFields().setValue("FechaSesion",rstSesion.getFields().getValue("Fecha_Hora")); DLDateTime dt=(DLDateTime)rstSesion.getFields().getValue("Fecha_Hora"); String horaSesion=MiscUtil.numberToStringZeroPadding(dt.getDateParts().getHour(),2) + ":" + MiscUtil.numberToStringZeroPadding(dt.getDateParts().getMinute(),2); bl.getFields().setValue("HoraSesion",horaSesion); } { //Obtener el valor del campo virtual Nº de entradas RecordSet rstNumEntradas=DLSession.getConnection().executeQuery("SELECT COUNT(*) FROM Entrada 4

WHERE Id_Venta=?",bl.getFields().getValue("Id_Venta"),bl.getFields().getDefColumn("Id_Venta").getDataType()); rstNumEntradas.next(); bl.getFields().setValue("NumEntradas",rstNumEntradas.getObject(0)); } } /** * Método que se llama antes de borrar una fila en la base de datos * * @param bl Contexto desde el que se llama a la lógica de negocio */ public void preDelete(BusinessLogicContext bl) { {//Borramos todas las entradas de esta venta RecordSet rstEntradas=DLSession.getConnection().executeQuery("SELECT Id_Entrada FROM Entrada WHERE Id_Venta=?",bl.getFields().getValue("Id_Venta"),bl.getFields().getDefColumn("Id_Venta").getDataType()); while (rstEntradas.next()) { Record recordEntrada=BLSession.createRecord("Entrada"); recordEntrada.getFields().setValue("Id_Entrada",rstEntradas.getObject("Id_Entrada")); if (recordEntrada.read(new Messages(),true)==false) { throw new RuntimeException("No existe la entrada " + recordEntrada.getFields().getValue("Id_Entrada")); } if (recordEntrada.edit(new Messages(),true)==false) { throw new RuntimeException("No se ha posido editar la entrada " + recordEntrada.getFields().getValue("Id_Entrada")); } if (recordEntrada.delete(new Messages(),true)==false) { throw new RuntimeException("No se ha posido borrar la entrada " + recordEntrada.getFields().getValue("Id_Entrada")); 5

} } } } public void preCancel(BusinessLogicContext bl) { {//Borramos todas las entradas de esta venta RecordSet rstEntradas=DLSession.getConnection().executeQuery("SELECT Id_Entrada FROM Entrada WHERE Id_Venta=?",bl.getFields().getValue("Id_Venta"),bl.getFields().getDefColumn("Id_Venta").getDataType()); while (rstEntradas.next()) { Record recordEntrada=BLSession.createRecord("Entrada"); recordEntrada.getFields().setValue("Id_Entrada",rstEntradas.getObject("Id_Entrada")); if (recordEntrada.read(new Messages(),true)==false) { throw new RuntimeException("No existe la entrada " + recordEntrada.getFields().getValue("Id_Entrada")); } if (recordEntrada.edit(new Messages(),true)==false) { throw new RuntimeException("No se ha posido editar la entrada " + recordEntrada.getFields().getValue("Id_Entrada")); } if (recordEntrada.delete(new Messages(),true)==false) { throw new RuntimeException("No se ha posido borrar la entrada " + recordEntrada.getFields().getValue("Id_Entrada")); } } } } /** * Obtiene el "Id_Sesion" en función de los datos de la sala , fecha y hora

6

**/ private int getIdSesion(KernelFields kf) { int idSesion;

idSesion=((RecordImplSesion)BLSession.createRecord("Sesion")).findIdSesion((String)kf.getValue("Id_Cine"),(String return idSesion; } /** * Obtiene si el nº de una tarjeta es válida en función del tipo de tarjeta * @param number Nº de la tarjeta * @param cardType Tipo de la tarjeta, siendo: * VI: Visa * AE: American Express * MC: Master Card * @retrun Retorna 'true' si la numeración de la tarjeta es válida según su tipo , sino 'false' **/ static public boolean isValidCardType(String number,String cardType) { boolean valid=false; if (number.length()>=4) { if (cardType.equals("VI")) { if ( (number.substring(0,1).equals("4")) && ((number.length()==13) || (number.length()==16))) { //Es una VISA valid=true; } } else if (cardType.equals("AE")) { if ((number.substring(0,2).equals("34") || number.substring(0,2).equals("37")) && (number.length()==15)) { //Es una American Express

7

valid=true; } } else if (cardType.equals("MC")) { if ( ((number.substring(0,2).compareTo("51")>=0 && number.substring(0,2).compareTo("55")= 0; i-= 2) { int k = 0; if (i > 0) { 8

k = Integer.valueOf(s1[i-1]).intValue() * 2; if (k > 9) { String s = "" + k; k = Integer.valueOf(s.substring(0,1)).intValue() + Integer.valueOf(s.substring(1)).intValue(); } checksum += Integer.valueOf(s1[i]).intValue() + k; } else { checksum += Integer.valueOf(s1[0]).intValue(); } } return ((checksum % 10) == 0); } /** * Obtene el importe de una venta * @param idVenta Identificarador de la venta sobre la que se buscan las entradas * @param fechaSesion Fecha de la sesión * @return Importe de la venta **/ static public Object getTotalImporte(int idVenta) { String sql= " SELECT " + " SUM(Precio_Entrada) " + " FROM " + " Entrada " + " WHERE " +

9

" Entrada.Id_Venta=? "; RecordSet rst=DLSession.getConnection().executeQuery(sql,idVenta,DataType.DT_INT); rst.next(); return BLSession.createValue(rst.getDouble(0),"Venta.Total_Importe"); } /** * Obtiene los gastos que tiene una venta * @param idVenta Identificarador de la venta sobre la que se calculan los gasto * @param idCanal Canal de venta de las entradas * @return Gastos de la venta **/ static public Object getTotalGastos(int idVenta,String idCanal,String idCine) { double totalGastos; //No hay gastos en taquilla if ("TA".equalsIgnoreCase(idCanal)) { totalGastos=0; } else { totalGastos=getNumEntradasVenta(idVenta)*getGastosGestionCine(idCine); } return BLSession.createValue(totalGastos,"Venta.Total_Gastos"); } /** * Obtene El nº de entradas de esta venta * @param idVenta Identificarador de la venta sobre la que se buscan las entradas * @return Importe de la venta **/

10

static public int getNumEntradasVenta(int idVenta) { String sql= " SELECT " + " COUNT(*) " + " FROM " + " Entrada " + " WHERE " + " Entrada.Id_Venta=?"; RecordSet rst=DLSession.getConnection().executeQuery(sql,idVenta,DataType.DT_INT); rst.next(); return rst.getInt(0); } /** * Obtiene los gastos asociados a un cine * @param idCine Identificarador del cine sobre el que se obtienen el gasto asociado * @return **/ static public double getGastosGestionCine(String idCine) { Record r=BLSession.createRecord("Cine"); r.getFields().setValue("Id_Cine",idCine); if (r.read(new Messages(),true)==false) { throw new RuntimeException("No ha sido posible obtener los datos del cine:" + idCine); } return (Double)r.getFields().getValue("Gatos_Gestion"); } static public int getIdTarifa(int idSesion) { Record r=BLSession.createRecord("Sesion"); r.getFields().setValue("Id_Sesion",idSesion); 11

if (r.read(new Messages(),true)==false) { throw new RuntimeException("No se han podido leer los datos de la sesión"); } return (Integer)r.getFields().getValue("Id_Tarifa"); } }

12

View more...

Comments

Copyright � 2017 NANOPDF Inc.
SUPPORT NANOPDF