unit cxpd;

interface

uses
  SysUtils, Windows, Messages, Classes, Graphics, Controls,Dialogos,
  StdCtrls, Forms, DBCtrls, DB, DBGrids, DBTables, Grids, ExtCtrls, Mask,
  Buttons,Procesos,checa,conver,describe,Impresor,
  Printers,Apertura;

type
  TFormaCxPDetalle = class(TForm)
    Detalle: TDBGrid;
    DBNavigator: TDBNavigator;
    Panel1: TPanel;
    DataSource1: TDataSource;
    Panel2: TPanel;
    TablaCxP: 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;
    BotonNuevo: 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 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 BotonNuevoClick(Sender: TObject);
    procedure BotonEliminaClick(Sender: TObject);
    procedure BotonCambiosClick(Sender: TObject);
    procedure FacturaEnter(Sender: TObject);
    procedure Panel4Click(Sender: TObject);
    procedure BotonNuevoMouseDown(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 Label5MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure BotonImprimeClick(Sender: TObject);
    procedure FacturaChange(Sender: TObject);
    procedure BotonSalirClick(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  FormaCxPDetalle: TFormaCxPDetalle;
  suma:Real;

procedure posicionacxp(clave:string);
procedure actualizaCxP(clave:String);

procedure rangoimprimecuentaxpagar(uno,dos:longint);
implementation

uses concep, concupag, CXP;

{$R *.DFM}




procedure imprimecuentaxpagar;
var
i,r:integer;
campo:Tfield;
begin

with FormaCxPDetalle do
begin
imprime(1,1,'Compra No. '+Factura.text+'                     Estado '+Tiempo.Caption,'','c');
imprime(1,1,'Proveedor '+ClaveCliente.Caption,'','c');
imprime(1,1,'Fecha de Aplicacion '+FechaAplicacion.Caption,'','c');
imprime(1,1,'Fecha de Vencimiento '+FechaVencimiento.Caption,'','c');
TablaCxP.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 TablaCxP.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;
TablaCxP.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 rangoimprimecuentaxpagar(uno,dos:longint);
var
i,r:integer;
campo:Tfield;
begin
with FormaCxPDetalle do
begin
{TablaClientes.SetRange([uno],[dos]);}
Factura.Text:=IntToStr(uno);
imprimecuentaxpagar;
end;
end;




procedure rutas;
var
  I: Integer;
begin

with FormaCxPDetalle do
begin
  for I := 0 to ComponentCount -1 do
    begin
     if Components[I] is TTable  then
     begin
       TTable(Components[I]).DatabaseName:=ruta(8);
       try
       AbreTablaTotal(TTable(Components[I]));
//       TTable(Components[I]).Open;
       except
       MuestraMensaje('Ha Ocurrido un Error al Abrir una de las Bases de Datos.');
       end;
       
     end;
    end;
end;

end;


procedure vencimiento;
var
ven,apl,dias:integer;
begin
With FormaCxPDetalle 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 actualizaencabezado;
begin
With FormaCxPDetalle do
begin
TablaCxP.First;
ClaveCliente.Caption:=TablaCxP.FieldByName('CLPRO_CP').AsString;
FechaVencimiento.Caption:=TablaCxP.FieldByName('FEVEN_CP').AsString;
FechaAplicacion.Caption:=TablaCxP.FieldByName('FEAPL_CP').AsString;
TablaCxP.Last;
end;
end;

procedure calculasaldo;
var
valor:string;
operacion:integer;
begin

with FormaCxPDetalle do
begin
suma:=0;
TablaCxP.First;
while not TablaCxP.Eof do
begin

if TablaCxP.FieldByName('OPERA_CP').AsString='A' then
operacion:=-1
else
operacion:=1;

suma:=suma+(TablaCxP.FieldByName('IMCUE_CP').AsFloat*operacion);
TablaCxP.Next;
end;
TablaCxP.Edit;

{Str(suma:12:3,valor);}
valor:=Convierte('###,###,##0.00',FloatToStr(suma),'$');
Saldo.Caption:=valor;
SaldoE.Caption:=valor;

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 establecerango;
begin
with FormaCxPDetalle do
begin
DataSource1.Enabled:=False;
TablaCxP.CancelRange;
if TablaCxP.FindKey([Factura.Text]) then
begin
DataSource1.Enabled:=True;
TablaCxP.SetRange([Factura.Text],[Factura.Text]);
calculasaldo;
actualizaencabezado;
vencimiento;
end;

end;
end;

procedure actualizaCxP(clave:String);
begin
With FormaCxPDetalle do
begin
Factura.Text:=clave;
{FormaConsultaCuePagar.TablaDeta.FieldByName('NUDOC_CP').AsString;}
establecerango;
end;
end;


procedure actualizacampos;
begin
With FormaCxPDetalle do
begin
TablaCxP.FieldByName('CLPRO_CP').AsString:=ClaveCliente.Caption;
{TablaCxP.FieldByName('STATU_CP').AsInteger:=StrToInt(Factura.Text);}
TablaCxP.FieldByName('FEAPL_CP').AsString:=FechaAplicacion.Caption;
TablaCxP.FieldByName('FEVEN_CP').AsString:=FechaVencimiento.Caption;
{TablaCxP.FieldByName('COBRA_CP').AsInteger:=StrToInt(Factura.Text);}
end;
end;

{xxx***********}
procedure posicionacxp(clave:string);
begin
with FormaCXPDetalle do
begin
if FormaCXPDetalle.Tag=0 then
rutas;
Factura.Text:=clave;
FormaCXPDetalle.Tag:=1;
DataSource1.Enabled:=False;
actualizaCxP(clave);
Factura.Text:=clave;
{Factura.SetFocus;}

end;
end;

{**************}


procedure TFormaCxPDetalle.DetalleKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin

if (Detalle.SelectedIndex=0) and (Ord(Char(Key))=113) then
begin
FormaCxPDetalle.Detalle.Tag:=1;
FormaConceptos.ShowModal;
end;

if (Ord(Char(Key))=13) then
Detalle.SelectedIndex:=Detalle.SelectedIndex+1;

end;

procedure TFormaCxPDetalle.DetalleColEnter(Sender: TObject);
begin

case Detalle.selectedIndex of

0:begin
  TablaCxP.Edit;
  TablaCxP.FieldByName('NUCOM_CP').AsInteger:=StrToInt(Factura.Text);
  actualizacampos;
    calculasaldo;
  end;

1:begin

  if FormaConceptos.TablaConcepto.FindKey([TablaCxP.FieldByName('TIMOV_CP').AsString]) then
  begin
  TablaCxP.Edit;
  TablaCxP.FieldByName('CONCE_CP').AsString:= FormaConceptos.TablaConcepto.FieldByName('CONCE_MO').AsString;
  TablaCxP.FieldByName('OPERA_CP').AsString:= FormaConceptos.TablaConcepto.FieldByName('TIPOO_MO').AsString;
  TablaCxP.FieldByName('IMCUE_CP').AsFloat:=suma;
  end
  else
  begin
  MuestraMensaje('El Movimiento No Se Encuentra');
  Detalle.SelectedIndex:=Detalle.SelectedIndex-1;
  end;

  end;

5:begin
  if FormaCxPDetalle.TablaCxP.FieldByName('TIMOV_CP').AsInteger=2 then
  begin
    Detalle.FixedColor := clBlue;
    Detalle.Font.Color:=clred;

  end;
  end;


end;

end;

procedure TFormaCxPDetalle.FacturaExit(Sender: TObject);
begin
establecerango;
end;

procedure TFormaCxPDetalle.FormActivate(Sender: TObject);
begin
if FormaCXPDetalle.Tag=0 then
rutas;
FormaCXPDetalle.Tag:=1;
DataSource1.Enabled:=False;
{actualizaCxP;}
Factura.SetFocus;
establecerango;
end;

procedure TFormaCxPDetalle.FacturaKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if Ord(Char(Key))=13 then
Detalle.SetFocus;
end;

procedure TFormaCxPDetalle.BotonNuevoClick(Sender: TObject);
begin
{FormaCxPagar.}
TablaCxP.Insert;
FormaCxPagar.EditCLPRO_CP.Text:=ClaveCliente.Caption;
FormaCxPagar.EditCLPRO_CP.Enabled:=False;
FormaCxPagar.EditNUCOM_CP.Text:=Factura.Text;
FormaCxPagar.EditNUCOM_CP.Enabled:=False;
FormaCxPagar.mensaje.Caption:='Nueva cuenta';
FormaCxPagar.ShowModal;
calculasaldo;
TablaCxP.First;
TablaCxP.Edit;
TablaCxP.FieldByName('SALDO_CP').AsFloat:=suma;
TablaCxP.Post;

end;

procedure TFormaCxPDetalle.BotonEliminaClick(Sender: TObject);
begin

FormaCxPDetalle.Tag:=3;
FormaCxPagar.mensaje.Caption:='Elimina cuenta';
FormaCxPagar.ShowModal;
FormaCxPDetalle.Tag:=0;
calculasaldo;
TablaCxP.First;
TablaCxP.Edit;
TablaCxP.FieldByName('SALDO_CP').AsFloat:=suma;
TablaCxP.Post;


end;

procedure TFormaCxPDetalle.BotonCambiosClick(Sender: TObject);
begin
FormaCxPagar.TablaCxP.Edit;
FormaCxPagar.mensaje.Caption:='Cambia datos';
FormaCxPagar.ShowModal;
end;

procedure TFormaCxPDetalle.FacturaEnter(Sender: TObject);
begin
if Factura.Text<>'' then
establecerango;
end;


procedure TFormaCxPDetalle.Panel4Click(Sender: TObject);
begin
Close;
end;

procedure TFormaCxPDetalle.BotonNuevoMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
describir(Button,FormaCxPDetalle.Left+BotonNuevo.Left,FormaCxPDetalle.Top+BotonNuevo.Top+BotonNuevo.Height,49);
end;

procedure TFormaCxPDetalle.BotonCambiosMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
describir(Button,FormaCxPDetalle.Left+BotonCambios.Left,FormaCxPDetalle.Top+BotonCambios.Top+BotonCambios.Height,50);
end;

procedure TFormaCxPDetalle.BotonEliminaMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
describir(Button,FormaCxPDetalle.Left+BotonElimina.Left,FormaCxPDetalle.Top+BotonElimina.Top+BotonElimina.Height,51);
end;

procedure TFormaCxPDetalle.BotonImprimeMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
describir(Button,FormaCxPDetalle.Left+BotonImprime.Left,FormaCxPDetalle.Top+BotonImprime.Top+BotonImprime.Height,52);
end;

procedure TFormaCxPDetalle.Panel3MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
SendMessage(FormaCxPDetalle.Handle, WM_SYSCOMMAND, $F012, 0);
end;

procedure TFormaCxPDetalle.Label5MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
ReleaseCapture;
SendMessage(FormaCxPDetalle.Handle, WM_SYSCOMMAND, $F012, 0);
end;


procedure TFormaCxPDetalle.BotonImprimeClick(Sender: TObject);
begin
if ImpresoraLista then
begin
{Printer.BeginDoc;}
iniciaimpresora('','',2);
Printer.Canvas.Font.Size:=10;
{renglondeinicio:=0;}
imprimecuentaxpagar;
Printer.EndDoc;
end
else
MuestraMensaje('La Impresora No Se Encuentra Lista...');

end;

procedure TFormaCxPDetalle.FacturaChange(Sender: TObject);
begin
if Factura.Text<>'' then
establecerango;
end;


procedure TFormaCxPDetalle.BotonSalirClick(Sender: TObject);
begin
Close;
end;

end.
