Cambios para arreglo de los descuentos y cantidades en los detalles de los documentos

git-svn-id: https://192.168.0.254/svn/Proyectos.Acana_FactuGES2/trunk@129 f4e31baf-9722-1c47-927c-6f952f962d4b
This commit is contained in:
roberto 2008-02-07 18:03:38 +00:00
parent 05b91e6029
commit dfffba6c4a
22 changed files with 290 additions and 172 deletions

View File

@ -9,7 +9,7 @@ uses
type type
IDetallesAlbaranClienteController = interface(IControllerDetallesArticulos) IDetallesAlbaranClienteController = interface(IControllerDetallesArticulos)
['{6AD99D47-2856-47B1-9620-DD115726B0E1}'] ['{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 ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente); overload;
procedure DesglosarPorteDetalles(ImportePorte: Currency; ADetalles: IDAStronglyTypedDataTable); procedure DesglosarPorteDetalles(ImportePorte: Currency; ADetalles: IDAStronglyTypedDataTable);
function DarTotalPorteTotal(ADetalles: IDAStronglyTypedDataTable): Double; function DarTotalPorteTotal(ADetalles: IDAStronglyTypedDataTable): Double;
@ -31,7 +31,7 @@ type
function DarTotalPorteTotal(ADetalles: IDAStronglyTypedDataTable): Double; function DarTotalPorteTotal(ADetalles: IDAStronglyTypedDataTable): Double;
public 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; procedure ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente); overload;
constructor Create; override; constructor Create; override;
destructor Destroy; override; destructor Destroy; override;
@ -60,7 +60,7 @@ begin
end; end;
end; end;
procedure TDetallesAlbaranClienteController.AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente); procedure TDetallesAlbaranClienteController.AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente; const ANuevaFila :Boolean; const ACantidad: Integer);
var var
AArticulos: IBizArticulo; AArticulos: IBizArticulo;
begin begin
@ -68,8 +68,18 @@ begin
begin begin
try try
AArticulos := (FArticulosController.BuscarTodos(ACliente) as IBizArticulo); 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 finally
AArticulos := Nil; AArticulos := Nil;
end; end;

View File

@ -278,9 +278,6 @@ begin
if (FAlbaran.Detalles.RecordCount > 0) then if (FAlbaran.Detalles.RecordCount > 0) then
begin begin
FController.DetallesController.ActualizarDetalles(FAlbaran.Detalles, FAlbaran.Cliente); 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; end;
finally finally

View File

@ -30,6 +30,7 @@ type
procedure SetAlbaran(const Value: IBizAlbaranCliente); procedure SetAlbaran(const Value: IBizAlbaranCliente);
procedure AnadirArticulosInterno; override; procedure AnadirArticulosInterno; override;
procedure RellenarArticulosInterno; override;
function AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean; override; function AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean; override;
public public
@ -45,18 +46,18 @@ uses uDetallesAlbaranClienteController, uViewDetallesBase;
function TfrViewDetallesAlbaranCliente.AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean; function TfrViewDetallesAlbaranCliente.AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean;
begin begin
Result := (Controller as IDetallesAlbaranClienteController).AnadirArticulo(Detalles, pReferencia, TipoReferencia);
if (Albaran.TIPO = CTE_TIPO_ALBARAN_DEV) then if (Albaran.TIPO = CTE_TIPO_ALBARAN_DEV) then
(Controller as IDetallesAlbaranClienteController).CambiarSignoDetalles(Detalles); 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; end;
procedure TfrViewDetallesAlbaranCliente.AnadirArticulosInterno; procedure TfrViewDetallesAlbaranCliente.AnadirArticulosInterno;
begin begin
(Controller as IDetallesAlbaranClienteController).AnadirArticulos(Detalles, Albaran.Cliente);
if (Albaran.TIPO = CTE_TIPO_ALBARAN_DEV) then if (Albaran.TIPO = CTE_TIPO_ALBARAN_DEV) then
(Controller as IDetallesAlbaranClienteController).CambiarSignoDetalles(Detalles); (Controller as IDetallesAlbaranClienteController).AnadirArticulos(Detalles, Albaran.Cliente, true, -1)
else
(Controller as IDetallesAlbaranClienteController).AnadirArticulos(Detalles, Albaran.Cliente);
end; end;
function TfrViewDetallesAlbaranCliente.GetAlbaran: IBizAlbaranCliente; function TfrViewDetallesAlbaranCliente.GetAlbaran: IBizAlbaranCliente;
@ -64,6 +65,14 @@ begin
Result := FAlbaran; Result := FAlbaran;
end; 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); procedure TfrViewDetallesAlbaranCliente.SetAlbaran(const Value: IBizAlbaranCliente);
begin begin
FAlbaran := Value; FAlbaran := Value;

View File

@ -9,7 +9,7 @@ uses
type type
IDetallesAlbaranProveedorController = interface(IControllerDetallesArticulos) IDetallesAlbaranProveedorController = interface(IControllerDetallesArticulos)
['{6E35D49A-C78D-481D-93E9-859CD27EB79F}'] ['{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 ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor); overload;
procedure DesglosarPorteDetalles(ImportePorte: Currency; ADetalles: IDAStronglyTypedDataTable); procedure DesglosarPorteDetalles(ImportePorte: Currency; ADetalles: IDAStronglyTypedDataTable);
function DarTotalPorteTotal(ADetalles: IDAStronglyTypedDataTable): Double; function DarTotalPorteTotal(ADetalles: IDAStronglyTypedDataTable): Double;
@ -31,7 +31,7 @@ type
function DarTotalPorteTotal(ADetalles: IDAStronglyTypedDataTable): Double; function DarTotalPorteTotal(ADetalles: IDAStronglyTypedDataTable): Double;
public 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 ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor); overload;
constructor Create; override; constructor Create; override;
destructor Destroy; override; destructor Destroy; override;
@ -61,7 +61,7 @@ begin
end; end;
end; end;
procedure TDetallesAlbaranProveedorController.AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor); procedure TDetallesAlbaranProveedorController.AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor; const ANuevaFila :Boolean; const ACantidad: Integer);
var var
AArticulos: IBizArticulo; AArticulos: IBizArticulo;
begin begin
@ -69,8 +69,18 @@ begin
begin begin
try try
AArticulos := (FArticulosController.BuscarTodos as IBizArticulo); 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 finally
AArticulos := Nil; AArticulos := Nil;
end; end;

View File

@ -239,9 +239,6 @@ begin
if (FAlbaran.Detalles.RecordCount > 0) then if (FAlbaran.Detalles.RecordCount > 0) then
begin begin
FController.DetallesController.ActualizarDetalles(FAlbaran.Detalles, FAlbaran.Proveedor); 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; end;
end; end;

View File

@ -28,6 +28,7 @@ type
procedure SetAlbaran(const Value: IBizAlbaranProveedor); procedure SetAlbaran(const Value: IBizAlbaranProveedor);
procedure AnadirArticulosInterno; override; procedure AnadirArticulosInterno; override;
procedure RellenarArticulosInterno; override;
function AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean; override; function AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean; override;
public public
@ -43,18 +44,18 @@ uses uDetallesAlbaranProveedorController, uViewDetallesBase;
function TfrViewDetallesAlbaranProveedor.AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean; function TfrViewDetallesAlbaranProveedor.AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean;
begin begin
Result := (Controller as IDetallesAlbaranProveedorController).AnadirArticulo(Detalles, pReferencia, TipoReferencia);
if (Albaran.TIPO = CTE_TIPO_ALBARAN_DEV) then if (Albaran.TIPO = CTE_TIPO_ALBARAN_DEV) then
(Controller as IDetallesAlbaranProveedorController).CambiarSignoDetalles(Detalles); Result := (Controller as IDetallesAlbaranProveedorController).AnadirArticulo(Detalles, pReferencia, TipoReferencia, -1, -1)
else
Result := (Controller as IDetallesAlbaranProveedorController).AnadirArticulo(Detalles, pReferencia, TipoReferencia);
end; end;
procedure TfrViewDetallesAlbaranProveedor.AnadirArticulosInterno; procedure TfrViewDetallesAlbaranProveedor.AnadirArticulosInterno;
begin begin
(Controller as IDetallesAlbaranProveedorController).AnadirArticulos(Detalles, Albaran.Proveedor);
if (Albaran.TIPO = CTE_TIPO_ALBARAN_DEV) then if (Albaran.TIPO = CTE_TIPO_ALBARAN_DEV) then
(Controller as IDetallesAlbaranProveedorController).CambiarSignoDetalles(Detalles); (Controller as IDetallesAlbaranProveedorController).AnadirArticulos(Detalles, Albaran.Proveedor, true, -1)
else
(Controller as IDetallesAlbaranProveedorController).AnadirArticulos(Detalles, Albaran.Proveedor);
end; end;
function TfrViewDetallesAlbaranProveedor.GetAlbaran: IBizAlbaranProveedor; function TfrViewDetallesAlbaranProveedor.GetAlbaran: IBizAlbaranProveedor;
@ -62,6 +63,14 @@ begin
Result := FAlbaran; Result := FAlbaran;
end; 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); procedure TfrViewDetallesAlbaranProveedor.SetAlbaran(const Value: IBizAlbaranProveedor);
begin begin
FAlbaran := Value; FAlbaran := Value;

View File

@ -78,7 +78,7 @@ type
function BuscarTodos(ACliente: Integer): IBizArticulo; overload; function BuscarTodos(ACliente: Integer): IBizArticulo; overload;
function BuscarTodos(AProveedor: IBizProveedor): IBizArticulo; overload; function BuscarTodos(AProveedor: IBizProveedor): IBizArticulo; overload;
function BuscarReferencia(const Ref: String; AClienteID: Integer = -1): IBizArticulo; virtual; 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; function Nuevo : IBizArticulo; virtual;
procedure Ver(AArticulo : IBizArticulo); virtual; procedure Ver(AArticulo : IBizArticulo); virtual;
procedure VerTodos(AArticulos: IBizArticulo); virtual; procedure VerTodos(AArticulos: IBizArticulo); virtual;
@ -178,24 +178,29 @@ begin
else else
Result := BuscarTodos(AClienteID); Result := BuscarTodos(AClienteID);
// Filtrar por referencia // Filtrar por referencia, se cambia por el where anterior porque luego no nos reconoce bien la cadena, al contener UPPER
with Result.DataTable.DynamicWhere do with Result.DataTable.Where do
begin begin
// (REFERENCIA >= Ref) AddText(Format('UPPER(%s) = ''%s''', [fld_ArticulosREFERENCIA, UpperCase(Ref)]));
Condicion := NewBinaryExpression(NewField('', fld_ArticulosREFERENCIA), NewConstant(UpperCase(Ref), datString), dboEqual); end;
if IsEmpty then {with Result.DataTable.DynamicWhere do
Expression := Condicion begin
else // (REFERENCIA >= Ref)
Expression := NewBinaryExpression(Expression, Condicion, dboAnd); Condicion := NewBinaryExpression(NewField('', fld_ArticulosREFERENCIA), NewConstant(UpperCase(Ref), datString), dboEqual);
end;
if IsEmpty then
Expression := Condicion
else
Expression := NewBinaryExpression(Expression, Condicion, dboAnd);
end;}
finally finally
HideHourglassCursor; HideHourglassCursor;
end; end;
end; end;
function TArticulosController.BuscarReferenciaProveedor(const Ref: String; AClienteID: Integer = -1): IBizArticulo; function TArticulosController.BuscarReferenciaProveedor(const Ref: String; AClienteID: Integer): IBizArticulo;
var var
Condicion: TDAWhereExpression; Condicion: TDAWhereExpression;
begin begin
@ -206,17 +211,23 @@ begin
else else
Result := BuscarTodos(AClienteID); Result := BuscarTodos(AClienteID);
// Filtrar por referencia // Filtrar por referencia, se cambia por el where anterior porque luego no nos reconoce bien la cadena, al contener UPPER
with Result.DataTable.DynamicWhere do with Result.DataTable.Where do
begin begin
// (REFERENCIA >= Ref) AddText(Format('UPPER(%s) = ''%s''', [fld_ArticulosREFERENCIA_PROV, UpperCase(Ref)]));
Condicion := NewBinaryExpression(NewField('', fld_ArticulosREFERENCIA_PROV), NewConstant(UpperCase(Ref), datString), dboEqual); end;
if IsEmpty then
Expression := Condicion {with Result.DataTable.DynamicWhere do
else begin
Expression := NewBinaryExpression(Expression, Condicion, dboAnd); // (REFERENCIA >= Ref)
end; Condicion := NewBinaryExpression(NewField('', fld_ArticulosREFERENCIA_PROV), NewConstant(UpperCase(Ref), datString), dboEqual);
if IsEmpty then
Expression := Condicion
else
Expression := NewBinaryExpression(Expression, Condicion, dboAnd);
end;}
finally finally
HideHourglassCursor; HideHourglassCursor;

View File

@ -15,10 +15,9 @@ type
IControllerDetallesArticulos = interface(IControllerDetallesBase) IControllerDetallesArticulos = interface(IControllerDetallesBase)
['{6E156796-DB1F-4727-BBFB-FBAEF2E5C098}'] ['{6E156796-DB1F-4727-BBFB-FBAEF2E5C098}']
procedure AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; const ANuevaFila :Boolean = True); 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; Referencia: String; TipoReferencia: TEnumReferencia; AClienteID: Integer = -1; const ACantidad: Integer = 1): Boolean; overload;
function AnadirArticulo(ADetalles: IDAStronglyTypedDataTable; IDArticulo: Integer; AClienteID: Integer = -1): Boolean; overload;
procedure ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo); procedure ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo);
procedure CambiarSignoDetalles(ADetalles: IDAStronglyTypedDataTable); procedure CambiarSignoDetalles(ADetalles: IDAStronglyTypedDataTable; const AAll: Boolean = True);
procedure AnadirConceptoInicial(ADetalles: IDAStronglyTypedDataTable; AConcepto: String); procedure AnadirConceptoInicial(ADetalles: IDAStronglyTypedDataTable; AConcepto: String);
end; end;
@ -31,17 +30,17 @@ type
procedure RellenarOtros(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo); virtual; procedure RellenarOtros(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo); virtual;
procedure RellenarImportes(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo); virtual; procedure RellenarImportes(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo); virtual;
procedure RellenarGenerales(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo); virtual; procedure RellenarGenerales(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo); virtual;
procedure RellenarDetalle(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo); virtual; procedure RellenarCantidad(ADetalles: IDAStronglyTypedDataTable; const ACantidad: Integer); virtual;
procedure Add(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo); overload; 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; procedure AsignarController; virtual;
public public
function AnadirArticulo(ADetalles: IDAStronglyTypedDataTable; Referencia: String; TipoReferencia: TEnumReferencia; AClienteID: Integer = -1): Boolean; overload; function AnadirArticulo(ADetalles: IDAStronglyTypedDataTable; Referencia: String; TipoReferencia: TEnumReferencia; AClienteID: Integer = -1; const ACantidad: Integer = 1): Boolean; overload;
function AnadirArticulo(ADetalles: IDAStronglyTypedDataTable; IDArticulo: Integer; AClienteID: Integer = -1): Boolean; overload;
procedure AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; const ANuevaFila :Boolean = True); procedure AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; const ANuevaFila :Boolean = True);
procedure ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo); procedure ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo);
procedure CambiarSignoDetalles(ADetalles: IDAStronglyTypedDataTable); procedure CambiarSignoDetalles(ADetalles: IDAStronglyTypedDataTable; const AAll: Boolean = True);
procedure AnadirConceptoInicial(ADetalles: IDAStronglyTypedDataTable; AConcepto: String); procedure AnadirConceptoInicial(ADetalles: IDAStronglyTypedDataTable; AConcepto: String);
constructor Create; override; constructor Create; override;
@ -59,6 +58,8 @@ uses DB, Dialogs, cxControls, SysUtils, uDAInterfaces, uCalculosUtils, schArticu
{ TControllerDetallesArticulos } { TControllerDetallesArticulos }
procedure TControllerDetallesArticulos.ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo); procedure TControllerDetallesArticulos.ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo);
var
ACantidad: Integer;
begin begin
if (Assigned(ADetalles) and Assigned(AArticulos)) then if (Assigned(ADetalles) and Assigned(AArticulos)) then
begin begin
@ -76,9 +77,11 @@ begin
AArticulos.DataTable.First; AArticulos.DataTable.First;
try try
if AArticulos.DataTable.Locate(CAMPO_ID, FieldByName(CAMPO_ID_ARTICULOS).AsVariant, []) then if AArticulos.DataTable.Locate(CAMPO_ID, FieldByName(CAMPO_ID_ARTICULOS).AsVariant, []) then
RellenarDetalle(ADetalles, AArticulos) begin
else //Para mantener la cantidad que ya tuviera el detalle se debe guardar y volver a poner
RellenarDetalle(ADetalles, Nil); ACantidad := ADetalles.DataTable.FieldByName(CAMPO_CANTIDAD).AsInteger;
RellenarDetalle(ADetalles, AArticulos, ACantidad);
end;
except except
on E: Exception do on E: Exception do
ShowMessage(E.Message); ShowMessage(E.Message);
@ -94,7 +97,7 @@ begin
end; end;
end; end;
procedure TControllerDetallesArticulos.Add(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo); procedure TControllerDetallesArticulos.Add(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo; const ACantidad: Integer);
begin begin
if Assigned(ADetalles) and Assigned(AArticulos) then if Assigned(ADetalles) and Assigned(AArticulos) then
begin begin
@ -114,7 +117,7 @@ begin
while not EOF do while not EOF do
begin begin
Self.Add(ADetalles, TIPO_DETALLE_CONCEPTO); Self.Add(ADetalles, TIPO_DETALLE_CONCEPTO);
RellenarDetalle(ADetalles, AArticulos); RellenarDetalle(ADetalles, AArticulos, ACantidad);
Next; Next;
end; end;
end; end;
@ -125,38 +128,7 @@ begin
end; end;
end; end;
function TControllerDetallesArticulos.AnadirArticulo(ADetalles: IDAStronglyTypedDataTable; IDArticulo: Integer; AClienteID: Integer = -1): Boolean; procedure TControllerDetallesArticulos.AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; const ANuevaFila: 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);
var var
AArticulos: IBizArticulo; AArticulos: IBizArticulo;
begin begin
@ -164,11 +136,18 @@ begin
begin begin
try try
AArticulos := (FArticulosController.BuscarTodos as IBizArticulo); 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 if ANuevaFila then
begin
AArticulos := FArticulosController.ElegirArticulos(AArticulos, 'Elija los artículos que desea añadir', True);
Add(ADetalles, AArticulos) Add(ADetalles, AArticulos)
end
else else
begin
AArticulos := FArticulosController.ElegirArticulos(AArticulos, 'Elija el artículo que desea añadir', False);
RellenarDetalle(ADetalles, AArticulos); RellenarDetalle(ADetalles, AArticulos);
end;
finally finally
AArticulos := Nil; AArticulos := Nil;
end; end;
@ -208,7 +187,7 @@ begin
// //
end; end;
procedure TControllerDetallesArticulos.CambiarSignoDetalles(ADetalles: IDAStronglyTypedDataTable); procedure TControllerDetallesArticulos.CambiarSignoDetalles(ADetalles: IDAStronglyTypedDataTable; const AAll: Boolean);
begin begin
//Cambia de signo los detalles de la pasados por parámetro //Cambia de signo los detalles de la pasados por parámetro
if Assigned(ADetalles) then if Assigned(ADetalles) then
@ -221,15 +200,28 @@ begin
with ADetalles.DataTable do with ADetalles.DataTable do
begin begin
First; //Cambia el signo a todos
while not EOF do 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 begin
if (FieldByName(CAMPO_CANTIDAD).AsInteger <> 0) then if (FieldByName(CAMPO_CANTIDAD).AsInteger <> 0) then
begin begin
Edit; Edit;
FieldByName(CAMPO_CANTIDAD).AsInteger := (-1) * FieldByName(CAMPO_CANTIDAD).AsInteger; FieldByName(CAMPO_CANTIDAD).AsInteger := (-1) * FieldByName(CAMPO_CANTIDAD).AsInteger;
end; end;
Next;
end; end;
end; end;
finally finally
@ -266,7 +258,7 @@ begin
end; end;
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 var
AArticulo: IBizArticulo; AArticulo: IBizArticulo;
begin begin
@ -288,7 +280,7 @@ begin
AArticulo.DataTable.Active := True; AArticulo.DataTable.Active := True;
if (AArticulo.RecordCount > 0) then if (AArticulo.RecordCount > 0) then
begin begin
RellenarDetalle(ADetalles, AArticulo); RellenarDetalle(ADetalles, AArticulo, ACantidad);
Result := True; Result := True;
end; end;
end; end;
@ -298,23 +290,37 @@ begin
end; end;
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); procedure TControllerDetallesArticulos.RellenarOtros(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo);
begin begin
// Procedimiento que en los hijos se sobreescribirá para rellenar otros campos según necesidades // Procedimiento que en los hijos se sobreescribirá para rellenar otros campos según necesidades
end; end;
procedure TControllerDetallesArticulos.RellenarDetalle(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo); procedure TControllerDetallesArticulos.RellenarDetalle(ADetalles: IDAStronglyTypedDataTable; AArticulos: IBizArticulo; const ACantidad: Integer);
begin begin
if Assigned(ADetalles) then if Assigned(ADetalles) then
begin begin
if not ADetalles.DataTable.Editing then BeginUpdate(ADetalles);
ADetalles.DataTable.Edit; try
if not ADetalles.DataTable.Editing then
ADetalles.DataTable.Edit;
RellenarGenerales(ADetalles, AArticulos); RellenarGenerales(ADetalles, AArticulos);
RellenarImportes(ADetalles, AArticulos); RellenarCantidad(ADetalles, ACantidad);
RellenarOtros(ADetalles, AArticulos); RellenarImportes(ADetalles, AArticulos);
RellenarOtros(ADetalles, AArticulos);
ADetalles.DataTable.Post; ADetalles.DataTable.Post;
finally
EndUpdate(ADetalles);
end;
end; end;
end; end;
@ -326,7 +332,6 @@ begin
ADetalles.DataTable.FieldByName(CAMPO_REFERENCIA).AsVariant := AArticulos.REFERENCIA; ADetalles.DataTable.FieldByName(CAMPO_REFERENCIA).AsVariant := AArticulos.REFERENCIA;
ADetalles.DataTable.FieldByName(CAMPO_REFERENCIA_PROVEEDOR).AsVariant := AArticulos.REFERENCIA_PROV; ADetalles.DataTable.FieldByName(CAMPO_REFERENCIA_PROVEEDOR).AsVariant := AArticulos.REFERENCIA_PROV;
ADetalles.DataTable.FieldByName(CAMPO_CONCEPTO).AsVariant := AArticulos.DESCRIPCION; ADetalles.DataTable.FieldByName(CAMPO_CONCEPTO).AsVariant := AArticulos.DESCRIPCION;
ADetalles.DataTable.FieldByName(CAMPO_CANTIDAD).AsInteger := 1;
end; end;
end; end;

View File

@ -6,6 +6,7 @@ object srvArticulos: TsrvArticulos
ConnectionName = 'IBX' ConnectionName = 'IBX'
ServiceSchema = schArticulos ServiceSchema = schArticulos
ServiceDataStreamer = Bin2DataStreamer ServiceDataStreamer = Bin2DataStreamer
AllowWhereSQL = True
ExportedDataTables = <> ExportedDataTables = <>
BeforeAcquireConnection = DataAbstractServiceBeforeAcquireConnection BeforeAcquireConnection = DataAbstractServiceBeforeAcquireConnection
Height = 229 Height = 229

View File

@ -34,6 +34,7 @@ type
protected protected
procedure AnadirArticulosInterno; virtual; procedure AnadirArticulosInterno; virtual;
procedure RellenarArticulosInterno; virtual;
function AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean; virtual; function AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean; virtual;
end; end;
@ -121,6 +122,11 @@ begin
end; end;
end; end;
procedure TfrViewDetallesArticulos.RellenarArticulosInterno;
begin
(Controller as IControllerDetallesArticulos).AnadirArticulos(Detalles, False);
end;
procedure TfrViewDetallesArticulos.actAnadirArticulosUpdate(Sender: TObject); procedure TfrViewDetallesArticulos.actAnadirArticulosUpdate(Sender: TObject);
begin begin
inherited; inherited;

View File

@ -9,7 +9,7 @@ uses
type type
IDetallesFacturaClienteController = interface(IControllerDetallesArticulos) IDetallesFacturaClienteController = interface(IControllerDetallesArticulos)
['{D3942A48-C55B-4A98-AC5B-B5E652ED393E}'] ['{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 ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente);
procedure AnadirDetalleFacturaAsociadaAbono(ADetalles: IBizDetallesFacturaCliente; AReferencia: String; AFecha: String); procedure AnadirDetalleFacturaAsociadaAbono(ADetalles: IBizDetallesFacturaCliente; AReferencia: String; AFecha: String);
procedure DesglosarPorteDetalles(ImportePorte: Currency; ADetalles: IDAStronglyTypedDataTable); procedure DesglosarPorteDetalles(ImportePorte: Currency; ADetalles: IDAStronglyTypedDataTable);
@ -32,7 +32,7 @@ type
function DarTotalPorteTotal(ADetalles: IDAStronglyTypedDataTable): Double; function DarTotalPorteTotal(ADetalles: IDAStronglyTypedDataTable): Double;
public 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; procedure ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente); overload;
//ABONOS //ABONOS
@ -65,7 +65,7 @@ begin
end; end;
end; end;
procedure TDetallesFacturaClienteController.AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente); procedure TDetallesFacturaClienteController.AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente; const ANuevaFila :Boolean; const ACantidad: Integer);
var var
AArticulos: IBizArticulo; AArticulos: IBizArticulo;
begin begin
@ -73,8 +73,18 @@ begin
begin begin
AArticulos := (FArticulosController.BuscarTodos(ACliente) as IBizArticulo); AArticulos := (FArticulosController.BuscarTodos(ACliente) as IBizArticulo);
try try
//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); AArticulos := (FArticulosController as IArticulosFacturaClienteController).ElegirArticulos(AArticulos, 'Elija los artículos que desea añadir a esta factura de cliente', True);
Add(ADetalles, AArticulos); 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 finally
AArticulos := Nil; AArticulos := Nil;
end; end;

View File

@ -312,11 +312,6 @@ begin
FDetallesController := TDetallesFacturaClienteController.Create; FDetallesController := TDetallesFacturaClienteController.Create;
try try
FDetallesController.ActualizarDetalles(FFactura.Detalles, FFactura.Cliente); 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 finally
FDetallesController := NIL; FDetallesController := NIL;
end; end;

View File

@ -29,6 +29,7 @@ type
procedure SetFactura(const Value: IBizFacturaCliente); procedure SetFactura(const Value: IBizFacturaCliente);
procedure AnadirArticulosInterno; override; procedure AnadirArticulosInterno; override;
procedure RellenarArticulosInterno; override;
function AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean; override; function AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean; override;
public public
@ -44,18 +45,18 @@ uses uDetallesFacturaClienteController;
function TfrViewDetallesFacturaCliente.AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean; function TfrViewDetallesFacturaCliente.AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean;
begin begin
Result := (Controller as IDetallesFacturaClienteController).AnadirArticulo(Detalles, pReferencia, TipoReferencia, Factura.Cliente.ID); if (Factura.TIPO = CTE_TIPO_ABONO) then
Result := (Controller as IDetallesFacturaClienteController).AnadirArticulo(Detalles, pReferencia, TipoReferencia, Factura.Cliente.ID, -1)
if (Factura.TIPO = CTE_TIPO_ABONO) then else
(Controller as IDetallesFacturaClienteController).CambiarSignoDetalles(Detalles); Result := (Controller as IDetallesFacturaClienteController).AnadirArticulo(Detalles, pReferencia, TipoReferencia, Factura.Cliente.ID);
end; end;
procedure TfrViewDetallesFacturaCliente.AnadirArticulosInterno; procedure TfrViewDetallesFacturaCliente.AnadirArticulosInterno;
begin begin
(Controller as IDetallesFacturaClienteController).AnadirArticulos(Detalles, Factura.Cliente); if (Factura.TIPO = CTE_TIPO_ABONO) then
(Controller as IDetallesFacturaClienteController).AnadirArticulos(Detalles, Factura.Cliente, true, -1)
if (Factura.TIPO = CTE_TIPO_ABONO) then else
(Controller as IDetallesFacturaClienteController).CambiarSignoDetalles(Detalles); (Controller as IDetallesFacturaClienteController).AnadirArticulos(Detalles, Factura.Cliente);
end; end;
function TfrViewDetallesFacturaCliente.GetFactura: IBizFacturaCliente; function TfrViewDetallesFacturaCliente.GetFactura: IBizFacturaCliente;
@ -63,6 +64,14 @@ begin
Result := FFactura; Result := FFactura;
end; 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); procedure TfrViewDetallesFacturaCliente.SetFactura(const Value: IBizFacturaCliente);
begin begin
FFactura := Value; FFactura := Value;

View File

@ -9,7 +9,7 @@ uses
type type
IDetallesFacturaProveedorController = interface(IControllerDetallesArticulos) IDetallesFacturaProveedorController = interface(IControllerDetallesArticulos)
['{49F6199E-E031-42F5-AEA5-E70C3E3479A1}'] ['{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 ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor);
procedure AnadirDetalleFacturaAsociadaAbono(ADetalles: IBizDetallesFacturaProveedor; AReferencia: String; AFecha: String); procedure AnadirDetalleFacturaAsociadaAbono(ADetalles: IBizDetallesFacturaProveedor; AReferencia: String; AFecha: String);
procedure DesglosarPorteDetalles(ImportePorte: Currency; ADetalles: IDAStronglyTypedDataTable); procedure DesglosarPorteDetalles(ImportePorte: Currency; ADetalles: IDAStronglyTypedDataTable);
@ -31,7 +31,7 @@ type
function DarTotalPorteTotal(ADetalles: IDAStronglyTypedDataTable): Double; function DarTotalPorteTotal(ADetalles: IDAStronglyTypedDataTable): Double;
public 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 ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor); overload;
procedure AnadirDetalleFacturaAsociadaAbono(ADetalles: IBizDetallesFacturaProveedor; AReferencia: String; AFecha: String); procedure AnadirDetalleFacturaAsociadaAbono(ADetalles: IBizDetallesFacturaProveedor; AReferencia: String; AFecha: String);
constructor Create; override; constructor Create; override;
@ -62,7 +62,7 @@ begin
end; end;
end; end;
procedure TDetallesFacturaProveedorController.AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor); procedure TDetallesFacturaProveedorController.AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor; const ANuevaFila :Boolean; const ACantidad: Integer);
var var
AArticulos: IBizArticulo; AArticulos: IBizArticulo;
begin begin
@ -70,16 +70,24 @@ begin
begin begin
AArticulos := (FArticulosController.BuscarTodos as IBizArticulo); AArticulos := (FArticulosController.BuscarTodos as IBizArticulo);
try try
AArticulos := (FArticulosController as IArticulosFacturaProveedorController).ElegirArticulos(AArticulos, 'Elija los artículos que desea añadir a esta factura de Proveedor', True, AProveedor); //Si nueva fila es false, quiere decir que se sustituye un determinado artículo, por ello la lista a seleccionar no debe ser multiselect
Add(ADetalles, AArticulos); 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 finally
AArticulos := Nil; AArticulos := Nil;
end; end;
end; end;
end; end;
procedure TDetallesFacturaProveedorController.AnadirDetalleFacturaAsociadaAbono( procedure TDetallesFacturaProveedorController.AnadirDetalleFacturaAsociadaAbono(ADetalles: IBizDetallesFacturaProveedor; AReferencia, AFecha: String);
ADetalles: IBizDetallesFacturaProveedor; AReferencia, AFecha: String);
begin begin
AnadirConceptoInicial(ADetalles, 'ABONO DE FACTURA ' + AReferencia + ' con fecha ' + AFecha); AnadirConceptoInicial(ADetalles, 'ABONO DE FACTURA ' + AReferencia + ' con fecha ' + AFecha);
end; end;

View File

@ -300,11 +300,6 @@ begin
FDetallesController := TDetallesFacturaProveedorController.Create; FDetallesController := TDetallesFacturaProveedorController.Create;
try try
FDetallesController.ActualizarDetalles(FFactura.Detalles, FFactura.Proveedor); 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 finally
FDetallesController := NIL; FDetallesController := NIL;
end; end;

View File

@ -29,6 +29,7 @@ type
procedure SetFactura(const Value: IBizFacturaProveedor); procedure SetFactura(const Value: IBizFacturaProveedor);
procedure AnadirArticulosInterno; override; procedure AnadirArticulosInterno; override;
procedure RellenarArticulosInterno; override;
function AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean; override; function AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean; override;
public public
@ -44,18 +45,18 @@ uses uDetallesFacturaProveedorController;
function TfrViewDetallesFacturaProveedor.AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean; function TfrViewDetallesFacturaProveedor.AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean;
begin begin
Result := (Controller as IDetallesFacturaProveedorController).AnadirArticulo(Detalles, pReferencia, tProveedor);
if (Factura.TIPO = CTE_TIPO_ABONO) then if (Factura.TIPO = CTE_TIPO_ABONO) then
(Controller as IDetallesFacturaProveedorController).CambiarSignoDetalles(Detalles); Result := (Controller as IDetallesFacturaProveedorController).AnadirArticulo(Detalles, pReferencia, tProveedor, -1, -1)
else
Result := (Controller as IDetallesFacturaProveedorController).AnadirArticulo(Detalles, pReferencia, tProveedor, -1, -1);
end; end;
procedure TfrViewDetallesFacturaProveedor.AnadirArticulosInterno; procedure TfrViewDetallesFacturaProveedor.AnadirArticulosInterno;
begin begin
(Controller as IDetallesFacturaProveedorController).AnadirArticulos(Detalles, Factura.Proveedor); if (Factura.TIPO = CTE_TIPO_ABONO) then
(Controller as IDetallesFacturaProveedorController).AnadirArticulos(Detalles, Factura.Proveedor, true, -1)
if (Factura.TIPO = CTE_TIPO_ABONO) then else
(Controller as IDetallesFacturaProveedorController).CambiarSignoDetalles(Detalles); (Controller as IDetallesFacturaProveedorController).AnadirArticulos(Detalles, Factura.Proveedor);
end; end;
function TfrViewDetallesFacturaProveedor.GetFactura: IBizFacturaProveedor; function TfrViewDetallesFacturaProveedor.GetFactura: IBizFacturaProveedor;
@ -63,6 +64,14 @@ begin
Result := FFactura; Result := FFactura;
end; 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); procedure TfrViewDetallesFacturaProveedor.SetFactura(const Value: IBizFacturaProveedor);
begin begin
FFactura := Value; FFactura := Value;

View File

@ -9,7 +9,7 @@ uses
type type
IDetallesPedidoProveedorController = interface(IControllerDetallesArticulos) IDetallesPedidoProveedorController = interface(IControllerDetallesArticulos)
['{942428EC-BCB8-4C56-BFA6-EB9F05D5E0DB}'] ['{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; procedure ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor); overload;
function ArticulosPendientes(const ID : Integer): IBizDetallesPedidoProveedorPend; function ArticulosPendientes(const ID : Integer): IBizDetallesPedidoProveedorPend;
procedure DesglosarPorteDetalles(ImportePorte: Currency; ADetalles: IDAStronglyTypedDataTable); procedure DesglosarPorteDetalles(ImportePorte: Currency; ADetalles: IDAStronglyTypedDataTable);
@ -32,7 +32,7 @@ type
function DarTotalPorteTotal(ADetalles: IDAStronglyTypedDataTable): Double; function DarTotalPorteTotal(ADetalles: IDAStronglyTypedDataTable): Double;
public 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; procedure ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor); overload;
function ArticulosPendientes(const ID : Integer): IBizDetallesPedidoProveedorPend; function ArticulosPendientes(const ID : Integer): IBizDetallesPedidoProveedorPend;
constructor Create; override; constructor Create; override;
@ -62,7 +62,7 @@ begin
end; end;
end; end;
procedure TDetallesPedidoProveedorController.AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor); procedure TDetallesPedidoProveedorController.AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; AProveedor: IBizProveedor; const ANuevaFila :Boolean);
var var
AArticulos: IBizArticulo; AArticulos: IBizArticulo;
begin begin
@ -70,8 +70,19 @@ begin
begin begin
try try
AArticulos := (FArticulosController.BuscarTodos as IBizArticulo); 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); //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 finally
AArticulos := Nil; AArticulos := Nil;
end; end;

View File

@ -29,6 +29,7 @@ type
procedure SetPedido(const Value: IBizPedidoProveedor); procedure SetPedido(const Value: IBizPedidoProveedor);
procedure AnadirArticulosInterno; override; procedure AnadirArticulosInterno; override;
procedure RellenarArticulosInterno; override;
function AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean; override; function AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean; override;
public public
@ -65,6 +66,14 @@ begin
Result := FPedido; Result := FPedido;
end; end;
procedure TfrViewDetallesPedidoProveedor.RellenarArticulosInterno;
begin
//No 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); procedure TfrViewDetallesPedidoProveedor.SetPedido(const Value: IBizPedidoProveedor);
begin begin
FPedido := Value; FPedido := Value;

View File

@ -9,7 +9,7 @@ uses
type type
IDetallesPresupuestoClienteController = interface(IControllerDetallesArticulos) IDetallesPresupuestoClienteController = interface(IControllerDetallesArticulos)
['{8D1D3559-E695-4962-9999-404B26B50D6C}'] ['{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 ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente); overload;
procedure DesglosarPorteDetalles(ImportePorte: Currency; ADetalles: IDAStronglyTypedDataTable); procedure DesglosarPorteDetalles(ImportePorte: Currency; ADetalles: IDAStronglyTypedDataTable);
function DarTotalPorteTotal(ADetalles: IDAStronglyTypedDataTable): Double; function DarTotalPorteTotal(ADetalles: IDAStronglyTypedDataTable): Double;
@ -31,7 +31,7 @@ type
function DarTotalPorteTotal(ADetalles: IDAStronglyTypedDataTable): Double; function DarTotalPorteTotal(ADetalles: IDAStronglyTypedDataTable): Double;
public 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; procedure ActualizarDetalles(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente); overload;
constructor Create; override; constructor Create; override;
destructor Destroy; override; destructor Destroy; override;
@ -60,7 +60,7 @@ begin
end; end;
end; end;
procedure TDetallesPresupuestoClienteController.AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente); procedure TDetallesPresupuestoClienteController.AnadirArticulos(ADetalles: IDAStronglyTypedDataTable; ACliente: IBizCliente; const ANuevaFila :Boolean);
var var
AArticulos: IBizArticulo; AArticulos: IBizArticulo;
begin begin
@ -68,8 +68,19 @@ begin
begin begin
try try
AArticulos := (FArticulosController.BuscarTodos(ACliente) as IBizArticulo); 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 finally
AArticulos := Nil; AArticulos := Nil;
end; end;

View File

@ -30,6 +30,7 @@ type
procedure SetPresupuesto(const Value: IBizPresupuestoCliente); procedure SetPresupuesto(const Value: IBizPresupuestoCliente);
procedure AnadirArticulosInterno; override; procedure AnadirArticulosInterno; override;
procedure RellenarArticulosInterno; override;
function AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean; override; function AnadirArticulo(pReferencia: String; TipoReferencia: TEnumReferencia): Boolean; override;
public public
@ -64,6 +65,11 @@ begin
Result := FPresupuesto; Result := FPresupuesto;
end; end;
procedure TfrViewDetallesPresupuestoCliente.RellenarArticulosInterno;
begin
(Controller as IDetallesPresupuestoClienteController).AnadirArticulos(Detalles, Presupuesto.Cliente, False);
end;
procedure TfrViewDetallesPresupuestoCliente.SetPresupuesto(const Value: IBizPresupuestoCliente); procedure TfrViewDetallesPresupuestoCliente.SetPresupuesto(const Value: IBizPresupuestoCliente);
begin begin
FPresupuesto := Value; FPresupuesto := Value;

Binary file not shown.

View File

@ -14,7 +14,7 @@ BEGIN
BEGIN BEGIN
VALUE "FileVersion", "1.0.0.0\0" VALUE "FileVersion", "1.0.0.0\0"
VALUE "ProductVersion", "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
END END
BLOCK "VarFileInfo" BLOCK "VarFileInfo"