//--------------------------------------------------------------------------- #include #include #include #pragma hdrstop #include "TpvCFG.h" #include "TpvCmp.h" //#include "TpvGBDAT.h" #include "TDlgBuscar.h" //--------------------------------------------------------------------------- #pragma link "Grids" #pragma link "ElastFrm" #pragma resource "*.dfm" TTpvCmp1 *TpvCmp1; //--------------------------------------------------------------------------- __fastcall TTpvCmp1::TTpvCmp1(TComponent* Owner) : TForm(Owner) { BusqManual = false; // Cargamos la imagen OK! try { BtmOK = new Graphics::TBitmap(); BtmOK -> LoadFromFile( "Systm\\ok.bmp" ); BtmLockOpen = new Graphics::TBitmap(); BtmLockOpen -> LoadFromFile( "Systm\\lockopen.bmp" ); BtmLockShut = new Graphics::TBitmap(); BtmLockShut -> LoadFromFile( "Systm\\lockshut.bmp" ); } catch (...) { ShowMessage( "Error: La imagen OK! está corrupta" ); CambiandoFactura = false; } CambioCantidad5 = false; CambiandoFactura = false; // Mostramos el dialogo, buscar [Productos] DlgBuscarProd = new TDlgBuscar(this); TbProveedor -> Active = true; DlgBuscarProd -> TbBusquedas -> TableName = "Tb_Ref"; DlgBuscarProd -> TbBusquedas -> Active = true; // Selecciona la base de datos correcta (Tpv_Cm'####) FechaFacturaA = FechaFacturaA.CurrentDate(); TbFacturasC -> Active = false; TbFacturasD -> Active = false; TbFacturasC -> TableName = "Compras (cabecera).db"; TbFacturasD -> TableName = "Compras (cuerpo).db"; TbFacturasD -> Active = true; TbFacturasC -> Active = true; // Inicializamos la fecha de compra ( Y el filtro, en base a esta... ) FechaFactura->Date = FechaFacturaA; TbCartera -> Active = true; // Activamos el filtro para el dia/mes/año actuales (FechaFactura) ReajustaFiltro(); } //--------------------------------------------------------------------------- void __fastcall TTpvCmp1::SpeedButton5Click(TObject *Sender) { Close(); } //--------------------------------------------------------------------------- void __fastcall TTpvCmp1::SpeedButton4Click(TObject *Sender) { TbFacturasD -> Insert(); } //--------------------------------------------------------------------------- void __fastcall TTpvCmp1::SpeedButton6Click(TObject *Sender) { TbFacturasD -> Delete(); } //--------------------------------------------------------------------------- void __fastcall TTpvCmp1::BusqAntClick(TObject *Sender) { /* if ( DataModule1 -> TbFacturasC -> FindPrior() == true ) { BusqSig -> Enabled = true; } else { BusqAnt -> Enabled = false; MessageBox( 0, "Coincidencia no hayada", "¡ Buscar Anterior !", MB_OK ); } */ } //--------------------------------------------------------------------------- void __fastcall TTpvCmp1::BuscarFichaClick(TObject *Sender) { MessageBox( 0, "¿Qué Pretendes BUSCAR?", "¡ No esta CLARO !", MB_OK ); /* TDlgBuscProd *DlgBuscProd; DlgBuscProd = new TDlgBuscProd(this); DlgBuscProd -> ShowModal(); if ( DlgBuscProd -> ModalResult == mrOk ) { BusqSig -> Enabled = true; BusqAnt -> Enabled = true; } delete DlgBuscProd; */ } //--------------------------------------------------------------------------- void __fastcall TTpvCmp1::BusqSigClick(TObject *Sender) { /* if ( DataModule1 -> TbFacturasC -> FindNext() == true ) { //DataModule1 -> TbProductos -> GotoCurrent(DataModule1 -> TbFacturasC); BusqAnt -> Enabled = true; } else { BusqSig -> Enabled = false; MessageBox( 0, "Coincidencia no hayada", "¡ Buscar Siguiente !", MB_OK ); } */ } //--------------------------------------------------------------------------- void __fastcall TTpvCmp1::SpeedButton1Click(TObject *Sender) { TbFacturasC -> Insert(); } //--------------------------------------------------------------------------- void __fastcall TTpvCmp1::DsFacturasDDataChange(TObject *Sender, TField *Field) { char BarraEstado[80]; // Indicador de FichaActual / Num.Fichas if ( TbFacturasD -> RecNo > 0 && TbFacturasD -> RecordCount > 0 ) { sprintf( BarraEstado, "C: %d / %d", TbFacturasD -> RecNo, TbFacturasD -> RecordCount ); } else { sprintf( BarraEstado, "C: ¿Nuevo? / %d", TbFacturasD -> RecordCount ); } StatusBar1->Panels->Items[1]->Text = BarraEstado; } //--------------------------------------------------------------------------- void __fastcall TTpvCmp1::DsFacturasCDataChange(TObject *Sender, TField *Field) { char BarraEstado[80]; Currency TParcial; int CantProd = 0; // Indicador de FichaActual / Num.Fichas if ( TbFacturasC -> RecNo > 0 && TbFacturasC -> RecordCount > 0 ) { if ( !CambioCantidad5 ) { SUMAcompraC = 0; IVAcompraC = 0; sprintf( BarraEstado, "F: %d / %d", TbFacturasC -> RecNo, TbFacturasC -> RecordCount ); TbFacturasD -> DisableControls(); TbFacturasD -> First(); while ( ! TbFacturasD -> Eof ) { StatusBar1->Panels->Items[2]->Text = "Sumando: " + TbFacturasD -> RecNo; TParcial = TbFacturasD->FieldByName("PrecioC") -> AsCurrency * Currency( (int)( TbFacturasD->FieldByName("Cantidad") -> AsInteger ) ); SUMAcompraC += TParcial; IVAcompraC += ( TParcial / 100 ) * Currency( (int)( TbFacturasD->FieldByName("IVA") -> AsInteger ) ); CantProd += TbFacturasD->FieldByName("Cantidad") -> AsInteger; TbFacturasD -> Next(); } TbFacturasD -> EnableControls(); } } else { sprintf( BarraEstado, "F: ¿Nuevo? / %d", TbFacturasC -> RecordCount ); CambiandoFactura = false; return; } SUMAcompra -> Caption = FormatCurr("###,###,###.#0", SUMAcompraC ); IVAcompra -> Caption = FormatCurr("###,###,###.#0", IVAcompraC ); TotalCompra -> Caption = FormatCurr("###,###,###.#0", SUMAcompraC + IVAcompraC ); StatusBar1->Panels->Items[2]->Text = BarraEstado; btFacturar->Enabled = ! TbFacturasC->FieldByName("Contabilizada")->AsBoolean; DsFacturasC->AutoEdit = ! TbFacturasC->FieldByName("Contabilizada")->AsBoolean; DsFacturasD->AutoEdit = ! TbFacturasC->FieldByName("Contabilizada")->AsBoolean; if ( CambiandoFactura ) return; CambiandoFactura = true; cbFormaPago->ItemIndex = TbFacturasC->FieldByName("FormaPago")->AsInteger; CambiandoFactura = false; } //--------------------------------------------------------------------------- void __fastcall TTpvCmp1::TbFacturasCNewRecord(TDataSet *DataSet) { try { TbFacturasC -> FieldByName("FormaPago")->AsInteger = 0; TbFacturasC -> FieldByName( "FechaFactura" ) -> AsDateTime = FechaFacturaA;//TDateTime::CurrentDate(); TbFacturasC -> FieldByName( "CodProveedor" ) -> AsInteger = 1; TbFacturasC -> FieldByName( "UltimoPago" ) -> AsDateTime = TDateTime::CurrentDate(); } catch(...) { Abort(); } } //--------------------------------------------------------------------------- void __fastcall TTpvCmp1::Button1Click(TObject *Sender) { // Mostramos el dialogo, buscar Vendedores TDlgBuscar *DlgBuscar; DlgBuscar = new TDlgBuscar(this); DlgBuscar->Filter = "Proveedor > 0"; DlgBuscar->TbBusquedas->Filter = DlgBuscar->Filter; DlgBuscar->TbBusquedas->Filtered = true; DlgBuscar->TbBusquedas->TableName = "personas"; DlgBuscar->TbBusquedas->Active = true; DlgBuscar->ShowModal(); if ( DlgBuscar -> ModalResult == mrOk ) { TbFacturasC -> Edit(); TbFacturasC -> FieldByName( "CodProveedor" ) -> AsInteger = DlgBuscar -> TbBusquedas -> FieldByName( "CodCliente1" ) -> AsInteger; TbFacturasC->FieldByName("Banco_Entidad" )->Value = DlgBuscar->TbBusquedas->FieldByName("Banco_Entidad" )->Value; TbFacturasC->FieldByName("Banco_Sucursal" )->Value = DlgBuscar->TbBusquedas->FieldByName("Banco_Sucursal" )->Value; TbFacturasC->FieldByName("Banco_DC" )->Value = DlgBuscar->TbBusquedas->FieldByName("Banco_DC" )->Value; TbFacturasC->FieldByName("Banco_NumCuenta" )->Value = DlgBuscar->TbBusquedas->FieldByName("Banco_NumCuenta" )->Value; TbFacturasC -> Post(); } delete DlgBuscar; } //--------------------------------------------------------------------------- /* void __fastcall TTpvCmp1::SpeedButton2Click(TObject *Sender) { TDateTime FTest; enum TDateTimeFlag {Date, Time, DateTime} DTFlag = Date; unsigned short M, D, A, Aa; try { FTest = TDateTime( FechaFactura->Text, DTFlag ); FTest.DecodeDate( &A, &M, &D ); FechaFacturaA.CurrentDate(); FechaFacturaA.DecodeDate( &Aa, &M, &D ); // Se prohibe cambiar de año if ( Aa != A ) { MessageBox( 0, "Fecha de Factura fuera de rango.", "Atención", MB_OK ); return; } else { FechaFacturaA = FTest; ReajustaFiltro(); } } catch(...) { MessageBox( 0, "Imposible aplicar filro.", "Atención", MB_OK ); } } */ //--------------------------------------------------------------------------- void _fastcall TTpvCmp1::ReajustaFiltro(void) { SUMAcompra->Caption = 0; IVAcompra->Caption = 0; TotalCompra->Caption = 0; TbFacturasC->FilterOptions = TbFacturasC->FilterOptions << foCaseInsensitive; TbFacturasC->Filter = "([FechaFactura] = '" + FechaFacturaA + "')"; TbFacturasC->Filtered = true; } //--------------------------------------------------------------------------- void __fastcall TTpvCmp1::DBEdit1KeyPress(TObject *Sender, char &Key) { if ( Key == VK_RETURN ) { Key = 0; TbFacturasC -> Post(); Button1 -> SetFocus(); } } //--------------------------------------------------------------------------- void __fastcall TTpvCmp1::TbFacturasCBeforeDelete(TDataSet *DataSet) { if ( TbFacturasC->FieldByName("Contabilizada")->AsBoolean == true ) { ShowMessage( "No se pueden eliminar, facturas que hayan sido contabilizadas." ); Abort(); } switch( MessageDlg( "Atención, está apunto de\neliminar la factura " + TbFacturasC -> FieldByName( "CodFactura" ) -> AsString + "...\ny todas sus compras asociadas.\n¿Realmente desea continuar?", mtWarning, TMsgDlgButtons() << mbNo << mbYes, 0 ) ) { case mrNo: Abort(); break; default: // Borramos y NO DESCONTAMOS DEL ¡¡¡STOCK!!! while( TbFacturasD -> RecordCount != 0 ) { TbFacturasD -> Delete(); } break; }; } //--------------------------------------------------------------------------- void __fastcall TTpvCmp1::TbFacturasDBeforeInsert(TDataSet *DataSet) { if ( !( TbFacturasC -> RecNo > 0 && TbFacturasC -> RecordCount > 0 ) ) { MessageBox( 0, "¿ No cree que debería crear,\no seleccionar una factura nueva,\nantes de agregar datos de compra?.", "¡ Atención !", MB_OK ); Abort(); } } //--------------------------------------------------------------------------- // // Muestra la ficha para elegir producto, y en caso de ser distinto al actual // actualiza los Stock's correspondientes. // //--------------------------------------------------------------------------- void __fastcall TTpvCmp1::DBGrid1EditButtonClick(TObject *Sender) { if ( !( TbFacturasC -> RecNo > 0 && TbFacturasC -> RecordCount > 0 ) ) { MessageBox( 0, "¿ No cree que debería crear,\no seleccionar una factura nueva,\nantes de agregar datos de compra?.", "¡ Atención !", MB_OK ); return; } // Mostramos el dialogo, buscar Productos DlgBuscarProd -> ShowModal(); if ( DlgBuscarProd -> ModalResult == mrOk ) { if ( TbFacturasD -> RecordCount <= 0 ) TbFacturasD -> Insert(); if ( TbFacturasD -> State != dsEdit ) TbFacturasD -> Edit(); BusqManual = true; TbFacturasDCodProductoSetText(TbFacturasD -> FieldByName( "CodProducto" ), DlgBuscarProd -> TbBusquedas -> FieldByName( "ID Producto" ) -> AsString); BusqManual = false; if ( TbFacturasD -> State != dsEdit ) TbFacturasD -> Edit(); } } //--------------------------------------------------------------------------- void __fastcall TTpvCmp1::ActualizaStock( AnsiString CodProducto, int Cantidad, int CodProveedor ) { // Localizamos el CodProducto y actualizamos Set flags; flags << loCaseInsensitive; DlgBuscarProd -> TbBusquedas -> Filtered = false; if ( DlgBuscarProd -> TbBusquedas -> Locate( "ID Producto", CodProducto, flags ) ) { DlgBuscarProd -> TbBusquedas -> Edit(); DlgBuscarProd -> TbBusquedas -> FieldByName( "Stock Actual" ) -> AsInteger += Cantidad; if ( CodProveedor != -1 ) DlgBuscarProd -> TbBusquedas -> FieldByName( "ProveedorActual" ) -> AsInteger = CodProveedor; DlgBuscarProd -> TbBusquedas -> Post(); } } //--------------------------------------------------------------------------- void __fastcall TTpvCmp1::TbFacturasDCalcFields(TDataSet *DataSet) { TbFacturasDTotal -> AsCurrency = TbFacturasD->FieldByName("PrecioC")->AsCurrency * TbFacturasD->FieldByName("Cantidad") -> AsCurrency; } //--------------------------------------------------------------------------- void __fastcall TTpvCmp1::DBGrid1KeyPress(TObject *Sender, char &Key) { switch( Key ) { case VK_RETURN: if ( DBGrid1 -> EditorMode ) { if ( TbFacturasD -> State == dsEdit ) TbFacturasD -> Post(); if ( DBGrid1 -> Fields[DBGrid1 -> SelectedIndex] -> FieldName == "IVA" ) { DBGrid1 -> SelectedField = DBGrid1 -> Fields[0]; TbFacturasD -> Next(); if ( TbFacturasD -> Eof ) { TbFacturasD -> Append(); } } else DBGrid1 -> SelectedIndex = DBGrid1 -> SelectedIndex + 1; Key = 0; } break; case '.': Key = ','; // FALTA 'BREAK' ARRIBA ¡¡¡¡¡¡¡¡ CORRECTO !!!!!!!!! default: // Solo si el campo seleccionado es el de NOMBRE DEL PRODUCTO if ( DBGrid1 -> Fields[DBGrid1 -> SelectedIndex] -> FieldName == "NombreProducto" ) { // TInplaceEdit *CellsEditor; // TCustomEdit // DBGrid1 -> InplaceEditor -> SelStart = 1; // DBGrid1 -> InplaceEditor -> SelLength = 2; } break; } } //--------------------------------------------------------------------------- /* // Recalculamos los TOTALES MessageBox ( 0, AnsiString ( "Antiguo: " + Sender -> OldValue + "\nNuevo: " + Sender -> NewValue ).c_str() , "JEJE", MB_OK ); */ void __fastcall TTpvCmp1::TbFacturasDCantidadSetText(TField *Sender, const AnsiString Text) { Currency TParcial; ActualizaStock( TbFacturasD->FieldByName("CodProducto") -> AsString, -1 * TbFacturasD->FieldByName("Cantidad") -> AsInteger, -1 ); // TParcial = TbFacturasD->FieldByName("PrecioC") -> AsCurrency * Currency( (int)( Sender -> AsInteger ) ); SUMAcompraC -= TParcial; IVAcompraC -= ( TParcial / 100 ) * Currency( (int)( TbFacturasD -> FieldByName( "IVA" ) -> AsInteger ) ); Sender -> AsString = Text; TParcial = TbFacturasD->FieldByName("PrecioC") -> AsCurrency * Currency( (int)( Text.ToInt() ) ); SUMAcompraC += TParcial; IVAcompraC += ( TParcial / 100 ) * Currency( (int)( TbFacturasD -> FieldByName( "IVA" ) -> AsInteger ) ); CambioCantidad5 = true; TbFacturasC -> Edit(); TbFacturasC -> FieldByName( "TotalSin") -> AsCurrency = SUMAcompraC; TbFacturasC -> FieldByName( "TotalIva") -> AsCurrency = IVAcompraC; TbFacturasC -> Post(); CambioCantidad5 = false; SUMAcompra -> Caption = AnsiString( SUMAcompraC ); IVAcompra -> Caption = AnsiString( IVAcompraC ); TotalCompra -> Caption = AnsiString::CurrToStr( SUMAcompraC + IVAcompraC ); // ActualizaStock( TbFacturasD->FieldByName("CodProducto") -> AsString, +1 * TbFacturasD->FieldByName("Cantidad") -> AsInteger, TbFacturasC -> FieldByName( "CodProveedor" ) -> AsInteger ); } //--------------------------------------------------------------------------- void __fastcall TTpvCmp1::TbFacturasDPrecioCSetText(TField *Sender, const AnsiString Text) { Currency TParcial; TParcial = Sender -> AsCurrency * Currency( (int)( TbFacturasDCantidad -> AsInteger ) ); SUMAcompraC -= TParcial; IVAcompraC -= ( TParcial / 100 ) * Currency( (int)( TbFacturasD -> FieldByName( "IVA" ) -> AsInteger ) ); Sender -> AsString = Text; TParcial = Currency( Text ) * Currency( (int)( TbFacturasDCantidad -> AsInteger ) ); SUMAcompraC += TParcial; IVAcompraC += ( TParcial / 100 ) * Currency( (int)( TbFacturasD -> FieldByName( "IVA" ) -> AsInteger ) ); CambioCantidad5 = true; TbFacturasC -> Edit(); TbFacturasC -> FieldByName( "TotalSin") -> AsCurrency = SUMAcompraC; TbFacturasC -> FieldByName( "TotalIva") -> AsCurrency = IVAcompraC; TbFacturasC -> Post(); CambioCantidad5 = false; ///////// ACTUALIZAMOS EL PrecioC en el LISTADO DE PRODUCTOS :--------- if ( CFG->CmpActualizaPCoste->Checked ) { Set flags; flags << loCaseInsensitive; if ( DlgBuscarProd -> TbBusquedas -> Locate( "ID Producto", TbFacturasD->FieldByName( "CodProducto" )->AsString, flags ) ) { DlgBuscarProd -> TbBusquedas -> Edit(); if ( CFG->CmpActualizaPVP->Checked ) { /// CUIDADO QUE TAMBIEN ESTO ESTA LIGADO A TPVproductos.CPP y TPVcmp.CPP Currency Ganancia = 0, PC; if ( CFG->RecalcularPrecioVentaAlCambiarCoste->ItemIndex > 0 ) { Ganancia = DlgBuscarProd->TbBusquedas->FieldByName("Precio Venta 1")->AsCurrency - Sender->AsCurrency; PC = Sender->AsCurrency; } /// CUIDADO QUE TAMBIEN ESTO ESTA LIGADO A TPVproductos.CPP y TPVcmp.CPP if ( CFG->RecalcularPrecioVentaAlCambiarCoste->ItemIndex == 1 ) DlgBuscarProd -> TbBusquedas->FieldByName("Precio Venta 1")->AsCurrency = Ganancia + Sender->AsCurrency; if ( CFG->RecalcularPrecioVentaAlCambiarCoste->ItemIndex == 2 ) DlgBuscarProd -> TbBusquedas->FieldByName("Precio Venta 1")->AsCurrency = Sender->AsCurrency + ( (Ganancia * Sender->AsCurrency)/PC ); } DlgBuscarProd -> TbBusquedas -> FieldByName( "Precio Costo" ) -> AsCurrency = Sender -> AsCurrency; DlgBuscarProd -> TbBusquedas -> Post(); } } /////////////////////////////////////////////////////////////////////// SUMAcompra -> Caption = AnsiString( SUMAcompraC ); IVAcompra -> Caption = AnsiString( IVAcompraC ); TotalCompra -> Caption = AnsiString::CurrToStr( SUMAcompraC + IVAcompraC ); } //--------------------------------------------------------------------------- void __fastcall TTpvCmp1::TbFacturasDIVASetText(TField *Sender, const AnsiString Text) { Currency TParcial; TParcial = TbFacturasDPrecioC -> AsCurrency * Currency( (int)( TbFacturasDCantidad -> AsInteger ) ); SUMAcompraC -= TParcial; IVAcompraC -= ( TParcial / 100 ) * Currency( (int)( Sender -> AsInteger ) ); Sender -> AsString = Text; TParcial = TbFacturasDPrecioC -> AsCurrency * Currency( (int)( TbFacturasDCantidad -> AsInteger ) ); SUMAcompraC += TParcial; IVAcompraC += ( TParcial / 100 ) * Currency( (int)( Text.ToInt() ) ); CambioCantidad5 = true; TbFacturasC -> Edit(); TbFacturasC -> FieldByName( "TotalSin") -> AsCurrency = SUMAcompraC; TbFacturasC -> FieldByName( "TotalIva") -> AsCurrency = IVAcompraC; TbFacturasC -> Post(); CambioCantidad5 = false; SUMAcompra -> Caption = AnsiString( SUMAcompraC ); IVAcompra -> Caption = AnsiString( IVAcompraC ); TotalCompra -> Caption = AnsiString::CurrToStr( SUMAcompraC + IVAcompraC ); // Localizacion del producto Set flags; flags << loCaseInsensitive; DlgBuscarProd -> TbBusquedas -> Filtered = false; if ( DlgBuscarProd -> TbBusquedas -> Locate( "ID Producto", Text, flags ) ) { DlgBuscarProd -> TbBusquedas -> Edit(); DlgBuscarProd -> TbBusquedas -> FieldByName( "IVA Costo" ) -> AsInteger = TbFacturasD -> FieldByName( "IVA" ) -> AsInteger; DlgBuscarProd -> TbBusquedas -> Post(); } } //--------------------------------------------------------------------------- void __fastcall TTpvCmp1::TbFacturasDCodProductoSetText(TField *Sender, const AnsiString Text) { AnsiString oldCodProducto,SearchField; Currency TParcial; oldCodProducto = Sender -> AsString; TParcial = TbFacturasDPrecioC -> AsCurrency * Currency( (int)( TbFacturasDCantidad -> AsInteger ) ); SUMAcompraC -= TParcial; IVAcompraC -= ( TParcial / 100 ) * Currency( (int)( TbFacturasD -> FieldByName( "IVA" ) -> AsInteger ) ); Sender -> AsString = Text; // Localizacion del producto Set flags; flags << loCaseInsensitive; DlgBuscarProd -> TbBusquedas -> Filtered = false; /*if ( BusqManual ) SearchField = "ForcedIndex"; else */ SearchField = "ID Producto"; if ( DlgBuscarProd -> TbBusquedas -> Locate( SearchField, Text, flags ) ) { TbFacturasD->FieldByName( "NombreProducto" )->AsString = DlgBuscarProd->TbBusquedas->FieldByName( "Nombre del Producto" )->AsString; TbFacturasDPrecioC -> AsCurrency = DlgBuscarProd->TbBusquedas->FieldByName( "Precio Costo" )->AsCurrency; TbFacturasD->FieldByName( "IVA" )->AsInteger = DlgBuscarProd->TbBusquedas->FieldByName( "I.V.A" )->AsInteger; if ( oldCodProducto != TbFacturasD->FieldByName( "CodProducto" )->AsString ) { ActualizaStock( oldCodProducto, -1 * TbFacturasD -> FieldByName( "Cantidad" ) -> AsInteger, -1 ); ActualizaStock( Sender -> AsString, +1 * TbFacturasD -> FieldByName( "Cantidad" ) -> AsInteger, TbFacturasC -> FieldByName( "CodProveedor" ) -> AsInteger ); } } TParcial = TbFacturasDPrecioC -> AsCurrency * Currency( (int)( TbFacturasDCantidad -> AsInteger ) ); SUMAcompraC += TParcial; IVAcompraC += ( TParcial / 100 ) * Currency( (int)( TbFacturasD -> FieldByName( "IVA" ) -> AsInteger ) ); CambioCantidad5 = true; TbFacturasC -> Edit(); TbFacturasC -> FieldByName( "TotalSin") -> AsCurrency = SUMAcompraC; TbFacturasC -> FieldByName( "TotalIva") -> AsCurrency = IVAcompraC; TbFacturasC -> Post(); CambioCantidad5 = false; SUMAcompra -> Caption = AnsiString( SUMAcompraC ); IVAcompra -> Caption = AnsiString( IVAcompraC ); TotalCompra -> Caption = AnsiString::CurrToStr( SUMAcompraC + IVAcompraC ); } //--------------------------------------------------------------------------- void __fastcall TTpvCmp1::DBGrid1ColExit(TObject *Sender) { if ( TbFacturasD -> State == dsEdit ) try { TbFacturasD -> Post(); }catch(...){ // Do nothing } } //--------------------------------------------------------------------------- void __fastcall TTpvCmp1::TbFacturasDBeforeDelete(TDataSet *DataSet) { if ( TbFacturasC->FieldByName("Contabilizada")->AsBoolean == true ) { ShowMessage( "No se pueden eliminar, lineas de facturas que hayan sido contabilizadas." ); Abort(); } switch( MessageDlg( "Atención, está apunto de\neliminar la compra señalada actual...\n¿Realmente desea continuar?", mtConfirmation, TMsgDlgButtons() << mbNo << mbYes, 0 ) ) { case mrNo: Abort(); break; default: // No nos olvidemos de anular todo esto (Y del STOCK) ActualizaStock( TbFacturasD -> FieldByName( "CodProducto" ) -> AsString, -1 * TbFacturasD -> FieldByName( "Cantidad" ) -> AsInteger, -1); Currency TParcial; TParcial = TbFacturasDPrecioC -> AsCurrency * Currency( (int)( TbFacturasDCantidad -> AsInteger ) ); SUMAcompraC -= TParcial; IVAcompraC -= ( TParcial / 100 ) * Currency( (int)( TbFacturasD -> FieldByName( "IVA" ) -> AsInteger ) ); CambioCantidad5 = true; TbFacturasC -> Edit(); TbFacturasC -> FieldByName( "TotalSin") -> AsCurrency = SUMAcompraC; TbFacturasC -> FieldByName( "TotalIva") -> AsCurrency = IVAcompraC; TbFacturasC -> Post(); CambioCantidad5 = false; SUMAcompra -> Caption = AnsiString( SUMAcompraC ); IVAcompra -> Caption = AnsiString( IVAcompraC ); TotalCompra -> Caption = AnsiString::CurrToStr( SUMAcompraC + IVAcompraC ); } } //--------------------------------------------------------------------------- void __fastcall TTpvCmp1::FormClose(TObject *Sender, TCloseAction &Action) { // Eliminamos el dialogo, buscar [Productos] delete DlgBuscarProd; // Destruimos la imagen de OK! delete BtmOK; delete BtmLockOpen; delete BtmLockShut; try { if ( TbFacturasD -> State == dsEdit || TbFacturasD -> State == dsInsert ) TbFacturasD -> Post(); if ( TbFacturasC -> State == dsEdit || TbFacturasC -> State == dsInsert ) TbFacturasC -> Post(); if ( TbCartera -> State == dsEdit || TbCartera -> State == dsInsert ) TbCartera -> Post(); } catch(...) { // Nothing } } //--------------------------------------------------------------------------- void __fastcall TTpvCmp1::FechaFacturaChange(TObject *Sender) { #ifdef TB_DISCONTINUAS // Si el año de la factura que pedimos ver, no concuerda con los años que // estamos viendo, abrimos la base de datos que concuerde... enum TDateTimeFlag {Date, Time, DateTime} DTFlag = Date; unsigned short M, D, A, Aa; try { FechaFacturaA.DecodeDate( &Aa, &M, &D ); FechaFactura -> Date.DecodeDate( &A, &M, &D ); // Se prohibe cambiar de año if ( Aa != A ) { MessageBox( 0, "Fecha de Factura fuera de rango.", "Atención CAMBIAREMOS DE BD...", MB_OK ); // CAMBIAMOS DE BASE DE DATOS... (SOLO SI ES POSIBLE) if ( access( AnsiString("Compras (cabecera) '"+ AnsiString(A)).c_str(), 0 ) != 0 ) { MessageBox( 0, "Imposible aplicar filro.", "Atención", MB_OK ); return; } TbFacturasC -> Active = false; TbFacturasD -> Active = false; TbFacturasC -> TableName = "Compras (cabecera) '"+ AnsiString(A); TbFacturasD -> TableName = "Compras (cuerpo) '"+ AnsiString(A); TbFacturasD -> Active = true; TbFacturasC -> Active = true; } } catch(...) { MessageBox( 0, "Imposible aplicar filro.", "Atención", MB_OK ); } #endif // Reajustamos el filtro... FechaFacturaA = FechaFactura -> Date; ReajustaFiltro(); } //--------------------------------------------------------------------------- void __fastcall TTpvCmp1::TbFacturasDNombreProductoSetText(TField *Sender, const AnsiString Text) { // Si modifica el nombre del producto... ( El código debe ser "VACIO" ) if ( ( TbFacturasDCodProducto -> AsString ) . IsEmpty() ) Sender -> AsString = Text; } //--------------------------------------------------------------------------- void __fastcall TTpvCmp1::btFacturarClick(TObject *Sender) { // ¿ Actualizar factura ? if ( TbFacturasC->FieldByName("Contabilizada")->AsBoolean!=true && Application->MessageBox("¿ Actualizar Factura ?", "Alerta contable", MB_OKCANCEL ) != IDCANCEL ) { int maxCONT; TbFacturasC->Edit(); TbFacturasC->FieldByName("Contabilizada")->AsBoolean = true; TbFacturasC->Post(); /* TbAsientos->FilterOptions = TbAsientos->FilterOptions << foCaseInsensitive; TbAsientos->Filter = "([nAsiento] = 40)"; TbAsientos-> Active = true; maxCONT = 0; TbAsientos->First(); while( ! TbAsientos-> Eof ) { if ( TbAsientos-> FieldByName("nOrden")->AsInteger > maxCONT ) maxCONT = TbAsientos-> FieldByName("nOrden")->AsInteger; TbAsientos->Next(); } //##### BLOQUEAR BD ############################### //#################################### double SumaTotal = TbFacturasC->FieldByName("TotalSin")->AsCurrency + TbFacturasC->FieldByName("TotalIva")->AsCurrency; TbAsientos -> InsertRecord( ARRAYOFCONST( ( 40, (maxCONT+1), TbFacturasC->FieldByName("FechaFatura")->Value, (400000000+TbFacturasC->FieldByName("CodProveedor")->AsInteger), SumaTotal, false, AnsiString( "Su factura nº: " + TbFacturasC->FieldByName("CodFactura")->AsString ), TbFacturasC->FieldByName("EnlaceFactura")->AsInteger ) ) ); TbAsientos -> InsertRecord( ARRAYOFCONST( ( 40, (maxCONT+2), TbFacturasC->FieldByName("FechaFatura")->Value, 472000016, IVAcompraC, false, AnsiString( "Su factura nº: " + TbFacturasC->FieldByName("CodFactura")->AsString ), TbFacturasC->FieldByName("EnlaceFactura")->AsInteger ) ) ); #ifdef EXIST_CFG if ( ! CFG->AsientoProductosIndividual ) { TbFacturasD->Fisrt(); while( !TbFacturasD->Eof ) { // SUMA PRODUCTOS INDIVIDUALES TbFacturasD->Next(); } } else #endif TbAsientos -> InsertRecord( ARRAYOFCONST( ( 40, (maxCONT+3), TbFacturasC->FieldByName("FechaFatura")->Value, "600000001", SUMAcompraC, false, AnsiString( "Su factura nº: " + TbFacturasC->FieldByName("CodFactura")->AsString ), TbFacturasC->FieldByName("EnlaceFactura")->AsInteger ) ) ); //#################################### */ } } //--------------------------------------------------------------------------- void __fastcall TTpvCmp1::SpeedButton2Click(TObject *Sender) { // Imprimir } //--------------------------------------------------------------------------- void __fastcall TTpvCmp1::DsCarteraDataChange(TObject *Sender, TField *Field) { Edit2->Text = ""; Edit1->Text = ""; } //--------------------------------------------------------------------------- void __fastcall TTpvCmp1::Edit2Change(TObject *Sender) { bool pag; short int i; int npagos; Currency Total = SUMAcompraC + IVAcompraC; if ( Edit2->Text . IsEmpty() ) return; try { npagos = Edit2->Text.ToInt(); } catch(...) { ShowMessage( "El número de veces a fraccionar el pago, no es correcto" ); return; } if ( npagos < 2 ) { ShowMessage( "El número de veces a fraccionar el pago, no es correcto" ); return; } pag = false; // Eliminamos todos los pagos acumulados (SOLO SI NO HAY NINGUN PAGO REALIZADO) TbCartera->First(); while( !TbCartera->Eof ) if ( TbCartera->FieldByName("Pagado")->AsBoolean == true ) { pag = true; break; } if ( pag ) { while( !TbCartera->Eof ) // Eliminamos los pagos actuales TbCartera->Delete(); unsigned short year; Total /= i; TDateTime::CurrentDate().DecodeDate( &year, NULL, NULL); // desde 1 para que inc. los meses for ( i = 1; i <= npagos; i++ ) TbCartera->InsertRecord( ARRAYOFCONST( ( TbFacturasC->FieldByName("EnlaceFactura")->AsInteger, Variant( EncodeDate( year, i, 1 ) ), Total, 0, cbFormaPago->ItemIndex, false ) ) ); } } //--------------------------------------------------------------------------- void __fastcall TTpvCmp1::Edit1Change(TObject *Sender) { bool pag; short int i; int npagos; int tpagos; Currency Total = SUMAcompraC + IVAcompraC; if ( Edit1->Text . IsEmpty() ) return; try { tpagos = Edit1->Text.ToInt(); } catch(...) { ShowMessage( "La cantidad para fraccionar el pago, no es correcta" ); return; } if ( tpagos < 2000 ) { ShowMessage( "La cantidad para fraccionar el pago, no es correcta" ); return; } pag = false; // Eliminamos todos los pagos acumulados (SOLO SI NO HAY NINGUN PAGO REALIZADO) TbCartera->First(); while( !TbCartera->Eof ) if ( TbCartera->FieldByName("Pagado")->AsBoolean == true ) { pag = true; break; } else { TbCartera->Next(); } if ( pag ) { while( !TbCartera->Eof ) // Eliminamos los pagos actuales TbCartera->Delete(); unsigned short year; npagos = Total / tpagos; Total = tpagos; TDateTime::CurrentDate().DecodeDate(&year, NULL, NULL); // desde 1 para que inc. los meses for ( i = 1; i <= npagos; i++ ) TbCartera->InsertRecord( ARRAYOFCONST( ( TbFacturasC->FieldByName("EnlaceFactura")->AsInteger, Variant( EncodeDate( year, i, 1 ) ), Total, 0, cbFormaPago->ItemIndex, false ) ) ); } } //--------------------------------------------------------------------------- void __fastcall TTpvCmp1::cbFormaPagoChange(TObject *Sender) { if ( CambiandoFactura ) return; /* // Debemos cambiar todo lo fraccionado if ( cbFormaPago->Items->Strings[cbFormaPago->ItemIndex] == "Contado" ) { if ( Application->MessageBox("¿Eliminar todo el fraccionamiento de pagos?", "Alerta contable", MB_OKCANCEL ) != IDCANCEL ) { while( !TbCartera->Eof ) // Eliminamos los pagos actuales TbCartera->Delete(); dbgFraccion->Enabled = false; Edit1->Enabled=false; Edit2->Enabled=false; TbFacturasC->Edit(); TbFacturasC->FieldByName("UltimoPago")->AsDateTime = TDateTime::CurrentDate(); TbFacturasC->Post(); } else { cbFormaPago->ItemIndex = TbCartera->FieldByName("FormaPago")->AsInteger; } } else { dbgFraccion->Enabled = true; Edit1->Enabled=true; Edit2->Enabled=true; TbCartera->First(); while( !TbCartera->Eof ) { TbCartera->Edit(); TbCartera->FieldByName("FormaPago")->AsInteger = cbFormaPago->ItemIndex; TbCartera->Post(); TbCartera->Next(); } } */ CambiandoFactura = true; TbFacturasC->Edit(); TbFacturasC->FieldByName("FormaPago")->AsInteger = cbFormaPago->ItemIndex; TbFacturasC->Post(); CambiandoFactura = false; } //--------------------------------------------------------------------------- void __fastcall TTpvCmp1::TbCarteraNewRecord(TDataSet *DataSet) { TbCartera->FieldByName("Fecha")->AsDateTime = TDateTime::CurrentDate(); TbCartera->FieldByName("FormaPago")->AsInteger = cbFormaPago->ItemIndex; } //--------------------------------------------------------------------------- void __fastcall TTpvCmp1::TbCarteraBeforeDelete(TDataSet *DataSet) { if ( TbCartera->FieldByName("Pagado")->AsBoolean == true ) { ShowMessage( "No se pueden eliminar, fraccionamientos que ya han sido efectuados." ); Abort(); } /* TbFacturasC->Edit(); TbFacturasC->FieldByName("TotalFrac")->AsCurrency -= TbCartera->FieldByName("Importe")->AsCurrency * (( 100 + TbCartera->FieldByName("Incremento")->AsCurrency )/100); TbFacturasC->Post(); */ } //--------------------------------------------------------------------------- void __fastcall TTpvCmp1::TbCarteraCalcFields(TDataSet *DataSet) { TbCartera->FieldByName("Total")->AsCurrency = TbCartera->FieldByName("Importe")->AsCurrency * ( 0.01 * TbCartera->FieldByName("Incremento")->AsCurrency ); } //--------------------------------------------------------------------------- void __fastcall TTpvCmp1::dbgFraccionDrawColumnCell(TObject *Sender, const TRect &Rect, int DataCol, TColumn *Column, TGridDrawState State) { if ( Column -> ID == 0 ) { if ( TbCartera->FieldByName("Pagado")->AsBoolean ) { dbgFraccion->Canvas->StretchDraw( Rect, BtmOK ); } else { dbgFraccion->Canvas->Brush->Color = clWindow; dbgFraccion->Canvas->FillRect( Rect ); } } } //--------------------------------------------------------------------------- void __fastcall TTpvCmp1::DBGrid2DrawColumnCell(TObject *Sender, const TRect &Rect, int DataCol, TColumn *Column, TGridDrawState State) { if ( Column -> ID == 0 ) { if ( TbFacturasC->FieldByName("Contabilizada")->AsBoolean ) DBGrid2->Canvas->StretchDraw( Rect, BtmLockShut ); else DBGrid2->Canvas->StretchDraw( Rect, BtmLockOpen ); } } //--------------------------------------------------------------------------- void __fastcall TTpvCmp1::TbCarteraBeforeInsert(TDataSet *DataSet) { if ( !( TbFacturasC -> RecNo > 0 && TbFacturasC -> RecordCount > 0 ) && !( TbFacturasD -> RecNo > 0 && TbFacturasD -> RecordCount > 0 ) ) { MessageDlg("¿ No cree que debería crear,\no seleccionar una factura CON DATOS,\nantes de intentar fracionar su pago?.", mtWarning, TMsgDlgButtons() << mbOK, 0); // MessageBox( 0, "¿ No cree que debería crear,\no seleccionar una factura CON DATOS,\nantes de intentar fracionar su pago?.", "¡ Atención !", MB_OK ); Abort(); } } //--------------------------------------------------------------------------- void __fastcall TTpvCmp1::TbCarteraFechaChange(TField *Sender) { if ( (int)Sender->AsDateTime > (int)TbFacturasC->FieldByName("UltimoPago")->AsDateTime ) { TbFacturasC->Edit(); TbFacturasC->FieldByName("UltimoPago")->AsDateTime = Sender->AsDateTime; TbFacturasC->Post(); } } //---------------------------------------------------------------------------