Combos anidados con jquery, ayuda
Hola gente de la pagina tengo una consulta para ustedes, tengo una aplicacion con struts spring hibernate, es grande la aplicacion, pero tengo un problema con unos combos anidados. Tengo dos action uno para cargar el primer combo y nose como llamar al segundo action con jquery.
Encontre esto pero no lo entiendo bien
$(document).ready(function(){
----$('#estadoId').change(function(){
--------$.ajax({
------------type: "POST",
------------url: 'la/url',
------------data: { nombreParametro: valorParametro },
------------success: function(respuesta){
----------------alert('AJAX');
------------}
--------});
----});
});
----$('#estadoId').change(function(){
--------$.ajax({
------------type: "POST",
------------url: 'la/url',
------------data: { nombreParametro: valorParametro },
------------success: function(respuesta){
----------------alert('AJAX');
------------}
--------});
----});
});
aparte de eso que mas necesito para hacerlo andar? espero su respuesta, muchas gracias.
- Inicie sesión o regístrese para enviar comentarios
Esto te puede ayudar
http://www.javamexico.org/blogs/ale_imp/combos_encadenados_con_servlets_...
No justamente con las tecnologias que necesitas en vez de hibernate yo uso jdbc pelon y en ves de struts uso servlets que es casi lo mismo.
Culquier duda estamos en contacto.
//Observese que la respuesta viene del servlet Paises
$.getJSON("Paises", ////////////////////////////////////////////////((((((((((((((((((((((((((((((((((((((((((((((/////////////////////////////En esta parte va el nombre de tu acttion
function(data){
$.each(data.Paises, function(i,item){
$("#idpaises").append("<option value='"+item.id+"'>"+item.TNAME+"</option>");
});
});
$(function(){
//evento change parececido al onchange de javascript que cambia al seleccionar los Paises
$("#idpaises").change(function(){
//Observese que la respuesta viene del servlet Ciudades
$.getJSON("Ciudades", ////////////////////////////////////////////////((((((((((((((((((((((((((((((((((((((((((((((/////////////////////////////En esta parte va el nombre de tu acttion
{
//evaluar el id de paises
id: $(this).val(),
ajax: 'true'
},
function(data){
//limpiar el option value
$("#idCiudades").html("");
$.each(data.Ciuadades, function(i,item2){
$("#idCiudades").append("<option value='"+item2.id+"'>"+item2.nombre+"</option>");
});
});
});
});
</script
gracias por responder
hola ale, gracias por responder, voy a intentar con tu ejemplo, por lo de la tecnologia, el cliente queria con esos framework jejeje
Pues no importa mucho
Lo importante es q entiendas como con jquery invocas a tu controlador y luego el controlador como invoca al modelo.
El controlador puede ser cualquier tecnología, y el modelo también, es lo chido de aplicar el mvc, no cierras tus proyectos a ciertas tecnologías
cuando al cliente se le antoja cambiar por ejemplo de controlador, puede ser un action de struts un controller de spring mvc o un servlet, las demas capas de abajo ni se enteran.
Yo pienso que sería muy difícil que encuentres un ejemplo exactamente como lo quieres.
justo eso se me complica, lo
justo eso se me complica, lo de ver donde cambiar para llamar al action y luego usar los datos que retorna el action, se me complica un poco eso jejej
haber mejor que llevas
Postea tu código y yo te ayudo.
codigo
Empezando el primer combo se carga bien con el action de struts,
Esta es la jsp
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@taglib uri="http://displaytag.sf.net" prefix="display"%>
<%@taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
<jsp:useBean id="rol" class="com.alimentosbenedetto.pastas.modelo.dominio.Rol"></jsp:useBean>
<%@page import="com.alimentosbenedetto.pastas.view.struts.actions.ordenesproduccion.InsumoLoteBrowseAction" %>
<c:set var="myRol" value="${sessionScope.rolId}"></c:set>
<SCRIPT type='text/javascript'>
function clearElements(combo){
combo.options.length = 0;
nuevaOpcion = new Option("", "");
combo.options[0] = nuevaOpcion;
i = 0;
var detalleOPDiaria = document.forms[0].detalleOPDiaria.options[document.forms[0].detalleOPDiaria.selectedIndex].value;
if(detalleOPDiaria != '')
opcionSeleccionar = new Option('Cargando...', '');
else
opcionSeleccionar = new Option('Seleccionar', '');
combo.options[i] = opcionSeleccionar;
}
function reloadInsumosProveedores() {
clearElements(document.forms[0].insumoProveedor);
var id = document.forms[0].detalleOPDiaria.value;
new Ajax.Request('<html:rewrite page="/reloadInsumoProveedor.do"/>', {
encoding: 'ISO-8859-1',
method : 'post',
parameters: {detalleOPDiariaId: id},
onComplete: function(transport, json) {
if(json.executeError){
alert(json.executeError);
}
i = 0;
while (i < json.length){
var property = json[i].insumoProveedorId;
var nom = json[i].nomenclaturaLoteInterno;
nom = nom.replace(/Ñ/g, 'Ñ');
var propertyLabel = nom;
var cantidadEstimada = json[i].cantidadEstimada;
var cantidadUsada = json[i].cantidadUsada;
//9999: es usado para guardar cantidad
if(property != '9999'){
nuevaOpcion = new Option(propertyLabel, property);
document.forms[0].insumoProveedor.options[i] = nuevaOpcion;
}else{
//document.forms[0].unidad.value = propertyLabel;
document.forms[0].cantidadEstimada.value = cantidadEstimada;
document.forms[0].cantidadUsada.value = cantidadUsada;
}
i++;
}
//pregunto si es igual a 1 porque siempre va a venir almenos la unidad
if(json.length == 1){
opcionSeleccionar = new Option('Seleccionar', '');
document.forms[0].insumoProveedor.options[0] = opcionSeleccionar;
}
}
});
}
function reloadCombo(){
$(document).ready(function(){
$('#insumosProveedores').change(function(){
$.ajax({
type: "POST",
url: 'reloadInsumoProveedor.do',
data: { detalleOPDiariaId: detalleOPDiariaId },
success: function(respuesta){
alert('AJAX');
}
});
});
});
}
</script>
<h2><bean:message key="insumoLote.title.lote"/>${loteId}</h2>
<div align="center">
<html:form action="/insumoLoteAbm.do?event=create" onsubmit="return validateInsumoLoteAbmForm(this);">
<html:javascript formName="insumoLoteAbmForm" />
<html:hidden property="event" />
<html:hidden property="insumoUtilizadoId" />
<html:hidden property="lote" />
<table class="borders">
<tr>
<td width="60px"><bean:message key="insumoLote.opDiaria.numero"/></td>
<td><html:text property="ordenProdNum" size="10" maxlength="50" readonly="true"></html:text></td>
<td width="60px"><bean:message key="insumoLote.opDiaria.fecha"/></td>
<td><html:text property="fecha" size="10" maxlength="50" readonly="true"></html:text></td>
</tr>
<tr>
<td width="60px"><bean:message key="insumoLote.opDiaria.semana"/></td>
<td><html:text property="semana" size="10" maxlength="50" readonly="true"></html:text></td>
</tr>
</table>
<table class="borders">
<tr>
<td width="60px"><bean:message key="insumoLote.opDiaria.producto"/></td>
<td><html:text property="producto" size="50" maxlength="50" readonly="true"></html:text></td>
<td width="140px"><bean:message key="insumoLote.opDiaria.cantidadEnvase"/></td>
<td><html:text property="cantidadEnvase" size="10" maxlength="50" readonly="true"></html:text></td>
</tr>
</table>
<table class="borders">
<tr>
<td width="140px"><bean:message key="insumoLote.opDiaria.loteProduccion"/></td>
<td><html:text property="nomenclatura" size="30" maxlength="50" readonly="true"></html:text></td>
</tr>
</table>
<c:if test="${myRol eq rol.ROL_SUPERVISOR}">
<div class="addInsumo">
<div class="textWhite">
<bean:message key="insumoLote.opDiaria.ingredientes"/>
<html:select property="detalleOPDiaria" styleClass="textoInput" onchange="javascript:reloadCombo();">
<html:option value=""><bean:message key="general.text.seleccionar"/></html:option>
<html:optionsCollection name="detallesOpDiarias" value="detalleOPDiariaId" label="detalle" />
</html:select>
<bean:message key="insumoLote.opDiaria.cantidadEstimada"/>:
<html:text property="cantidadEstimada" size="5" readonly="true"></html:text>
<bean:message key="insumoLote.opDiaria.cantidadUsada"/>
<html:text property="cantidadUsada" size="5" readonly="true"></html:text>
<br/><br/>
<bean:message key="insumoLote.opDiaria.insumoProveedor"/>:
<html:select property="insumoProveedor" styleClass="textoInput" >
<html:option value=""><bean:message key="general.text.seleccionar"/></html:option>
<html:optionsCollection name="insumosProveedores" value="insumoProveedorId" label="nomenclaturaProveedorCantidad" />
</html:select>
<bean:message key="insumoLote.opDiaria.cantidad"/>: <html:text property="cantidad" size="10" maxlength="10"></html:text>
<br/><br/><input type="submit" value='<bean:message key="general.boton.agregar"/>' class="button" />
</div>
</div>
</c:if>
</html:form>
<br/><font color="red"><html:errors/></font>
<br/><font color="blue"> <html:messages id="msg" message="true" property="message"><bean:write name="msg"/><br> </html:messages> </font>
<display:table id="insumosLotes" name='<%=InsumoLoteBrowseAction.COLLECTION_NAME %>' class="isis" decorator="com.alimentosbenedetto.pastas.view.displaytag.DisplaytagTableDecorator"
requestURI="/insumoLoteAbm.do" >
<display:column property="insumoUtilizadoId" title="ID" sortable="true" />
<display:column property="insumoProveedor.nomenclaturaLoteInterno" title="Lote Interno" sortable="true" style="width: 80px;text-align: left;"/>
<display:column property="insumoProveedor.proveedor.nombre" title="Proveedor" sortable="true" style="width: 250px;text-align: left;"/>
<display:column property="cantidad" title="Cantidad" sortable="true" style="width: 80px;text-align: left;"/>
<display:column property="detalleOPDiaria.insumo.unidad.denominacion" title="Unidad" sortable="true" style="width: 50px;text-align: left;"/>
<display:column property="costoInsumoUtilizado" title="Costo Insumo Utilizado" sortable="true" style="width: 150px;text-align: left;"/>
<display:column property="creationUser" title="Usr. Creación" sortable="true" style="width: 70 px;text-align: left;"/>
<display:column property="insumoLoteDelete" title='Eliminar' style="width: 100px; text-align:center;" />
</display:table>
<br/><html:link page="/loteProduccionAbm.do?event=init&opDiariaId=${opDiariaId}"><bean:message key="general.boton.volver"/></html:link>
</div>
<br/><br/><br/>
lo que me falta es cargar el segundo combo, no lo logro hacer
Este es el action que carga el segundo combo
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.alimentosbenedetto.pastas.modelo.dominio.DetalleOPDiaria;
import com.alimentosbenedetto.pastas.modelo.dominio.InsumoProveedor;
import com.alimentosbenedetto.pastas.modelo.dominio.OrdenProduccionDiaria;
import com.alimentosbenedetto.pastas.view.struts.actions.BaseAction;
public class ReloadInsumoProveedorAction extends BaseAction {
private static final Logger logger = Logger.getLogger(ReloadInsumoProveedorAction.class);
@Override
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws Exception {
String detalleOPDiariaId = request.getParameter("detalleOPDiariaId");
DetalleOPDiaria detalle = (DetalleOPDiaria)getServicioMaster().getDetalleOPDiariaDao().get(Integer.parseInt(detalleOPDiariaId));
logger.debug("detalleOPDiariaId para ajax: " + detalleOPDiariaId);
OrdenProduccionDiaria opDiaria = detalle.getOrdenProduccionDiaria();
reloadInsumoProveedor(request, response, detalleOPDiariaId);
List<DetalleOPDiaria> listaOpDiarias = getServicioMaster().getDetalleOPDiariaDao().findOPDiarias(opDiaria.getOpDiariaId());
logger.debug("cantidad de listas para la opDiaria: "+listaOpDiarias.size());
request.setAttribute("detallesOpDiarias", listaOpDiarias);
response.setContentType("application/x-json;charset=UTF-8");
response.setCharacterEncoding("UTF-8");
return mapping.findForward(FORWARD_INIT);
}
public void reloadInsumoProveedor(HttpServletRequest request,
HttpServletResponse response, String insumoDescripcion)
throws Exception
{
if (insumoDescripcion != null && StringUtils.isNotEmpty(insumoDescripcion)) {
DetalleOPDiaria detalle = (DetalleOPDiaria)getServicioMaster().getDetalleOPDiariaDao().findOne(Integer.parseInt(insumoDescripcion));
List<InsumoProveedor> objects = getServicioMaster().getInsumoProveedorDao().findAll(detalle.getInsumo().getInsumoId());
logger.debug("Cantidad de proveedores: "+ objects.size());
request.setAttribute("insumosProveedores", objects);
logger.debug("ANTES DE ENTRAR AL JSONArray");
JSONArray json = new JSONArray();
for(InsumoProveedor proveedor: objects){
JSONObject jsonObject = new JSONObject();
jsonObject.put("insumoProveedorId", proveedor.getInsumoProveedorId());
logger.debug("Antes del cambio:"+proveedor.getNomenclaturaProveedorCantidad());
logger.debug("Despues del cambio: "+ cambio(proveedor.getNomenclaturaProveedorCantidad()));
jsonObject.put("nomenclaturaLoteInterno", proveedor.getNomenclaturaProveedorCantidad());//cambio(proveedor.getNomenclaturaProveedorCantidad()));
json.add(jsonObject);
}
//Agrego un objeto mas para llevar la cantidad Estimada y Cantidad Real Usada
JSONObject jsonObject = new JSONObject();
response.setCharacterEncoding("UTF-8");
jsonObject.put("insumoProveedorId", "9999");
jsonObject.put("nomenclaturaLoteInterno", detalle.getInsumo().getUnidad().getDenominacion());
jsonObject.put("cantidadEstimada", detalle.getCantidadEstimada());
jsonObject.put("cantidadUsada", detalle.getCantidadRealUsada());
json.add(jsonObject);
response.setContentType("application/x-json;charset=UTF-8");
response.setHeader("X-JSON", json.toString());
response.getWriter().write(json.toString());
}
}
private String cambio(String nomenclatura){
String nom = nomenclatura;
String search = "Ñ";
String sub = "Ñ";
String result = "";
int i;
do {
i = nom.indexOf(search);
if (i != -1) {
result = nom.substring(0,i);
result = result + sub;
result = result +nom.substring(i + search.length());
nom = result;
}
} while (i != -1);
return nom;
}
}
Como veras tube que agregar un metodo que cambie las Ñ por Ñ
y trate de ponerle la codificacion al response pero no hay caso sigue sin funcionar si hay ñ en algun dato
Aqui el action principal que
Aqui el action principal que carga la jsp con el primer combo
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionRedirect;
import com.alimentosbenedetto.pastas.modelo.dominio.DetalleOPDiaria;
import com.alimentosbenedetto.pastas.modelo.dominio.InsumoProveedor;
import com.alimentosbenedetto.pastas.modelo.dominio.InsumoUtilizado;
import com.alimentosbenedetto.pastas.modelo.dominio.Lote;
import com.alimentosbenedetto.pastas.modelo.dominio.OrdenProduccionDiaria;
import com.alimentosbenedetto.pastas.modelo.dominio.Producto;
import com.alimentosbenedetto.pastas.util.Constantes;
import com.alimentosbenedetto.pastas.util.FechaUtil;
import com.alimentosbenedetto.pastas.view.struts.actions.BaseCrudAction;
import com.alimentosbenedetto.pastas.view.struts.forms.ordenesproduccion.InsumoLoteAbmForm;
/**
*
* @author JLopez
*
*/
public class InsumoLoteAbmAction extends BaseCrudAction {
private static final Logger logger = Logger.getLogger(InsumoLoteAbmAction.class);
/**
* Carga los combos
* @param request
*/
@SuppressWarnings("unchecked")
private void setInitialAttributes(HttpServletRequest request,Lote lote){
OrdenProduccionDiaria opDiaria = lote.getOrdenProduccionDiaria();
Integer opDiariaId = opDiaria.getOpDiariaId();
List<DetalleOPDiaria> listaOpDiarias = getServicioMaster().getDetalleOPDiariaDao().findOPDiarias(opDiariaId);
request.setAttribute("detallesOpDiarias", listaOpDiarias);
List<InsumoProveedor> listaInsumosProveedores = new ArrayList<InsumoProveedor>();//getServicioMaster().getInsumoProveedorDao().findAllOrdered("nomenclaturaLoteInterno");
request.setAttribute("insumosProveedores", listaInsumosProveedores);
request.setAttribute("loteId", lote.getLoteId());
request.setAttribute("opDiariaId", lote.getOrdenProduccionDiaria().getOpDiariaId());
List<InsumoUtilizado> listaInsumoaUtilizados = getServicioMaster().getInsumoUtilizadoDao().findAll(lote.getLoteId());
request.setAttribute(InsumoLoteBrowseAction.COLLECTION_NAME, listaInsumoaUtilizados);
}
/**
* Recarga los combos
* @param request
* @param lote
*/
@SuppressWarnings("unchecked")
private void setReloadInitialAttributes(HttpServletRequest request,Lote lote,Integer detalleOPDiariaId, Integer insumoProveedorId,InsumoLoteAbmForm insumoLoteForm){
OrdenProduccionDiaria opDiaria = lote.getOrdenProduccionDiaria();
Integer opDiariaId = opDiaria.getOpDiariaId();
List<DetalleOPDiaria> listaOpDiarias = getServicioMaster().getDetalleOPDiariaDao().findOPDiarias(opDiariaId);
request.setAttribute("detallesOpDiarias", listaOpDiarias);
DetalleOPDiaria detalle = (DetalleOPDiaria)getServicioMaster().getDetalleOPDiariaDao().findOne(detalleOPDiariaId);
request.setAttribute("opDiariaId", lote.getOrdenProduccionDiaria().getOpDiariaId());
List<InsumoProveedor> insumosProveedores = getServicioMaster().getInsumoProveedorDao().findAll(detalle.getInsumo().getInsumoId());
request.setAttribute("insumosProveedores", insumosProveedores);
request.setAttribute("loteId", lote.getLoteId());
List<InsumoUtilizado> listaInsumoaUtilizados = getServicioMaster().getInsumoUtilizadoDao().findAll(lote.getLoteId());
request.setAttribute(InsumoLoteBrowseAction.COLLECTION_NAME, listaInsumoaUtilizados);
insumoLoteForm.setInsumoProveedor(insumoProveedorId.toString());
insumoLoteForm.setDetalleOPDiaria(detalleOPDiariaId.toString());
}
/**
* Agrego datos al formulario
* @param insumoLoteForm
* @param lote
*/
private void setInsumoLoteForm(InsumoLoteAbmForm insumoLoteForm, Lote lote){
OrdenProduccionDiaria opDiaria = lote.getOrdenProduccionDiaria();
Producto producto = opDiaria.getProducto();
insumoLoteForm.setOrdenProdNum(opDiaria.getOpDiariaId().toString());
insumoLoteForm.setSemana(FechaUtil.getWeekOfMonth(opDiaria.getFecha()).toString());
insumoLoteForm.setFecha(opDiaria.getFechaFormatted());
insumoLoteForm.setProducto(producto.getDescripcion());
insumoLoteForm.setCantidadEnvase(opDiaria.getTotalProducto().toString());
insumoLoteForm.setNomenclatura(lote.getNomenclatura());
insumoLoteForm.setLote(lote.getLoteId().toString());
}
/**
* Se setea los datos del formulario a la clase InsumoUtilizado
* @param insumoLoteForm
* @param lote
* @param request
* @return
*/
private InsumoUtilizado getInsumoUtilizado(InsumoLoteAbmForm insumoLoteForm,Lote lote,HttpServletRequest request){
InsumoUtilizado insumoUtilizado = new InsumoUtilizado();
Integer detalleOpD = Integer.parseInt(insumoLoteForm.getDetalleOPDiaria());
DetalleOPDiaria detalle = (DetalleOPDiaria)getServicioMaster().getDetalleOPDiariaDao().get(detalleOpD);
logger.debug("Detalle OPDiarioa: "+detalle.getDetalleOPDiariaId());
Integer insumoProveedorId = Integer.parseInt(insumoLoteForm.getInsumoProveedor());
InsumoProveedor insumoProveedor = (InsumoProveedor)getServicioMaster().getInsumoProveedorDao().get(insumoProveedorId);
logger.debug("Insumo Proveedor: "+insumoProveedor.getInsumoProveedorId());
insumoUtilizado.setDetalleOPDiaria(detalle);
insumoUtilizado.setCantidad(Double.parseDouble(insumoLoteForm.getCantidad()));
insumoUtilizado.setLote(lote);
insumoUtilizado.setInsumoProveedor(insumoProveedor);
insumoUtilizado.setCostoInsumoUtilizado(insumoUtilizado.getCantidad() * insumoProveedor.getCostoUnitario());
actualizarDatos(insumoLoteForm, detalle, insumoProveedor, request);
return insumoUtilizado;
}
/**
* Metodo para actualizar datos de DetalleOpDiaria e InsumoProveedor
* @param insumoLoteForm
* @param detalle
* @param insumoProveedor
* @param request
*/
@SuppressWarnings("unchecked")
private void actualizarDatos(InsumoLoteAbmForm insumoLoteForm,
DetalleOPDiaria detalle,InsumoProveedor insumoProveedor, HttpServletRequest request){
logger.debug("Cantidad Disponible: "+insumoProveedor.getCantidadDisponible());
logger.debug("Cantidad: "+insumoLoteForm.getCantidad());
if (insumoProveedor.getCantidadDisponible() == null) {
insumoProveedor.setCantidadDisponible(0.0);
}
Double cantidadDisponible = insumoProveedor.getCantidadDisponible() - Double.parseDouble(insumoLoteForm.getCantidad());
insumoProveedor.setCantidadDisponible(cantidadDisponible);
setModificationAuditFields(insumoProveedor, insumoLoteForm, request);
getServicioMaster().getInsumoProveedorDao().update(insumoProveedor);
//Actualizando Datos de la orden de produccion
Double cantidadReal = (detalle.getCantidadRealUsada());
Double cantidad = Double.parseDouble(insumoLoteForm.getCantidad());
detalle.setCantidadRealUsada(cantidadReal + cantidad);
Double factorSeguridad = (detalle.getCantidadRealUsada() / detalle.getCantidadEstimada() );
logger.debug("Cantidad Real Usada: "+detalle.getCantidadRealUsada());
logger.debug("Factor de Seguridad: "+factorSeguridad);
detalle.setFactorSeguridad(factorSeguridad);
setModificationAuditFields(detalle, insumoLoteForm, request);
getServicioMaster().getDetalleOPDiariaDao().update(detalle, detalle.getCantidadRealUsada(), detalle.getFactorSeguridad(), getUserFormSession(request));
}
@Override
protected void initializeAction(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
InsumoLoteAbmForm insumoLoteForm = (InsumoLoteAbmForm)form;
Integer loteId = Integer.parseInt(request.getParameter("loteId"));
Lote lote = (Lote)getServicioMaster().getLoteDao().finOneLote(loteId);
setInitialAttributes(request, lote);
setInsumoLoteForm(insumoLoteForm, lote);
}
@Override
protected void precreateAction(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
}
@Override
public ActionForward create(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
InsumoLoteAbmForm insumoLoteForm = (InsumoLoteAbmForm)form;
Integer detalleId = Integer.parseInt(insumoLoteForm.getDetalleOPDiaria());
Integer loteId = Integer.parseInt(insumoLoteForm.getLote());
Lote lote = (Lote)getServicioMaster().getLoteDao().finOneLote(loteId);
Integer insumoProvId = Integer.parseInt(insumoLoteForm.getInsumoProveedor());
InsumoProveedor insumoProveedor = (InsumoProveedor)getServicioMaster().getInsumoProveedorDao().get(insumoProvId);
if (insumoProveedor.getEstadoLab().equals(Constantes.ESTADO_LAB_RETENIDO)) {
addErrorMessage("insumoLoteAbm.form.error.insumoProveedor.estadoLab", request);
setReloadInitialAttributes(request, lote, detalleId, insumoProvId, insumoLoteForm);
return mapping.findForward(FORWARD_INIT);
}
logger.debug("Fecha de vencimiento: "+ insumoProveedor.getFechaVencimiento());
if (insumoProveedor.getFechaVencimiento().before(new Date())) {
addErrorMessage("insumoLoteAbm.form.error.fechaVencimiento", request);
setReloadInitialAttributes(request, lote, detalleId, insumoProvId, insumoLoteForm);
return mapping.findForward(FORWARD_INIT);
}
Double cantidad = Double.parseDouble(insumoLoteForm.getCantidad());
if (cantidad.doubleValue() == 0){
addErrorMessage("insumoLoteAbm.form.error.cantidad", request);
setReloadInitialAttributes(request, lote, detalleId, insumoProvId, insumoLoteForm);
return mapping.findForward(FORWARD_INIT);
}
if (cantidad.doubleValue() > insumoProveedor.getCantidadDisponible()) {
addErrorMessage("insumoLoteAbm.form.error.cantidadDisponible", request);
setReloadInitialAttributes(request, lote, detalleId, insumoProvId, insumoLoteForm);
return mapping.findForward(FORWARD_INIT);
}
InsumoUtilizado insumoUtilizadoExistente = getServicioMaster().getInsumoUtilizadoDao().find(lote, insumoProveedor, Integer.parseInt(insumoLoteForm.getDetalleOPDiaria()));
if(insumoUtilizadoExistente != null){
addErrorMessage("insumoLoteAbm.form.error.exist.InsumoUtilizado", request);
setReloadInitialAttributes(request, lote, detalleId, insumoProvId, insumoLoteForm);
return mapping.findForward(FORWARD_INIT);
}
InsumoUtilizado insumoUtilizado = getInsumoUtilizado(insumoLoteForm, lote, request);
setCreateAuditFields(insumoUtilizado, request);
getServicioMaster().getInsumoUtilizadoDao().save(insumoUtilizado);
//Actualizo LOTE.COSTO_ELABORACION
Double costoElaboracion = null;
if(lote.getCostoElaboracion() == null)
costoElaboracion = insumoUtilizado.getCostoInsumoUtilizado();
else
costoElaboracion = lote.getCostoElaboracion() + insumoUtilizado.getCostoInsumoUtilizado();
getServicioMaster().getLoteDao().updateCostoElaboracion(lote, costoElaboracion, getUserFormSession(request));
ActionRedirect redirect = new ActionRedirect(mapping.findForward("create"));
redirect.addParameter("event", "init");
redirect.addParameter("loteId", Integer.parseInt(insumoLoteForm.getLote()));
return redirect;
}
@Override
protected void createAction(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
}
@Override
protected void preupdateAction(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
}
@Override
protected void updateAction(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
}
private void actualizarLote(HttpServletRequest request, InsumoUtilizado insumoUtilizado){
Lote lote = (Lote)getServicioMaster().getLoteDao().get(insumoUtilizado.getLote().getLoteId());
Double costoElaboracion = lote.getCostoElaboracion() - insumoUtilizado.getCostoInsumoUtilizado();
getServicioMaster().getLoteDao().updateCostoElaboracion(lote, costoElaboracion, getUserFormSession(request));
}
private void actualizarInsumoProveedor(HttpServletRequest request, ActionForm form, InsumoUtilizado insumoUtilizado){
InsumoLoteAbmForm insumoLoteForm = (InsumoLoteAbmForm)form;
InsumoProveedor insumoProveedor = (InsumoProveedor)getServicioMaster().getInsumoProveedorDao().get(insumoUtilizado.getInsumoProveedor().getInsumoProveedorId());
Double cantidad = insumoProveedor.getCantidadDisponible() + insumoUtilizado.getCantidad();
insumoProveedor.setCantidadDisponible(cantidad);
setModificationAuditFields(insumoProveedor, insumoLoteForm, request);
getServicioMaster().getInsumoProveedorDao().update(insumoProveedor);
}
private void actualizarDetalleOPDiaria(HttpServletRequest request, ActionForm form, InsumoUtilizado insumoUtilizado){
InsumoLoteAbmForm insumoLoteForm = (InsumoLoteAbmForm)form;
DetalleOPDiaria detalleOPDiaria = (DetalleOPDiaria)getServicioMaster().getDetalleOPDiariaDao().get(insumoUtilizado.getDetalleOPDiaria().getDetalleOPDiariaId());
Double cantidadRealUsada = (detalleOPDiaria.getCantidadRealUsada() - insumoUtilizado.getCantidad());
Double factorSeguridad = (cantidadRealUsada / detalleOPDiaria.getCantidadEstimada());
setModificationAuditFields(detalleOPDiaria, insumoLoteForm, request);
logger.debug("Actualizando detalle.");
getServicioMaster().getDetalleOPDiariaDao().update(detalleOPDiaria, cantidadRealUsada, factorSeguridad, getUserFormSession(request));
}
@Override
public ActionForward delete(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
InsumoLoteAbmForm insumoLoteForm = (InsumoLoteAbmForm)form;
Integer insumoUtilizadoId = Integer.parseInt(request.getParameter("insumoUtilizadoId"));
InsumoUtilizado insumoUtilizado = (InsumoUtilizado)getServicioMaster().getInsumoUtilizadoDao().get(insumoUtilizadoId);
actualizarLote(request, insumoUtilizado);
actualizarInsumoProveedor(request, insumoLoteForm, insumoUtilizado);
actualizarDetalleOPDiaria(request, insumoLoteForm, insumoUtilizado);
setModificationAuditFields(insumoUtilizado, insumoLoteForm, request);
getServicioMaster().getInsumoUtilizadoDao().delete(insumoUtilizado.getInsumoUtilizadoId());
ActionRedirect redirect = new ActionRedirect(mapping.findForward("delete"));
redirect.addParameter("event", "init");
redirect.addParameter("loteId", insumoUtilizado.getLote().getLoteId());
return redirect;
}
@Override
protected void deleteAction(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
// TODO Auto-generated method stub
}
}
Lo que me faltaria es que me
Lo que me faltaria es que me expliques la diferencia de llamar a un action struts y no de servlet, o como es, eso es lo unico que me falta entender.
PD: la parte de javascript en el jsp, lo programo el arquitecto, no me puede ayudar por qu esta en un proyecto para motorola y bue nos quedamos solos. jejejeje