diff --git a/Source/Modulos/Albaranes de cliente/Controller/uDetallesAlbaranClienteController.pas b/Source/Modulos/Albaranes de cliente/Controller/uDetallesAlbaranClienteController.pas index 0da6cc7a..aca18b7a 100644 --- a/Source/Modulos/Albaranes de cliente/Controller/uDetallesAlbaranClienteController.pas +++ b/Source/Modulos/Albaranes de cliente/Controller/uDetallesAlbaranClienteController.pas @@ -9,7 +9,7 @@ uses type IDetallesAlbaranClienteController = interface(IControllerDetallesArticulos) ['{6AD99D47-2856-47B1-9620-DD115726B0E1}'] - procedure AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente); overload; + procedure AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente; const ANuevaFila :Boolean = True; const ACantidad: Integer = 1); overload; procedure ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente); overload; procedure DesglosarPorteDetalles(ImportePorte: Currency; ADetalles: IDAStronglyTypedDataTable); function DarTotalPorteTotal(ADetalles: IDAStronglyTypedDataTable): Double; @@ -31,7 +31,7 @@ type function DarTotalPorteTotal(ADetalles: IDAStronglyTypedDataTable): Double; public - procedure AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente); overload; + procedure AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente; const ANuevaFila :Boolean = True; const ACantidad: Integer = 1); overload; procedure ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente); overload; constructor Create; override; destructor Destroy; override; @@ -60,7 +60,7 @@ begin end; end; -procedure TDetallesAlbaranClienteController.AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente); +procedure TDetallesAlbaranClienteController.AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente; const ANuevaFila :Boolean; const ACantidad: Integer); var AArticulos: IBizArticulo; begin @@ -68,8 +68,18 @@ begin begin try AArticulos := (FArticulosController.BuscarTodos(ACliente) as IBizArticulo); - AArticulos := (FArticulosController as IArticulosAlbaranClienteController).ElegirArticulos(AArticulos, 'Elija los artículos que desea añadir a este albarán de cliente', True); - Add(ADetalles, AArticulos); + + //Si nueva fila es false, quiere decir que se sustituye un determinado artículo, por ello la lista a seleccionar no debe ser multiselect + if ANuevaFila then + begin + AArticulos := (FArticulosController as IArticulosAlbaranClienteController).ElegirArticulos(AArticulos, 'Elija los artículos que desea añadir a este albarán de cliente', True); + Add(ADetalles, AArticulos, ACantidad) + end + else + begin + AArticulos := (FArticulosController as IArticulosAlbaranClienteController).ElegirArticulos(AArticulos, 'Elija el artículo que desea añadir a este albarán de cliente', False); + RellenarDetalle(ADetalles, AArticulos, ACantidad); + end; finally AArticulos := Nil; end; diff --git a/Source/Modulos/Albaranes de cliente/Views/uEditorAlbaranCliente.pas b/Source/Modulos/Albaranes de cliente/Views/uEditorAlbaranCliente.pas index 32a1c3ee..38ba2cb5 100644 --- a/Source/Modulos/Albaranes de cliente/Views/uEditorAlbaranCliente.pas +++ b/Source/Modulos/Albaranes de cliente/Views/uEditorAlbaranCliente.pas @@ -278,9 +278,6 @@ begin if (FAlbaran.Detalles.RecordCount > 0) then begin FController.DetallesController.ActualizarDetalles(FAlbaran.Detalles, FAlbaran.Cliente); - //En caso de ser una orden de devolucion también debe cambiar el signo a los detalles - if (Albaran.TIPO = CTE_TIPO_ALBARAN_DEV) then - Controller.DetallesController.CambiarSignoDetalles(FAlbaran.Detalles); end; finally diff --git a/Source/Modulos/Albaranes de cliente/Views/uViewDetallesAlbaranCliente.pas b/Source/Modulos/Albaranes de cliente/Views/uViewDetallesAlbaranCliente.pas index a422d87c..d2f3c39f 100644 --- a/Source/Modulos/Albaranes de cliente/Views/uViewDetallesAlbaranCliente.pas +++ b/Source/Modulos/Albaranes de cliente/Views/uViewDetallesAlbaranCliente.pas @@ -30,6 +30,7 @@ type procedure SetAlbaran(const Value: IBizAlbaranCliente); procedure AnadirArticulosInterno; override; + procedure RellenarArticulosInterno; override; function AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean; override; public @@ -45,18 +46,18 @@ uses uDetallesAlbaranClienteController, uViewDetallesBase; function TfrViewDetallesAlbaranCliente.AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean; begin - Result := (Controller as IDetallesAlbaranClienteController).AnadirArticulo(Detalles, pReferencia, TipoReferencia); - - if (Albaran.TIPO = CTE_TIPO_ALBARAN_DEV) then - (Controller as IDetallesAlbaranClienteController).CambiarSignoDetalles(Detalles); + if (Albaran.TIPO = CTE_TIPO_ALBARAN_DEV) then + Result := (Controller as IDetallesAlbaranClienteController).AnadirArticulo(Detalles, pReferencia, TipoReferencia, Albaran.Cliente.ID, -1) + else + Result := (Controller as IDetallesAlbaranClienteController).AnadirArticulo(Detalles, pReferencia, TipoReferencia, Albaran.Cliente.ID); end; procedure TfrViewDetallesAlbaranCliente.AnadirArticulosInterno; begin - (Controller as IDetallesAlbaranClienteController).AnadirArticulos(Detalles, Albaran.Cliente); - - if (Albaran.TIPO = CTE_TIPO_ALBARAN_DEV) then - (Controller as IDetallesAlbaranClienteController).CambiarSignoDetalles(Detalles); + if (Albaran.TIPO = CTE_TIPO_ALBARAN_DEV) then + (Controller as IDetallesAlbaranClienteController).AnadirArticulos(Detalles, Albaran.Cliente, true, -1) + else + (Controller as IDetallesAlbaranClienteController).AnadirArticulos(Detalles, Albaran.Cliente); end; function TfrViewDetallesAlbaranCliente.GetAlbaran: IBizAlbaranCliente; @@ -64,6 +65,14 @@ begin Result := FAlbaran; end; +procedure TfrViewDetallesAlbaranCliente.RellenarArticulosInterno; +begin + if (Albaran.TIPO = CTE_TIPO_ALBARAN_DEV) then + (Controller as IDetallesAlbaranClienteController).AnadirArticulos(Detalles, Albaran.Cliente, False, -1) + else + (Controller as IDetallesAlbaranClienteController).AnadirArticulos(Detalles, Albaran.Cliente, False); +end; + procedure TfrViewDetallesAlbaranCliente.SetAlbaran(const Value: IBizAlbaranCliente); begin FAlbaran := Value; diff --git a/Source/Modulos/Albaranes de proveedor/Controller/uDetallesAlbaranProveedorController.pas b/Source/Modulos/Albaranes de proveedor/Controller/uDetallesAlbaranProveedorController.pas index b94a5020..075eacc7 100644 --- a/Source/Modulos/Albaranes de proveedor/Controller/uDetallesAlbaranProveedorController.pas +++ b/Source/Modulos/Albaranes de proveedor/Controller/uDetallesAlbaranProveedorController.pas @@ -9,7 +9,7 @@ uses type IDetallesAlbaranProveedorController = interface(IControllerDetallesArticulos) ['{6E35D49A-C78D-481D-93E9-859CD27EB79F}'] - procedure AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor); overload; + procedure AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor; const ANuevaFila :Boolean = True; const ACantidad: Integer = 1); overload; procedure ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor); overload; procedure DesglosarPorteDetalles(ImportePorte: Currency; ADetalles: IDAStronglyTypedDataTable); function DarTotalPorteTotal(ADetalles: IDAStronglyTypedDataTable): Double; @@ -31,7 +31,7 @@ type function DarTotalPorteTotal(ADetalles: IDAStronglyTypedDataTable): Double; public - procedure AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor); overload; + procedure AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor; const ANuevaFila :Boolean = True; const ACantidad: Integer = 1); overload; procedure ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor); overload; constructor Create; override; destructor Destroy; override; @@ -61,7 +61,7 @@ begin end; end; -procedure TDetallesAlbaranProveedorController.AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor); +procedure TDetallesAlbaranProveedorController.AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor; const ANuevaFila :Boolean; const ACantidad: Integer); var AArticulos: IBizArticulo; begin @@ -69,8 +69,18 @@ begin begin try AArticulos := (FArticulosController.BuscarTodos as IBizArticulo); - AArticulos := (FArticulosController as IArticulosAlbaranProveedorController).ElegirArticulos(AArticulos, 'Elija los artículos que desea añadir a este albarán de proveedor', True, AProveedor); - Add(ADetalles, AArticulos); + + //Si nueva fila es false, quiere decir que se sustituye un determinado artículo, por ello la lista a seleccionar no debe ser multiselect + if ANuevaFila then + begin + AArticulos := (FArticulosController as IArticulosAlbaranProveedorController).ElegirArticulos(AArticulos, 'Elija los artículos que desea añadir a este albarán de proveedor', True, AProveedor); + Add(ADetalles, AArticulos, ACantidad) + end + else + begin + AArticulos := (FArticulosController as IArticulosAlbaranProveedorController).ElegirArticulos(AArticulos, 'Elija el artículo que desea añadir a este albarán de proveedor', False, AProveedor); + RellenarDetalle(ADetalles, AArticulos, ACantidad); + end; finally AArticulos := Nil; end; diff --git a/Source/Modulos/Albaranes de proveedor/Views/uEditorAlbaranProveedor.pas b/Source/Modulos/Albaranes de proveedor/Views/uEditorAlbaranProveedor.pas index 2f3e02d5..d54fd26a 100644 --- a/Source/Modulos/Albaranes de proveedor/Views/uEditorAlbaranProveedor.pas +++ b/Source/Modulos/Albaranes de proveedor/Views/uEditorAlbaranProveedor.pas @@ -239,9 +239,6 @@ begin if (FAlbaran.Detalles.RecordCount > 0) then begin FController.DetallesController.ActualizarDetalles(FAlbaran.Detalles, FAlbaran.Proveedor); - //En caso de ser una orden de devolucion también debe cambiar el signo a los detalles - if (Albaran.TIPO = CTE_TIPO_ALBARAN_DEV) then - Controller.DetallesController.CambiarSignoDetalles(FAlbaran.Detalles); end; end; end; diff --git a/Source/Modulos/Albaranes de proveedor/Views/uViewDetallesAlbaranProveedor.pas b/Source/Modulos/Albaranes de proveedor/Views/uViewDetallesAlbaranProveedor.pas index 714c4a65..9206ff6c 100644 --- a/Source/Modulos/Albaranes de proveedor/Views/uViewDetallesAlbaranProveedor.pas +++ b/Source/Modulos/Albaranes de proveedor/Views/uViewDetallesAlbaranProveedor.pas @@ -28,6 +28,7 @@ type procedure SetAlbaran(const Value: IBizAlbaranProveedor); procedure AnadirArticulosInterno; override; + procedure RellenarArticulosInterno; override; function AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean; override; public @@ -43,18 +44,18 @@ uses uDetallesAlbaranProveedorController, uViewDetallesBase; function TfrViewDetallesAlbaranProveedor.AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean; begin - Result := (Controller as IDetallesAlbaranProveedorController).AnadirArticulo(Detalles, pReferencia, TipoReferencia); - - if (Albaran.TIPO = CTE_TIPO_ALBARAN_DEV) then - (Controller as IDetallesAlbaranProveedorController).CambiarSignoDetalles(Detalles); + if (Albaran.TIPO = CTE_TIPO_ALBARAN_DEV) then + Result := (Controller as IDetallesAlbaranProveedorController).AnadirArticulo(Detalles, pReferencia, TipoReferencia, -1, -1) + else + Result := (Controller as IDetallesAlbaranProveedorController).AnadirArticulo(Detalles, pReferencia, TipoReferencia); end; procedure TfrViewDetallesAlbaranProveedor.AnadirArticulosInterno; begin - (Controller as IDetallesAlbaranProveedorController).AnadirArticulos(Detalles, Albaran.Proveedor); - - if (Albaran.TIPO = CTE_TIPO_ALBARAN_DEV) then - (Controller as IDetallesAlbaranProveedorController).CambiarSignoDetalles(Detalles); + if (Albaran.TIPO = CTE_TIPO_ALBARAN_DEV) then + (Controller as IDetallesAlbaranProveedorController).AnadirArticulos(Detalles, Albaran.Proveedor, true, -1) + else + (Controller as IDetallesAlbaranProveedorController).AnadirArticulos(Detalles, Albaran.Proveedor); end; function TfrViewDetallesAlbaranProveedor.GetAlbaran: IBizAlbaranProveedor; @@ -62,6 +63,14 @@ begin Result := FAlbaran; end; +procedure TfrViewDetallesAlbaranProveedor.RellenarArticulosInterno; +begin + if (Albaran.TIPO = CTE_TIPO_ALBARAN_DEV) then + (Controller as IDetallesAlbaranProveedorController).AnadirArticulos(Detalles, Albaran.Proveedor, False, -1) + else + (Controller as IDetallesAlbaranProveedorController).AnadirArticulos(Detalles, Albaran.Proveedor, False); +end; + procedure TfrViewDetallesAlbaranProveedor.SetAlbaran(const Value: IBizAlbaranProveedor); begin FAlbaran := Value; diff --git a/Source/Modulos/Articulos/Controller/uArticulosController.pas b/Source/Modulos/Articulos/Controller/uArticulosController.pas index ba2961a4..9ef05d1a 100644 --- a/Source/Modulos/Articulos/Controller/uArticulosController.pas +++ b/Source/Modulos/Articulos/Controller/uArticulosController.pas @@ -78,7 +78,7 @@ type function BuscarTodos(ACliente: Integer): IBizArticulo; overload; function BuscarTodos(AProveedor: IBizProveedor): IBizArticulo; overload; function BuscarReferencia(const Ref: String; AClienteID: Integer = -1): IBizArticulo; virtual; - function BuscarReferenciaProveedor(const Ref: String; AClienteID: Integer = -1): IBizArticulo; virtual; + function BuscarReferenciaProveedor(const Ref: String; AClienteID: Integer): IBizArticulo; virtual; function Nuevo : IBizArticulo; virtual; procedure Ver(AArticulo : IBizArticulo); virtual; procedure VerTodos(AArticulos: IBizArticulo); virtual; @@ -178,24 +178,29 @@ begin else Result := BuscarTodos(AClienteID); - // Filtrar por referencia - with Result.DataTable.DynamicWhere do - begin - // (REFERENCIA >= Ref) - Condicion := NewBinaryExpression(NewField('', fld_ArticulosREFERENCIA), NewConstant(UpperCase(Ref), datString), dboEqual); - - if IsEmpty then - Expression := Condicion - else - Expression := NewBinaryExpression(Expression, Condicion, dboAnd); - end; - + // Filtrar por referencia, se cambia por el where anterior porque luego no nos reconoce bien la cadena, al contener UPPER + with Result.DataTable.Where do + begin + AddText(Format('UPPER(%s) = ''%s''', [fld_ArticulosREFERENCIA, UpperCase(Ref)])); + end; + + {with Result.DataTable.DynamicWhere do + begin + // (REFERENCIA >= Ref) + Condicion := NewBinaryExpression(NewField('', fld_ArticulosREFERENCIA), NewConstant(UpperCase(Ref), datString), dboEqual); + + if IsEmpty then + Expression := Condicion + else + Expression := NewBinaryExpression(Expression, Condicion, dboAnd); + end;} + finally HideHourglassCursor; end; end; -function TArticulosController.BuscarReferenciaProveedor(const Ref: String; AClienteID: Integer = -1): IBizArticulo; +function TArticulosController.BuscarReferenciaProveedor(const Ref: String; AClienteID: Integer): IBizArticulo; var Condicion: TDAWhereExpression; begin @@ -206,18 +211,24 @@ begin else Result := BuscarTodos(AClienteID); - // Filtrar por referencia - with Result.DataTable.DynamicWhere do - begin - // (REFERENCIA >= Ref) - Condicion := NewBinaryExpression(NewField('', fld_ArticulosREFERENCIA_PROV), NewConstant(UpperCase(Ref), datString), dboEqual); - - if IsEmpty then - Expression := Condicion - else - Expression := NewBinaryExpression(Expression, Condicion, dboAnd); - end; + // Filtrar por referencia, se cambia por el where anterior porque luego no nos reconoce bien la cadena, al contener UPPER + with Result.DataTable.Where do + begin + AddText(Format('UPPER(%s) = ''%s''', [fld_ArticulosREFERENCIA_PROV, UpperCase(Ref)])); + end; + + {with Result.DataTable.DynamicWhere do + begin + // (REFERENCIA >= Ref) + Condicion := NewBinaryExpression(NewField('', fld_ArticulosREFERENCIA_PROV), NewConstant(UpperCase(Ref), datString), dboEqual); + + if IsEmpty then + Expression := Condicion + else + Expression := NewBinaryExpression(Expression, Condicion, dboAnd); + end;} + finally HideHourglassCursor; end; diff --git a/Source/Modulos/Articulos/Controller/uControllerDetallesArticulos.pas b/Source/Modulos/Articulos/Controller/uControllerDetallesArticulos.pas index 0aee8556..80bbe179 100644 --- a/Source/Modulos/Articulos/Controller/uControllerDetallesArticulos.pas +++ b/Source/Modulos/Articulos/Controller/uControllerDetallesArticulos.pas @@ -15,10 +15,9 @@ type IControllerDetallesArticulos = interface(IControllerDetallesBase) ['{6E156796-DB1F-4727-BBFB-FBAEF2E5C098}'] procedure AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; const ANuevaFila :Boolean = True); - function AnadirArticulo(ADetalles: IDAStronglyTypedDataTable; Referencia: String; TipoReferencia: TEnumReferencia; AClienteID: Integer = -1): Boolean; overload; - function AnadirArticulo(ADetalles: IDAStronglyTypedDataTable; IDArticulo: Integer; AClienteID: Integer = -1): Boolean; overload; + function AnadirArticulo(ADetalles: IDAStronglyTypedDataTable; Referencia: String; TipoReferencia: TEnumReferencia; AClienteID: Integer = -1; const ACantidad: Integer = 1): Boolean; overload; procedure ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo); - procedure CambiarSignoDetalles(ADetalles: IDAStronglyTypedDataTable); + procedure CambiarSignoDetalles(ADetalles: IDAStronglyTypedDataTable; const AAll: Boolean = True); procedure AnadirConceptoInicial(ADetalles: IDAStronglyTypedDataTable; AConcepto: String); end; @@ -31,17 +30,17 @@ type procedure RellenarOtros(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo); virtual; procedure RellenarImportes(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo); virtual; procedure RellenarGenerales(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo); virtual; - procedure RellenarDetalle(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo); virtual; - procedure Add(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo); overload; + procedure RellenarCantidad(ADetalles: IDAStronglyTypedDataTable; const ACantidad: Integer); virtual; + procedure RellenarDetalle(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo; const ACantidad: Integer = 1); virtual; + procedure Add(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo; const ACantidad: Integer = 1); overload; procedure AsignarController; virtual; public - function AnadirArticulo(ADetalles: IDAStronglyTypedDataTable; Referencia: String; TipoReferencia: TEnumReferencia; AClienteID: Integer = -1): Boolean; overload; - function AnadirArticulo(ADetalles: IDAStronglyTypedDataTable; IDArticulo: Integer; AClienteID: Integer = -1): Boolean; overload; + function AnadirArticulo(ADetalles: IDAStronglyTypedDataTable; Referencia: String; TipoReferencia: TEnumReferencia; AClienteID: Integer = -1; const ACantidad: Integer = 1): Boolean; overload; procedure AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; const ANuevaFila :Boolean = True); procedure ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo); - procedure CambiarSignoDetalles(ADetalles: IDAStronglyTypedDataTable); + procedure CambiarSignoDetalles(ADetalles: IDAStronglyTypedDataTable; const AAll: Boolean = True); procedure AnadirConceptoInicial(ADetalles: IDAStronglyTypedDataTable; AConcepto: String); constructor Create; override; @@ -59,6 +58,8 @@ uses DB, Dialogs, cxControls, SysUtils, uDAInterfaces, uCalculosUtils, schArticu { TControllerDetallesArticulos } procedure TControllerDetallesArticulos.ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo); +var + ACantidad: Integer; begin if (Assigned(ADetalles) and Assigned(AArticulos)) then begin @@ -76,9 +77,11 @@ begin AArticulos.DataTable.First; try if AArticulos.DataTable.Locate(CAMPO_ID, FieldByName(CAMPO_ID_ARTICULOS).AsVariant, []) then - RellenarDetalle(ADetalles, AArticulos) - else - RellenarDetalle(ADetalles, Nil); + begin + //Para mantener la cantidad que ya tuviera el detalle se debe guardar y volver a poner + ACantidad := ADetalles.DataTable.FieldByName(CAMPO_CANTIDAD).AsInteger; + RellenarDetalle(ADetalles, AArticulos, ACantidad); + end; except on E: Exception do ShowMessage(E.Message); @@ -94,7 +97,7 @@ begin end; end; -procedure TControllerDetallesArticulos.Add(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo); +procedure TControllerDetallesArticulos.Add(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo; const ACantidad: Integer); begin if Assigned(ADetalles) and Assigned(AArticulos) then begin @@ -114,7 +117,7 @@ begin while not EOF do begin Self.Add(ADetalles, TIPO_DETALLE_CONCEPTO); - RellenarDetalle(ADetalles, AArticulos); + RellenarDetalle(ADetalles, AArticulos, ACantidad); Next; end; end; @@ -125,38 +128,7 @@ begin end; end; -function TControllerDetallesArticulos.AnadirArticulo(ADetalles: IDAStronglyTypedDataTable; IDArticulo: Integer; AClienteID: Integer = -1): Boolean; -var - AArticulo: IBizArticulo; -begin - { - Añade el artículo con la referencia pasada por parametro a los detalles pasados por parametro - En el caso de asignar un AClienteID el articulo debe contener el descuento para ese cliente - } - - Result := False; - BeginUpdate(ADetalles); - ShowHourglassCursor; - try - AArticulo := FArticulosController.Buscar(IDArticulo, AClienteID); - - if Assigned(AArticulo) then - begin - AArticulo.DataTable.Active := True; - if (AArticulo.RecordCount > 0) then - begin - RellenarDetalle(ADetalles, AArticulo); - Result := True; - end; - end; - finally - EndUpdate(ADetalles); - HideHourglassCursor; - end; -end; - -procedure TControllerDetallesArticulos.AnadirArticulos( - ADetalles: IDAStronglyTypedDataTable; const ANuevaFila: Boolean); +procedure TControllerDetallesArticulos.AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; const ANuevaFila: Boolean); var AArticulos: IBizArticulo; begin @@ -164,11 +136,18 @@ begin begin try AArticulos := (FArticulosController.BuscarTodos as IBizArticulo); - AArticulos := FArticulosController.ElegirArticulos(AArticulos, 'Elija los artículos que desea añadir', True); + + //Si nueva fila es false, quiere decir que se sustituye un determinado artículo, por ello la lista a seleccionar no debe ser multiselect if ANuevaFila then - Add(ADetalles, AArticulos) - else - RellenarDetalle(ADetalles, AArticulos); + begin + AArticulos := FArticulosController.ElegirArticulos(AArticulos, 'Elija los artículos que desea añadir', True); + Add(ADetalles, AArticulos) + end + else + begin + AArticulos := FArticulosController.ElegirArticulos(AArticulos, 'Elija el artículo que desea añadir', False); + RellenarDetalle(ADetalles, AArticulos); + end; finally AArticulos := Nil; end; @@ -208,7 +187,7 @@ begin // end; -procedure TControllerDetallesArticulos.CambiarSignoDetalles(ADetalles: IDAStronglyTypedDataTable); +procedure TControllerDetallesArticulos.CambiarSignoDetalles(ADetalles: IDAStronglyTypedDataTable; const AAll: Boolean); begin //Cambia de signo los detalles de la pasados por parámetro if Assigned(ADetalles) then @@ -221,15 +200,28 @@ begin with ADetalles.DataTable do begin - First; - while not EOF do + //Cambia el signo a todos + if AAll then + begin + First; + while not EOF do + begin + if (FieldByName(CAMPO_CANTIDAD).AsInteger <> 0) then + begin + Edit; + FieldByName(CAMPO_CANTIDAD).AsInteger := (-1) * FieldByName(CAMPO_CANTIDAD).AsInteger; + end; + Next; + end; + end + //Solo cambia el signo al seleccionado + else begin if (FieldByName(CAMPO_CANTIDAD).AsInteger <> 0) then begin Edit; FieldByName(CAMPO_CANTIDAD).AsInteger := (-1) * FieldByName(CAMPO_CANTIDAD).AsInteger; end; - Next; end; end; finally @@ -266,7 +258,7 @@ begin end; end; -function TControllerDetallesArticulos.AnadirArticulo(ADetalles: IDAStronglyTypedDataTable; Referencia: String; TipoReferencia: TEnumReferencia; AClienteID: Integer = -1): Boolean; +function TControllerDetallesArticulos.AnadirArticulo(ADetalles: IDAStronglyTypedDataTable; Referencia: String; TipoReferencia: TEnumReferencia; AClienteID: Integer = -1; const ACantidad: Integer = 1): Boolean; var AArticulo: IBizArticulo; begin @@ -288,7 +280,7 @@ begin AArticulo.DataTable.Active := True; if (AArticulo.RecordCount > 0) then begin - RellenarDetalle(ADetalles, AArticulo); + RellenarDetalle(ADetalles, AArticulo, ACantidad); Result := True; end; end; @@ -298,23 +290,37 @@ begin end; end; +procedure TControllerDetallesArticulos.RellenarCantidad(ADetalles: IDAStronglyTypedDataTable; const ACantidad: Integer); +begin + if Assigned(ADetalles) then + begin + ADetalles.DataTable.FieldByName(CAMPO_CANTIDAD).AsInteger := ACantidad; + end; +end; + procedure TControllerDetallesArticulos.RellenarOtros(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo); begin // Procedimiento que en los hijos se sobreescribirá para rellenar otros campos según necesidades end; -procedure TControllerDetallesArticulos.RellenarDetalle(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo); +procedure TControllerDetallesArticulos.RellenarDetalle(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo; const ACantidad: Integer); begin if Assigned(ADetalles) then begin - if not ADetalles.DataTable.Editing then - ADetalles.DataTable.Edit; - - RellenarGenerales(ADetalles, AArticulos); - RellenarImportes(ADetalles, AArticulos); - RellenarOtros(ADetalles, AArticulos); - - ADetalles.DataTable.Post; + BeginUpdate(ADetalles); + try + if not ADetalles.DataTable.Editing then + ADetalles.DataTable.Edit; + + RellenarGenerales(ADetalles, AArticulos); + RellenarCantidad(ADetalles, ACantidad); + RellenarImportes(ADetalles, AArticulos); + RellenarOtros(ADetalles, AArticulos); + + ADetalles.DataTable.Post; + finally + EndUpdate(ADetalles); + end; end; end; @@ -326,7 +332,6 @@ begin ADetalles.DataTable.FieldByName(CAMPO_REFERENCIA).AsVariant := AArticulos.REFERENCIA; ADetalles.DataTable.FieldByName(CAMPO_REFERENCIA_PROVEEDOR).AsVariant := AArticulos.REFERENCIA_PROV; ADetalles.DataTable.FieldByName(CAMPO_CONCEPTO).AsVariant := AArticulos.DESCRIPCION; - ADetalles.DataTable.FieldByName(CAMPO_CANTIDAD).AsInteger := 1; end; end; diff --git a/Source/Modulos/Articulos/Servidor/srvArticulos_Impl.dfm b/Source/Modulos/Articulos/Servidor/srvArticulos_Impl.dfm index b2df3907..a977ccc3 100644 --- a/Source/Modulos/Articulos/Servidor/srvArticulos_Impl.dfm +++ b/Source/Modulos/Articulos/Servidor/srvArticulos_Impl.dfm @@ -6,6 +6,7 @@ object srvArticulos: TsrvArticulos ConnectionName = 'IBX' ServiceSchema = schArticulos ServiceDataStreamer = Bin2DataStreamer + AllowWhereSQL = True ExportedDataTables = <> BeforeAcquireConnection = DataAbstractServiceBeforeAcquireConnection Height = 229 diff --git a/Source/Modulos/Articulos/Views/uViewDetallesArticulos.pas b/Source/Modulos/Articulos/Views/uViewDetallesArticulos.pas index 7fe67bd5..f14e2d04 100644 --- a/Source/Modulos/Articulos/Views/uViewDetallesArticulos.pas +++ b/Source/Modulos/Articulos/Views/uViewDetallesArticulos.pas @@ -34,6 +34,7 @@ type protected procedure AnadirArticulosInterno; virtual; + procedure RellenarArticulosInterno; virtual; function AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean; virtual; end; @@ -121,6 +122,11 @@ begin end; end; +procedure TfrViewDetallesArticulos.RellenarArticulosInterno; +begin + (Controller as IControllerDetallesArticulos).AnadirArticulos(Detalles, False); +end; + procedure TfrViewDetallesArticulos.actAnadirArticulosUpdate(Sender: TObject); begin inherited; diff --git a/Source/Modulos/Facturas de cliente/Controller/uDetallesFacturaClienteController.pas b/Source/Modulos/Facturas de cliente/Controller/uDetallesFacturaClienteController.pas index 6c305cb6..35b3e767 100644 --- a/Source/Modulos/Facturas de cliente/Controller/uDetallesFacturaClienteController.pas +++ b/Source/Modulos/Facturas de cliente/Controller/uDetallesFacturaClienteController.pas @@ -9,7 +9,7 @@ uses type IDetallesFacturaClienteController = interface(IControllerDetallesArticulos) ['{D3942A48-C55B-4A98-AC5B-B5E652ED393E}'] - procedure AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente); overload; + procedure AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente; const ANuevaFila :Boolean = True; const ACantidad: Integer = 1); overload; procedure ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente); procedure AnadirDetalleFacturaAsociadaAbono(ADetalles: IBizDetallesFacturaCliente; AReferencia: String; AFecha: String); procedure DesglosarPorteDetalles(ImportePorte: Currency; ADetalles: IDAStronglyTypedDataTable); @@ -32,7 +32,7 @@ type function DarTotalPorteTotal(ADetalles: IDAStronglyTypedDataTable): Double; public - procedure AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente); overload; + procedure AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente; const ANuevaFila :Boolean = True; const ACantidad: Integer = 1); overload; procedure ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente); overload; //ABONOS @@ -65,7 +65,7 @@ begin end; end; -procedure TDetallesFacturaClienteController.AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente); +procedure TDetallesFacturaClienteController.AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente; const ANuevaFila :Boolean; const ACantidad: Integer); var AArticulos: IBizArticulo; begin @@ -73,8 +73,18 @@ begin begin AArticulos := (FArticulosController.BuscarTodos(ACliente) as IBizArticulo); try - AArticulos := (FArticulosController as IArticulosFacturaClienteController).ElegirArticulos(AArticulos, 'Elija los artículos que desea añadir a esta factura de cliente', True); - Add(ADetalles, AArticulos); + //Si nueva fila es false, quiere decir que se sustituye un determinado artículo, por ello la lista a seleccionar no debe ser multiselect + if ANuevaFila then + begin + AArticulos := (FArticulosController as IArticulosFacturaClienteController).ElegirArticulos(AArticulos, 'Elija los artículos que desea añadir a esta factura de cliente', True); + Add(ADetalles, AArticulos, ACantidad) + end + else + begin + AArticulos := (FArticulosController as IArticulosFacturaClienteController).ElegirArticulos(AArticulos, 'Elija el artículo que desea añadir a esta factura de cliente', False); + RellenarDetalle(ADetalles, AArticulos, ACantidad); + end; + finally AArticulos := Nil; end; diff --git a/Source/Modulos/Facturas de cliente/Views/uEditorFacturaCliente.pas b/Source/Modulos/Facturas de cliente/Views/uEditorFacturaCliente.pas index caad4aa4..f736a905 100644 --- a/Source/Modulos/Facturas de cliente/Views/uEditorFacturaCliente.pas +++ b/Source/Modulos/Facturas de cliente/Views/uEditorFacturaCliente.pas @@ -312,11 +312,6 @@ begin FDetallesController := TDetallesFacturaClienteController.Create; try FDetallesController.ActualizarDetalles(FFactura.Detalles, FFactura.Cliente); - - //En caso de ser un abono también debe cambiar el signo a los detalles - if (Factura.TIPO = CTE_TIPO_ABONO) then - Controller.DetallesController.CambiarSignoDetalles(FFactura.Detalles); - finally FDetallesController := NIL; end; diff --git a/Source/Modulos/Facturas de cliente/Views/uViewDetallesFacturaCliente.pas b/Source/Modulos/Facturas de cliente/Views/uViewDetallesFacturaCliente.pas index 264d05df..377a8a87 100644 --- a/Source/Modulos/Facturas de cliente/Views/uViewDetallesFacturaCliente.pas +++ b/Source/Modulos/Facturas de cliente/Views/uViewDetallesFacturaCliente.pas @@ -29,6 +29,7 @@ type procedure SetFactura(const Value: IBizFacturaCliente); procedure AnadirArticulosInterno; override; + procedure RellenarArticulosInterno; override; function AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean; override; public @@ -44,18 +45,18 @@ uses uDetallesFacturaClienteController; function TfrViewDetallesFacturaCliente.AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean; begin - Result := (Controller as IDetallesFacturaClienteController).AnadirArticulo(Detalles, pReferencia, TipoReferencia, Factura.Cliente.ID); - - if (Factura.TIPO = CTE_TIPO_ABONO) then - (Controller as IDetallesFacturaClienteController).CambiarSignoDetalles(Detalles); + if (Factura.TIPO = CTE_TIPO_ABONO) then + Result := (Controller as IDetallesFacturaClienteController).AnadirArticulo(Detalles, pReferencia, TipoReferencia, Factura.Cliente.ID, -1) + else + Result := (Controller as IDetallesFacturaClienteController).AnadirArticulo(Detalles, pReferencia, TipoReferencia, Factura.Cliente.ID); end; procedure TfrViewDetallesFacturaCliente.AnadirArticulosInterno; begin - (Controller as IDetallesFacturaClienteController).AnadirArticulos(Detalles, Factura.Cliente); - - if (Factura.TIPO = CTE_TIPO_ABONO) then - (Controller as IDetallesFacturaClienteController).CambiarSignoDetalles(Detalles); + if (Factura.TIPO = CTE_TIPO_ABONO) then + (Controller as IDetallesFacturaClienteController).AnadirArticulos(Detalles, Factura.Cliente, true, -1) + else + (Controller as IDetallesFacturaClienteController).AnadirArticulos(Detalles, Factura.Cliente); end; function TfrViewDetallesFacturaCliente.GetFactura: IBizFacturaCliente; @@ -63,6 +64,14 @@ begin Result := FFactura; end; +procedure TfrViewDetallesFacturaCliente.RellenarArticulosInterno; +begin + if (Factura.TIPO = CTE_TIPO_ABONO) then + (Controller as IDetallesFacturaClienteController).AnadirArticulos(Detalles, Factura.Cliente, False, -1) + else + (Controller as IDetallesFacturaClienteController).AnadirArticulos(Detalles, Factura.Cliente, False); +end; + procedure TfrViewDetallesFacturaCliente.SetFactura(const Value: IBizFacturaCliente); begin FFactura := Value; diff --git a/Source/Modulos/Facturas de proveedor/Controller/uDetallesFacturaProveedorController.pas b/Source/Modulos/Facturas de proveedor/Controller/uDetallesFacturaProveedorController.pas index f63870ce..96b8285b 100644 --- a/Source/Modulos/Facturas de proveedor/Controller/uDetallesFacturaProveedorController.pas +++ b/Source/Modulos/Facturas de proveedor/Controller/uDetallesFacturaProveedorController.pas @@ -9,7 +9,7 @@ uses type IDetallesFacturaProveedorController = interface(IControllerDetallesArticulos) ['{49F6199E-E031-42F5-AEA5-E70C3E3479A1}'] - procedure AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor); overload; + procedure AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor; const ANuevaFila :Boolean = True; const ACantidad: Integer = 1); overload; procedure ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor); procedure AnadirDetalleFacturaAsociadaAbono(ADetalles: IBizDetallesFacturaProveedor; AReferencia: String; AFecha: String); procedure DesglosarPorteDetalles(ImportePorte: Currency; ADetalles: IDAStronglyTypedDataTable); @@ -31,7 +31,7 @@ type function DarTotalPorteTotal(ADetalles: IDAStronglyTypedDataTable): Double; public - procedure AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor); overload; + procedure AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor; const ANuevaFila :Boolean = True; const ACantidad: Integer = 1); overload; procedure ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor); overload; procedure AnadirDetalleFacturaAsociadaAbono(ADetalles: IBizDetallesFacturaProveedor; AReferencia: String; AFecha: String); constructor Create; override; @@ -62,7 +62,7 @@ begin end; end; -procedure TDetallesFacturaProveedorController.AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor); +procedure TDetallesFacturaProveedorController.AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor; const ANuevaFila :Boolean; const ACantidad: Integer); var AArticulos: IBizArticulo; begin @@ -70,16 +70,24 @@ begin begin AArticulos := (FArticulosController.BuscarTodos as IBizArticulo); try - AArticulos := (FArticulosController as IArticulosFacturaProveedorController).ElegirArticulos(AArticulos, 'Elija los artículos que desea añadir a esta factura de Proveedor', True, AProveedor); - Add(ADetalles, AArticulos); + //Si nueva fila es false, quiere decir que se sustituye un determinado artículo, por ello la lista a seleccionar no debe ser multiselect + if ANuevaFila then + begin + AArticulos := (FArticulosController as IArticulosFacturaProveedorController).ElegirArticulos(AArticulos, 'Elija los artículos que desea añadir a esta factura de Proveedor', True, AProveedor); + Add(ADetalles, AArticulos, ACantidad) + end + else + begin + AArticulos := (FArticulosController as IArticulosFacturaProveedorController).ElegirArticulos(AArticulos, 'Elija el artículo que desea añadir a esta factura de Proveedor', False, AProveedor); + RellenarDetalle(ADetalles, AArticulos, ACantidad); + end; finally AArticulos := Nil; end; end; end; -procedure TDetallesFacturaProveedorController.AnadirDetalleFacturaAsociadaAbono( - ADetalles: IBizDetallesFacturaProveedor; AReferencia, AFecha: String); +procedure TDetallesFacturaProveedorController.AnadirDetalleFacturaAsociadaAbono(ADetalles: IBizDetallesFacturaProveedor; AReferencia, AFecha: String); begin AnadirConceptoInicial(ADetalles, 'ABONO DE FACTURA ' + AReferencia + ' con fecha ' + AFecha); end; diff --git a/Source/Modulos/Facturas de proveedor/Views/uEditorFacturaProveedor.pas b/Source/Modulos/Facturas de proveedor/Views/uEditorFacturaProveedor.pas index f29b22e8..9f77474e 100644 --- a/Source/Modulos/Facturas de proveedor/Views/uEditorFacturaProveedor.pas +++ b/Source/Modulos/Facturas de proveedor/Views/uEditorFacturaProveedor.pas @@ -300,11 +300,6 @@ begin FDetallesController := TDetallesFacturaProveedorController.Create; try FDetallesController.ActualizarDetalles(FFactura.Detalles, FFactura.Proveedor); - - //En caso de ser un abono también debe cambiar el signo a los detalles - if (Factura.TIPO = CTE_TIPO_ABONO) then - Controller.DetallesController.CambiarSignoDetalles(FFactura.Detalles); - finally FDetallesController := NIL; end; diff --git a/Source/Modulos/Facturas de proveedor/Views/uViewDetallesFacturaProveedor.pas b/Source/Modulos/Facturas de proveedor/Views/uViewDetallesFacturaProveedor.pas index b80080fa..d1359c46 100644 --- a/Source/Modulos/Facturas de proveedor/Views/uViewDetallesFacturaProveedor.pas +++ b/Source/Modulos/Facturas de proveedor/Views/uViewDetallesFacturaProveedor.pas @@ -29,6 +29,7 @@ type procedure SetFactura(const Value: IBizFacturaProveedor); procedure AnadirArticulosInterno; override; + procedure RellenarArticulosInterno; override; function AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean; override; public @@ -44,18 +45,18 @@ uses uDetallesFacturaProveedorController; function TfrViewDetallesFacturaProveedor.AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean; begin - Result := (Controller as IDetallesFacturaProveedorController).AnadirArticulo(Detalles, pReferencia, tProveedor); - - if (Factura.TIPO = CTE_TIPO_ABONO) then - (Controller as IDetallesFacturaProveedorController).CambiarSignoDetalles(Detalles); + if (Factura.TIPO = CTE_TIPO_ABONO) then + Result := (Controller as IDetallesFacturaProveedorController).AnadirArticulo(Detalles, pReferencia, tProveedor, -1, -1) + else + Result := (Controller as IDetallesFacturaProveedorController).AnadirArticulo(Detalles, pReferencia, tProveedor, -1, -1); end; procedure TfrViewDetallesFacturaProveedor.AnadirArticulosInterno; begin - (Controller as IDetallesFacturaProveedorController).AnadirArticulos(Detalles, Factura.Proveedor); - - if (Factura.TIPO = CTE_TIPO_ABONO) then - (Controller as IDetallesFacturaProveedorController).CambiarSignoDetalles(Detalles); + if (Factura.TIPO = CTE_TIPO_ABONO) then + (Controller as IDetallesFacturaProveedorController).AnadirArticulos(Detalles, Factura.Proveedor, true, -1) + else + (Controller as IDetallesFacturaProveedorController).AnadirArticulos(Detalles, Factura.Proveedor); end; function TfrViewDetallesFacturaProveedor.GetFactura: IBizFacturaProveedor; @@ -63,6 +64,14 @@ begin Result := FFactura; end; +procedure TfrViewDetallesFacturaProveedor.RellenarArticulosInterno; +begin + if (Factura.TIPO = CTE_TIPO_ABONO) then + (Controller as IDetallesFacturaProveedorController).AnadirArticulos(Detalles, Factura.Proveedor, False, -1) + else + (Controller as IDetallesFacturaProveedorController).AnadirArticulos(Detalles, Factura.Proveedor, False); +end; + procedure TfrViewDetallesFacturaProveedor.SetFactura(const Value: IBizFacturaProveedor); begin FFactura := Value; diff --git a/Source/Modulos/Pedidos a proveedor/Controller/uDetallesPedidoProveedorController.pas b/Source/Modulos/Pedidos a proveedor/Controller/uDetallesPedidoProveedorController.pas index bcb32a3d..f8757375 100644 --- a/Source/Modulos/Pedidos a proveedor/Controller/uDetallesPedidoProveedorController.pas +++ b/Source/Modulos/Pedidos a proveedor/Controller/uDetallesPedidoProveedorController.pas @@ -9,7 +9,7 @@ uses type IDetallesPedidoProveedorController = interface(IControllerDetallesArticulos) ['{942428EC-BCB8-4C56-BFA6-EB9F05D5E0DB}'] - procedure AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor); overload; + procedure AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor; const ANuevaFila :Boolean = True); overload; procedure ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor); overload; function ArticulosPendientes(const ID : Integer): IBizDetallesPedidoProveedorPend; procedure DesglosarPorteDetalles(ImportePorte: Currency; ADetalles: IDAStronglyTypedDataTable); @@ -32,7 +32,7 @@ type function DarTotalPorteTotal(ADetalles: IDAStronglyTypedDataTable): Double; public - procedure AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor); overload; + procedure AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor; const ANuevaFila :Boolean = True); overload; procedure ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor); overload; function ArticulosPendientes(const ID : Integer): IBizDetallesPedidoProveedorPend; constructor Create; override; @@ -62,16 +62,27 @@ begin end; end; -procedure TDetallesPedidoProveedorController.AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor); +procedure TDetallesPedidoProveedorController.AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor; const ANuevaFila :Boolean); var AArticulos: IBizArticulo; begin if Assigned(ADetalles) then begin try - AArticulos := (FArticulosController.BuscarTodos as IBizArticulo); - AArticulos := (FArticulosController as IArticulosPedidoProveedorController).ElegirArticulos(AArticulos, 'Elija los artículos que desea añadir a este pedido a proveedor', True, AProveedor); - Add(ADetalles, AArticulos); + AArticulos := (FArticulosController.BuscarTodos as IBizArticulo); + + //Si nueva fila es false, quiere decir que se sustituye un determinado artículo, por ello la lista a seleccionar no debe ser multiselect + if ANuevaFila then + begin + AArticulos := (FArticulosController as IArticulosPedidoProveedorController).ElegirArticulos(AArticulos, 'Elija los artículos que desea añadir a este pedido a proveedor', True, AProveedor); + Add(ADetalles, AArticulos) + end + else + begin + AArticulos := (FArticulosController as IArticulosPedidoProveedorController).ElegirArticulos(AArticulos, 'Elija el artículo que desea añadir a este pedido a proveedor', False, AProveedor); + RellenarDetalle(ADetalles, AArticulos); + end; + finally AArticulos := Nil; end; diff --git a/Source/Modulos/Pedidos a proveedor/Views/uViewDetallesPedidoProveedor.pas b/Source/Modulos/Pedidos a proveedor/Views/uViewDetallesPedidoProveedor.pas index 35ab2898..483abea3 100644 --- a/Source/Modulos/Pedidos a proveedor/Views/uViewDetallesPedidoProveedor.pas +++ b/Source/Modulos/Pedidos a proveedor/Views/uViewDetallesPedidoProveedor.pas @@ -29,6 +29,7 @@ type procedure SetPedido(const Value: IBizPedidoProveedor); procedure AnadirArticulosInterno; override; + procedure RellenarArticulosInterno; override; function AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean; override; public @@ -65,6 +66,14 @@ begin Result := FPedido; end; +procedure TfrViewDetallesPedidoProveedor.RellenarArticulosInterno; +begin +//No sé porque está en este módulo hecho así, supongo que por seguridad. + if Assigned(Pedido) and Assigned(Pedido.Proveedor) + then (Controller as IDetallesPedidoProveedorController).AnadirArticulos(Detalles, Pedido.Proveedor, False) + else (Controller as IDetallesPedidoProveedorController).AnadirArticulos(Detalles, False); +end; + procedure TfrViewDetallesPedidoProveedor.SetPedido(const Value: IBizPedidoProveedor); begin FPedido := Value; diff --git a/Source/Modulos/Presupuestos de cliente/Controller/uDetallesPresupuestoClienteController.pas b/Source/Modulos/Presupuestos de cliente/Controller/uDetallesPresupuestoClienteController.pas index 92ee8e74..9dac7627 100644 --- a/Source/Modulos/Presupuestos de cliente/Controller/uDetallesPresupuestoClienteController.pas +++ b/Source/Modulos/Presupuestos de cliente/Controller/uDetallesPresupuestoClienteController.pas @@ -9,7 +9,7 @@ uses type IDetallesPresupuestoClienteController = interface(IControllerDetallesArticulos) ['{8D1D3559-E695-4962-9999-404B26B50D6C}'] - procedure AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente); overload; + procedure AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente; const ANuevaFila :Boolean = True); overload; procedure ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente); overload; procedure DesglosarPorteDetalles(ImportePorte: Currency; ADetalles: IDAStronglyTypedDataTable); function DarTotalPorteTotal(ADetalles: IDAStronglyTypedDataTable): Double; @@ -31,7 +31,7 @@ type function DarTotalPorteTotal(ADetalles: IDAStronglyTypedDataTable): Double; public - procedure AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente); reintroduce; overload; + procedure AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente; const ANuevaFila :Boolean = True); reintroduce; overload; procedure ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente); overload; constructor Create; override; destructor Destroy; override; @@ -60,7 +60,7 @@ begin end; end; -procedure TDetallesPresupuestoClienteController.AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente); +procedure TDetallesPresupuestoClienteController.AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente; const ANuevaFila :Boolean); var AArticulos: IBizArticulo; begin @@ -68,8 +68,19 @@ begin begin try AArticulos := (FArticulosController.BuscarTodos(ACliente) as IBizArticulo); - AArticulos := (FArticulosController as IArticulosPresupuestoClienteController).ElegirArticulos(AArticulos, 'Elija los artículos que desea añadir a este pedido de cliente', True); - Add(ADetalles, AArticulos); + + //Si nueva fila es false, quiere decir que se sustituye un determinado artículo, por ello la lista a seleccionar no debe ser multiselect + if ANuevaFila then + begin + AArticulos := (FArticulosController as IArticulosPresupuestoClienteController).ElegirArticulos(AArticulos, 'Elija los artículos que desea añadir a este presupuesto de cliente', True); + Add(ADetalles, AArticulos) + end + else + begin + AArticulos := (FArticulosController as IArticulosPresupuestoClienteController).ElegirArticulos(AArticulos, 'Elija el artículo que desea añadir a este presupuesto de cliente', False); + RellenarDetalle(ADetalles, AArticulos); + end; + finally AArticulos := Nil; end; diff --git a/Source/Modulos/Presupuestos de cliente/Views/uViewDetallesPresupuestoCliente.pas b/Source/Modulos/Presupuestos de cliente/Views/uViewDetallesPresupuestoCliente.pas index 47ef91e7..1ae99d7e 100644 --- a/Source/Modulos/Presupuestos de cliente/Views/uViewDetallesPresupuestoCliente.pas +++ b/Source/Modulos/Presupuestos de cliente/Views/uViewDetallesPresupuestoCliente.pas @@ -30,6 +30,7 @@ type procedure SetPresupuesto(const Value: IBizPresupuestoCliente); procedure AnadirArticulosInterno; override; + procedure RellenarArticulosInterno; override; function AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean; override; public @@ -64,6 +65,11 @@ begin Result := FPresupuesto; end; +procedure TfrViewDetallesPresupuestoCliente.RellenarArticulosInterno; +begin + (Controller as IDetallesPresupuestoClienteController).AnadirArticulos(Detalles, Presupuesto.Cliente, False); +end; + procedure TfrViewDetallesPresupuestoCliente.SetPresupuesto(const Value: IBizPresupuestoCliente); begin FPresupuesto := Value; diff --git a/Source/Servidor/FactuGES_Server.RES b/Source/Servidor/FactuGES_Server.RES index bca39d0d..d170de4a 100644 Binary files a/Source/Servidor/FactuGES_Server.RES and b/Source/Servidor/FactuGES_Server.RES differ diff --git a/Source/Servidor/FactuGES_Server.rc b/Source/Servidor/FactuGES_Server.rc index 071f477a..cd6c84c4 100644 --- a/Source/Servidor/FactuGES_Server.rc +++ b/Source/Servidor/FactuGES_Server.rc @@ -14,7 +14,7 @@ BEGIN BEGIN VALUE "FileVersion", "1.0.0.0\0" VALUE "ProductVersion", "1.0.0.0\0" - VALUE "CompileDate", "viernes, 01 de febrero de 2008 18:40\0" + VALUE "CompileDate", "jueves, 07 de febrero de 2008 18:44\0" END END BLOCK "VarFileInfo"