/** @OnlyCurrentDoc */ function insertar_producto() { var spreadsheet = SpreadsheetApp.getActive(); //comprobación del stock if(spreadsheet.getRange('B3').isBlank()) { Browser.msgBox('Debes introducir un stock'); return; } //comprobación del precio if(spreadsheet.getRange('B4').isBlank()) { Browser.msgBox('Debes introducir un precio'); return; } //comprobación del nombre if(spreadsheet.getRange('B5').isBlank()) { Browser.msgBox('Debes introducir un nombre'); return; } spreadsheet.getRange('8:8').activate(); spreadsheet.getActiveSheet().insertRowsBefore(spreadsheet.getActiveRange().getRow(), 1); spreadsheet.getActiveRange().offset(0, 0, 1, spreadsheet.getActiveRange().getNumColumns()).activate(); spreadsheet.getRange('A8').activate(); spreadsheet.getRange('B2').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false); spreadsheet.getRange('B8').activate(); spreadsheet.getRange('B3:B5').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, true); spreadsheet.getRange('B3:B5').activate(); spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true}); spreadsheet.getRange('A1').activate(); }; function insertar_cliente() { var spreadsheet = SpreadsheetApp.getActive(); //comprobación del apellido if(spreadsheet.getRange('B4').isBlank()) { Browser.msgBox('Debes introducir un apellido'); return; } //comprobación del nombre if(spreadsheet.getRange('B5').isBlank()) { Browser.msgBox('Debes introducir un nombre'); return; } spreadsheet.getRange('11:11').activate(); spreadsheet.getActiveSheet().insertRowsBefore(spreadsheet.getActiveRange().getRow(), 1); spreadsheet.getActiveRange().offset(0, 0, 1, spreadsheet.getActiveRange().getNumColumns()).activate(); spreadsheet.getRange('A11').activate(); spreadsheet.getRange('B2').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false); spreadsheet.getRange('B11').activate(); spreadsheet.getRange('B3:B8').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, true); spreadsheet.getRange('B3:B8').activate(); spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true}); //agregar el nombre completo spreadsheet.getRange('H11').setValue(spreadsheet.getRange('C11').getValue()+', '+spreadsheet.getRange('D11').getValue() ); spreadsheet.getRange('A1').activate(); }; //INSERTAMOS UN PRODUCTO EN LA LISTA function insertar_producto_lista() { var spreadsheet = SpreadsheetApp.getActive(); //4 COMPROBACIONES //comprobación de la fecha if(spreadsheet.getRange('B4').isBlank()) { Browser.msgBox('ERROR', 'Debes introducir una fecha', Browser.Buttons.OK); return; } //comprobar cliente if(spreadsheet.getRange('B3').isBlank() || spreadsheet.getRange('B3').getValue()=='NOMBRE COMPLETO') { Browser.msgBox('ERROR', 'Debes introducir un cliente válido', Browser.Buttons.OK); return; } //comprobar producto if(spreadsheet.getRange('B8').isBlank() || spreadsheet.getRange('B8').getValue()=='NOMBRE PRODUCTO') { Browser.msgBox('ERROR', 'Debes introducir un producto válido', Browser.Buttons.OK); return; } //comprobar stock if(spreadsheet.getRange('B9').getValue()>spreadsheet.getRange('E9').getValue()) { Browser.msgBox('ERROR', 'No hay suficiente Stock', Browser.Buttons.OK); return; } //COMPROBACIÓN CLIENTE ÚNICO if(!spreadsheet.getRange('C13').isBlank() && spreadsheet.getRange('C13').getValue()!=spreadsheet.getRange('E2').getValue()) { Browser.msgBox('El cliente debe coincidir, clientes distintos no pueden comprar en una misma factura'); return; } //COMPROBACIÓN PRODUCTO DUPLICADO var fila = 13; var cod_pro = spreadsheet.getRange('E8').getValue(); var cantidad_acumulada = 0; //mientras existan códigos de producto while(!spreadsheet.getRange('D'+fila).isBlank()) { //comprobamos si el código de producto ya está en la lista if(spreadsheet.getRange('D'+fila).getValue()==cod_pro) { cantidad_acumulada = spreadsheet.getRange('F'+fila).getValue()+spreadsheet.getRange('B9').getValue(); //si hay suficiente stock, se actualiza el stock sin insertar una fila nueva, y se avisa con un mensaje if(spreadsheet.getRange('E9').getValue()>=cantidad_acumulada) { //actualizaremos el stock en la fila actual y mostraremos un aviso spreadsheet.getRange('F'+fila).setValue(cantidad_acumulada); spreadsheet.getRange('G'+fila).setValue(cantidad_acumulada* spreadsheet.getRange('E10').getValue()); Browser.msgBox('Se ha actualizado el stock del producto: '+spreadsheet.getRange('E'+fila).getValue()+' \\n Cantidad nueva = '+cantidad_acumulada); } //si no hay suficiente stock, se muestra un mensaje de error else { Browser.msgBox('ERROR: No hay suficiente stock del producto indicado'); } //termina la macro return; } //incrementamos la fila fila++; } //insertar en lista spreadsheet.getRange('13:13').activate(); spreadsheet.getActiveSheet().insertRowsBefore(spreadsheet.getActiveRange().getRow(), 1); spreadsheet.getActiveRange().offset(0, 0, 1, spreadsheet.getActiveRange().getNumColumns()).activate(); spreadsheet.getRange('A13').activate(); spreadsheet.getRange('B2').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false); spreadsheet.getRange('B13').activate(); spreadsheet.getRange('B4').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false); spreadsheet.getRange('C13').activate(); spreadsheet.getRange('E2').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false); spreadsheet.getRange('D13').activate(); spreadsheet.getRange('E8').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false); spreadsheet.getRange('E13').activate(); spreadsheet.getRange('B8').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false); spreadsheet.getRange('F13').activate(); spreadsheet.getRange('B9').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false); spreadsheet.getRange('G13').activate(); spreadsheet.getRange('B10').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false); spreadsheet.getRange('A1').activate(); }; //ELIMINAR UN PRODUCTO DE LA LISTA function eliminar_producto_lista() { var spreadsheet = SpreadsheetApp.getActive(); //comprobar que la primera fila seleccionada es mayor que 12 if(spreadsheet.getActiveRange().getRow()>12) spreadsheet.getActiveSheet().deleteRows(spreadsheet.getActiveRange().getRow(), spreadsheet.getActiveRange().getNumRows()); else Browser.msgBox('ERROR', 'No se puede eliminar el producto seleccionado. Selecciona un producto válido', Browser.Buttons.OK); }; //CREAMOS LA FACTURA function generar_factura(){ var spreadsheet = SpreadsheetApp.getActive(); while(!spreadsheet.getRange('A13').isBlank()) { agregar_producto_factura(); } //nos colocaremos en la celda B1 de la hoja 'FACTURAS' y ejecutaremos la macro 'ver_factura() spreadsheet.setActiveSheet(spreadsheet.getSheetByName('FACTURAS')); spreadsheet.getRange('A2').activate(); ver_factura(); } //AGREGAR UN PRODUCTO A LA FACTURA function agregar_producto_factura() { var spreadsheet = SpreadsheetApp.getActive(); //actualizar el stock var cantidad = spreadsheet.getRange('F13').getValue(); var cod_pro = spreadsheet.getRange('D13').getValue(); //buscamos la fila donde está el producto y modificamos su stock spreadsheet.setActiveSheet(spreadsheet.getSheetByName('PRODUCTOS'), true); var fila = 8; //mientras existan códigos de producto while(!spreadsheet.getRange('A'+fila).isBlank()) { //comprobamos el código de producto if(spreadsheet.getRange('A'+fila).getValue()==cod_pro) { //actualizar el stock spreadsheet.getRange('B'+fila).setValue( spreadsheet.getRange('B'+fila).getValue()-cantidad ); break; } fila++; } //volver a la hoja HACER FACTURA spreadsheet.setActiveSheet(spreadsheet.getSheetByName('HACER FACTURA'), true); //pasamos los datos a FACTURAS spreadsheet.getRange('13:13').activate(); spreadsheet.setActiveSheet(spreadsheet.getSheetByName('FACTURAS'), true); spreadsheet.getRange('2:2').activate(); spreadsheet.getActiveSheet().insertRowsBefore(spreadsheet.getActiveRange().getRow(), 1); spreadsheet.getActiveRange().offset(0, 0, 1, spreadsheet.getActiveRange().getNumColumns()).activate(); spreadsheet.getRange('A2').activate(); spreadsheet.getRange('\'HACER FACTURA\'!13:13').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false); spreadsheet.setActiveSheet(spreadsheet.getSheetByName('HACER FACTURA'), true); spreadsheet.setActiveSheet(spreadsheet.getSheetByName('FACTURAS'), true); spreadsheet.setActiveSheet(spreadsheet.getSheetByName('HACER FACTURA'), true); spreadsheet.setActiveSheet(spreadsheet.getSheetByName('FACTURAS'), true); spreadsheet.setActiveSheet(spreadsheet.getSheetByName('HACER FACTURA'), true); spreadsheet.setActiveSheet(spreadsheet.getSheetByName('FACTURAS'), true); spreadsheet.setActiveSheet(spreadsheet.getSheetByName('HACER FACTURA'), true); spreadsheet.getActiveSheet().deleteRows(spreadsheet.getActiveRange().getRow(), spreadsheet.getActiveRange().getNumRows()); }; //MACRO que obtiene los datos de la hoja 'FACTURAS' y los muestra en la hoja 'VER FACTURA' function ver_factura(){ //guardamos la hoja de cálculo activa en la variable 'gestor' var gestor = SpreadsheetApp.getActive(); //comprobar si los datos son válidos if(gestor.getActiveRange().getRow()==1 || gestor.getActiveCell().isBlank()) { Browser.msgBox('Debes seleccionar una factura válida'); return; } //guardamos el código de la factura, la fecha y el código del cliente var cod_fact = gestor.getRange('A'+gestor.getActiveRange().getRow()).getValue(); var fecha = gestor.getRange('B'+gestor.getActiveRange().getRow()).getValue(); var cod_cli = gestor.getRange('C'+gestor.getActiveRange().getRow()).getValue(); var nombre= ''; var direccion= ''; var cp = ''; var dni = ''; //OBTENEMOS LOS DATOS DEL CLIENTE A PARTIR DEL 'cod_cli' //vamos a la hoja 'CLIENTES' gestor.setActiveSheet(gestor.getSheetByName('CLIENTES')); //empezamos a buscar códigos de cliente en la fila 11 var fila_clientes = 11; //recorremos las filas de la hoja 'CLIENTES' while(!gestor.getRange('A'+fila_clientes).isBlank()) { //si el código de cliente coincide, obtenemos los datos if(gestor.getRange('A'+fila_clientes).getValue()==cod_cli) { nombre = gestor.getRange('D'+fila_clientes).getValue()+' '+gestor.getRange('C'+fila_clientes).getValue(); direccion = gestor.getRange('E'+fila_clientes).getValue(); cp = gestor.getRange('F'+fila_clientes).getValue(); dni = gestor.getRange('B'+fila_clientes).getValue(); break; } //incrementamos la fila para poder recorrer todas las filas de la hoja 'CLIENTES' fila_clientes++; } //vamos a la hoja 'VER FACTURA' gestor.setActiveSheet(gestor.getSheetByName('VER FACTURA')); //INSERTAMOS LOS DATOS: cod_fact, fecha, nombre, dirección y cp gestor.getRange('F12').setValue(cod_fact); gestor.getRange('B9').setValue('Fecha: '+fecha); gestor.getRange('B12').setValue('Nombre: '+nombre); gestor.getRange('B13').setValue('DNI: '+dni); gestor.getRange('B14').setValue('Dirección: '+direccion); gestor.getRange('B15').setValue('CP: '+cp); //vaciamos los datos de la factura, empiezan en la fila 19 de la hoja 'VER FACTURA' while(!gestor.getRange('B19').isBlank()) { gestor.deleteRow(19); } //*************************************************************************************************************** //Buscamos productos en la hoja 'FACTURAS' a partir del 'cod_fact' y los vamos introduciendo en la hoja 'VER FACTURAS' //*************************************************************************************************************** //vamos a la hoja 'FACTURAS' gestor.setActiveSheet(gestor.getSheetByName('FACTURAS')); //empezamos a buscar a partir de la fila 2 var fila_facturas = 2; //recorremos todas las filas de la hoja factura while(!gestor.getRange('A'+fila_facturas).isBlank()) { //si el código de factura coincide, copiamos los datos if(gestor.getRange('A'+fila_facturas).getValue()==cod_fact) { //obtener datos var nombre_producto = gestor.getRange('E'+fila_facturas).getValue(); var cantidad = gestor.getRange('F'+fila_facturas).getValue(); var total_producto = gestor.getRange('G'+fila_facturas).getValue(); //vamos a la hoja 'VER FACTURA' gestor.setActiveSheet(gestor.getSheetByName('VER FACTURA')); //insertar una fila en blanco en la fila 19 gestor.getActiveSheet().insertRowBefore(19); //copiamos los datos de nombre, cantidad y total_producto gestor.getRange('B19').setValue(nombre_producto); gestor.getRange('F19').setValue(cantidad); gestor.getRange('G19').setValue(total_producto); //vamos a la hoja 'FACTURAS' gestor.setActiveSheet(gestor.getSheetByName('FACTURAS')); } //incrementamos la fila para poder recorrer todas las filas de la hoja 'FACTURAS' fila_facturas++; } //MOSTRAMOS LA FACTURA, vamos a la hoja 'VER FACTURA' gestor.setActiveSheet(gestor.getSheetByName('VER FACTURA')); }