Foros del Web » Programando para Internet » PHP »

Vender más de un artículo en la misma factura

Estas en el tema de Vender más de un artículo en la misma factura en el foro de PHP en Foros del Web. Hola, como en algunas ocasiones he explicado, estoy haciendo un ejercicio que se basa en una aplicación de facturación de los pagos mensuales de estudiantes ...
  #1 (permalink)  
Antiguo 04/12/2008, 14:21
Avatar de vennersteve  
Fecha de Ingreso: noviembre-2008
Ubicación: San Andrés - Isla
Mensajes: 26
Antigüedad: 15 años, 4 meses
Puntos: 0
Vender más de un artículo en la misma factura

Hola, como en algunas ocasiones he explicado, estoy haciendo un ejercicio que se basa en una aplicación de facturación de los pagos mensuales de estudiantes en un instituto.

Quisiera saber si alguno me puede explicar una manera de poder sea con un botón o con checkbox para agregar un pago más en la misma factura en caso que el pago lo haga el padre de dos estudiantes y los valores sean diferentes para cada uno.

En este momento estoy usando una sola tabla para la aplicación (invoices o facturas) IdFactura, FechaFactura, UsuarioActual, NombreClienteFactura, CantidadFactura, DescripcionFactura, ValorUnidadFactura, ValorTotalFactura y solo puedo realizar el registro de UN SOLO PAGO A LA VEZ, es decir, si quiero hacer una sola factura para dos pagos, no puedo, me toca hacer dos facturas y así no me sirve!! Ayuda por favor, alguna explicación de php sencilla para ver si lo logro??
  #2 (permalink)  
Antiguo 04/12/2008, 14:30
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Vender más de un artículo en la misma factura

Hola vennersteve,

Lo ideal es que tengas otra tabla llamada conceptos, y la relaciones a tu tabla facturas, que sea de 1 a n, es decir por cada factura tienes N conceptos.

Entonces asi puedes dar de alta los conceptos que quieras por cada factura.

Saludos.
  #3 (permalink)  
Antiguo 04/12/2008, 14:52
Avatar de vennersteve  
Fecha de Ingreso: noviembre-2008
Ubicación: San Andrés - Isla
Mensajes: 26
Antigüedad: 15 años, 4 meses
Puntos: 0
De acuerdo Respuesta: Vender más de un artículo en la misma factura

Cita:
Iniciado por GatorV Ver Mensaje
Hola vennersteve,

Lo ideal es que tengas otra tabla llamada conceptos, y la relaciones a tu tabla facturas, que sea de 1 a n, es decir por cada factura tienes N conceptos.

Entonces asi puedes dar de alta los conceptos que quieras por cada factura.

Saludos.
Tal vez no he sido claro, es mi primera aplicación de este tipo, si al menos me dijeras que campos DEBERIA usar por lo menos tendría una mejor idea...

Saludos!!
  #4 (permalink)  
Antiguo 04/12/2008, 15:00
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Vender más de un artículo en la misma factura

Pues los campos son los que tu debas de tener para tu factura, pero como minimo debes de tener 2 me imagino, idConcepto e idFactura (para relacionarlo con la factura), los demas campos pues deben ser los de el concepto, como por ejemplo, idArticulo (si aplica), Cantidad, Total, etc.

Saludos.
  #5 (permalink)  
Antiguo 04/12/2008, 16:06
Avatar de vennersteve  
Fecha de Ingreso: noviembre-2008
Ubicación: San Andrés - Isla
Mensajes: 26
Antigüedad: 15 años, 4 meses
Puntos: 0
De acuerdo Respuesta: Vender más de un artículo en la misma factura

Cita:
Iniciado por GatorV Ver Mensaje
Pues los campos son los que tu debas de tener para tu factura, pero como minimo debes de tener 2 me imagino, idConcepto e idFactura (para relacionarlo con la factura), los demas campos pues deben ser los de el concepto, como por ejemplo, idArticulo (si aplica), Cantidad, Total, etc.

Saludos.
Bueno, como me recomendaste, ya tengo hechas las tablas, me guié con una aplicación de microsoft access de introducción de pedidos. Ahora quisiera saber de qué manera puedo crear el script php para introducir los pedidos...

Saludos GatorV!!
  #6 (permalink)  
Antiguo 04/12/2008, 16:17
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Vender más de un artículo en la misma factura

Pues, lo que puedes hacer, si lo quieres hacer dinamicamente vas a necesitar mucho Javascript, pero algo basico es mostrar un formulario y poner un boton que diga agregar concepto, al picarle este te redirecciona a otra pagina donde tienes los datos del concepto y le pasas a esa pagina el id de la factura (idFactura).

En esta otra pagina lo rescatas, lo pones un campo hidden, y a la hora de enviar insertas los datos en la tabla de concepto relacionandolo con esa factura.

Posteriormente al listar la factura haces un SELECT de esa factura, por ejemplo: SELECT * FROM conceptos WHERE idFactura=x.

Saludos.
  #7 (permalink)  
Antiguo 04/12/2008, 16:36
Avatar de vennersteve  
Fecha de Ingreso: noviembre-2008
Ubicación: San Andrés - Isla
Mensajes: 26
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Vender más de un artículo en la misma factura

Ok, ya voy entendiendo mejor, gracias por tu colaboración, digamos que al ingresar el primer concepto los datos sean correctos, lo mismo que el segundo, pero que el tercero tenga datos erróneos, por ejemplo, la cantidad de meses a pagar del alumno x, antes de insertar el registro de la factura en la dB hay manera de corregirlos accediendo al valor de la variable desde otro script??
  #8 (permalink)  
Antiguo 04/12/2008, 17:01
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Vender más de un artículo en la misma factura

Pues lo que puedes hacer es pasar los datos por POST a otra pagina, y los dejas en campos hidden también y aparte los imprimes en la pagina para que confirmen.

Saludos.
  #9 (permalink)  
Antiguo 05/12/2008, 03:07
 
Fecha de Ingreso: marzo-2008
Ubicación: En casa
Mensajes: 252
Antigüedad: 16 años, 1 mes
Puntos: 4
Respuesta: Vender más de un artículo en la misma factura

La confimacion ayuda a evitar que haya errores.

Pero, ante el constante error humano tambien pudes crear un script de edicion haciendo que te envie a una vista con todos los datos editables cargandolos desde la BD, enviando id por GET a la vista.
__________________
Ayudar cuesta mucho, dar las gracias no tanto, tenlo en cuenta siempre.
  #10 (permalink)  
Antiguo 06/12/2008, 11:36
Avatar de vennersteve  
Fecha de Ingreso: noviembre-2008
Ubicación: San Andrés - Isla
Mensajes: 26
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Vender más de un artículo en la misma factura

Bueno, lo que hice fue lo siguiente:

Utilizando phpMyAdmin:

Código:
CREATE TABLE `2008` (
  `Student_Id` int(10) NOT NULL,
  `January` tinyint(1) NOT NULL,
  `February` tinyint(1) NOT NULL,
  `March` tinyint(1) NOT NULL,
  `April` tinyint(1) NOT NULL,
  `May` tinyint(1) NOT NULL,
  `June` tinyint(1) NOT NULL,
  `July` tinyint(1) NOT NULL,
  `August` tinyint(1) NOT NULL,
  `September` tinyint(1) NOT NULL,
  `October` tinyint(1) NOT NULL,
  `November` tinyint(1) NOT NULL,
  `December` tinyint(1) NOT NULL,
  PRIMARY KEY  (`Student_Id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE `2009` (
  `Student_Id` int(10) NOT NULL,
  `January` tinyint(1) NOT NULL,
  `February` tinyint(1) NOT NULL,
  `March` tinyint(1) NOT NULL,
  `April` tinyint(1) NOT NULL,
  `May` tinyint(1) NOT NULL,
  `June` tinyint(1) NOT NULL,
  `July` tinyint(1) NOT NULL,
  `August` tinyint(1) NOT NULL,
  `September` tinyint(1) NOT NULL,
  `October` tinyint(1) NOT NULL,
  `November` tinyint(1) NOT NULL,
  `December` tinyint(1) NOT NULL,
  PRIMARY KEY  (`Student_Id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE `2010` (
  `Student_Id` int(10) NOT NULL,
  `January` tinyint(1) NOT NULL,
  `February` tinyint(1) NOT NULL,
  `March` tinyint(1) NOT NULL,
  `April` tinyint(1) NOT NULL,
  `May` tinyint(1) NOT NULL,
  `June` tinyint(1) NOT NULL,
  `July` tinyint(1) NOT NULL,
  `August` tinyint(1) NOT NULL,
  `September` tinyint(1) NOT NULL,
  `October` tinyint(1) NOT NULL,
  `November` tinyint(1) NOT NULL,
  `December` tinyint(1) NOT NULL,
  PRIMARY KEY  (`Student_Id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE `certificate` (
  `Certificate_Id` int(10) NOT NULL auto_increment,
  `Certificate_Date` varchar(10) NOT NULL,
  `Certificate_Detail` text NOT NULL,
  `Student_Id` int(10) NOT NULL,
  PRIMARY KEY  (`Certificate_Id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE `guardian` (
  `Guardian_Id` int(10) NOT NULL auto_increment,
  `Guardian_FirstName` varchar(30) NOT NULL,
  `Guardian_SurName` varchar(30) NOT NULL,
  `Guardian_Address` varchar(100) NOT NULL,
  `Guardian_Phone` varchar(10) NOT NULL,
  `Guardian_MobilePhone` varchar(16) NOT NULL,
  `Guardian_Email` varchar(64) NOT NULL,
  PRIMARY KEY  (`Guardian_Id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE `invoice` (
  `Invoice_Id` int(10) NOT NULL auto_increment,
  `Invoice_Date` varchar(10) NOT NULL,
  `User_Id` int(10) NOT NULL,
  `PaymentMode_Id` int(2) NOT NULL,
  `Guardian_Id` int(10) NOT NULL,
  PRIMARY KEY  (`Invoice_Id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE `paymentmode` (
  `PaymentMode_Id` int(2) NOT NULL auto_increment,
  `PaymentMode_Name` varchar(16) NOT NULL,
  PRIMARY KEY  (`PaymentMode_Id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE `picture` (
  `Picture_Id` int(10) NOT NULL auto_increment,
  `Picture_Filename` varchar(255) NOT NULL,
  `Picture_Name` varchar(32) NOT NULL,
  PRIMARY KEY  (`Picture_Id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE `student` (
  `Student_Id` int(10) NOT NULL auto_increment,
  `Student_Date` varchar(10) NOT NULL,
  `Guardian_Id` int(10) NOT NULL,
  `Student_FirstName` varchar(30) NOT NULL,
  `Student_SurName` varchar(30) NOT NULL,
  `Student_Address` varchar(100) NOT NULL,
  `Student_Phone` varchar(10) NOT NULL,
  `Student_MobilePhone` varchar(16) NOT NULL,
  `Student_Email` varchar(64) NOT NULL,
  `Picture_Id` varchar(10) NOT NULL,
  PRIMARY KEY  (`Student_Id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE `transaction` (
  `Transaction_Id` int(12) NOT NULL auto_increment,
  `Invoice_Id` int(10) NOT NULL,
  `Student_Id` int(10) NOT NULL,
  `Year_Id` int(3) NOT NULL,
  `Transaction_Quantity` varchar(3) NOT NULL,
  `Transaction_Description` varchar(255) NOT NULL,
  `Transaction_UnitPrice` varchar(9) NOT NULL,
  `Transaction_TotalPrice` varchar(10) NOT NULL,
  PRIMARY KEY  (`Transaction_Id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE `user` (
  `User_Id` int(10) NOT NULL auto_increment,
  `User_Name` varchar(10) NOT NULL,
  `User_Password` varchar(16) NOT NULL,
  PRIMARY KEY  (`User_Id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE `year` (
  `Year_Id` int(2) NOT NULL auto_increment,
  `Year_Number` varchar(4) NOT NULL,
  PRIMARY KEY  (`Year_Id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
Creé las tablas de la manera indicada arriba...

Como pueden deducir los más experimentados, pretendo hacer una aplicación para registrar: acudientes, matrículas de alumnos, pagos de mensualidad por alumno, modos de pago, usuarios que tendrán acceso a la base de datos, certificados de estudio expedidos a cada alumno etc.

También quiero hacer un script para mostrar la información en tablas html paginando los registros y de alguna manera dibujar tablas con un color cuando se ha hecho el pago de un mes o de otro color cuando aún no se haya registrado el pago de dicho mes, para eso creé las tablas: 2008, 2009, 2010...

Quiero hacer un solo script para insertar, actualizar y seleccionar registros de las tablas de esta manera:

commit.php

Código PHP:
<?php
include("config.php"); // no se si es mejor usar include o require...
include("mysql.php"); // este requiere de mysql.php
switch ($_GET['action']) {
      case 
"add":
            switch (
$_GET['type']) {
                  case 
""// segun sea el caso, ej: acudiente, alumno, factura, etc
                        
Formulario segun tipo de objeto a insertar...
                  break;
            }
      case 
"edit":
            switch (
$_GET['type']) {
                  case 
""// segun sea el caso, ej: acudiente, alumno, factura, etc
                        
Formulario segun tipo de objeto a editar...
                  break;
            }
      case 
"view":
            switch (
$_GET['type']) {
                  case 
""// segun sea el caso, ej: acudiente, alumno, factura, etc
                        
Tablas HTML para mostrar registros paginados...
                  break;
            }
      break;
}
?>
Obviamente complementando el resto del script con las verificaciones a cookies y demás elementos que vengo utilizando hace unos días con ayuda de GatorV...

Será que me estoy complicando mucho la vida de esta manera o voy bien??
  #11 (permalink)  
Antiguo 09/12/2008, 05:47
 
Fecha de Ingreso: marzo-2008
Ubicación: En casa
Mensajes: 252
Antigüedad: 16 años, 1 mes
Puntos: 4
Respuesta: Vender más de un artículo en la misma factura

No se la opinion general, pero creo que esta bastante bien planteado, solo un apunte, mientras estes trabjando con los distintos casos de tu switch te recomiendo que uses includes para asi controlar los errores y arreglarlos de una forma mas rapida y facil.

Esto que te recomiendo es para gustos, si te resulta incomodo o no te gusta hazlo directamente sobre el archivo, yo suelo hacer los includes, porque sino alfinal nunca encuentro los errores y me lio mucho.
__________________
Ayudar cuesta mucho, dar las gracias no tanto, tenlo en cuenta siempre.
  #12 (permalink)  
Antiguo 09/12/2008, 09:42
Avatar de vennersteve  
Fecha de Ingreso: noviembre-2008
Ubicación: San Andrés - Isla
Mensajes: 26
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Vender más de un artículo en la misma factura

Ahora resulta que tengo otro problema:

Código PHP:
<?php
    $link 
mysql_connect('localhost','root','administrator310005030605');
    
mysql_select_db('cesfa_invoice',$link);
    
$sql "UPDATE invoice SET
               DateInvoice = '" 
$_POST['DateInvoice'] . "',
            LoggedUser = '" 
$_POST['LoggedUser'] . "',
            CustomerInvoice = '" 
$_POST['CustomerInvoice'] . "',
            AddressInvoice = '" 
$_POST['AddressInvoice'] . "',
            PhoneInvoice = '" 
$_POST['PhoneInvoice'] . "',
            QuantityInvoice = '" 
$_POST['QuantityInvoice'] . "',
            DescriptionInvoice = '" 
$_POST['DescriptionInvoice'] . "',
            PriceUnitInvoice = '" 
$_POST['PriceUnitInvoice'] . "',
            PriceTotalInvoice = '" 
$_POST['PriceTotalInvoice'] . "'
            WHERE IdInvoice = '" 
$_GET['IdInvoice'] . "'";
   
$result mysql_query($sql,$link) or die(mysql_error());
   
header("Location: edit_invoice.php");
?>
Hasta ahora me pongo en la tarea de intentar actualizar registros en la db y nada, no lo hace, actua como cuando guarda un nuevo registro (INSERT).
Ayuda!!
  #13 (permalink)  
Antiguo 09/12/2008, 09:47
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Vender más de un artículo en la misma factura

Te da algún error o algo?.

Prueba ver el resultado de mysql_query $result, y también el valor de mysql_affected_rows.

Saludos.
  #14 (permalink)  
Antiguo 09/12/2008, 10:40
Avatar de vennersteve  
Fecha de Ingreso: noviembre-2008
Ubicación: San Andrés - Isla
Mensajes: 26
Antigüedad: 15 años, 4 meses
Puntos: 0
De acuerdo

Bueno, le hice algunas modificaciones al script:

Código PHP:
<?php
    $link 
mysql_connect('localhost','root','administrator310005030605');
    
mysql_select_db('cesfa_invoice',$link);
    
$sql "UPDATE invoice SET
               DateInvoice = '" 
$_GET['DateInvoice'] . "',
            LoggedUser = '" 
$_GET['LoggedUser'] . "',
            CustomerInvoice = '" 
$_GET['CustomerInvoice'] . "',
            AddressInvoice = '" 
$_GET['AddressInvoice'] . "',
            PhoneInvoice = '" 
$_GET['PhoneInvoice'] . "',
            QuantityInvoice = '" 
$_GET['QuantityInvoice'] . "',
            DescriptionInvoice = '" 
$_GET['DescriptionInvoice'] . "',
            PriceUnitInvoice = '" 
$_GET['PriceUnitInvoice'] . "',
            PriceTotalInvoice = '" 
$_GET['PriceTotalInvoice'] . "'
            WHERE IdInvoice = '" 
$_GET['IdInvoice'] . "'";
   
$result mysql_query($sql,$link) or die(mysql_error());
   
header("Location: success_editing.php");
?>
Intenté ver el resultado de esta consulta (echo $result; donde está header();) y escribía '1'.

De esta manera si está actualizando los registros, no se cual pudo ser el asunto con $_POST['varname']...

Cita:
Iniciado por No-NaMe Ver Mensaje
No se la opinion general, pero creo que esta bastante bien planteado, solo un apunte, mientras estes trabjando con los distintos casos de tu switch te recomiendo que uses includes para asi controlar los errores y arreglarlos de una forma mas rapida y facil.

Esto que te recomiendo es para gustos, si te resulta incomodo o no te gusta hazlo directamente sobre el archivo, yo suelo hacer los includes, porque sino alfinal nunca encuentro los errores y me lio mucho.
Bueno, para mi es halagante que digas que está bien planteado, llevo poco tiempo en el lenguaje y ahí vamos...

Quisiera, si no te quito mucho tiempo, que me explicaras un poquito lo de los includes en el switch porque de hecho quise que el archivo que hace todas las operaciones (commit.php) recibiera por get el valor de la acción a realizar según el caso (insert, update, delete...) desde la página anterior de manera que declarara la variable $sql como consulta tal que si la acción era 'insert' ejecutara el $sql del caso INSERT INTO..., si era update, la misma variable, pero obviamente modificado el contenido de la consulta UPDATE 'tabla' SET...desde el mismo caso en el switch e igual para delete, me pegué una enredada que ahora tengo dos archivos, uno para guardar registros y otro para actualizarlos porque al pasar el mouse por el botón actualizar (submit) si mostraba la acción en la barra de estado pero no el registro que debía (http://localhost/invoices/commit.php...pdate&Invoice=) hasta ahí llegaba y eso que me cargaba los campos de ese/a registro/fila...

Última edición por GatorV; 09/12/2008 a las 10:53
  #15 (permalink)  
Antiguo 09/12/2008, 10:52
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Vender más de un artículo en la misma factura

Pues depende de tu formulario, tu solo pusiste la parte de recepción de datos pero no mostraste como los enviabas.

Saludos
  #16 (permalink)  
Antiguo 09/12/2008, 11:11
Avatar de vennersteve  
Fecha de Ingreso: noviembre-2008
Ubicación: San Andrés - Isla
Mensajes: 26
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Vender más de un artículo en la misma factura

Claro que sí, de hecho cambié en el formulario en caso de editar:

Código HTML:
<form method="post" action="commit.php?action=edit&IdInvoice=<?php echo $_GET['IdInvoice']; ?> 
y sin embargo no funcionaba, un conocido me dijo que puede tratarse de un detalle en la versión de php o mysql que contiene este appserv que tengo instalado, no le creí obviamente, pero sigo con la duda...
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 03:00.