Foros del Web » Programando para Internet » Javascript »

Calcular en función a fechas

Estas en el tema de Calcular en función a fechas en el foro de Javascript en Foros del Web. Hola a todos, tengo un formulario muy simple que sirve para calcular el precio de unos cursos en función al tipo de curso y al ...
  #1 (permalink)  
Antiguo 11/04/2011, 12:24
 
Fecha de Ingreso: mayo-2005
Mensajes: 92
Antigüedad: 19 años
Puntos: 2
Calcular en función a fechas

Hola a todos, tengo un formulario muy simple que sirve para calcular el precio de unos cursos en función al tipo de curso y al alojamiento y lo multiplica por el número de semanas que escoja el usuario. Lo hice así:

- El formulario:

Código:
<form method="post" id="userForm" enctype="multipart/form-data">

curso
<select multiple="multiple" name="form[field1][]"  id="field1"  >
<option  value="100">Curso Básico</option>
<option  value="200">Curso Intensivo</option>
</select>

alojamiento
<select multiple="multiple" name="form[field2][]"  id="field2"  >
<option  value="100">compartido</option>
<option  value="200">individual</option>
<option  value="0">sin alojamiento</option>
</select>


semanas
<input type="text" value="" size="20"  name="form[field3]" id="field3" />


<input type="button" value="Calculate" name="form[Calculate]" id="Calculate" onclick="calculateText();" />

<input type="text" value="" size="20"  name="form[Total]" id="Total" readonly="readonly"/>

</form>
- El código JS:

Código:
<script language="javascript">
function calculateText(){

var op1=document.getElementById('field1');

var op2=document.getElementById('field2');

var op3=document.getElementById('field3');

var result=document.getElementById('Total');

if(op1.value=="" || op1.value!=parseFloat(op1.value)) op1.value=0;

if(op2.value=="" || op2.value!=parseFloat(op2.value)) op2.value=0;

if(op3.value=="" || op3.value!=parseFloat(op3.value)) op3.value=0;

result.value=0;

result.value=parseInt(result.value);

result.value=(parseInt(result.value)+parseInt(op1.value)+parseInt(op2.value))*parseInt(op3.value);}

</script>
Hasta aquí todo bien, y funciona perfectamente. El problema viene ahora que tengo que añadir un campo más para la fecha, ya que dependiendo en que fecha se vaya a escoger hay que aplicar tarifa de baja, media o alta temporada tanto al curso como al alojamiento. Y luego volver al multiplicarlo por el número de semanas.

Más o menos tengo claro lo que hay que hacer;

- primero guardar el tipo de curso como "basico" o "intensivo" (y no como un número como hasta ahora)

- luego guardar, también el tipo de alojamiento, "compartido" "individual" o "sin alojamiento"

- luego, en función de la fecha (Enero-Junio=TempBaja, Junio-Sep=TempMedia, Sep-Dic=TempAlta) asignarle un valor al curso y al alojamiento.

- sumar ambos valores y multiplicarlos por el número de semanas

- mostrar el valor

Yo no tengo unos conocimientos muy extensos y la verdad es que ando perdido porque no se muy bien donde buscar información para este caso. Supongo que habrá primero que almacenar todas las cantidades en dos arrays, tanto para curso como para alojamiento, donde luego las pueda recoger la fecha en función de la elegida.. o igual no y me estoy flipando!!!

Alguien me puede echar un cable???

Muchas gracias como siempre, espero haberme explicado bien!
  #2 (permalink)  
Antiguo 11/04/2011, 13:59
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: Calcular en función a fechas

Yo te recomiendo que siendo un asunto digamos un poco más complejo, además tratando con precios y dinero, lo hagas con PHP. Si quieres seguir haciéndolo con JS avísame, pero piensátelo.
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #3 (permalink)  
Antiguo 11/04/2011, 19:23
 
Fecha de Ingreso: mayo-2005
Mensajes: 92
Antigüedad: 19 años
Puntos: 2
Respuesta: Calcular en función a fechas

Hola Cronos, muchas gracias por tu respuesta...

La verdad es que opté por JS por que lo entiendo un poco mejor, y porque de php no tengo mucha idea. Más o menos funciona igual? Sabes dónde puedo encontrar algo de ayuda sobre este tema?

Gracias por tu ayuda y consejo,

un saludo
  #4 (permalink)  
Antiguo 11/04/2011, 20:21
Avatar de Perr0  
Fecha de Ingreso: mayo-2005
Ubicación: Santiago de Chile, Chile
Mensajes: 676
Antigüedad: 19 años
Puntos: 79
Respuesta: Calcular en función a fechas

con php no vas a calcular en el acto (salvo uses ajax), pero no tendrás problemas con el, podria decirse, "procesador matemático", el de javascript tiene mas errores que el excel2007.

si optas por php (y de manera simple), vas a tener que ingresar los valores en los input y select (con javascript validas que esten correcto los valores para proceder, no para calcular), luego un boton para enviar la info ya sea por url o por post.

Dependiendo de cual optes, por ejemplo para recoger el valor del select "form[field1][]", no sé si será necesario ese nombre, pero tendra que ser asi.

$variable=$_GET["form"];

o

$variable=$_POST["form"];


y luego para extraerla del array que armaste:

$variable1=$variable[0][0];

así extraes todas la variables.

despues procedes a calcular

$res=$variable1*$variable2....etc

para el mes por la temporada recogeras otra variable y etc...

luego para mostrar un resultado pondras despues de todo el calculo:

Código PHP:
Ver original
  1. echo "Usted seleccion dentro de las fechas $fecha1 y $fecha2<p>";
  2. echo "El monto es: $res<p>";
  3. echo "bla bla bla...";
posiblemente ocupes la funcion explode() que es lo mismo que split() en javascript entre otras.

ademas si tu servidor tiene habilitado el envio de mail, puedes pedir un correo electrónico y con la función mail() enviar la info..etc.

si te pones a investigar y te descargas algún curso básico, en 4 ó 5 dias tendrás tu formulario funcionando.

salu2
__________________
Numerador Mp3 en Access =)
http://www.mediafire.com/download/r9...pdw/mp3(2).zip
  #5 (permalink)  
Antiguo 13/04/2011, 11:22
 
Fecha de Ingreso: mayo-2005
Mensajes: 92
Antigüedad: 19 años
Puntos: 2
Respuesta: Calcular en función a fechas

Hola Perro, muchas gracias por tu ayuda... ya habrás que no soy muy ducho con esto de la programación. Estoy empezando y no se realmente que me conviene más.. si JS o PHP... los calculos que tengo que hacer en este formulario son muy básicos la verdad... pero me interesa que la gente lo pueda ver en la pantalla dependiendo del producto que escojan...

He estado dándole una vuelta y la verdad que no me entero muy bien principalmente porque, creo, planteo mal el problema... He llegado hasta aquí:

- Del primer select recojo una variable ($curso), que puede devolver "basico" o "intensivo"

- Si el valor es "basico", la variable $precioCurso la defino como un array con 3 campos (que dependerá de la temporada).

- Si el valor es "intensivo", a la misma variable $precioCurso la defino también como un array de tres campos, pero con otros valores.

- Hago lo mismo con la variable $alojamiento y el segundo select del formulario.

- En el tercer campo de texto guardo la variables $semanas, que me devuelve un número.

- Y en el cuarto select recojo la variable $temporada, que puede devolver "baja", "media" o "alta"

- Si la variable $temporada es "baja", coge el valor del campo [0] del array $precioCurso y lo guarda en la variable $totalCurso, y también recupera el campo [0] del array $precioAlojamiento y lo guarda en la variable $totalAlojamiento, que previamente se habrán definido...

Finalmente la variable $total es el resultado de ($totalCurso+$totalAlojamiento)*$semanas

Y solo me faltaria mostrar la variable $total en la caja de texto del formulario, pero no se si es que hago mal esta ultima parte o tengo mal el botón, pero no puedo comprobar si me razonamiento y script, funciona correctamente... Igual lo he complicado todo demasiado, pero ya te digo... lo que más me está costando es plantear el problema... Disculpa si el script no vale nada... Te lo copio a continuación para que lo veas...

En cuanto a la función que comentas, he leido un poco pero no acabo de entender para que me puede ser útil... imagino que lo dirías a la hora de separar las fechas por temporadas, no?

Muchas gracias por tu paciencia y ayuda,

el html

Código:
<form action="operacion.php" method="post">

curso
<select multiple="multiple" name="field1[]"  id="field1"  ><option  value="basico">Curso Básico</option><option  value="intensivo">Curso Intensivo</option></select>

alojamiento
<select multiple="multiple" name="field2[]"  id="field2"  ><option  value="compartido">compartido</option><option  value="individual">individual</option><option  value="sinalojamiento">sin alojamiento</option></select>


semanas
<input type="text" value="" size="20"  name="field3" id="field3" />

temporada
<select multiple="multiple" name="field4[]"  id="field4"  ><option  value="baja">Enero-Junio</option><option  value="media">Junio-Octubre</option><option  value="alta">Octubre-Diciembre</option></select>


<input class="inputForm3" type="submit" name="enviar" value="calcular" /> 

<input type="text" value="" size="20"  name="Total" id="Total" readonly="readonly"/>

</form>
y el php



Código:
<?php 
$precioalojamiento=0;
$preciocurso=0;
$curso=$_POST["field1"]; //basico
$alojamiento=$_POST["field2"]; //compartido
$semanas=$_POST["field3"]; //2
$temporada=$_POST["field4"]; //baja

if($curso="basico"){
$precioCurso = array( 
        0=>100, 
        1=>200,
		2=>300
		);
}else{
$precioCurso = array( 
        0=>200, 
        1=>400,
		2=>600
		);
}

if($alojamiento="compartido"){
$precioAlojamiento = array( 
        0=>100, 
        1=>200, 
        2=>300
		);
}

if($alojamiento="individual"){
$precioAlojamiento = array( 
        0=>200, 
        1=>400, 
        2=>600
		);
}

if($alojamiento="sinalojamiento"){
$precioAlojamiento = 0;
}



if ($temporada="baja"){
	$totalCurso=$precioCurso[0];
	$totalAlojamiento=$precioAlojamiento[0];
}

if ($temporada="media"){
	$totalCurso=$precioCurso[1];
	$totalAlojamiento=$precioAlojamiento[1];
}

if ($temporada="alta"){
	$totalCurso=$precioCurso[2];
	$totalAlojamiento=$precioAlojamiento[2];
}

$total=($totalCurso+$totalAlojamiento)*$semanas;

$_POST["Total"] = $total;
?>
gracias de nuevo!
  #6 (permalink)  
Antiguo 13/04/2011, 12:04
Avatar de Perr0  
Fecha de Ingreso: mayo-2005
Ubicación: Santiago de Chile, Chile
Mensajes: 676
Antigüedad: 19 años
Puntos: 79
Respuesta: Calcular en función a fechas

como aclaracion, ¿tienes todas las opciones a la vista?

o dependiendo de la seleccion del select te da otras variables.

¿tienes la pagina en internet?

salu2
__________________
Numerador Mp3 en Access =)
http://www.mediafire.com/download/r9...pdw/mp3(2).zip
  #7 (permalink)  
Antiguo 17/04/2011, 18:46
 
Fecha de Ingreso: mayo-2005
Mensajes: 92
Antigüedad: 19 años
Puntos: 2
Respuesta: Calcular en función a fechas

Hola Perro, perdona que no te haya contestado antes pero he estado unos días liado con otros asuntos. Te cuento, porque sigo un poco liado con el tema...

Las opciones están todas visibles, en un select, por lo que no van variando las otras opciones en función de lo que seleccionemos. Porqué lo preguntabas?

Lo que sí que tengo intención de cambiar es el tema de las temporadas y en vez de como está ahora, que hay que elegir una temporada por meses, me gustaría que hubiera el típico calendario para seleccionar la fecha, y en función de la fecha seleccionada que le aplique una u otra temporada. Pero por ahora lo he hecho así, más sencillo, 1, porqué no sé aún como hacer lo otro y 2, porque así entiendo un poco mejor el funcionamiento ya que no soy muy diestro con esto de la programación.

El formulario no estaba online, pero te lo he subido a la dirección que te pongo abajo por si te sirve de ayuda, aunque ya te digo que no es más que el código que te he puesto en el anterior post...

[URL="http://elolaconsultores.com/form/form3.html"]http://elolaconsultores.com/form/form3.html[/URL]
[URL="http://elolaconsultores.com/form/form3.html"] http://elolaconsultores.com/form/form3.html [/URL]

Tienes idea de porque me abre la página operation.php en vez de poner el resultado de la operación en la caja de texto correspondiente??? Es que no puedo comprobar si el script es correcto.

Muchas gracias por tu ayuda.

Un saludo
  #8 (permalink)  
Antiguo 17/04/2011, 18:50
 
Fecha de Ingreso: mayo-2005
Mensajes: 92
Antigüedad: 19 años
Puntos: 2
Respuesta: Calcular en función a fechas

Hola Perro, perdona que no te haya contestado antes pero he estado unos días liado con otros asuntos. Te cuento, porque sigo un poco liado con el tema...

Las opciones están todas visibles, en un select, por lo que no van variando las otras opciones en función de lo que seleccionemos. Porqué lo preguntabas?

Lo que sí que tengo intención de cambiar es el tema de las temporadas y en vez de como está ahora, que hay que elegir una temporada por meses, me gustaría que hubiera el típico calendario para seleccionar la fecha, y en función de la fecha seleccionada que le aplique una u otra temporada. Pero por ahora lo he hecho así, más sencillo, 1, porqué no sé aún como hacer lo otro y 2, porque así entiendo un poco mejor el funcionamiento ya que no soy muy diestro con esto de la programación.

El formulario no estaba online, pero te lo he subido a la dirección que te pongo abajo por si te sirve de ayuda, aunque ya te digo que no es más que el código que te he puesto en el anterior post...

[URL="http://elolaconsultores.com/form/form3.html"]http://elolaconsultores.com/form/form3.html[/URL]

Tienes idea de porque me abre la página operation.php en vez de poner el resultado de la operación en la caja de texto correspondiente??? Es que no puedo comprobar si el script es correcto.

Muchas gracias por tu ayuda.

Un saludo
  #9 (permalink)  
Antiguo 17/04/2011, 20:00
Avatar de Perr0  
Fecha de Ingreso: mayo-2005
Ubicación: Santiago de Chile, Chile
Mensajes: 676
Antigüedad: 19 años
Puntos: 79
Respuesta: Calcular en función a fechas

hola carlos2

mi consulta respecto a si se iban llenando de acuerdo a la selección era una simple consulta, mucha gente olvida colocar cosas.

el porque te envia a operacion.php esta bien, en el action tienes esa pagina como destino.

cuando trabajas con info enviada por POST o GET por lo general tiene que ir a una página, puede ser la misma (autoreenvio de variables) o la puedes reenviar a otra página (como tu lo haces).

en ese caso tienes que reenviar el resultado $total en tu ejemplo, y lo puedes hacer, por sesiones o por url, como seria:

Código PHP:
Ver original
  1. header("Location: form3.html?resultado=$total");

asegurate de no tener nada con print o echo en operation.php

en la página form3.html deberas tener esto en el input total

Código PHP:
Ver original
  1. <input type="text" value="<? echo $_GET["resultado"] ?>" size="20"  name="Total" id="Total" readonly="readonly"/>

ahora todo va en que tus calculos esten correcto y que sepas manejar las variables de un multiselect (llegan como array).

salu2
__________________
Numerador Mp3 en Access =)
http://www.mediafire.com/download/r9...pdw/mp3(2).zip
  #10 (permalink)  
Antiguo 19/04/2011, 05:13
 
Fecha de Ingreso: mayo-2005
Mensajes: 92
Antigüedad: 19 años
Puntos: 2
Respuesta: Calcular en función a fechas

Hola Perro,

Muchas gracias por la ayuda. La verdad es que he puesto lo que me comentabas, pero no puedo hacer el cálculo, no se que hago mal...

En la caja de texto aparece "echo $_GET[" desde el primer momento y no hay quien lo mueva. Además al dar al botón de calcular no hace nada....

He hecho algo mal??? El script ha quedado así...

Código:
<form action="operacion.php" method="post">

curso
<select multiple="multiple" name="field1[]"  id="field1"  ><option  value="basico">Curso Básico</option><option  value="intensivo">Curso Intensivo</option></select>

alojamiento
<select multiple="multiple" name="field2[]"  id="field2"  ><option  value="compartido">compartido</option><option  value="individual">individual</option><option  value="sinalojamiento">sin alojamiento</option></select>


semanas
<input type="text" value="" size="20"  name="field3" id="field3" />

temporada
<select multiple="multiple" name="field4[]"  id="field4"  ><option  value="baja">Enero-Junio</option><option  value="media">Junio-Octubre</option><option  value="alta">Octubre-Diciembre</option></select>


<input class="inputForm3" type="submit" name="enviar" value="calcular" /> 

<input type="text" value="echo $_GET["resultado"]" size="20"  name="Total" id="Total" readonly="readonly"/>

</form>
y el php

Código:
<?php 
$precioalojamiento=0;
$preciocurso=0;
$curso=$_POST["field1"]; //basico
$alojamiento=$_POST["field2"]; //compartido
$semanas=$_POST["field3"]; //2
$temporada=$_POST["field4"]; //baja

if($curso="basico"){
$precioCurso = array( 
        0=>100, 
        1=>200,
		2=>300
		);
}else{
$precioCurso = array( 
        0=>200, 
        1=>400,
		2=>600
		);
}

if($alojamiento="compartido"){
$precioAlojamiento = array( 
        0=>100, 
        1=>200, 
        2=>300
		);
}

if($alojamiento="individual"){
$precioAlojamiento = array( 
        0=>200, 
        1=>400, 
        2=>600
		);
}

if($alojamiento="sinalojamiento"){
$precioAlojamiento = 0;
}



if ($temporada="baja"){
	$totalCurso=$precioCurso[0];
	$totalAlojamiento=$precioAlojamiento[0];
}

if ($temporada="media"){
	$totalCurso=$precioCurso[1];
	$totalAlojamiento=$precioAlojamiento[1];
}

if ($temporada="alta"){
	$totalCurso=$precioCurso[2];
	$totalAlojamiento=$precioAlojamiento[2];
}

$total=($totalCurso+$totalAlojamiento)*$semanas;

header("Location: form3.html?resultado=$total");

?>

Etiquetas: fechas, calculadora
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:02.