Skip to content

Instantly share code, notes, and snippets.

Created May 2, 2015 14:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/dfa67e52da10d41bacb6 to your computer and use it in GitHub Desktop.
Save anonymous/dfa67e52da10d41bacb6 to your computer and use it in GitHub Desktop.
Cobros alquiler
unit UPAgosAlquiler;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, StdCtrls, DBCtrls, DBCGrids, Buttons, Grids, DBGrids, ComCtrls,
ExtCtrls, IBCustomDataSet, IBQuery;
type
TFCobrosAlquiler = class(TForm)
Botonera: TPanel;
StatusBar1: TStatusBar;
PAnelDatos: TPanel;
Panel1: TPanel;
SpeedButton1: TSpeedButton;
Panel2: TPanel;
DBCtrlGrid1: TDBCtrlGrid;
DBImage1: TDBImage;
Panel3: TPanel;
DBText2: TDBText;
DsIBQAlquiler: TDataSource;
DSFormasPAgos: TDataSource;
Panel4: TPanel;
IBQAlquilerNopagado: TIBQuery;
Panel5: TPanel;
Panel6: TPanel;
DBGrid1: TDBGrid;
Panel7: TPanel;
DBNavigator1: TDBNavigator;
DBNavigator2: TDBNavigator;
SpeedButton2: TSpeedButton;
DBImage2: TDBImage;
GroupBox1: TGroupBox;
GroupBox2: TGroupBox;
DBImage3: TDBImage;
Memo1: TMemo;
SBSalir: TSpeedButton;
DBText1: TDBText;
DBText3: TDBText;
DBText4: TDBText;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
SBAcuenta: TSpeedButton;
Label4: TLabel;
DBText5: TDBText;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
DBText6: TDBText;
procedure SBSalirClick(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure recargar;
procedure SBAcuentaClick(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FCobrosAlquiler: TFCobrosAlquiler;
implementation
{$R *.dfm}
uses Funciones,UDM, UAlquiler;
procedure TFCobrosAlquiler.FormActivate(Sender: TObject);
begin
recargar;
end;
procedure TFCobrosAlquiler.recargar;
var varRTotal:Real;
begin
varRTotal:=0;
if FCobrosAlquiler.Active then
begin
ActQuery(IBQAlquilerNopagado,'SELECT '+
' UNIDADES.TITULO, '+
' ALQUILER.ID, '+
' ALQUILER.REGISTRO, '+
' ALQUILER.UNIDAD, '+
' ALQUILER.CLIENTE, '+
' ALQUILER.USUARIO, '+
' ALQUILER.LIBRE, '+
' ALQUILER.DIA_ALQUILER, '+
' ALQUILER.DIA_DEVOLUCION_PREVISTO, '+
' ALQUILER.DIA_DEVOLUCION, '+
' ALQUILER.PAGADA, '+
' ALQUILER.RACARGO, '+
' ALQUILER.VALOR_RECARGO_DIA, '+
' CLIENTES.NOMBRE, '+
' CLIENTES.FOTO, '+
' CLIENTES.A_CUENTA, '+
' CLIENTES.PENDIENTE, '+
' UNIDADES.PORTADA, '+
' UNIDADES.NOTAS '+
' FROM '+
' ALQUILER '+
' INNER JOIN UNIDADES ON (ALQUILER.UNIDAD=UNIDADES.CODIGO) '+
' INNER JOIN CLIENTES ON (ALQUILER.CLIENTE=CLIENTES.CODIGO) '+
' WHERE '+
' (ALQUILER.REGISTRO = '+QuotedStr(DM.IBDAlquilerREGISTRO.Value)+') AND '+
' (ALQUILER.PAGADA <> '+QuotedStr('S')+')');
if not IBQAlquilerNopagado.IsEmpty then
begin
IBQAlquilerNopagado.First;
with IBQAlquilerNopagado do
begin
while not Eof do
begin
if not IBQAlquilerNopagado.FieldByName('LIBRE').IsNull then varRTotal:=varRTotal+StrToFloat(IBQAlquilerNopagado.FieldByName('LIBRE').value);
Next;
end;
end;
end;
end;
if IBQAlquilerNopagado.FieldByName('A_CUENTA').Value>0 then SBAcuenta.Enabled:=true
else SBAcuenta.Enabled:=False;
Label6.Caption:=FormatFloat('#,##0.00',varRTotal);
end;
procedure TFCobrosAlquiler.SBAcuentaClick(Sender: TObject);
var varRNuevoTotal:Real;
begin
try
//Si acuenta es mayor que el Label6.Caption Cobramos todas o si es igual
if (StrToFloat(Label6.Caption)<StrToFloat(DBText3.Caption)) or (StrToFloat(Label6.Caption)=StrToFloat(DBText3.Caption)) then
begin
with DsIBQAlquiler.DataSet do
begin
First;
while not Eof do
begin
//PAsamoa a la unidad
if DM.IBDUnidades.Locate('CODIGO',IBQAlquilerNopagado.FieldByName('UNIDAD').value, [loPartialKey,loCaseInsensitive]) then
begin
DM.IBDUnidades.Edit;
DM.IBDUnidadesRENDIMIENTO.Value:=DM.IBDUnidadesRENDIMIENTO.Value+StrToFloat(IBQAlquilerNopagado.FieldByName('LIBRE').value);
DM.IBDUnidades.Post;
end;
//Pasamos a alquiler
if DM.IBDAlquiler.Locate('ID',IBQAlquilerNopagado.FieldByName('ID').Value,[loPartialKey,loCaseInsensitive]) then
begin
DM.IBDAlquiler.Edit;
DM.IBDAlquilerPAGADA.Value:='S';
DM.IBDAlquiler.post;
end;
//A cobros
DM.IBDCaja.Insert;
DM.IBDCajaREGISTRO.Value:=IntToStr(DM.IBDConfiguracionNUMERADOR_CAJA.Value+1);
DM.IBDCajaCONCEPTO.Value:='Pago del alquiler del cliente ['+IBQAlquilerNopagado.FieldByName('CLIENTE').Value+
'] unidad ['+IBQAlquilerNopagado.FieldByName('UNIDAD').value+'] con '+DBText6.Caption;
DM.IBDCajaCLIENTE.Value:=IBQAlquilerNopagado.FieldByName('CLIENTE').Value;
DM.IBDCajaUSUARIO.Value:=IBQAlquilerNopagado.FieldByName('USUARIO').Value;
DM.IBDCajaCARGO.Value:='Cobro';
DM.IBDCajaFECHA.Value:=Now;
DM.IBDCajaCANTIDAD.Value:=StrToFloat(IBQAlquilerNopagado.FieldByName('LIBRE').Value);
DM.IBDCaja.Post;
Next;
end;
end;
//pasamos al cliente
if DM.IBDClientes.Locate('CODIGO', IBQAlquilerNopagado.FieldByName('CLIENTE').Value, [loPartialKey,loCaseInsensitive]) then
begin
DM.IBDClientes.Edit;
if StrToFloat(Label6.Caption)=StrToFloat(DBText3.Caption) then DM.IBDClientesA_CUENTA.Value:=0 //Si es igual
else DM.IBDClientesA_CUENTA.Value:=DM.IBDClientesA_CUENTA.Value-StrToFloat(Label6.Caption);
DM.IBDClientes.Post;
end;
DM.IBT.CommitRetaining;
end else
begin //Si es menor
with DsIBQAlquiler.DataSet do
begin
varRNuevoTotal:=0;
First;
while not Eof do
begin
//PAsamoa a la unidad
if DM.IBDClientesA_CUENTA.Value>StrToFloat(IBQAlquilerNopagado.FieldByName('LIBRE').value) then
begin
varRNuevoTotal:=varRNuevoTotal+StrToFloat(IBQAlquilerNopagado.FieldByName('LIBRE').value);
if DM.IBDUnidades.Locate('CODIGO',IBQAlquilerNopagado.FieldByName('UNIDAD').value, [loPartialKey,loCaseInsensitive]) then
begin
DM.IBDUnidades.Edit;
DM.IBDUnidadesRENDIMIENTO.Value:=DM.IBDUnidadesRENDIMIENTO.Value+StrToFloat(IBQAlquilerNopagado.FieldByName('LIBRE').value);
DM.IBDUnidades.Post;
end;
//Pasamos a alquiler
if DM.IBDAlquiler.Locate('ID',IBQAlquilerNopagado.FieldByName('ID').Value,[loPartialKey,loCaseInsensitive]) then
begin
DM.IBDAlquiler.Edit;
DM.IBDAlquilerPAGADA.Value:='S';
DM.IBDAlquiler.post;
end;
//A cobros
DM.IBDCaja.Insert;
DM.IBDCajaREGISTRO.Value:=IntToStr(DM.IBDConfiguracionNUMERADOR_CAJA.Value+1);
DM.IBDCajaCONCEPTO.Value:='Pago del alquiler del cliente ['+IBQAlquilerNopagado.FieldByName('CLIENTE').Value+
'] unidad ['+IBQAlquilerNopagado.FieldByName('UNIDAD').value+'] con '+DBText6.Caption;
DM.IBDCajaCLIENTE.Value:=IBQAlquilerNopagado.FieldByName('CLIENTE').Value;
DM.IBDCajaUSUARIO.Value:=IBQAlquilerNopagado.FieldByName('USUARIO').Value;
DM.IBDCajaCARGO.Value:='Cobro';
DM.IBDCajaFECHA.Value:=Now;
DM.IBDCajaCANTIDAD.Value:=StrToFloat(IBQAlquilerNopagado.FieldByName('LIBRE').Value);
DM.IBDCaja.Post;
end;
Next;
end;
//pasamos al cliente
if DM.IBDClientes.Locate('CODIGO', IBQAlquilerNopagado.FieldByName('CLIENTE').Value, [loPartialKey,loCaseInsensitive]) then
begin
DM.IBDClientes.Edit;
DM.IBDClientesA_CUENTA.Value:=DM.IBDClientesA_CUENTA.Value-varRNuevoTotal;
DM.IBDClientes.Post;
end;
DM.IBT.CommitRetaining;
end;
end;
recargar;
except
on E: Exception do
begin
MessageBeep(1000);
ShowMessage('Se ha producido un error y el proceso no se ha podido terminar Unidad:[ UPagosAlquiler ] Modulo:[ Pagar con acuenta ]' + Chr(13) + Chr(13)
+ 'Clase de error: ' + E.ClassName + Chr(13) + Chr(13)
+ 'Mensaje del error:' + E.Message+Chr(13) + Chr(13)
+ ' '+Chr(13) + Chr(13)
+ 'El proceso ha quedado interrumpido');
if DM.IBDAlquiler.State in [dsEdit,dsInsert] then DM.IBDAlquiler.Cancel;
if DM.IBDUnidades.State in [dsEdit,dsInsert] then DM.IBDUnidades.Cancel;
if DM.IBDClientes.State in [dsEdit,dsInsert] then DM.IBDClientes.Cancel;
if DM.IBDCaja.State in [dsEdit,dsInsert] then DM.IBDCaja.Cancel;
DM.IBT.RollbackRetaining; //Donde IBT es el nombre de su Ibtrasaction, con ruta
end;
end;
end;
procedure TFCobrosAlquiler.SBSalirClick(Sender: TObject);
//------------------------------------------------------------------------------
//**************************************************************[ SBSalir ]*****
//------------------------------------------------------------------------------
begin
IBQAlquilerNopagado.Active:=False;
Close;
end;
procedure TFCobrosAlquiler.SpeedButton1Click(Sender: TObject);
begin
try
with DsIBQAlquiler.DataSet do
begin
if UpperCase(DBText6.Caption)='A CUENTA' then
begin
if DM.IBDClientes.Locate('CODIGO', IBQAlquilerNopagado.FieldByName('CLIENTE').Value, [loPartialKey,loCaseInsensitive]) then
begin
if DM.IBDClientesA_CUENTA.Value>StrToFloat(IBQAlquilerNopagado.FieldByName('LIBRE').Value) then
begin
DM.IBDClientes.Edit;
DM.IBDClientesA_CUENTA.Value:=DM.IBDClientesA_CUENTA.Value-StrToFloat(IBQAlquilerNopagado.FieldByName('LIBRE').Value);
DM.IBDClientes.Post;
if DM.IBDUnidades.Locate('CODIGO',IBQAlquilerNopagado.FieldByName('UNIDAD').value, [loPartialKey,loCaseInsensitive]) then
begin
DM.IBDUnidades.Edit;
DM.IBDUnidadesRENDIMIENTO.Value:=DM.IBDUnidadesRENDIMIENTO.Value+StrToFloat(IBQAlquilerNopagado.FieldByName('LIBRE').value);
DM.IBDUnidades.Post;
end;
//Pasamos a alquiler
if DM.IBDAlquiler.Locate('ID',IBQAlquilerNopagado.FieldByName('ID').Value,[loPartialKey,loCaseInsensitive]) then
begin
DM.IBDAlquiler.Edit;
DM.IBDAlquilerPAGADA.Value:='S';
DM.IBDAlquiler.post;
end;
//A cobros
DM.IBDCaja.Insert;
DM.IBDCajaREGISTRO.Value:=IntToStr(DM.IBDConfiguracionNUMERADOR_CAJA.Value+1);
DM.IBDCajaCONCEPTO.Value:='Pago del alquiler del cliente ['+IBQAlquilerNopagado.FieldByName('CLIENTE').Value+
'] unidad ['+IBQAlquilerNopagado.FieldByName('UNIDAD').value+'] con '+DBText6.Caption;
DM.IBDCajaCLIENTE.Value:=IBQAlquilerNopagado.FieldByName('CLIENTE').Value;
DM.IBDCajaUSUARIO.Value:=IBQAlquilerNopagado.FieldByName('USUARIO').Value;
DM.IBDCajaCARGO.Value:='Cobro';
DM.IBDCajaFECHA.Value:=Now;
DM.IBDCajaCANTIDAD.Value:=StrToFloat(IBQAlquilerNopagado.FieldByName('LIBRE').Value);
DM.IBDCaja.Post;
end else ShowMessage('En A cuenta del cliente no hay importe suficiente para este pago, Elija otra forma de pago');
end;
end else
begin
if DM.IBDUnidades.Locate('CODIGO',IBQAlquilerNopagado.FieldByName('UNIDAD').value, [loPartialKey,loCaseInsensitive]) then
begin
DM.IBDUnidades.Edit;
DM.IBDUnidadesRENDIMIENTO.Value:=DM.IBDUnidadesRENDIMIENTO.Value+StrToFloat(IBQAlquilerNopagado.FieldByName('LIBRE').value);
DM.IBDUnidades.Post;
end;
//Pasamos a alquiler
if DM.IBDAlquiler.Locate('ID',IBQAlquilerNopagado.FieldByName('ID').Value,[loPartialKey,loCaseInsensitive]) then
begin
DM.IBDAlquiler.Edit;
DM.IBDAlquilerPAGADA.Value:='S';
DM.IBDAlquiler.post;
end;
//A cobros
DM.IBDCaja.Insert;
DM.IBDCajaREGISTRO.Value:=IntToStr(DM.IBDConfiguracionNUMERADOR_CAJA.Value+1);
DM.IBDCajaCONCEPTO.Value:='Pago del alquiler del cliente ['+IBQAlquilerNopagado.FieldByName('CLIENTE').Value+
'] unidad ['+IBQAlquilerNopagado.FieldByName('UNIDAD').value+'] con '+DBText6.Caption;
DM.IBDCajaCLIENTE.Value:=IBQAlquilerNopagado.FieldByName('CLIENTE').Value;
DM.IBDCajaUSUARIO.Value:=IBQAlquilerNopagado.FieldByName('USUARIO').Value;
DM.IBDCajaCARGO.Value:='Cobro';
DM.IBDCajaFECHA.Value:=Now;
DM.IBDCajaCANTIDAD.Value:=StrToFloat(IBQAlquilerNopagado.FieldByName('LIBRE').Value);
DM.IBDCaja.Post;
end;
DM.IBT.CommitRetaining;
end;
recargar;
except
on E: Exception do
begin
MessageBeep(1000);
ShowMessage('Se ha producido un error y el proceso no se ha podido terminar Unidad:[ UPagosAlquiler ] Modulo:[ Pagar con acuenta ]' + Chr(13) + Chr(13)
+ 'Clase de error: ' + E.ClassName + Chr(13) + Chr(13)
+ 'Mensaje del error:' + E.Message+Chr(13) + Chr(13)
+ ' '+Chr(13) + Chr(13)
+ 'El proceso ha quedado interrumpido');
if DM.IBDAlquiler.State in [dsEdit,dsInsert] then DM.IBDAlquiler.Cancel;
if DM.IBDUnidades.State in [dsEdit,dsInsert] then DM.IBDUnidades.Cancel;
if DM.IBDClientes.State in [dsEdit,dsInsert] then DM.IBDClientes.Cancel;
if DM.IBDCaja.State in [dsEdit,dsInsert] then DM.IBDCaja.Cancel;
DM.IBT.RollbackRetaining; //Donde IBT es el nombre de su Ibtrasaction, con ruta
end;
end;
end;
procedure TFCobrosAlquiler.SpeedButton2Click(Sender: TObject);
begin
try
if UpperCase(DBText6.Caption)='A CUENTA' then SBAcuentaClick(Sender)
else
begin
with DsIBQAlquiler.DataSet do
begin
First;
while not Eof do
begin
//PAsamoa a la unidad
if DM.IBDUnidades.Locate('CODIGO',IBQAlquilerNopagado.FieldByName('UNIDAD').value, [loPartialKey,loCaseInsensitive]) then
begin
DM.IBDUnidades.Edit;
DM.IBDUnidadesRENDIMIENTO.Value:=DM.IBDUnidadesRENDIMIENTO.Value+StrToFloat(IBQAlquilerNopagado.FieldByName('LIBRE').value);
DM.IBDUnidades.Post;
end;
//Pasamos a alquiler
if DM.IBDAlquiler.Locate('ID',IBQAlquilerNopagado.FieldByName('ID').Value,[loPartialKey,loCaseInsensitive]) then
begin
DM.IBDAlquiler.Edit;
DM.IBDAlquilerPAGADA.Value:='S';
DM.IBDAlquiler.post;
end;
//A cobros
DM.IBDCaja.Insert;
DM.IBDCajaREGISTRO.Value:=IntToStr(DM.IBDConfiguracionNUMERADOR_CAJA.Value+1);
DM.IBDCajaCONCEPTO.Value:='Pago del alquiler del cliente ['+IBQAlquilerNopagado.FieldByName('CLIENTE').Value+
'] unidad ['+IBQAlquilerNopagado.FieldByName('UNIDAD').value+'] con '+DBText6.Caption;
DM.IBDCajaCLIENTE.Value:=IBQAlquilerNopagado.FieldByName('CLIENTE').Value;
DM.IBDCajaUSUARIO.Value:=IBQAlquilerNopagado.FieldByName('USUARIO').Value;
DM.IBDCajaCARGO.Value:='Cobro';
DM.IBDCajaFECHA.Value:=Now;
DM.IBDCajaCANTIDAD.Value:=StrToFloat(IBQAlquilerNopagado.FieldByName('LIBRE').Value);
DM.IBDCaja.Post;
DM.IBDConfiguracion.Edit; //Grabamos el nuevo registro de la caja
DM.IBDConfiguracionNUMERADOR_CAJA.Value:=DM.IBDConfiguracionNUMERADOR_CAJA.Value+1;
DM.IBDConfiguracion.Post;
Next;
end;
end;
DM.IBT.CommitRetaining;
end;
recargar;
except
on E: Exception do
begin
MessageBeep(1000);
ShowMessage('Se ha producido un error y el proceso no se ha podido terminar Unidad:[ UPagosAlquiler ] Modulo:[ Pagar con acuenta ]' + Chr(13) + Chr(13)
+ 'Clase de error: ' + E.ClassName + Chr(13) + Chr(13)
+ 'Mensaje del error:' + E.Message+Chr(13) + Chr(13)
+ ' '+Chr(13) + Chr(13)
+ 'El proceso ha quedado interrumpido');
if DM.IBDAlquiler.State in [dsEdit,dsInsert] then DM.IBDAlquiler.Cancel;
if DM.IBDUnidades.State in [dsEdit,dsInsert] then DM.IBDUnidades.Cancel;
if DM.IBDClientes.State in [dsEdit,dsInsert] then DM.IBDClientes.Cancel;
if DM.IBDCaja.State in [dsEdit,dsInsert] then DM.IBDCaja.Cancel;
DM.IBT.RollbackRetaining; //Donde IBT es el nombre de su Ibtrasaction, con ruta
end;
end;
end;
end.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment