unit uEditorMontajeCompleto;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, uEditorMontajeDetalle, dxLayoutLookAndFeels, DB, uDADataTable,
  JvAppStorage, JvAppRegistryStorage, JvComponentBase, JvFormPlacement, ImgList,
  PngImageList, StdActns, ActnList, uCustomView, uViewBase, uViewDetallesBase,
  uViewDetallesMontaje, ComCtrls, TBX, TB2Item, TB2Dock, TB2Toolbar, pngimage,
  ExtCtrls, JvExControls, JvComponent, JvNavigationPane,
  uIEditorMontajeCompleto, uViewGridBase, uViewGrid,
  cxCustomData,
  uViewPedidosMontaje, uBizMontajes, uMontajesController,
  uViewPedidosProveedor, uViewCobrosCliente, uViewCobrosMontaje,
  uViewDocumentosAsociados, uBizDocumentosAsociados, uViewGastosMontaje,
  uViewSituacionMontaje, StdCtrls, JvExComCtrls, JvStatusBar;

type
  TfEditorMontajeCompleto = class(TfEditorMontajeDetalle, IEditorMontajeCompleto)
    pagPedidos: TTabSheet;
    frViewPedidosMontaje1: TfrViewPedidosMontaje;
    pagCobros: TTabSheet;
    frViewCobrosMontaje1: TfrViewCobrosMontaje;
    pagPlanos: TTabSheet;
    frViewDocumentosAsociados1: TfrViewDocumentosAsociados;
    PagGastos: TTabSheet;
    frViewGastosMontaje1: TfrViewGastosMontaje;
    frViewSituacionMontaje1: TfrViewSituacionMontaje;
    procedure frViewPedidosMontaje1actAnadirExecute(Sender: TObject);
    procedure frViewPedidosMontaje1actModificarExecute(Sender: TObject);
    procedure frViewPedidosMontaje1actEliminarExecute(Sender: TObject);
    procedure frViewCobrosMontaje1actAnadirExecute(Sender: TObject);
    procedure frViewCobrosMontaje1actModificarExecute(Sender: TObject);
    procedure frViewCobrosMontaje1actEliminarExecute(Sender: TObject);
    procedure frViewGastosMontaje1actAnadirExecute(Sender: TObject);
    procedure frViewGastosMontaje1actEliminarExecute(Sender: TObject);

    procedure frViewPedidosMontajeAfterSummary(ASender: TcxDataSummary);
    procedure frViewGastosMontajeAfterSummary(ASender: TcxDataSummary);
    procedure frViewCobrosMontajeAfterSummary(ASender: TcxDataSummary);

    procedure CustomEditorClose(Sender: TObject; var Action: TCloseAction);
    procedure FormShow(Sender: TObject);
    procedure JvFormStorageRestorePlacement(Sender: TObject);
    procedure JvFormStorageSavePlacement(Sender: TObject);
  private
    FViewDocumentos : IViewDocumentosAsociados;
  protected
    procedure SetController (const Value : IMontajesController); override;
    procedure SetMontaje(const Value: IBizMontaje); override;

    //DOCUMENTOS ASOCIADOS
    function GetViewDocumentos: IViewDocumentosAsociados;
    procedure SetViewDocumentos(const Value: IViewDocumentosAsociados);
    property ViewDocumentos: IViewDocumentosAsociados read GetViewDocumentos write
            SetViewDocumentos;
  public
    constructor Create(AOwner: TComponent); override;
  end;

implementation
{$R *.dfm}

uses
  uMontajesCompletoController, uBizMontajesCompleto, uEditorMontaje,
  uPedidosMontajeController, uCobrosMontajeController, uBizPedidosMontaje,
  uBizCobrosMontaje, uGastosMontajeController, uEditorDBItem,
  schMontajesClient_Intf, uEditorDBBase

  ;

{ TfEditorMontajeCompleto }

constructor TfEditorMontajeCompleto.Create(AOwner: TComponent);
begin
  inherited;

  //DOCUMENTOS ASOCIADOS
  FViewDocumentos := frViewDocumentosAsociados1;

  frViewPedidosMontaje1.cxGridView.DataController.Summary.OnAfterSummary := frViewPedidosMontajeAfterSummary;
  frViewGastosMontaje1.cxGridView.DataController.Summary.OnAfterSummary := frViewGastosMontajeAfterSummary;
  frViewCobrosMontaje1.cxGridView.DataController.Summary.OnAfterSummary := frViewCobrosMontajeAfterSummary;
end;

procedure TfEditorMontajeCompleto.CustomEditorClose(Sender: TObject; var Action: TCloseAction);
begin
  inherited;

  //DOCUMENTOS ASOCIADOS
  FViewDocumentos.DeshabilitarDocumentos;
  FViewDocumentos := NIL;

  frViewPedidosMontaje1.cxGridView.DataController.Summary.OnAfterSummary := Nil;
  frViewGastosMontaje1.cxGridView.DataController.Summary.OnAfterSummary := Nil;
  frViewCobrosMontaje1.cxGridView.DataController.Summary.OnAfterSummary := Nil;
end;

procedure TfEditorMontajeCompleto.FormShow(Sender: TObject);
begin
  inherited;

  //DOCUMENTOS ASOCIADOS
  if Assigned((Montaje as IBizMontajeCompleto).GestorDocumentos) then
  begin
    ViewDocumentos := CreateView(TfrViewDocumentosAsociados) as IViewDocumentosAsociados;
    ViewDocumentos.ShowEmbedded(pagPlanos);
  end;

  pgPaginas.ActivePage := pagGeneral;
end;

procedure TfEditorMontajeCompleto.frViewCobrosMontaje1actAnadirExecute(Sender: TObject);
var
  ACobrosMontajeController: ICobrosMontajeController;
  ACobroMontaje: IBizCobroMontaje;
begin
  //Antes de añadir cobros al montaje validamos el montaje por si faltasen datos
  //y lo guardamos para evitar que se cancele el montaje pero los cobros se den de alta
  if Montaje.EsNuevo then
  begin
     Controller.Guardar(Montaje);
     Montaje.Edit;
  end;

  try
    ACobrosMontajeController := (FController as IMontajesCompletoController).CobrosController;
    ACobroMontaje := (Montaje as IBizMontajeCompleto).Cobros;
    ACobrosMontajeController.Anadir(ACobroMontaje);
    ACobroMontaje.Montaje := (Montaje as IBizMontajeCompleto);
    ACobroMontaje.Cliente := (Montaje as IBizMontajeCompleto).Cliente;
    ACobrosMontajeController.Ver(ACobroMontaje);
  finally
    ACobrosMontajeController := Nil;
    ACobroMontaje := Nil;
  end;
end;

procedure TfEditorMontajeCompleto.frViewCobrosMontaje1actEliminarExecute(Sender: TObject);
var
  ACobrosMontajeController: ICobrosMontajeController;
  ACobroMontaje: IBizCobroMontaje;
begin
  try
    if (Application.MessageBox('¿Desea borrar este cobro de cliente?', 'Atención', MB_YESNO) = IDYES) then
    begin
      ACobrosMontajeController := (FController as IMontajesCompletoController).CobrosController;
      ACobroMontaje := (Montaje as IBizMontajeCompleto).Cobros;
      ACobrosMontajeController.Eliminar(ACobroMontaje);
    end;
  finally
    ACobrosMontajeController := Nil;
    ACobroMontaje := Nil;
  end;
end;

procedure TfEditorMontajeCompleto.frViewCobrosMontaje1actModificarExecute(Sender: TObject);
var
  ACobrosMontajeController: ICobrosMontajeController;
  ACobroMontaje: IBizCobroMontaje;
begin
  try
    ACobrosMontajeController := (FController as IMontajesCompletoController).CobrosController;
    ACobroMontaje := (Montaje as IBizMontajeCompleto).Cobros;
    ACobrosMontajeController.Ver(ACobroMontaje);
  finally
    ACobrosMontajeController := Nil;
    ACobroMontaje := Nil;
  end;
end;

procedure TfEditorMontajeCompleto.frViewCobrosMontajeAfterSummary(ASender: TcxDataSummary);
begin
  if VarIsNull(ASender.FooterSummaryValues[0])
  then frViewSituacionMontaje1.pImporteCobrado := 0
  else frViewSituacionMontaje1.pImporteCobrado := ASender.FooterSummaryValues[0];
end;

procedure TfEditorMontajeCompleto.frViewGastosMontaje1actAnadirExecute(
  Sender: TObject);
var
  AGastosMontajeController: IGastosMontajeController;
  AGastoMontaje: IBizGastosMontaje;
begin
  try
    AGastosMontajeController := (FController as IMontajesCompletoController).GastosController;
    AGastoMontaje := (Montaje as IBizMontajeCompleto).Gastos;
    AGastosMontajeController.Anadir(AGastoMontaje);
//    ACobroMontaje.Montaje := (Montaje as IBizMontajeCompleto);
//    ACobroMontaje.Cliente := (Montaje as IBizMontajeCompleto).Cliente;
//    ACobrosMontajeController.Ver(ACobroMontaje);
  finally
    AGastosMontajeController := Nil;
    AGastoMontaje := Nil;
  end;
end;

procedure TfEditorMontajeCompleto.frViewGastosMontaje1actEliminarExecute(
  Sender: TObject);
var
  AGastosMontajeController: IGastosMontajeController;
  AGastoMontaje: IBizGastosMontaje;
begin
  try
    AGastosMontajeController := (FController as IMontajesCompletoController).GastosController;
    AGastoMontaje := (Montaje as IBizMontajeCompleto).Gastos;
    AGastosMontajeController.Eliminar(AGastoMontaje);
//    ACobroMontaje.Montaje := (Montaje as IBizMontajeCompleto);
//    ACobroMontaje.Cliente := (Montaje as IBizMontajeCompleto).Cliente;
//    ACobrosMontajeController.Ver(ACobroMontaje);
  finally
    AGastosMontajeController := Nil;
    AGastoMontaje := Nil;
  end;
end;

procedure TfEditorMontajeCompleto.frViewGastosMontajeAfterSummary(ASender: TcxDataSummary);
begin
  if VarIsNull(ASender.FooterSummaryValues[1])
  then frViewSituacionMontaje1.pImporteOtrosGastos := 0
  else frViewSituacionMontaje1.pImporteOtrosGastos := ASender.FooterSummaryValues[1];
end;

procedure TfEditorMontajeCompleto.frViewPedidosMontaje1actAnadirExecute(Sender: TObject);
var
  APedidosMontajeController: IPedidosMontajeController;
  APedidoMontaje: IBizPedidoMontaje;
begin
  //Antes de añadir pedidos al montaje validamos el montaje por si faltasen datos
  //y lo guardamos para evitar que se cancele el montaje pero los pedidos se den de alta
  if Montaje.EsNuevo then
  begin
     Controller.Guardar(Montaje);
     Montaje.Edit;
  end;

  try
    APedidosMontajeController := (FController as IMontajesCompletoController).PedidosController;
    APedidoMontaje := (Montaje as IBizMontajeCompleto).Pedidos;
    APedidosMontajeController.Anadir(APedidoMontaje);
    APedidoMontaje.Montaje := (Montaje as IBizMontajeCompleto);
    APedidosMontajeController.Ver(APedidoMontaje);
  finally
    APedidosMontajeController := Nil;
    APedidoMontaje := Nil;
  end;
end;

procedure TfEditorMontajeCompleto.frViewPedidosMontaje1actEliminarExecute(Sender: TObject);
var
  APedidosMontajeController: IPedidosMontajeController;
  APedidoMontaje: IBizPedidoMontaje;
begin
  try
    if (Application.MessageBox('¿Desea borrar este pedido a proveedor?', 'Atención', MB_YESNO) = IDYES) then
    begin
      APedidosMontajeController := (FController as IMontajesCompletoController).PedidosController;
      APedidoMontaje := (Montaje as IBizMontajeCompleto).Pedidos;
      APedidosMontajeController.Eliminar(APedidoMontaje);
    end;
  finally
    APedidosMontajeController := Nil;
    APedidoMontaje := Nil;
  end;
end;

procedure TfEditorMontajeCompleto.frViewPedidosMontaje1actModificarExecute(Sender: TObject);
var
  APedidosMontajeController: IPedidosMontajeController;
  APedidoMontaje: IBizPedidoMontaje;
begin
  try
    APedidosMontajeController := (FController as IMontajesCompletoController).PedidosController;
    APedidoMontaje := (Montaje as IBizMontajeCompleto).Pedidos;
    APedidosMontajeController.Ver(APedidoMontaje);
  finally
    APedidosMontajeController := Nil;
    APedidoMontaje := Nil;
  end;
end;

procedure TfEditorMontajeCompleto.frViewPedidosMontajeAfterSummary(ASender: TcxDataSummary);
begin
  if VarIsNull(ASender.FooterSummaryValues[1])
  then frViewSituacionMontaje1.pImportePedidos := 0
  else frViewSituacionMontaje1.pImportePedidos := ASender.FooterSummaryValues[1];
end;

function TfEditorMontajeCompleto.GetViewDocumentos: IViewDocumentosAsociados;
begin
  Result := FViewDocumentos;
end;

procedure TfEditorMontajeCompleto.JvFormStorageRestorePlacement(Sender: TObject);
var
  Path: String;
begin
  inherited;

  Path := JvAppRegistryStorage.Root;
  frViewPedidosMontaje1._FocusedView.RestoreFromRegistry(Path + '\\GridSettings\\' + frViewPedidosMontaje1.Name, False, False, []);
  frViewGastosMontaje1._FocusedView.RestoreFromRegistry(Path + '\\GridSettings\\' + frViewGastosMontaje1.Name, False, False, []);
  frViewCobrosMontaje1._FocusedView.RestoreFromRegistry(Path + '\\GridSettings\\' + frViewCobrosMontaje1.Name, False, False, []);
end;

procedure TfEditorMontajeCompleto.JvFormStorageSavePlacement(Sender: TObject);
var
  Path: String;
begin
  inherited;

  Path := JvAppRegistryStorage.Root;
  frViewPedidosMontaje1._FocusedView.StoreToRegistry(Path + '\\GridSettings\\' + frViewPedidosMontaje1.Name, False, []);
  frViewGastosMontaje1._FocusedView.StoreToRegistry(Path + '\\GridSettings\\' + frViewGastosMontaje1.Name, False, []);
  frViewCobrosMontaje1._FocusedView.StoreToRegistry(Path + '\\GridSettings\\' + frViewCobrosMontaje1.Name, False, []);
end;

procedure TfEditorMontajeCompleto.SetController(const Value: IMontajesController);
begin
  inherited;
  if Assigned(FController) then
  begin
     frViewPedidosMontaje1.Controller := (Controller as IMontajesCompletoController).PedidosController;
     frViewCobrosMontaje1.Controller := (Controller as IMontajesCompletoController).CobrosController;
  end;
end;

procedure TfEditorMontajeCompleto.SetMontaje(const Value: IBizMontaje);
begin
  inherited;
  if Assigned(FViewMontaje) then
  begin
     frViewGastosMontaje1.Gastos := (FMontaje as IBizMontajeCompleto).Gastos;
     frViewPedidosMontaje1.Pedidos := (FMontaje as IBizMontajeCompleto).Pedidos;
     frViewCobrosMontaje1.Cobros := (FMontaje as IBizMontajeCompleto).Cobros;

     frViewSituacionMontaje1.dsDataTable.DataTable := dsDataTable.DataTable;
  end;

  //DOCUMENTOS ASOCIADOS
  if Assigned(FViewDocumentos) then
     if Assigned((Montaje as IBizDocumentosAsociados).GestorDocumentos) then
     begin
       FViewDocumentos.GestorDocumentos := (Montaje as IBizDocumentosAsociados).GestorDocumentos;
       FViewDocumentos.GestorDocumentos.ModoInsert := (Montaje.DataTable.State = dsInsert);
       pagPlanos.TabVisible := True;
     end
     else
     begin
       Showmessage('La ruta de documentos asociados no es accesible, se procederá a desactivar la funcionalidad');
       pagPlanos.TabVisible := False;
     end;
end;

procedure TfEditorMontajeCompleto.SetViewDocumentos(const Value: IViewDocumentosAsociados);
begin
  FViewDocumentos := Value;

  if Assigned(FViewDocumentos) and Assigned(Montaje) then
     if Assigned((Montaje as IBizDocumentosASociados).GestorDocumentos) then
        FViewDocumentos.GestorDocumentos := (Montaje as IBizDocumentosASociados).GestorDocumentos;
end;

end.
