unit cxcd;

interface

uses
  SysUtils, Windows, Messages, Classes, Graphics, Controls,Dialogos,
  StdCtrls, Forms, DBCtrls, DB, DBGrids, DBTables, Grids, ExtCtrls, Mask,
  Buttons,Procesos,checa,conver,Printers,Impresor, describe,Apertura;

type
  TFormaCxCDetalle = class(TForm)
    Detalle: TDBGrid;
    DBNavigator: TDBNavigator;
    Panel1: TPanel;
    DataSource1: TDataSource;
    Panel2: TPanel;
    TablaCxC: TTable;
    Label1: TLabel;
    Label2: TLabel;
    ClaveCliente: TLabel;
    Factura: TEdit;
    Label4: TLabel;
    Saldo: TLabel;
    SaldoE: TLabel;
    Estado: TLabel;
    Fecha: TLabel;
    FechaAplicacion: TLabel;
    FechaV: TLabel;
    FechaVencimiento: TLabel;
    Bevel1: TBevel;
    tiempo: TLabel;
    Bevel2: TBevel;
    TablaClientes: TTable;
    BotonCxC: TSpeedButton;
    BotonElimina: TSpeedButton;
    BotonCambios: TSpeedButton;
    BotonImprime: TSpeedButton;
    Shape1: TShape;
    Panel3: TPanel;
    Bevel20: TBevel;
    Bevel21: TBevel;
    Bevel22: TBevel;
    Panel4: TPanel;
    Label3: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    BotonSalir: TSpeedButton;
    procedure FormCreate(Sender: TObject);
    procedure DetalleKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure DetalleColEnter(Sender: TObject);
    procedure FacturaExit(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure FacturaKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FacturaEnter(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure BotonCxCClick(Sender: TObject);
    procedure BotonEliminaClick(Sender: TObject);
    procedure BotonCambiosClick(Sender: TObject);
    procedure Panel1Click(Sender: TObject);
    procedure Panel4Click(Sender: TObject);
    procedure BotonImprimeClick(Sender: TObject);
    procedure BotonCxCMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure BotonCambiosMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure BotonEliminaMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure BotonImprimeMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Panel3MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure Label6MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure BotonSalirClick(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  FormaCxCDetalle: TFormaCxCDetalle;
  suma,abonos,cargos:Real;
{  col,ren:integer;
  renglondeinicio:Word;}

procedure posicionacxc(clave:string);
procedure rangoimprimecuentaxcobrar(uno,dos:longint);
{procedure iniciaimpresoraores(etique1,etique2:String);
procedure finalizavalores(eticargos,etiabonos,etisaldo:string);}
implementation

uses concep, ConCobra, Cucobra;

{$R *.DFM}

{procedure imprime(x,salto:integer;texto,formateo:string;tipo:char);
var
tipodeletra:string[50];
begin
tipodeletra:=Printer.Canvas.Font.Name;

case tipo of


'c':Printer.Canvas.TextOut(x*col,renglondeinicio*ren,texto);

'f':begin
    Printer.Canvas.Font.Name:='Courier';
    if formateo='' then formateo:='#,###,###';
    if formateo[length(formateo)-2]='.' then
    Printer.Canvas.TextOut(x*col,renglondeinicio*ren,convierte('#,###,##0.00',texto,1))
    else
    Printer.Canvas.TextOut(x*col,renglondeinicio*ren,convierte('#,###,###',texto,2));
    end;

'd':Printer.Canvas.TextOut(x*col,renglondeinicio*ren,texto);
end;
Printer.Canvas.Font.Name:=tipodeletra;
if salto=1 then
salta
if renglondeinicio>=70 then
begin
renglondeinicio:=2;
Printer.NewPage;
end;

end;}

procedure imprimecuentaxcobrar;
var
i,r:integer;
campo:Tfield;
begin

with FormaCxCDetalle do
begin
imprime(1,1,'Factura No. '+Factura.text+'                     Estado '+ tiempo.Caption,'','c');
imprime(1,1,'Cliente '+ClaveCliente.Caption,'','c');
imprime(1,1,'Fecha de Aplicacion '+FechaAplicacion.Caption,'','c');
imprime(1,1,'Fecha de Vencimiento '+FechaVencimiento.Caption,'','c');
TablaCxC.First;
r:=0;
salta;
for i:=0 to Detalle.FieldCount-1 do
begin
imprime(i*16,0,Detalle.Columns[i].Title.Caption,'','c');
end;
salta;

while not TablaCxC.Eof do
begin

for i:=0 to Detalle.FieldCount-1 do
begin
imprime(i*16,0,Detalle.Fields[i].AsString,Detalle.Fields[i].DisplayText,tipocampo(Detalle.Fields[i].DataType));
end;
TablaCxC.Next;
salta

end;
salta;

imprime(58,1,'Saldo '+SaldoE.Caption,'','c');
for i:=1 to 80 do
imprime(i,0,'-','','c');
salta;

end;

end;



procedure rangoimprimecuentaxcobrar(uno,dos:longint);
var
i,r:integer;
campo:Tfield;
begin
with FormaCxCDetalle do
begin
{TablaClientes.SetRange([uno],[dos]);}
Factura.Text:=IntToStr(uno);
imprimecuentaxcobrar;
end;
end;




{function ruta(linea:integer):String;
var
arch:TextFile;
aux,directorioactual:string;
i:integer;
begin
AssignFile(arch,leeempresa);
Reset(arch);
for i:=1 to linea do
Readln(arch,aux);
CloseFile(arch);
ruta:=aux;
end;}

procedure rutas;
var
  I: Integer;
begin

with FormaCxCDetalle do
begin
  for I := 0 to ComponentCount -1 do
    begin
     if Components[I] is TTable  then
     begin
       TTable(Components[I]).DatabaseName:=ruta(8);
       try
//       TTable(Components[I]).Open;
AbreTablaTotal(TTable(Components[I]));
       except
       MuestraMensaje('Ha Ocurrido un Error al Abrir una de las Bases de Datos.');
       end;
     end;
    end;
end;

end;





Procedure actualizacliente;
begin
With FormaCxCDetalle do
begin
TablaClientes.First;
if TablaClientes.FindKey([TablaCxC.FieldByname('CLCLI_CC').AsString]) then
begin
TablaClientes.Edit;
TablaClientes.FieldByname('SALDO_C').AsFloat:=TablaClientes.FieldByname('SALDO_C').AsFloat-cargos+(cargos-abonos);
TablaClientes.Post;
end;
end;
end;


procedure vencimiento;
var
ven,apl,dias:integer;
begin
With FormaCxCDetalle do
begin
ven:=fechas(FechaVencimiento.Caption);
apl:=fechas(FechaAplicacion.Caption);
dias:=fechas(DateToStr(Date));
{MuestraMensaje('ven '+ IntToStr(ven)+'aplic  '+IntToStr(apl)+'dias  '+IntToStr(dias));}
if FechaVencimiento.Caption<>'' then
if Date>=StrToDateTime(FechaVencimiento.Caption) then
begin
dias:=dias-ven;
if dias=0 then
tiempo.Caption:='Se vence Hoy'
else
tiempo.Caption:='vencido  '+IntToStr(dias)+'  dias';
end
else
tiempo.Caption:='no vencido'; ;
end;
end;

procedure actualizacampos;
begin
With FormaCxCDetalle do
begin
TablaCxC.FieldByName('CLCLI_CC').AsString:=ClaveCliente.Caption;
{TablaCxC.FieldByName('STATU_CC').AsInteger:=StrToInt(Factura.Text);}
TablaCxC.FieldByName('FEAPL_CC').AsString:=FechaAplicacion.Caption;
TablaCxC.FieldByName('FEVEN_CC').AsString:=FechaVencimiento.Caption;
{TablaCxC.FieldByName('COBRA_CC').AsInteger:=StrToInt(Factura.Text);}
end;
end;

procedure actualizaencabezado;
begin
With FormaCxCDetalle do
begin
TablaCxC.First;
ClaveCliente.Caption:=TablaCxC.FieldByName('CLCLI_CC').AsString;
FechaVencimiento.Caption:=TablaCxC.FieldByName('FEVEN_CC').AsString;
FechaAplicacion.Caption:=TablaCxC.FieldByName('FEAPL_CC').AsString;
TablaCxC.Last;
end;
end;

procedure calculasaldo;
var
valor:string;
operacion:integer;
begin
with FormaCxCDetalle do
begin
suma:=0;
abonos:=0;
if (TablaCxC.State=dsEdit) or (TablaCxC.State=dsInsert) then
TablaCxC.Post;
TablaCxC.First;
while not TablaCxC.Eof do
begin
if TablaCxC.FieldByName('OPERA_CC').AsString='A' then
operacion:=-1
else
operacion:=1;
if operacion=1 then
abonos:=abonos+TablaCxC.FieldByName('IMCUE_CC').AsFloat
else
cargos:=cargos+TablaCxC.FieldByName('IMCUE_CC').AsFloat;
suma:=suma+(TablaCxC.FieldByName('IMCUE_CC').AsFloat*operacion);
TablaCxC.Next;
end;
{TablaCxC.Edit;}
{Str(suma:12:3,valor);}
valor:=Convierte('###,###,##0.00',FloatToStr(suma),'$');
Saldo.Caption:=valor;
SaldoE.Caption:=valor;

{***actualiza saldo ******}
TablaCxC.First;
TablaCxC.Edit;
TablaCxC.FieldByName('SALDO_CC').AsFloat:=suma;
TablaCxC.Post;
{******termina actualizar******}

if Suma>0 then
begin
Estado.Font.Color:=ClRed;
Estado.Caption:='Deudor'
end
else
begin
Estado.Font.Color:=ClNavy;
Estado.Caption:='Saldada';
end;

end;

end;

procedure rangos;
begin
With FormaCxCDetalle do
begin
DataSource1.Enabled:=False;
TablaCxC.CancelRange;
if TablaCxC.FindKey([Factura.Text]) then
begin
DataSource1.Enabled:=True;
TablaCxC.SetRange([Factura.Text],[Factura.Text]);
calculasaldo;
actualizaencabezado;
{actualizacliente;}
vencimiento;
end;
end;
end;

{xxxx***************}
procedure posicionacxc(clave:string);
begin
with FormaCxCDetalle do
begin
if FormaCxCDetalle.Tag=0 then
rutas
else
FormaCxCDetalle.Tag:=1;

DataSource1.Enabled:=False;
if Factura.Tag=1 then
Factura.Text:=FormaConsultaCobranza.TablaConsulta.FieldByName('NUFAC_CC').AsString;
Factura.Text:=clave;
rangos;

end;
end;


{*************}

procedure TFormaCxCDetalle.FormCreate(Sender: TObject);
begin
{  TablaCxC.Open;
  TablaClientes.Open;}
end;

procedure TFormaCxCDetalle.DetalleKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if (Detalle.SelectedIndex=0) and (Ord(Char(Key))=113) then
begin
FormaCxCDetalle.Detalle.Tag:=1;
FormaConceptos.ShowModal;
end;
if (Ord(Char(Key))=13) then
Detalle.SelectedIndex:=Detalle.SelectedIndex+1;

end;

procedure TFormaCxCDetalle.DetalleColEnter(Sender: TObject);
begin

case Detalle.selectedIndex of

0:begin
 { TablaCxC.Edit;
  TablaCxC.FieldByName('NUFAC_CC').AsInteger:=StrToInt(Factura.Text);
  actualizacampos;
  calculasaldo;  }
  end;

1:begin

{  if FormaConceptos.TablaConcepto.FindKey([TablaCxC.FieldByName('TIMOV_CC').AsString]) then
  begin
  TablaCxC.Edit;
  TablaCxC.FieldByName('CONCE_CC').AsString:= FormaConceptos.TablaConcepto.FieldByName('CONCE_MO').AsString;
  TablaCxC.FieldByName('OPERA_CC').AsString:= FormaConceptos.TablaConcepto.FieldByName('TIPOO_MO').AsString;
  TablaCxC.FieldByName('IMCUE_CC').AsFloat:=suma;
  end
  else
  begin
  MuestraMensaje('El Movimiento No Se Encuentra');
  Detalle.SelectedIndex:=Detalle.SelectedIndex-1;
  end;}

  end;

5:begin
{  if FormaCxCDetalle.TablaCxC.FieldByName('TIMOV_CC').AsInteger=2 then
  begin
    Detalle.FixedColor := clBlue;
    Detalle.Font.Color:=clred;

  end; }
  end;


end;

end;

procedure TFormaCxCDetalle.FacturaExit(Sender: TObject);
begin
rangos;
end;

procedure TFormaCxCDetalle.FormActivate(Sender: TObject);
begin
if FormaCxCDetalle.Tag=0 then
rutas
else
FormaCxCDetalle.Tag:=1;

DataSource1.Enabled:=False;
Factura.SetFocus;
if Factura.Tag=1 then
Factura.Text:=FormaConsultaCobranza.TablaConsulta.FieldByName('NUFAC_CC').AsString;
rangos;

end;

procedure TFormaCxCDetalle.FacturaKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if Ord(Char(Key))=13 then
Detalle.SetFocus;
end;

procedure TFormaCxCDetalle.FacturaEnter(Sender: TObject);
begin
if Factura.Text<>'' then
rangos;
end;

procedure TFormaCxCDetalle.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
if (TablaCxC.State=dsEdit) then
TablaCxc.Post;
{***actualiza cobranza******}
{FormaConsultaCobranza.TablaConsulta.Edit;
FormaConsultaCobranza.TablaConsulta.UpdateRecord;
FormaConsultaCobranza.TablaConsulta.Post;
}
end;

procedure TFormaCxCDetalle.BotonCxCClick(Sender: TObject);
var
clave:string[16];
nufac:longint;
begin

TablaCxC.Insert;
FormaCxCDetalle.Tag:=1;
TablaCxC.FieldByName('CLCLI_CC').AsString:=ClaveCliente.Caption;
FormaCuCobra.EditCLCLI_CC.Enabled:=False;
TablaCxC.FieldByName('NUFAC_CC').AsInteger:=StrToInt(Factura.Text);
FormaCuCobra.EditNUFAC_CC.Enabled:=False;
FormaCuCobra.EditNUDOC_CC.Text:=TablaCxC.FieldByName('NUDOC_CC').AsString;
FormaCuCobra.Mensaje.Caption:='Nueva cuenta';
{FormaCuCobra.BotonSi.Visible:=False;
FormaCuCobra.BotonNo.Visible:=False;}
FormaCuCobra.ShowModal;
{if TablaCxC.State=dsEdit then
TablaCxC.Post;}

calculasaldo;
end;

procedure TFormaCxCDetalle.BotonEliminaClick(Sender: TObject);
begin

TablaCxC.Edit;
TablaCxC.FieldByName('CLCLI_CC').AsString:=ClaveCliente.Caption;
FormaCuCobra.EditCLCLI_CC.Enabled:=False;
TablaCxC.FieldByName('NUFAC_CC').AsInteger:=StrToInt(Factura.Text);
FormaCuCobra.EditNUFAC_CC.Enabled:=False;
FormaCuCobra.EditNUDOC_CC.Text:=TablaCxC.FieldByName('NUDOC_CC').AsString;
FormaCucobra.Mensaje.Caption:='Deseas borrar la cuenta';
{FormaCuCobra.BotonSi.Visible:=True;
FormaCuCobra.BotonNo.Visible:=True;}
FormaCxCDetalle.Tag:=3;
FormaCuCobra.ShowModal;
calculasaldo;
end;

procedure TFormaCxCDetalle.BotonCambiosClick(Sender: TObject);
begin
TablaCxC.Edit;
FormaCxCDetalle.Tag:=2;
TablaCxC.FieldByName('CLCLI_CC').AsString:=ClaveCliente.Caption;
FormaCuCobra.EditCLCLI_CC.Enabled:=False;
TablaCxC.FieldByName('NUFAC_CC').AsInteger:=StrToInt(Factura.Text);
FormaCuCobra.EditNUFAC_CC.Enabled:=False;
FormaCuCobra.EditNUDOC_CC.Text:=TablaCxC.FieldByName('NUDOC_CC').AsString;
FormaCucobra.Mensaje.Caption:='Cambios a la cuenta';
{FormaCuCobra.BotonSi.Visible:=False;
FormaCuCobra.BotonNo.Visible:=False; }
FormaCuCobra.ShowModal;
if TablaCxC.State=dsEdit then
TablaCxC.Post;
calculasaldo;
end;

procedure TFormaCxCDetalle.Panel1Click(Sender: TObject);
begin

if FormaCxCDetalle.Tag=0 then
rutas
else
FormaCxCDetalle.Tag:=1;

end;


procedure TFormaCxCDetalle.Panel4Click(Sender: TObject);
begin
Close;
end;

procedure TFormaCxCDetalle.BotonImprimeClick(Sender: TObject);
begin
if ImpresoraLista then
begin
{Printer.BeginDoc;}
iniciaimpresora('','',2);
Printer.Canvas.Font.Size:=10;
{renglondeinicio:=0;}
imprimecuentaxcobrar;
Printer.EndDoc;
end
else
MuestraMensaje('La Impresora No Se Encuentra Lista...');
end;

procedure TFormaCxCDetalle.BotonCxCMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
describir(Button,FormaCxCDetalle.Left+BotonCxC.Left,FormaCxCDetalle.Top+BotonCxC.Top+BotonCxC.Height,26);
end;

procedure TFormaCxCDetalle.BotonCambiosMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
describir(Button,FormaCxCDetalle.Left+BotonCambios.Left,FormaCxCDetalle.Top+BotonCambios.Top+BotonCambios.Height,27);
end;

procedure TFormaCxCDetalle.BotonEliminaMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
describir(Button,FormaCxCDetalle.Left+BotonElimina.Left,FormaCxCDetalle.Top+BotonElimina.Top+BotonElimina.Height,28);
end;

procedure TFormaCxCDetalle.BotonImprimeMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
describir(Button,FormaCxCDetalle.Left+BotonImprime.Left,FormaCxCDetalle.Top+BotonImprime.Top+BotonImprime.Height,29);
end;

procedure TFormaCxCDetalle.Panel3MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
SendMessage(FormaCxCDetalle.Handle, WM_SYSCOMMAND, $F012, 0);
end;

procedure TFormaCxCDetalle.Label6MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
SendMessage(FormaCxCDetalle.Handle, WM_SYSCOMMAND, $F012, 0);
end;


procedure TFormaCxCDetalle.BotonSalirClick(Sender: TObject);
begin
Close;
end;

end.
