From 1649babde6c8737c9ad6001f025a95dbe00fe873 Mon Sep 17 00:00:00 2001 From: roberto Date: Thu, 21 Aug 2008 12:09:21 +0000 Subject: [PATCH] Se adapta la parte de proveedores para poder hacer facturas a partir de pedidos de proveedor o albaranes git-svn-id: https://192.168.0.254/svn/Proyectos.Tecsitel_FactuGES2/trunk@521 0c75b7a4-871f-7646-8a2f-f78d34cc349f --- Build/Build.fbp5 | 37 +- Database/scripts/factuges.sql | 1 + Source/Base/Base.dproj | 102 +-- .../Views/uEditorAlbaranesProveedor.dfm | 1 + .../Views/uEditorAlbaranesProveedor.pas | 2 +- .../FacturasProveedor_controller.dproj | 20 +- .../FacturasProveedor_controller.res | Bin 384 -> 4748 bytes .../Data/uDataModuleFacturasProveedor.pas | 2 +- .../FacturasProveedor_Group.groupproj | 46 +- .../Model/schFacturasProveedorClient_Intf.pas | 12 +- .../Model/schFacturasProveedorServer_Intf.pas | 12 +- .../Views/FacturasProveedor_view.dpk | Bin 2647 -> 2676 bytes .../Views/FacturasProveedor_view.dproj | 104 ++- .../Views/uEditorFacturaProveedor.dfm | 42 +- .../Views/uEditorFacturasProveedor.dfm | 20 +- .../Views/uEditorFacturasProveedor.pas | 34 +- .../uPedidosProveedorController.pas | 32 +- .../Data/uDataModulePedidosProveedor.dfm | 9 + .../Model/schPedidosProveedorClient_Intf.pas | 82 ++- .../Model/schPedidosProveedorServer_Intf.pas | 98 ++- .../PedidosProveedor_Group.groupproj | 54 +- .../Servidor/srvPedidosProveedor_Impl.dfm | 51 +- .../Views/PedidosProveedor_view.dpk | 3 +- .../Views/PedidosProveedor_view.dproj | 117 +-- .../Views/uEditorPedidosProveedor.dfm | 47 +- .../Views/uEditorPedidosProveedor.pas | 27 +- .../Views/uViewPedidosProveedor.dfm | 4 + .../Views/uViewPedidosProveedor.pas | 1 + .../AlbCli_FacCli_relation.dpk | 2 +- .../AlbCli_FacCli_relation.dproj | 10 +- .../uGenerarFacturasCliAlbCliUtils.dfm | 2 +- .../uGenerarFacturasCliAlbCliUtils.pas | 12 +- .../AlbProv_FacProv_relation.dpk | 2 +- .../AlbProv_FacProv_relation.dproj | 51 +- .../uGenerarFacturasProvAlbProvUtils.dfm | 2 +- .../uGenerarFacturasProvAlbProvUtils.pas | 217 +++--- .../PedProv_FacProv_relation.dpk | 16 +- .../PedProv_FacProv_relation.dproj | 669 ++++++++++++++++-- .../PedProv_FacProv_relation.rc | 22 + .../PedProv_FacProv_relation.res | Bin 5056 -> 384 bytes .../uGenerarFacturasProvPedProvUtils.pas | 234 ------ ...s.dfm => uGenerarFacturasProvPedUtils.dfm} | 2 +- .../uGenerarFacturasProvPedUtils.pas | 436 ++++++++++++ .../uGenerarFacturasCliPreCliUtils.pas | 2 - Source/Servidor/FactuGES_Server.RES | Bin 23208 -> 23204 bytes Source/Servidor/FactuGES_Server.dpr | 10 +- Source/Servidor/FactuGES_Server.rc | 2 +- 47 files changed, 1835 insertions(+), 816 deletions(-) delete mode 100644 Source/Modulos/Relaciones/Pedidos de proveedor - Facturas de proveedor/uGenerarFacturasProvPedProvUtils.pas rename Source/Modulos/Relaciones/Pedidos de proveedor - Facturas de proveedor/{uGenerarFacturasProvPedProvUtils.dfm => uGenerarFacturasProvPedUtils.dfm} (98%) create mode 100644 Source/Modulos/Relaciones/Pedidos de proveedor - Facturas de proveedor/uGenerarFacturasProvPedUtils.pas diff --git a/Build/Build.fbp5 b/Build/Build.fbp5 index 514ba2c3..5573f26d 100644 --- a/Build/Build.fbp5 +++ b/Build/Build.fbp5 @@ -15249,7 +15249,7 @@ Comments= - + 0 @@ -15260,12 +15260,12 @@ Comments= True 0 1252 - 11 + 12 Release False - + - False + True True False @@ -15273,7 +15273,7 @@ Comments= False False False - False + True True False False @@ -15283,15 +15283,15 @@ Comments= False False False - 3081 + 3082 - 0 + 1 0 0 False 0 - + True 0 @@ -15304,18 +15304,18 @@ Comments= False False False - [] + [usPackages,usCompiler,usLinker,usVersionInfo] False False @@ -15323,23 +15323,20 @@ Comments= False False False - True + False True True False False %package_path% - + False %modules_dcp_path% - True + False - True + False False True @@ -15353,7 +15350,7 @@ Comments= True %library_path% 0 - True + False 0 1048576 16384 @@ -15365,7 +15362,7 @@ Comments= False fa8 - True + False False True diff --git a/Database/scripts/factuges.sql b/Database/scripts/factuges.sql index f9559311..0a26be40 100644 --- a/Database/scripts/factuges.sql +++ b/Database/scripts/factuges.sql @@ -3105,6 +3105,7 @@ ALTER TABLE EMPRESAS_CONTACTOS ADD CONSTRAINT FK_EMPRESAS_CONTACTOS FOREIGN KEY ALTER TABLE EMPRESAS_DATOS_BANCO ADD CONSTRAINT FK_EMPRESAS_DATOS_BANCO FOREIGN KEY (ID_EMPRESA) REFERENCES EMPRESAS (ID) ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE FACTURAS_CLIENTE ADD CONSTRAINT FK_FACTURAS_CLIENTE_EMPRESAS FOREIGN KEY (ID_EMPRESA) REFERENCES EMPRESAS (ID) ON DELETE NO ACTION ON UPDATE NO ACTION; ALTER TABLE FACTURAS_PROVEEDOR ADD CONSTRAINT FK_FACTURAS_PROVEEDOR_EMPRESAS FOREIGN KEY (ID_EMPRESA) REFERENCES EMPRESAS (ID) ON DELETE NO ACTION ON UPDATE NO ACTION; +ALTER TABLE PEDIDOS_PROVEEDOR ADD CONSTRAINT FK_PEDIDOS_PROVEEDOR_1 FOREIGN KEY (ID_FACTURA) REFERENCES FACTURAS_PROVEEDOR (ID) ON DELETE SET NULL ON UPDATE CASCADE; ALTER TABLE MOVIMIENTOS ADD CONSTRAINT FK_MOVIMIENTOS FOREIGN KEY (ID_ARTICULO) REFERENCES ARTICULOS (ID); ALTER TABLE MOVIMIENTOS ADD CONSTRAINT FK_MOVIMIENTOS2 FOREIGN KEY (ID_ALMACEN) REFERENCES ALMACENES (ID); ALTER TABLE PAGOS_CLIENTE ADD CONSTRAINT FK_PAGOS_CLIENTE FOREIGN KEY (ID_RECIBO) REFERENCES RECIBOS_CLIENTE (ID); diff --git a/Source/Base/Base.dproj b/Source/Base/Base.dproj index aba0a919..8f2d3b40 100644 --- a/Source/Base/Base.dproj +++ b/Source/Base/Base.dproj @@ -53,57 +53,57 @@ MainSource - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
fConfigurarConexion
diff --git a/Source/Modulos/Albaranes de proveedor/Views/uEditorAlbaranesProveedor.dfm b/Source/Modulos/Albaranes de proveedor/Views/uEditorAlbaranesProveedor.dfm index 15d367b6..c4a0dbad 100644 --- a/Source/Modulos/Albaranes de proveedor/Views/uEditorAlbaranesProveedor.dfm +++ b/Source/Modulos/Albaranes de proveedor/Views/uEditorAlbaranesProveedor.dfm @@ -2,6 +2,7 @@ inherited fEditorAlbaranesProveedor: TfEditorAlbaranesProveedor Caption = 'Lista de albaranes de proveedor' ClientWidth = 606 ExplicitWidth = 614 + ExplicitHeight = 240 PixelsPerInch = 96 TextHeight = 13 inherited JvNavPanelHeader: TJvNavPanelHeader diff --git a/Source/Modulos/Albaranes de proveedor/Views/uEditorAlbaranesProveedor.pas b/Source/Modulos/Albaranes de proveedor/Views/uEditorAlbaranesProveedor.pas index 4529759d..0c8b4ebf 100644 --- a/Source/Modulos/Albaranes de proveedor/Views/uEditorAlbaranesProveedor.pas +++ b/Source/Modulos/Albaranes de proveedor/Views/uEditorAlbaranesProveedor.pas @@ -80,7 +80,7 @@ end; procedure TfEditorAlbaranesProveedor.actGenerarFacturaExecute(Sender: TObject); begin inherited; - GenerarFacturaProv(Albaranes.ID); + GenerarFacturaProvAlbProv(Albaranes.ID); actRefrescar.Execute; end; diff --git a/Source/Modulos/Facturas de proveedor/Controller/FacturasProveedor_controller.dproj b/Source/Modulos/Facturas de proveedor/Controller/FacturasProveedor_controller.dproj index 33722ea2..1594b53c 100644 --- a/Source/Modulos/Facturas de proveedor/Controller/FacturasProveedor_controller.dproj +++ b/Source/Modulos/Facturas de proveedor/Controller/FacturasProveedor_controller.dproj @@ -41,21 +41,21 @@ Delphi.Personality Package -FalseTrueFalseTrueFalseFalseTrueFalse1000FalseFalseFalseFalseFalse308212521.0.0.01.0.0.0FacturasProveedor_controller.dpk +FalseTrueFalseFalseFalseFalseTrueFalse1000FalseFalseFalseFalseFalse308212521.0.0.01.0.0.0FacturasProveedor_controller.dpk MainSource - - - - - - - - + + + + + + + + @@ -68,7 +68,7 @@ diff --git a/Source/Modulos/Relaciones/Pedidos de proveedor - Facturas de proveedor/PedProv_FacProv_relation.rc b/Source/Modulos/Relaciones/Pedidos de proveedor - Facturas de proveedor/PedProv_FacProv_relation.rc index e69de29b..153736af 100644 --- a/Source/Modulos/Relaciones/Pedidos de proveedor - Facturas de proveedor/PedProv_FacProv_relation.rc +++ b/Source/Modulos/Relaciones/Pedidos de proveedor - Facturas de proveedor/PedProv_FacProv_relation.rc @@ -0,0 +1,22 @@ +1 VERSIONINFO +FILEVERSION 1,0,0,0 +PRODUCTVERSION 1,0,0,0 +FILEFLAGSMASK 0x3FL +FILEFLAGS 0x00L +FILEOS 0x40004L +FILETYPE 0x1L +FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "0C0A04E4" + BEGIN + VALUE "FileVersion", "1.0.0.0\0" + VALUE "ProductVersion", "1.0.0.0\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0C0A, 1252 + END +END diff --git a/Source/Modulos/Relaciones/Pedidos de proveedor - Facturas de proveedor/PedProv_FacProv_relation.res b/Source/Modulos/Relaciones/Pedidos de proveedor - Facturas de proveedor/PedProv_FacProv_relation.res index 86c94e6ada7b3c85f6761b1ee234a9f34ef3c861..8b251f312bcccec5485024f6fe8d80e1cdf25746 100644 GIT binary patch delta 89 zcmX@0-oQLTLCJxUfkAA@>-7}euyEfF+`%$mH-*3IwZ-y~5+miKtn3_w^Pn$V^ zQ861nx4C)wN(Q~H#+K|o*@m~&(3=1I%Llk7>S*pvE7;Yjz^+ljNYba;|&8!P>=GYp<9J^QiRC`-*du(Wb zBJI+RemE@Tm2dSSKL$269_p-ia&WJ{$B|EYy#Bt1`fm?B(CB-l8nlXqgY!6fUOzP@ zr|Te|e4cZxgJWuLF8<`}dughP69?9a%ha4}r`jtX-7UCl^he&nV;_S<)Ya!2FlEJu zrr{t12%dXkNqpywX{@?Eb_MKs@29XRNI;2D%DxW zo|xv^jnf#kFIDZr^e=W==PW{#^6Ao{deqzuxId;ujOZ~3;otiwSzBXu3^t3 z&$C~D3=Umz@OQRR9+}nP>x>=u115dAI{rd2#Mbgv81-@e%IA6)a8SDwHm3Di`~F1x z)jhG~04Fd5o4f^Iah!WFIS0|E#)aohzS6onIG_;>-~Ytz3J0A}=DenTZ*cIo-Ves9 zp>qHmo5lV+rntk2He9_1!t%2yZsF;l)>iGc4jkU$0bBWEPmBKKP>uSjxhXIDsSodT z@EG|gFZa>|hHF!PaN};FzIxxlpPKT;87{i(!eu7T%H?}r^yeP=K2c}If`cyKd-3DW z_4ib`jDt-MZ?C~;z1O=EKN(!YbpFJR_c`u>(C=ph9O_Y*Jz5Z>`Zs7T9Mn$y@ay$^ z{gulxYxXwGq@TIGbG$~Hi*qk8?9|WMkNweF@MU18F;AQKZ>jcWAL86`f59r^Yh;+XfGU10gV*5=*FT)q#qz2B_Ik28(#vUlW{{>1m(1wXK3zHQ3+RoHfz^$cuqg(^F;eqz6WUMUE^m$ z9R1u2H_t9ue%}<_JcD5KB$svgjBysd-ql#|toxF$&>h1Qc)Vw6j~u{SeHg>my$i{SJtD^MnJV!{AK!ZgN9Q4bN2bs7?m1Qo zsLwc-c&GZ4_%7jWppm+9C(?(bpCye?f6Mv)ml~{r9)<=EoH5SYSxm8xsWZv%2MjL$ zd)R%{gxqI&lEaJ6!*jggJMcIz?<5?~hn@VA1Kzcrp$;C`m0CzQdy{!G?|FT$$5W3N zaydTsdE#>2dGSt*&wOX~r{!54?~lxS4gM|rOZH6mRCZMCP#!z)bEv-^up_gJ*i*BY zl>1d-%!E}5v+s{C_OF@Qj;!xrv5)P2yJ4TmKCqke`Aq-U;NJ}WpRu*&|7!3r$c7zU zF#m_6?>Cia!E%D)b;IaF{ zzPG~QEyw>z^LKm}whzS>Dx3Ct`1w98?Y5 0) then - begin - ADetallesController.Add(ADetalles, TIPO_DETALLE_CONCEPTO); - ADetalles.Edit; - ADetalles.REFERENCIA := APedido.Detalles.REFERENCIA; - ADetalles.ID_ARTICULO := APedido.Detalles.ID_ARTICULO; - ADetalles.CONCEPTO := APedido.Detalles.CONCEPTO; - ADetalles.CANTIDAD := AArticulosPendientes.CANTIDAD_PENDIENTE; - ADetalles.IMPORTE_UNIDAD := APedido.Detalles.IMPORTE_UNIDAD; - ADetalles.IMPORTE_TOTAL := APedido.Detalles.IMPORTE_TOTAL; - ADetalles.DESCUENTO := APedido.Detalles.DESCUENTO; - ADetalles.IMPORTE_PORTE := APedido.Detalles.IMPORTE_PORTE; - ADetalles.VISIBLE := APedido.Detalles.VISIBLE; - ADetalles.REFERENCIA_PROVEEDOR := APedido.Detalles.REFERENCIA_PROVEEDOR; - ADetalles.Post; - AArticulosPendientes.Next; - end; - end; - finally - ADetallesController.EndUpdate(ADetalles); - ADetallesController := NIL; - end; -end; } - -procedure Inicializar; -begin - dmGenerarFacturasProv := TdmGenerarFacturasProv.Create(nil); - APedidosProveedorController := TPedidosProveedorController.Create; - ADetallesPedidosProveedorController := TDetallesPedidoProveedorController.Create; - AFacturasProveedorController := TFacturasProveedorController.Create; -// AProveedoresController := TProveedoresController.Create; -end; - -procedure Finalizar; -begin - FreeAndNIL(dmGenerarFacturasProv); - APedidosProveedorController := nil; - ADetallesPedidosProveedorController := nil; - AFacturasProveedorController := nil; -// AProveedoresController := nil; -end; - - -function GenerarFacturaProv(const IDPedido : Integer) : Boolean; overload; -var - APedido : IBizPedidoProveedor; -begin - Result := False; - if not Assigned(APedidosProveedorController) then - Inicializar; - - APedido := APedidosProveedorController.Buscar(IDPedido); - Result := GenerarFacturaProv(APedido); - - if Assigned(APedidosProveedorController) then - Finalizar; -end; - -function GenerarFacturaProv(APedidos : IBizPedidoProveedor) : Boolean; overload; -var - ARespuesta : Integer; - AFacturasNuevas : IBizFacturaProveedor; -// AArticulos: IBizPedidoClienteArticulosPend; - i: Integer; -begin - Result := False; - if not Assigned(APedidosProveedorController) then - Inicializar; - - if not Assigned(APedidos) then - raise Exception.Create('Albarán de proveedor no asignado (GenerarFacturaProv)'); - - if not APedidos.DataTable.Active then - APedidos.DataTable.Active := True; - - try - AFacturasNuevas := AFacturasProveedorController.Nuevo(False); - if AFacturasProveedorController.Anadir(AFacturasNuevas, APedidos.ID) then - begin - if AFacturasNuevas.DataTable.RecordCount = 1 then - AFacturasProveedorController.Ver(AFacturasNuevas) - else begin - with dmGenerarFacturasProv.JsListaFacturasGeneradas.Content do - begin - Clear; - AFacturasNuevas.DataTable.Last; - for i := 0 to AFacturasNuevas.DataTable.RecordCount - 1 do - begin - if Length(AFacturasNuevas.REFERENCIA) > 0 then - Add(AFacturasNuevas.REFERENCIA + ': ' + AFacturasNuevas.NOMBRE); - AFacturasNuevas.DataTable.Prior; - end; - end; - dmGenerarFacturasProv.JsListaFacturasGeneradas.Execute; - end; -// actRefrescar.Execute; - end; - finally - AFacturasNuevas := NIL; - end; -end; - -function GenerarFacturaProv : Boolean; overload; -var - APedidos : IBizPedidoProveedor; -begin -{ - Result := False; - if not Assigned(APedidosProveedorController) then - Inicializar; - - APedidos := APedidosProveedorController.ElegirPedidos(APedidosProveedorController.BuscarSinFacturar, - 'Elija el albarán o Pedidos de proveedor que desea utilizar para dar de alta la factura.' - + #10#13 + 'Si elige Pedidos de proveedores diferentes se dará de alta una factura por cada uno de ellos.' , True); - - Result := GenerarFacturaProv(APedidos); - - if Assigned(APedidosProveedorController) then - Finalizar; -} -end; - -end. diff --git a/Source/Modulos/Relaciones/Pedidos de proveedor - Facturas de proveedor/uGenerarFacturasProvPedProvUtils.dfm b/Source/Modulos/Relaciones/Pedidos de proveedor - Facturas de proveedor/uGenerarFacturasProvPedUtils.dfm similarity index 98% rename from Source/Modulos/Relaciones/Pedidos de proveedor - Facturas de proveedor/uGenerarFacturasProvPedProvUtils.dfm rename to Source/Modulos/Relaciones/Pedidos de proveedor - Facturas de proveedor/uGenerarFacturasProvPedUtils.dfm index 182262d7..e035a753 100644 --- a/Source/Modulos/Relaciones/Pedidos de proveedor - Facturas de proveedor/uGenerarFacturasProvPedProvUtils.dfm +++ b/Source/Modulos/Relaciones/Pedidos de proveedor - Facturas de proveedor/uGenerarFacturasProvPedUtils.dfm @@ -1,4 +1,4 @@ -object dmGenerarFacturasProv: TdmGenerarFacturasProv +object dmGenerarFacturasProvPed: TdmGenerarFacturasProvPed OldCreateOrder = False Height = 176 Width = 254 diff --git a/Source/Modulos/Relaciones/Pedidos de proveedor - Facturas de proveedor/uGenerarFacturasProvPedUtils.pas b/Source/Modulos/Relaciones/Pedidos de proveedor - Facturas de proveedor/uGenerarFacturasProvPedUtils.pas new file mode 100644 index 00000000..c88a9a52 --- /dev/null +++ b/Source/Modulos/Relaciones/Pedidos de proveedor - Facturas de proveedor/uGenerarFacturasProvPedUtils.pas @@ -0,0 +1,436 @@ +unit uGenerarFacturasProvPedUtils; + +interface + +uses + Windows, SysUtils, Classes, uBizPedidosProveedor, uBizFacturasProveedor, pngimage, JSDialog; + +type + TdmGenerarFacturasProvPed = class(TDataModule) + JsListaFacturasGeneradas: TJSDialog; + end; + + function GenerarFacturaProvPed(const IDPedido : Integer; const CopiarDetalles: Boolean = True) : Boolean; overload; + function GenerarFacturaProvPed(APedidos : IBizPedidoProveedor; const CopiarDetalles: Boolean = True) : Boolean; overload; + function GenerarFacturaProvPed : Boolean; overload; + + function GenerarFacturas(AFacturas : IBizFacturaProveedor; AListaPedidos : IBizPedidoProveedor; const CopiarDetalles: Boolean = True): Boolean; + +implementation + +{$R *.dfm} + +uses + uDialogUtils, uDADataTable, + uBizDetallesPedidoProveedor, + uPedidosProveedorController, uDetallesPedidoProveedorController, + uFacturasProveedorController, uControllerDetallesBase, + schPedidosProveedorClient_Intf, schFacturasProveedorClient_Intf, + uBizDetallesFacturaProveedor, uDetallesFacturaProveedorController; + +// , +// , uProveedoresController, +// , + + +// , uBizContactos, +// schPedidosProveedorClient_Intf; + +var + dmGenerarFacturasProvPed: TdmGenerarFacturasProvPed; + APedidosProveedorController : IPedidosProveedorController; + ADetallesPedidosProveedorController : IDetallesPedidoProveedorController; + AFacturasProveedorController : IFacturasProveedorController; +// AProveedoresController : IProveedoresController; + +{ Métodos auxiliares } +{procedure CopiarPedidoAPedido(APedido: IBizPedidoCliente; + APedido : IBizFacturaProveedor); +begin + if not Assigned(APedido) then + raise Exception.Create ('Albarán no asignado (CopiarPedidoAPedido)'); + + if not Assigned(APedido) then + raise Exception.Create ('Pedido no asignado (CopiarPedidoAPedido)'); + + if not APedido.DataTable.Active then + APedido.DataTable.Active := True; + + // El albarán tiene que venir ya abierto y posicionado donde hay que copiar + APedido.ID_CLIENTE := APedido.ID_CLIENTE; + APedido.ID_PEDIDO := APedido.ID; + APedido.CALLE := APedido.CALLE; + APedido.CODIGO_POSTAL := APedido.CODIGO_POSTAL; + APedido.POBLACION := APedido.POBLACION; + APedido.PROVINCIA := APedido.PROVINCIA; + APedido.PERSONA_CONTACTO := APedido.PERSONA_CONTACTO; + APedido.TELEFONO := APedido.TELEFONO; + APedido.IMPORTE_NETO := APedido.IMPORTE_NETO; + APedido.IMPORTE_PORTE := APedido.IMPORTE_PORTE; + APedido.DESCUENTO := APedido.DESCUENTO; + APedido.IMPORTE_DESCUENTO := APedido.IMPORTE_DESCUENTO; + APedido.BASE_IMPONIBLE := APedido.BASE_IMPONIBLE; + APedido.IVA := APedido.IVA; + APedido.IMPORTE_IVA := APedido.IMPORTE_IVA; + APedido.IMPORTE_TOTAL := APedido.IMPORTE_TOTAL; + APedido.DataTable.FieldByName(fld_PedidosClienteOBSERVACIONES).AsVariant := APedido.DataTable.FieldByName(fld_PedidosClienteOBSERVACIONES).AsVariant; + APedido.ID_FORMA_PAGO := APedido.ID_FORMA_PAGO; +end; + +procedure CopiarArticulosPendAPedido( + APedido: IBizPedidoCliente; + APedido: IBizFacturaProveedor; + AArticulosPendientes: IBizPedidoClienteArticulosPend); +var + i : integer; + ADetalles : IBizDetallesFacturaProveedor; + ADetallesController : IDetallesFacturaProveedorController; +begin + if not Assigned(APedido) then + raise Exception.Create ('Albarán no asignado (CopiarArticulosPendAPedido)'); + + if not Assigned(APedido) then + raise Exception.Create ('Pedido no asignado (CopiarArticulosPendAPedido)'); + + if not Assigned(AArticulosPendientes) then + raise Exception.Create ('Artículos pendientes no asignado (CopiarArticulosPendAPedido)'); + + if not AArticulosPendientes.DataTable.Active then + AArticulosPendientes.DataTable.Active := True; + + // El albarán tiene que venir ya abierto y posicionado donde hay que copiar + + ADetalles := APedido.Detalles; + ADetallesController := TDetallesFacturaProveedorController.Create; + try + //OJO IMPORTANTE + //Siempre que vayamos a trabajar con los detalles debemos hacer un beginupdate de los mismos y un endupdate para + //obligarle siempre a recalcular los detalles una sola vez + ADetallesController.BeginUpdate(ADetalles); + + AArticulosPendientes.DataTable.First; + for i := 0 to AArticulosPendientes.DataTable.RecordCount - 1 do + begin + APedido.Detalles.First; + if (APedido.Detalles.Locate('ID_ARTICULO', AArticulosPendientes.ID_ARTICULO, [])) then + if (AArticulosPendientes.CANTIDAD_PENDIENTE > 0) then + begin + ADetallesController.Add(ADetalles, TIPO_DETALLE_CONCEPTO); + ADetalles.Edit; + ADetalles.REFERENCIA := APedido.Detalles.REFERENCIA; + ADetalles.ID_ARTICULO := APedido.Detalles.ID_ARTICULO; + ADetalles.CONCEPTO := APedido.Detalles.CONCEPTO; + ADetalles.CANTIDAD := AArticulosPendientes.CANTIDAD_PENDIENTE; + ADetalles.IMPORTE_UNIDAD := APedido.Detalles.IMPORTE_UNIDAD; + ADetalles.IMPORTE_TOTAL := APedido.Detalles.IMPORTE_TOTAL; + ADetalles.DESCUENTO := APedido.Detalles.DESCUENTO; + ADetalles.IMPORTE_PORTE := APedido.Detalles.IMPORTE_PORTE; + ADetalles.VISIBLE := APedido.Detalles.VISIBLE; + ADetalles.REFERENCIA_PROVEEDOR := APedido.Detalles.REFERENCIA_PROVEEDOR; + ADetalles.Post; + AArticulosPendientes.Next; + end; + end; + finally + ADetallesController.EndUpdate(ADetalles); + ADetallesController := NIL; + end; +end; } + +procedure CopiarArticulosPedido(AOrigen: IBizDetallesPedidoProveedor; + ADestino : IBizDetallesFacturaProveedor); +var + i : integer; + ADetallesController : IDetallesFacturaProveedorController; +begin + if not Assigned(AOrigen) then + raise Exception.Create ('Origen no asignado (CopiarArticulosPedido)'); + + if not Assigned(ADestino) then + raise Exception.Create ('Destino no asignado (CopiarArticulosPedido)'); + + if not AOrigen.DataTable.Active then + AOrigen.DataTable.Active := True; + + if not ADestino.DataTable.Active then + ADestino.DataTable.Active := True; + + ADetallesController := TDetallesFacturaProveedorController.Create; + try + //OJO IMPORTANTE + //Siempre que vayamos a trabajar con los detalles debemos hacer un beginupdate de los mismos y un endupdate para + //obligarle siempre a recalcular los detalles una sola vez + ADetallesController.BeginUpdate(ADestino); + + AOrigen.DataTable.First; + for i := 0 to AOrigen.DataTable.RecordCount - 1 do + begin + ADetallesController.Add(ADestino, TIPO_DETALLE_CONCEPTO); + ADestino.Edit; + ADestino.REFERENCIA := AOrigen.REFERENCIA; + if AOrigen.ID_ARTICULO > 0 then + ADestino.ID_ARTICULO := AOrigen.ID_ARTICULO; + ADestino.CONCEPTO := AOrigen.CONCEPTO; + ADestino.CANTIDAD := AOrigen.CANTIDAD; + ADestino.IMPORTE_UNIDAD := AOrigen.IMPORTE_UNIDAD; + ADestino.IMPORTE_TOTAL := AOrigen.IMPORTE_TOTAL; + ADestino.DESCUENTO := AOrigen.DESCUENTO; + ADestino.IMPORTE_PORTE := AOrigen.IMPORTE_PORTE; + ADestino.VISIBLE := AOrigen.VISIBLE; + ADestino.REFERENCIA_PROVEEDOR := AOrigen.REFERENCIA_PROVEEDOR; + ADestino.Post; + AOrigen.Next; + end; + finally + ADetallesController.EndUpdate(ADestino); + ADetallesController := NIL; + end; +end; + +procedure Inicializar; +begin + dmGenerarFacturasProvPed := TdmGenerarFacturasProvPed.Create(nil); + APedidosProveedorController := TPedidosProveedorController.Create; + ADetallesPedidosProveedorController := TDetallesPedidoProveedorController.Create; + AFacturasProveedorController := TFacturasProveedorController.Create; +end; + +procedure Finalizar; +begin + FreeAndNIL(dmGenerarFacturasProvPed); + APedidosProveedorController := nil; + ADetallesPedidosProveedorController := nil; + AFacturasProveedorController := nil; +end; + + +function GenerarFacturaProvPed(const IDPedido : Integer; const CopiarDetalles: Boolean = True) : Boolean; overload; +var + APedido : IBizPedidoProveedor; +begin + Result := False; + if not Assigned(APedidosProveedorController) then + Inicializar; + + APedido := APedidosProveedorController.Buscar(IDPedido); + Result := GenerarFacturaProvPed(APedido, CopiarDetalles); + + if Assigned(APedidosProveedorController) then + Finalizar; +end; + +function GenerarFacturaProvPed(APedidos : IBizPedidoProveedor; const CopiarDetalles: Boolean = True) : Boolean; overload; +var + ARespuesta : Integer; + AFacturasNuevas : IBizFacturaProveedor; + i: Integer; +begin + Result := False; + + if not Assigned(APedidos) then + raise Exception.Create('Pedido de proveedor no asignado (GenerarFacturaProvPed)'); + + if not APedidos.DataTable.Active then + APedidos.DataTable.Active := True; + + if not Assigned(APedidosProveedorController) then + Inicializar; + + try + AFacturasNuevas := AFacturasProveedorController.Nuevo(False); + if GenerarFacturas(AFacturasNuevas, APedidos, CopiarDetalles) then + begin + if AFacturasNuevas.DataTable.RecordCount = 1 then + begin + if AFacturasNuevas.TIPO = CTE_TIPO_FACTURA then + ShowInfoMessage('La factura se ha dado de alta con el código ' + AFacturasNuevas.REFERENCIA) + else + ShowInfoMessage('El abono se ha dado de alta con el código ' + AFacturasNuevas.REFERENCIA); + end + else begin + with dmGenerarFacturasProvPed.JsListaFacturasGeneradas.Content do + begin + Clear; + AFacturasNuevas.DataTable.Last; + for i := 0 to AFacturasNuevas.DataTable.RecordCount - 1 do + begin + if Length(AFacturasNuevas.REFERENCIA) > 0 then + Add(AFacturasNuevas.REFERENCIA + ': ' + AFacturasNuevas.NOMBRE); + AFacturasNuevas.DataTable.Prior; + end; + end; + dmGenerarFacturasProvPed.JsListaFacturasGeneradas.Execute; + end; + + Result := True; + end; + finally + AFacturasNuevas := NIL; + if Assigned(APedidosProveedorController) then + Finalizar; + end; +end; + +function GenerarFacturaProvPed : Boolean; overload; +var + APedidos : IBizPedidoProveedor; +begin + Result := False; + if not Assigned(APedidosProveedorController) then + Inicializar; + + APedidos := APedidosProveedorController.ElegirPedidos(APedidosProveedorController.BuscarSinFacturar, + 'Elija el pedido o pedidos de proveedor que desea utilizar para dar de alta la factura.' + + #10#13 + 'Si elige Pedidos de proveedores diferentes se dará de alta una factura por cada uno de ellos.' , True); + + Result := GenerarFacturaProvPed(APedidos); + + if Assigned(APedidosProveedorController) then + Finalizar; +end; + +function GenerarFacturas(AFacturas : IBizFacturaProveedor; AListaPedidos : IBizPedidoProveedor; const CopiarDetalles: Boolean = True): Boolean; +var + AFacturaActual : IBizFacturaProveedor; + APedidosController : IPedidosProveedorController; + I: Integer; + bEnEdicion : Boolean; + +begin + // ATENCIÓN!!! AFacturas tiene que estar vacio para no pisar facturas + // ya generadas. + if not Assigned(AFacturas) then + raise Exception.Create ('Factura no asignado (Anadir)'); + + if not Assigned(AListaPedidos) then + raise Exception.Create ('Pedidos no asignados (Anadir)'); + + if not AFacturas.DataTable.Active then + AFacturas.DataTable.Active := True; + + if not AListaPedidos.DataTable.Active then + AListaPedidos.DataTable.Active := True; + + APedidosController := TPedidosProveedorController.Create; + try + // Ordenar por fecha de albaran + AListaPedidos.DataTable.Sort([fld_PedidosProveedorFECHA_PEDIDO], [uDADataTable.sdAscending]); + AListaPedidos.First; + for I := 0 to AListaPedidos.DataTable.RecordCount - 1 do + begin + AListaPedidos._Proveedor := NIL; + AFacturaActual := NIL; + + // Busco si hay alguna factura ya hecha de ese Proveedor + AFacturas.DataTable.First; + if AFacturas.DataTable.Locate(fld_FacturasProveedorID_PROVEEDOR, AListaPedidos.ID_PROVEEDOR, []) then + begin + AFacturaActual := AFacturas; + AFacturasProveedorController.RecuperarProveedor(AFacturaActual); + AFacturaActual.Proveedor.DataTable.Active := True; + end + else begin + // No hay factura de ese Proveedor. Creo una nueva + AFacturasProveedorController.Anadir(AFacturas); + APedidosController.RecuperarProveedor(AListaPedidos); + AFacturas.Proveedor := AListaPedidos.Proveedor; + AFacturaActual := AFacturas; + end; + + // Ya tengo la factura. Le añado los conceptos del pedido + AFacturaActual.Detalles.DataTable.Last; + + //Se pone la referencia del pedido y el total y nos olvidamos de los detalles + if not CopiarDetalles then + begin + AFacturasProveedorController.DetallesController.Add(AFacturaActual.Detalles, TIPO_DETALLE_CONCEPTO); + with AFacturaActual.Detalles do + begin + Edit; + CONCEPTO := 'Pedido ' + AListaPedidos.REFERENCIA; + CANTIDAD := 1; + IMPORTE_UNIDAD := AListaPedidos.IMPORTE_TOTAL; //Tecsitel no utiliza el IVA en los pedidos por lo tanto el + //importe total es lo que queremos (IMPORTE_NETO+IMPORTE_PORTE) + Post; + end; + end + //Se copian los detalles del pedido a la factura + else + begin + // Añado el título + AFacturasProveedorController.DetallesController.Add(AFacturaActual.Detalles, TIPO_DETALLE_TITULO); + with AFacturaActual.Detalles do + begin + Edit; + CONCEPTO := 'Pedido ' + AListaPedidos.REFERENCIA + ' del ' + DateToStr(AListaPedidos.FECHA_PEDIDO); + Post; + end; + // Añado el contenido del presupuesto + CopiarArticulosPedido(AListaPedidos.Detalles, AFacturaActual.Detalles); + + //En el caso de tener porte el presupuesto se añade una fila con el importe + if (AListaPedidos.IMPORTE_PORTE > 0) then + begin + AFacturasProveedorController.DetallesController.Add(AFacturaActual.Detalles, TIPO_DETALLE_CONCEPTO); + with AFacturaActual.Detalles do + begin + Edit; + CONCEPTO := 'Porte del pedido'; + CANTIDAD := 1; + IMPORTE_UNIDAD := AListaPedidos.IMPORTE_PORTE; + Post; + end; + end; + + //En el caso de tener descuento (bonificación) el presupuesto se añade una fila con el importe +{ if (AListaPresupuestos.IMPORTE_DESCUENTO > 0) then + begin + AFacturasClienteController.DetallesController.Add(AFacturaActual.Detalles, TIPO_DETALLE_CONCEPTO); + with AFacturaActual.Detalles do + begin + Edit; + CONCEPTO := 'Bonificación ' + FloatToStr(AListaPresupuestos.DESCUENTO) + '%'; + CANTIDAD := -1; + IMPORTE_UNIDAD := AListaPresupuestos.IMPORTE_DESCUENTO; + Post; + end; + end; +} + // Añado el resumen + AFacturasProveedorController.DetallesController.Add(AFacturaActual.Detalles, TIPO_DETALLE_SUBTOTAL); + with AFacturaActual.Detalles do + begin + Edit; + CONCEPTO := 'Total del pedido ' + AListaPedidos.REFERENCIA; + Post; + end; + end; + + // Añado una línea en blanco + AFacturasProveedorController.DetallesController.Add(AFacturaActual.Detalles, TIPO_DETALLE_CONCEPTO); + with AFacturaActual.Detalles do + begin + Edit; + CONCEPTO := ''; + Post; + end; + + // Guardo la factura que acabo de generar o editar + AFacturaActual.CalcularImporteTotal; + AFacturasProveedorController.Guardar(AFacturaActual); + // Asocio la factura con el presupuesto + AListaPedidos.Edit; + AListaPedidos.ID_FACTURA := AFacturaActual.ID; + AListaPedidos.Post; + APedidosController.Guardar(AListaPedidos); + + AListaPedidos.Next; + end; + Result := True; + finally + APedidosController := NIL; + end; +end; + + +end. diff --git a/Source/Modulos/Relaciones/Presupuestos de cliente - Facturas de cliente/uGenerarFacturasCliPreCliUtils.pas b/Source/Modulos/Relaciones/Presupuestos de cliente - Facturas de cliente/uGenerarFacturasCliPreCliUtils.pas index a763a11a..ea200d84 100644 --- a/Source/Modulos/Relaciones/Presupuestos de cliente - Facturas de cliente/uGenerarFacturasCliPreCliUtils.pas +++ b/Source/Modulos/Relaciones/Presupuestos de cliente - Facturas de cliente/uGenerarFacturasCliPreCliUtils.pas @@ -185,7 +185,6 @@ begin APresupuestosClienteController := TPresupuestosClienteController.Create; ADetallesPresupuestosClienteController := TDetallesPresupuestoClienteController.Create; AFacturasClienteController := TFacturasClienteController.Create; -// AProveedoresController := TProveedoresController.Create; end; procedure Finalizar; @@ -194,7 +193,6 @@ begin APresupuestosClienteController := nil; ADetallesPresupuestosClienteController := nil; AFacturasClienteController := nil; -// AProveedoresController := nil; end; diff --git a/Source/Servidor/FactuGES_Server.RES b/Source/Servidor/FactuGES_Server.RES index e2e748634aa6536478f7c42b9ee7a9a20b28bccd..d46a0c73c62721e6ae6a4735c4251c46c42f880d 100644 GIT binary patch delta 79 zcmZ3nm2t^d#tnBO7*|Zb8zB!Q|3*YJvQ3VRRAziMxi+$zIgLSi^6yAl;VgzyhE#?! fATDOmVNhT&VlbR+7^TT+%wWY}0)z~c6QkS#geDj5 delta 83 zcmZ3om2t&Z#tnBO7}rd`8zB!Q|3*YJ@=T75RAziJxi+$zIfp@Q^6yAl$y|m^hL;RQ n49N`n3^@#`48;sO3