This commit is contained in:
David Arranz 2008-07-15 18:14:10 +00:00
parent 9f7d7df6d1
commit e84aca044e
8 changed files with 0 additions and 1570 deletions

View File

@ -1,23 +0,0 @@
unit uInfVentasArticuloViewRegister;
interface
procedure RegisterViews;
procedure UnregisterViews;
implementation
uses
uEditorRegistryUtils, uEditorInfVentasArticulo;
procedure RegisterViews;
begin
EditorRegistry.RegisterClass(TfEditorInfVentasArticulo, 'EditorInfVentasArticulo');
end;
procedure UnregisterViews;
begin
EditorRegistry.UnRegisterClass(TfEditorInfVentasArticulo);
end;
end.

View File

@ -1,330 +0,0 @@
object PluginVentasArticulo: TPluginVentasArticulo
OldCreateOrder = True
DefaultAction = actVentasArticulo
Description = 'Informes'
ModuleMenu = MainMenu
ModuleName = 'InfVentasArticulo'
SmallImages = SmallImages
LargeImages = LargeImages
Author = 'Rodax Software'
Version = '1.0.0'
Height = 252
Width = 401
object LargeImages: TPngImageList
Height = 24
Width = 24
PngImages = <
item
PngImage.Data = {
89504E470D0A1A0A0000000D4948445200000018000000180806000000E0773D
F80000000970485973000017120000171201679FD25200000A4D694343505068
6F746F73686F70204943432070726F66696C65000078DA9D53775893F7163EDF
F7650F5642D8F0B1976C81002223AC08C81059A21092006184101240C585880A
561415119C4855C482D50A489D88E2A028B867418A885A8B555C38EE1FDCA7B5
7D7AEFEDEDFBD7FBBCE79CE7FCCE79CF0F8011122691E6A26A003952853C3AD8
1F8F4F48C4C9BD80021548E0042010E6CBC26705C50000F00379787E74B03FFC
01AF6F00020070D52E2412C7E1FF83BA50265700209100E02212E70B01905200
C82E54C81400C81800B053B3640A009400006C797C422200AA0D00ECF4493E05
00D8A993DC1700D8A21CA908008D0100992847240240BB00605581522C02C0C2
00A0AC40222E04C0AE018059B632470280BD0500768E58900F4060008099422C
CC0020380200431E13CD03204C03A030D2BFE0A95F7085B8480100C0CB95CD97
4BD23314B895D01A77F2F0E0E221E2C26CB142611729106609E4229C979B2313
48E7034CCE0C00001AF9D1C1FE383F90E7E6E4E1E666E76CEFF4C5A2FE6BF06F
223E21F1DFFEBC8C020400104ECFEFDA5FE5E5D60370C701B075BF6BA95B00DA
560068DFF95D33DB09A05A0AD07AF98B7938FC401E9EA150C83C1D1C0A0B0BED
2562A1BD30E38B3EFF33E16FE08B7EF6FC401EFEDB7AF000719A4099ADC0A383
FD71616E76AE528EE7CB0442316EF7E723FEC7857FFD8E29D1E234B15C2C158A
F15889B850224DC779B952914421C995E212E97F32F11F96FD0993770D00AC86
4FC04EB607B5CB6CC07EEE01028B0E58D27600407EF32D8C1A0B910010673432
79F7000093BFF98F402B0100CD97A4E30000BCE8185CA894174CC608000044A0
812AB041070CC114ACC00E9CC11DBCC01702610644400C24C03C104206E4801C
0AA11896411954C03AD804B5B0031AA0119AE110B4C131380DE7E0125C81EB70
170660189EC218BC86090441C8081361213A8811628ED822CE0817998E042261
48349280A420E988145122C5C872A402A9426A915D4823F22D7214398D5C40FA
90DBC820328AFC8ABC47319481B25103D4027540B9A81F1A8AC6A073D174340F
5D8096A26BD11AB41E3D80B6A2A7D14BE87574007D8A8E6380D1310E668CD961
5C8C87456089581A26C71663E55835568F35631D583776151BC09E61EF082402
8B8013EC085E8410C26C82909047584C5843A825EC23B412BA085709838431C2
272293A84FB4257A12F9C478623AB1905846AC26EE211E219E255E270E135F93
48240EC992E44E0A21259032490B496B48DB482DA453A43ED210699C4C26EB90
6DC9DEE408B280AC209791B7900F904F92FBC9C3E4B7143AC588E24C09A22452
A494124A35653FE504A59F324299A0AA51CDA99ED408AA883A9F5A496DA07650
2F5387A91334759A25CD9B1643CBA42DA3D5D09A696769F7682FE974BA09DD83
1E4597D097D26BE807E9E7E983F4770C0D860D83C7486228196B197B19A718B7
192F994CA605D39799C85430D7321B9967980F986F55582AF62A7C1591CA1295
3A9556957E95E7AA545573553FD579AA0B54AB550FAB5E567DA64655B350E3A9
09D416ABD5A91D55BBA936AECE5277528F50CF515FA3BE5FFD82FA630DB28685
46A08648A35463B7C6198D2116C63265F15842D6725603EB2C6B984D625BB2F9
EC4C7605FB1B762F7B4C534373AA66AC6691669DE671CD010EC6B1E0F039D99C
4ACE21CE0DCE7B2D032D3F2DB1D66AAD66AD7EAD37DA7ADABEDA62ED72ED16ED
EBDAEF75709D409D2C9DF53A6D3AF77509BA36BA51BA85BADB75CFEA3ED363EB
79E909F5CAF50EE9DDD147F56DF4A3F517EAEFD6EFD11F373034083690196C31
3863F0CC9063E86B9869B8D1F084E1A811CB68BA91C468A3D149A327B826EE87
67E33578173E66AC6F1C62AC34DE65DC6B3C61626932DBA4C4A4C5E4BE29CD94
6B9A66BAD1B4D374CCCCC82CDCACD8ACC9EC8E39D59C6B9E61BED9BCDBFC8D85
A5459CC54A8B368BC796DA967CCB05964D96F7AC98563E567956F556D7AC49D6
5CEB2CEB6DD6576C501B579B0C9B3A9BCBB6A8AD9BADC4769B6DDF14E2148F29
D229F5536EDA31ECFCEC0AEC9AEC06ED39F661F625F66DF6CF1DCC1C121DD63B
743B7C727475CC766C70BCEBA4E134C3A9C4A9C3E957671B67A1739DF33517A6
4B90CB1297769717536DA78AA76E9F7ACB95E51AEEBAD2B5D3F5A39BBB9BDCAD
D96DD4DDCC3DC57DABFB4D2E9B1BC95DC33DEF41F4F0F758E271CCE39DA79BA7
C2F390E72F5E765E595EFBBD1E4FB39C269ED6306DC8DBC45BE0BDCB7B603A3E
3D65FACEE9033EC63E029F7A9F87BEA6BE22DF3DBE237ED67E997E07FC9EFB3B
FACBFD8FF8BFE179F216F14E056001C101E501BD811A81B3036B031F049904A5
0735058D05BB062F0C3E15420C090D591F72936FC017F21BF96333DC672C9AD1
15CA089D155A1BFA30CC264C1ED6118E86CF08DF107E6FA6F94CE9CCB60888E0
476C88B81F69199917F97D14292A32AA2EEA51B453747174F72CD6ACE459FB67
BD8EF18FA98CB93BDB6AB6727667AC6A6C526C63EC9BB880B8AAB8817887F845
F1971274132409ED89E4C4D8C43D89E37302E76C9A339CE49A54967463AEE5DC
A2B917E6E9CECB9E773C593559907C3885981297B23FE5832042502F184FE5A7
6E4D1D13F2849B854F45BEA28DA251B1B7B84A3C92E69D5695F638DD3B7D43FA
68864F4675C633094F522B79911992B923F34D5644D6DEACCFD971D92D39949C
949CA3520D6996B42BD730B728B74F662B2B930DE479E66DCA1B9387CAF7E423
F973F3DB156C854CD1A3B452AE500E164C2FA82B785B185B78B848BD485AD433
DF66FEEAF9230B82167CBD90B050B8B0B3D8B87859F1E022BF45BB16238B5317
772E315D52BA647869F0D27DCB68CBB296FD50E2585255F26A79DCF28E5283D2
A5A5432B82573495A994C9CB6EAEF45AB9631561956455EF6A97D55B567F2A17
955FAC70ACA8AEF8B046B8E6E2574E5FD57CF5796DDADADE4AB7CAEDEB48EBA4
EB6EACF759BFAF4ABD6A41D5D086F00DAD1BF18DE51B5F6D4ADE74A17A6AF58E
CDB4CDCACD03356135ED5BCCB6ACDBF2A136A3F67A9D7F5DCB56FDADABB7BED9
26DAD6BFDD777BF30E831D153BDEEF94ECBCB52B78576BBD457DF56ED2EE82DD
8F1A621BBABFE67EDDB847774FC59E8F7BA57B07F645EFEB6A746F6CDCAFBFBF
B2096D52368D1E483A70E59B806FDA9BED9A77B5705A2A0EC241E5C127DFA67C
7BE350E8A1CEC3DCC3CDDF997FB7F508EB48792BD23ABF75AC2DA36DA03DA1BD
EFE88CA39D1D5E1D47BEB7FF7EEF31E36375C7358F579EA09D283DF1F9E48293
E3A764A79E9D4E3F3DD499DC79F74CFC996B5D515DBD6743CF9E3F1774EE4CB7
5FF7C9F3DEE78F5DF0BC70F422F762DB25B74BAD3DAE3D477E70FDE148AF5B6F
EB65F7CBED573CAE74F44DEB3BD1EFD37FFA6AC0D573D7F8D72E5D9F79BDEFC6
EC1BB76E26DD1CB825BAF5F876F6ED17770AEE4CDC5D7A8F78AFFCBEDAFDEA07
FA0FEA7FB4FEB165C06DE0F860C060CFC3590FEF0E09879EFE94FFD387E1D247
CC47D52346238D8F9D1F1F1B0D1ABDF264CE93E1A7B2A713CFCA7E56FF79EB73
ABE7DFFDE2FB4BCF58FCD8F00BF98BCFBFAE79A9F372EFABA9AF3AC723C71FBC
CE793DF1A6FCADCEDB7DEFB8EFBADFC7BD1F9928FC40FE50F3D1FA63C7A7D04F
F73EE77CFEFC2FF784F3FB25D29F33000003994944415478DADD956B4C536718
C7FFA73D948A144924A5748245A41871C14B0C83CD006A362A23A27C5051BE28
5B30F116257ED02D210CA323982C3A4D0CC8166FA87138A651515462B0782B58
A1CC4B90724B0B4DB958E9E55C77CE99769A490AEABEEC4D4E9EF39C93F7FF7B
2EEF85E0791EFFE520FE1F0082203E58C8A801DF6607BE153445FF75E01F0520
8A276FDF0C59F54154B4FC0DF9688073A78FF05FA42F47A44183261B2066218E
6F789EF860C0AD4A2DAFFFBA1976BB1D56AB15EAC21CBC2ED35B191CDDBF79C2
9DD687D72075C50118CF6FC160C46109525A5A8AE26D392828FAF9DF80759BE6
8C4B98E758DC3FB5471247EF6E0CDB3AD0DEAB465EB10C0FEA57E2C73DB79198
94820D3B0E12130604126FB9DF87AB57AD78F4C48DFABBEDEF0664FE9A3926A0
844C1D539C6368985B060203DE2772515C7C5A5B87260E10C5C5C9A6B365485D
A8F28BAF2D2151535D00AB7D0A7CEC545014851783BDE8B298F0E8E133442CC8
275C2EDFF84AF4796711A6CB2C98153722F9EBCBC260D87E0486845024C445A3
C1D882D90933209791B03CB5E2FAA51A7883356AF728ED1833038EA1C0D2B464
CBCA4DF82ADE88DFEA38FC7E4F89FD3FEDC40CBD017A5D14144124B67C7700B9
D91998191B83510F85271D3DB872F34E55778F63E33B016F8AE7179A31DCDF89
B8995AECDBA54357BF0A4E7605D23E4B0429974146C8B0A3F810B23317214E37
0D1E2F030FC5A0F1AE197537EE190296C879281BB1FA4454EC8D927AD1D01A8F
E494358852878313E62A150A14951C468E210DBA182DDC5E1A3E8A469FDD8963
672EFDF216E0CDC8A59541BFB2CC3FB6CE92862F172F836A5230E4A41CCFBB6D
F87E6F059212E3B128651E5C6EAF50360554612A549DAA35F9017985FA80E2E2
FFBAF6742CC9C8C264651094CA60DC6834E1CC1F37E17A318A984F22E1F151D0
6AD458929E8AAA93B5CD7EC0AA0DB168BC680CB89BFF1C9A8F8CA5F9981A1E2A
F95E9FB084CD8F11A989408C5603AF501EF15B77DF002A8F9F3FE60758CC4DE3
3A8BD8C93A24676EC5C2B9B3C45D22F401082249A9EE6E8F0F0CCB8362183408
99D55EB896E53FAE2BCB37F1D567AF0704107212D33E5D8ADCD5F9D0456BA49B
8B6538709C28CC8211DEDB9F75A2E642FD89DEEEBE8209DFC91B7F388A910147
54982AB45C686C5EBC2E5AEA05CB71181A7909CBE30E3436351FB7F53B76122C
6B7F2FC0A87310AE971E05182E6B52A832372424640E4D33BC7370B8CD61739E
F3B0D4658582A458AF0F7F0103967A78C20D9F140000000049454E44AE426082}
Name = 'PngImage0'
Background = clWindow
end>
Left = 232
Top = 16
Bitmap = {}
end
object ModuleActionList: TActionList
Images = LargeImages
Left = 40
Top = 72
object actVentasArticulo: TAction
Category = 'Informes'
Caption = 'Ventas articulo'
ImageIndex = 0
OnExecute = actVentasArticuloExecute
end
end
object MainMenu: TMainMenu
Images = LargeImages
Left = 40
Top = 16
object HistoricoMovimientos1: TMenuItem
Caption = 'Log'#237'stica'
object N1: TMenuItem
Tag = 889
Caption = '-'
end
object HistoricoMovimiento1: TMenuItem
Tag = 103
Action = actVentasArticulo
end
end
end
object SmallImages: TPngImageList
PngImages = <
item
PngImage.Data = {
89504E470D0A1A0A0000000D49484452000000100000001008060000001FF3FF
610000000970485973000017120000171201679FD2520000016C4944415478DA
63FCFFFF3F0325809114C53F0C18C0B6715C40E823DA009066D6A85C86DFCB26
332CBAC0C09006D54B9401276630FC7FA27489E1CDA5A50C4C259D6031B80173
7A72F006820ECF14063D9F290C2F6F6D635878C88C41AAA18181A927072C9752
3285116C404C8E0E56CD171664C0358370488B0CC3C563090C7F7FFD60686FDC
CFA0AD6FC90037C06381038AE60E060D0CCD2A357B1856B9CC61387BFC3EC3AE
5D0F182EDDFCC680D505F86C06E10B679F631A00734104EB690683DFB10CE26A
5E2836C3C062B34E862B573FE176C182A5DC0C09B1910C17E6B180359F3F1C03
B7F9DFEF9F60FAFAED5FB85D70A7C5056E18B2E64B175EA37813AB0BC08A7F42
34FC816A84D90C72B663A82BC3CB4B4718264CBECE5090ABC99094731661003E
CD30676BA973C2357389483344446C82181099A6C27068E361822912E46C9866
566E3E8660DF251003AE5E3C4E547E40D6CCC12FCCE06D3711929E41862C5FB5
972843D0010013390BFAA171B8130000000049454E44AE426082}
Name = 'PngImage0'
Background = clWindow
end>
PngOptions = [pngBlendOnDisabled, pngGrayscaleOnDisabled]
Left = 308
Top = 16
Bitmap = {}
end
object ExtraImages: TPngImageList
Height = 28
Width = 28
PngImages = <
item
PngImage.Data = {
89504E470D0A1A0A0000000D494844520000001C0000001C0806000000720DDF
940000000970485973000017120000171201679FD25200000A4D694343505068
6F746F73686F70204943432070726F66696C65000078DA9D53775893F7163EDF
F7650F5642D8F0B1976C81002223AC08C81059A21092006184101240C585880A
561415119C4855C482D50A489D88E2A028B867418A885A8B555C38EE1FDCA7B5
7D7AEFEDEDFBD7FBBCE79CE7FCCE79CF0F8011122691E6A26A003952853C3AD8
1F8F4F48C4C9BD80021548E0042010E6CBC26705C50000F00379787E74B03FFC
01AF6F00020070D52E2412C7E1FF83BA50265700209100E02212E70B01905200
C82E54C81400C81800B053B3640A009400006C797C422200AA0D00ECF4493E05
00D8A993DC1700D8A21CA908008D0100992847240240BB00605581522C02C0C2
00A0AC40222E04C0AE018059B632470280BD0500768E58900F4060008099422C
CC0020380200431E13CD03204C03A030D2BFE0A95F7085B8480100C0CB95CD97
4BD23314B895D01A77F2F0E0E221E2C26CB142611729106609E4229C979B2313
48E7034CCE0C00001AF9D1C1FE383F90E7E6E4E1E666E76CEFF4C5A2FE6BF06F
223E21F1DFFEBC8C020400104ECFEFDA5FE5E5D60370C701B075BF6BA95B00DA
560068DFF95D33DB09A05A0AD07AF98B7938FC401E9EA150C83C1D1C0A0B0BED
2562A1BD30E38B3EFF33E16FE08B7EF6FC401EFEDB7AF000719A4099ADC0A383
FD71616E76AE528EE7CB0442316EF7E723FEC7857FFD8E29D1E234B15C2C158A
F15889B850224DC779B952914421C995E212E97F32F11F96FD0993770D00AC86
4FC04EB607B5CB6CC07EEE01028B0E58D27600407EF32D8C1A0B910010673432
79F7000093BFF98F402B0100CD97A4E30000BCE8185CA894174CC608000044A0
812AB041070CC114ACC00E9CC11DBCC01702610644400C24C03C104206E4801C
0AA11896411954C03AD804B5B0031AA0119AE110B4C131380DE7E0125C81EB70
170660189EC218BC86090441C8081361213A8811628ED822CE0817998E042261
48349280A420E988145122C5C872A402A9426A915D4823F22D7214398D5C40FA
90DBC820328AFC8ABC47319481B25103D4027540B9A81F1A8AC6A073D174340F
5D8096A26BD11AB41E3D80B6A2A7D14BE87574007D8A8E6380D1310E668CD961
5C8C87456089581A26C71663E55835568F35631D583776151BC09E61EF082402
8B8013EC085E8410C26C82909047584C5843A825EC23B412BA085709838431C2
272293A84FB4257A12F9C478623AB1905846AC26EE211E219E255E270E135F93
48240EC992E44E0A21259032490B496B48DB482DA453A43ED210699C4C26EB90
6DC9DEE408B280AC209791B7900F904F92FBC9C3E4B7143AC588E24C09A22452
A494124A35653FE504A59F324299A0AA51CDA99ED408AA883A9F5A496DA07650
2F5387A91334759A25CD9B1643CBA42DA3D5D09A696769F7682FE974BA09DD83
1E4597D097D26BE807E9E7E983F4770C0D860D83C7486228196B197B19A718B7
192F994CA605D39799C85430D7321B9967980F986F55582AF62A7C1591CA1295
3A9556957E95E7AA545573553FD579AA0B54AB550FAB5E567DA64655B350E3A9
09D416ABD5A91D55BBA936AECE5277528F50CF515FA3BE5FFD82FA630DB28685
46A08648A35463B7C6198D2116C63265F15842D6725603EB2C6B984D625BB2F9
EC4C7605FB1B762F7B4C534373AA66AC6691669DE671CD010EC6B1E0F039D99C
4ACE21CE0DCE7B2D032D3F2DB1D66AAD66AD7EAD37DA7ADABEDA62ED72ED16ED
EBDAEF75709D409D2C9DF53A6D3AF77509BA36BA51BA85BADB75CFEA3ED363EB
79E909F5CAF50EE9DDD147F56DF4A3F517EAEFD6EFD11F373034083690196C31
3863F0CC9063E86B9869B8D1F084E1A811CB68BA91C468A3D149A327B826EE87
67E33578173E66AC6F1C62AC34DE65DC6B3C61626932DBA4C4A4C5E4BE29CD94
6B9A66BAD1B4D374CCCCC82CDCACD8ACC9EC8E39D59C6B9E61BED9BCDBFC8D85
A5459CC54A8B368BC796DA967CCB05964D96F7AC98563E567956F556D7AC49D6
5CEB2CEB6DD6576C501B579B0C9B3A9BCBB6A8AD9BADC4769B6DDF14E2148F29
D229F5536EDA31ECFCEC0AEC9AEC06ED39F661F625F66DF6CF1DCC1C121DD63B
743B7C727475CC766C70BCEBA4E134C3A9C4A9C3E957671B67A1739DF33517A6
4B90CB1297769717536DA78AA76E9F7ACB95E51AEEBAD2B5D3F5A39BBB9BDCAD
D96DD4DDCC3DC57DABFB4D2E9B1BC95DC33DEF41F4F0F758E271CCE39DA79BA7
C2F390E72F5E765E595EFBBD1E4FB39C269ED6306DC8DBC45BE0BDCB7B603A3E
3D65FACEE9033EC63E029F7A9F87BEA6BE22DF3DBE237ED67E997E07FC9EFB3B
FACBFD8FF8BFE179F216F14E056001C101E501BD811A81B3036B031F049904A5
0735058D05BB062F0C3E15420C090D591F72936FC017F21BF96333DC672C9AD1
15CA089D155A1BFA30CC264C1ED6118E86CF08DF107E6FA6F94CE9CCB60888E0
476C88B81F69199917F97D14292A32AA2EEA51B453747174F72CD6ACE459FB67
BD8EF18FA98CB93BDB6AB6727667AC6A6C526C63EC9BB880B8AAB8817887F845
F1971274132409ED89E4C4D8C43D89E37302E76C9A339CE49A54967463AEE5DC
A2B917E6E9CECB9E773C593559907C3885981297B23FE5832042502F184FE5A7
6E4D1D13F2849B854F45BEA28DA251B1B7B84A3C92E69D5695F638DD3B7D43FA
68864F4675C633094F522B79911992B923F34D5644D6DEACCFD971D92D39949C
949CA3520D6996B42BD730B728B74F662B2B930DE479E66DCA1B9387CAF7E423
F973F3DB156C854CD1A3B452AE500E164C2FA82B785B185B78B848BD485AD433
DF66FEEAF9230B82167CBD90B050B8B0B3D8B87859F1E022BF45BB16238B5317
772E315D52BA647869F0D27DCB68CBB296FD50E2585255F26A79DCF28E5283D2
A5A5432B82573495A994C9CB6EAEF45AB9631561956455EF6A97D55B567F2A17
955FAC70ACA8AEF8B046B8E6E2574E5FD57CF5796DDADADE4AB7CAEDEB48EBA4
EB6EACF759BFAF4ABD6A41D5D086F00DAD1BF18DE51B5F6D4ADE74A17A6AF58E
CDB4CDCACD03356135ED5BCCB6ACDBF2A136A3F67A9D7F5DCB56FDADABB7BED9
26DAD6BFDD777BF30E831D153BDEEF94ECBCB52B78576BBD457DF56ED2EE82DD
8F1A621BBABFE67EDDB847774FC59E8F7BA57B07F645EFEB6A746F6CDCAFBFBF
B2096D52368D1E483A70E59B806FDA9BED9A77B5705A2A0EC241E5C127DFA67C
7BE350E8A1CEC3DCC3CDDF997FB7F508EB48792BD23ABF75AC2DA36DA03DA1BD
EFE88CA39D1D5E1D47BEB7FF7EEF31E36375C7358F579EA09D283DF1F9E48293
E3A764A79E9D4E3F3DD499DC79F74CFC996B5D515DBD6743CF9E3F1774EE4CB7
5FF7C9F3DEE78F5DF0BC70F422F762DB25B74BAD3DAE3D477E70FDE148AF5B6F
EB65F7CBED573CAE74F44DEB3BD1EFD37FFA6AC0D573D7F8D72E5D9F79BDEFC6
EC1BB76E26DD1CB825BAF5F876F6ED17770AEE4CDC5D7A8F78AFFCBEDAFDEA07
FA0FEA7FB4FEB165C06DE0F860C060CFC3590FEF0E09879EFE94FFD387E1D247
CC47D52346238D8F9D1F1F1B0D1ABDF264CE93E1A7B2A713CFCA7E56FF79EB73
ABE7DFFDE2FB4BCF58FCD8F00BF98BCFBFAE79A9F372EFABA9AF3AC723C71FBC
CE793DF1A6FCADCEDB7DEFB8EFBADFC7BD1F9928FC40FE50F3D1FA63C7A7D04F
F73EE77CFEFC2FF784F3FB25D29F33000004D04944415478DAB5D67B4C53571C
07F0EFAD158421EF47784C1E6188802E76EAC6985308CCB82D03C6080B6AE644
890B2EC384FDB1C581D9D823664BF6874B868A5930640C2C3E46DC446860C196
0DCA73C884858A3C4691475B2B8F7B7BEFDD39B7D06120F2189CA43DBDCDE9F9
DCDFEF9CDFB965445104C330588B56EC2C13697FC024D80066AD408ABD7D2A0B
B2DE4BD0280D787108CC9A81140B7614109DE20AA80DE89C7245F380498A74D5
C1CB2505E24B7B13D176200009631609A3EDCEE843340EF3AB1BE1ADA21C91F3
8C839F9F1FC60D0F60CA7E055E43D232E2FA10F015C9E8AA81353F1C1777C547
41D6DF889FEEEEC5A6407F180D8FC09C4E86A64594303A6E55C0B9D830678660
99864A970C9665919F9F8FFEFEFED5DBA50B61067D1FA60C2D782B3FE031CC06
167EF3BEB8122CD4D3822761A7B393A4714773CE32F3C08327A29685D597B4D8
30FDB411023F0DE3F0A00DD3AA52C90D7038F3A50691CF46DBD015814BC55AB4
FFA0B2F21EDAEE4EA0FA8FCE95814BC5040B8BB6D6D1A581DFDE787D41EC0553
FE3C6C543F8E9E1139CA1A15D8B23301DEF63AC819139E761B85601E80AAEAEF
9547F8595E1538311159AF954B589BCE057DE23E04856C85AFB707C60C26B838
3B616A9A436FBF1E5DDD7F62ACAB0A7FB5752E1FBC7AA11EED7D6628C85D37B9
9E44F8A63AD807A4226A73081C37D8C16EBD1CEF7EF0053E3E79183E5E1E304F
4CC1649E44736B276A6F2A71BDBC7879297DF87B36725EB6834ED58946B902EE
7B32B03D2A145EEE1B41E7B0F002D28EE522EFC30CF8FB7A83E5784C9248C78D
66D437B6A3A9BDEB9DCB05A78A168D5014785CBBD88006752DB214C1D0DE17A0
0BCBC01BAFC6C3DFDB558A8CE3797004483DFA8915F4F321D716820A0465313C
62C4D55F6A06FA07C6229E08528CEEB8F4C36AF4747722D04B847F642C12538E
4011190CD78D8ED20969B108E02C0B83F47B0389B2B5A35BFC55557F6449292D
CEDB8FE0B048A4C76E80D95981E7762622D0D703EBE57209140481A03CD232F3
909B9381003F6B4A598B35F2C9291683FA319C2B52962C08CE46C673ACB56727
2170D6DA2AAD8BC0EEE87DF0F771C53A994C1A2F90392A6EA971B65009C5B670
A425C54B91D1751578111E9EEE181A1E4361F115CD3C904ECACF4C3E5BC0C29C
EBB2DB518889DE4FCAC0053219233D7328987BA6104E4F39E23775339C49AAC9
57A00734CD42F67B873041A22CBC545EFF18B818467BA53A183B76A5C2974428
9F89904E7EA7FB1E4AAF5563FBD6CD88DBBDC3B6AE1CE9695D0E0C8DE0BBF325
A53630FD78D8A218ED1BBADDC03AA690FA0B92EA4F5A431A0D79E3C95AF2022D
115E02694A67374D737B97F8F30DD5311B9896118CBA0AF5A2A70D2BD8413B1C
8784D83D707371827C9D8CA44E241B876E9E1994B7BE389E46C7423F328E52E5
4DBDAE47176E033B5A354B3ABC699B727806913187B02D22545A2F869149C54F
414102AD07C134CB6164DC004D431B6AEB1A339B2A0BCEDB9EF817BE3E21FE58
5ABD64D439E879C42424212A3C144E8EF6D612218DA69496C4A3894972B44D40
DBDC014DF515DCAEA9F8EF685B4E9BFB77E4CDCC4F337D3CDD3FDF1216E211E0
EB4D02652490632DE8E91D10B52D1D0F74F7073F6AAEFCFEA2EDF7FF07A42DF9
609EF784C0A6928FB10E0EF6811C278806A3B1979DE654C2A4A54C5B7B6E64EE
F87F01D93AAAB3863CD3F20000000049454E44AE426082}
Name = 'PngImage0'
Background = clWindow
end>
Left = 232
Top = 80
Bitmap = {}
end
end

View File

@ -1,77 +0,0 @@
unit uPluginInfVentasArticulo;
interface
uses
uModuleController, uInterfaces, uHostManager, Menus, Classes, ActnList,
ImgList, Controls, PngImageList;
type
IMCInfVentasArticulo = interface(IInterface)
['{6AB7F54B-AEAD-4317-907C-B54758666AB8}']
end;
TPluginInfVentasArticulo = class(TModuleController, IMCInfVentasArticulo)
actVentasArticulo: TAction;
ExtraImages: TPngImageList;
LargeImages: TPngImageList;
MainMenu: TMainMenu;
ModuleActionList: TActionList;
SmallImages: TPngImageList;
HistoricoMovimientos1: TMenuItem;
HistoricoMovimiento1: TMenuItem;
N1: TMenuItem;
procedure actVentasArticuloExecute(Sender: TObject);
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end;
implementation
{$R *.dfm}
uses
Forms, Dialogs, SysUtils;
// uHistoricoMovimientosController, uBizHistoricoMovimientos, uHistoricoMovimientosViewRegister;
function GetModule : TModuleController;
begin
Result := TPluginInfVentasArticulo.Create(NIL);
end;
exports
GetModule name GET_MODULE_FUNC;
procedure TPluginInfVentasArticulo.actVentasArticuloExecute(Sender: TObject);
{var
AHistoricoMovimientosController : IHistoricoMovimientosController;
AHistoricoMovimientos : IBizHistoricoMovimientos;
}
begin
showmessage('Hola');
{ AHistoricoMovimientosController := THistoricoMovimientosController.Create;
AHistoricoMovimientos := (AHistoricoMovimientosController.BuscarTodos as IBizHistoricoMovimientos);
AHistoricoMovimientosController.VerTodos(AHistoricoMovimientos);
}
end;
constructor TPluginVentasArticulo.Create(AOwner: TComponent);
begin
inherited;
// uInfVentasArticuloViewRegister.RegisterViews;
end;
destructor TPluginVentasArticulo.Destroy;
begin
// uInfVentasArticuloViewRegister.UnregisterViews;
inherited;
end;
initialization
RegisterModuleClass(TPluginInfVentasArticulo);
finalization
UnRegisterModuleClass(TPluginInfVentasArticulo);
end.

View File

@ -1,23 +0,0 @@
unit uInformesBaseViewRegister;
interface
procedure RegisterViews;
procedure UnregisterViews;
implementation
uses
uEditorRegistryUtils, uEditorInformesBase;
procedure RegisterViews;
begin
EditorRegistry.RegisterClass(TfEditorInformesBase, 'EditorInformesBase');
end;
procedure UnregisterViews;
begin
EditorRegistry.UnRegisterClass(TfEditorInformesBase);
end;
end.

View File

@ -1,179 +0,0 @@
unit uViewInforme;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Forms,
Dialogs, uViewBase, TBXDkPanels, StdCtrls, ComCtrls, TB2Dock,
uViewAgrupaciones, uCustomView, uViewColumnas, ImgList, PngImageList,
ActnList, uViewInformeGrid, uBizInformesBase, uViewSumarios,
uViewInformeParametros, uViewFiltros, cxStyles, Controls;
type
IViewInforme = interface(IViewBase)
['{D716BE6B-1F41-4825-9385-0231D2AEF819}']
function GetModificable: Boolean;
procedure SetModificable(const Value: Boolean);
property Modificable : Boolean read GetModificable write SetModificable;
function GetInforme: IBizInforme;
procedure SetInforme(const Value: IBizInforme);
property Informe: IBizInforme read GetInforme write SetInforme;
function GetOnViewChanged : TNotifyEvent;
procedure SetOnViewChanged(const Value : TNotifyEvent);
property OnViewChanged: TNotifyEvent read GetOnViewChanged write SetOnViewChanged;
end;
TfrViewInforme = class(TfrViewBase, IViewInforme)
TBXMultiDock1: TTBXMultiDock;
pnlParametros: TTBXDockablePanel;
TBXAlignmentPanel2: TTBXAlignmentPanel;
TBXLink1: TTBXLink;
TBXLink5: TTBXLink;
TBXLink2: TTBXLink;
pcParametros: TPageControl;
TabSheet5: TTabSheet;
tsColumnas: TTabSheet;
tsAgrupacion: TTabSheet;
TBXAlignmentPanel3: TTBXAlignmentPanel;
bRefrescar: TButton;
pnlTareas: TTBXDockablePanel;
TBXPageScroller1: TTBXPageScroller;
TBXAlignmentPanel1: TTBXAlignmentPanel;
bFiltros: TTBXLink;
bSumarios: TTBXLink;
pcTareas: TPageControl;
tsSumarios: TTabSheet;
tsFiltros: TTabSheet;
frViewColumnas1: TfrViewColumnas;
frViewAgrupaciones1: TfrViewAgrupaciones;
SmallImages: TPngImageList;
LargeImages: TPngImageList;
EditorActionList: TActionList;
actAgrupaciones: TAction;
actColumnas: TAction;
actSumarios: TAction;
actFiltros: TAction;
frViewSumarios1: TfrViewSumarios;
actRefrescar: TAction;
frViewFiltros1: TfrViewFiltros;
procedure actColumnasExecute(Sender: TObject);
procedure actSumariosExecute(Sender: TObject);
procedure actFiltrosExecute(Sender: TObject);
procedure actAgrupacionesExecute(Sender: TObject);
protected
FInforme : IBizInforme;
FOnViewChanged : TNotifyEvent;
FModificable : Boolean;
procedure ActivarTarea (const ATarea : Integer); virtual;
function GetInforme: IBizInforme; virtual;
procedure SetInforme(const Value: IBizInforme); virtual;
function GetOnViewChanged : TNotifyEvent; virtual;
procedure SetOnViewChanged(const Value : TNotifyEvent); virtual;
function GetModificable: Boolean; virtual;
procedure SetModificable(const Value: Boolean); virtual;
public
property Modificable : Boolean read GetModificable write SetModificable;
property OnViewChanged: TNotifyEvent read GetOnViewChanged write SetOnViewChanged;
property Informe: IBizInforme read GetInforme write SetInforme;
constructor Create(AOwner: TComponent); override;
end;
implementation
{$R *.dfm}
const
COLUMNAS = 1;
AGRUPACIONES = 2;
SUMARIOS = 3;
FILTROS = 4;
procedure TfrViewInforme.actColumnasExecute(Sender: TObject);
begin
inherited;
ActivarTarea(COLUMNAS);
frViewColumnas1.Refresh;
end;
procedure TfrViewInforme.ActivarTarea(const ATarea: Integer);
begin
case ATarea of
COLUMNAS : pcParametros.ActivePage := tsColumnas;
AGRUPACIONES : pcParametros.ActivePage := tsAgrupacion;
SUMARIOS : pcTareas.ActivePage := tsSumarios;
FILTROS : pcTareas.ActivePage := tsFiltros;
end;
end;
function TfrViewInforme.GetInforme: IBizInforme;
begin
Result := FInforme;
end;
procedure TfrViewInforme.SetInforme(const Value: IBizInforme);
begin
FInforme := Value;
frViewColumnas1.Refresh;
frViewAgrupaciones1.Refresh;
// ¿Es modificable el Informe?
// Self.Modificable := FInforme.EsModificable;
end;
procedure TfrViewInforme.actSumariosExecute(Sender: TObject);
begin
inherited;
ActivarTarea(SUMARIOS);
frViewSumarios1.Refresh;
end;
procedure TfrViewInforme.actFiltrosExecute(Sender: TObject);
begin
inherited;
ActivarTarea(FILTROS);
frViewFiltros1.Refresh;
end;
procedure TfrViewInforme.actAgrupacionesExecute(Sender: TObject);
begin
inherited;
ActivarTarea(AGRUPACIONES);
frViewAgrupaciones1.Refresh;
end;
function TfrViewInforme.GetOnViewChanged: TNotifyEvent;
begin
Result := FOnViewChanged;
end;
procedure TfrViewInforme.SetOnViewChanged(const Value: TNotifyEvent);
begin
FOnViewChanged := Value;
end;
constructor TfrViewInforme.Create(AOwner: TComponent);
begin
inherited;
FModificable := False;
pcParametros.ActivePage := tsColumnas;
pcTareas.ActivePage := tsSumarios;
FOnViewChanged := nil;
end;
function TfrViewInforme.GetModificable: Boolean;
begin
Result := FModificable;
end;
procedure TfrViewInforme.SetModificable(const Value: Boolean);
begin
FModificable := Value;
frViewColumnas1.Modificable := FModificable;
frViewAgrupaciones1.Modificable := FModificable;
end;
end.

View File

@ -1,325 +0,0 @@
unit uViewSumarios;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, uViewBase, dxLayoutControl, cxControls, cxContainer, cxListBox,
TBXDkPanels, ActnList, cxCustomData, cxGridDBTableView, cxGridTableView,
cxGraphics, cxStyles, cxTL, cxTextEdit, cxDropDownEdit, ImgList,
PngImageList, ComCtrls, JvExComCtrls, JvComCtrls, cxInplaceContainer,
ExtCtrls, cxEdit, cxVGrid, TBXToolPals, uViewControlGrid,
uViewParametrosControlGrid;
type
IViewSumarios = interface(IViewParametrosControlGrid)
['{4AEE3447-C6A4-491F-87E7-02CD255A7695}']
end;
TfrViewSumarios = class(TfrViewParametrosControlGrid, IViewSumarios)
PngImageList1: TPngImageList;
vgSumarios: TcxVerticalGrid;
TBXLabel1: TTBXLabel;
cxStyleRepository1: TcxStyleRepository;
cxStyleNombreColumna: TcxStyle;
cxStyleCategoria: TcxStyle;
cxStyleNombreColumnaInactivo: TcxStyle;
cxStyleCategoriaInactivo: TcxStyle;
cxStyleContentInactivo: TcxStyle;
procedure vgSumariosEditorRowInitPopup(Sender: TObject);
procedure vgSumariosEditorRowEditValueChanged(
Sender: TObject);
protected
procedure RellenarArbolTotales;
function AnadirSumario(const ACaption : String;
const AKind : TcxSummaryKind) : TcxEditorRow;
procedure RellenarTotalesPie;
procedure RellenarTotalesGrupo(const AGroupName : String);
procedure RellenarCategorias;
procedure RellenarCategoria(const APosition : TcxSummaryPosition;
const AGroupName : String = '');
procedure AplicarSumarioVista(const APosition : TcxSummaryPosition;
const AColumnCaption : String; const AKind : TcxSummaryKind);
procedure SetModificable(const Value: Boolean); override;
public
procedure Execute; override;
procedure Refresh; override;
end;
implementation
{$R *.dfm}
uses
DB, cxGridPopupMenuConsts;
var
SumaryKindStrArray : array[skNone..skAverage] of String
= ('', 'Sumar', 'Mínimo', 'Máximo', 'Contar', 'Promedio');
procedure TfrViewSumarios.Refresh;
begin
RellenarCategorias;
end;
procedure TfrViewSumarios.RellenarArbolTotales;
var
i : Integer;
begin
// Recuperar las agrupaciones del grid
for i := 0 to ViewControlGrid.GroupedColumnCount - 1 do
begin
if i = 3 then
Break; // Sólo meter las 3 primera agrupaciones
RellenarCategoria(spGroup, ViewControlGrid.GroupedColumns[i].Caption);
end;
end;
function TfrViewSumarios.AnadirSumario(const ACaption : String;
const AKind : TcxSummaryKind) : TcxEditorRow;
begin
Result := vgSumarios.Add(TcxEditorRow) as TcxEditorRow;
with Result do
begin
Properties.Caption := ACaption;
Properties.Value := SumaryKindStrArray[AKind];
Properties.ImageIndex := 2;
Properties.EditPropertiesClass := TcxComboBoxProperties;
with TcxComboBoxProperties(Properties.EditProperties) do
begin
ImmediateDropDown := True;
DropDownListStyle := lsFixedList;
ImmediatePost := True;
ImmediateUpdateText := True;
PostPopupValueOnTab := True;
OnInitPopup := vgSumariosEditorRowInitPopup;
OnEditValueChanged := vgSumariosEditorRowEditValueChanged;
end;
end;
end;
procedure TfrViewSumarios.AplicarSumarioVista (
const APosition: TcxSummaryPosition; const AColumnCaption: String;
const AKind: TcxSummaryKind);
const
MASK_MONEDA = ',0.## €;-,0.## €';
MASK_NUMERO = '#,##0';
var
AColumn : TcxGridDBColumn;
begin
AColumn := ViewControlGrid.GetColumnByCaption(AColumnCaption);
if APosition = spFooter then
begin
AColumn.Summary.FooterKind := AKind;
if (AKind in [skSum, skAverage]) and (AColumn.PropertiesClassName = 'TcxCurrencyEditProperties') then
AColumn.Summary.FooterFormat := MASK_MONEDA
else
AColumn.Summary.FooterFormat := MASK_NUMERO;
end
else begin
AColumn.Summary.GroupFooterKind := AKind;
if (AKind in [skSum, skAverage]) and (AColumn.PropertiesClassName = 'TcxCurrencyEditProperties') then
AColumn.Summary.GroupFooterFormat := MASK_MONEDA
else
AColumn.Summary.GroupFooterFormat := MASK_NUMERO;
end;
end;
procedure TfrViewSumarios.RellenarTotalesPie;
var
i, j: Integer;
ASummary: TcxDataFooterSummaryItems;
AClase : TcxSummaryKind;
ACaption : String;
ACategory : TcxCategoryRow;
ARow : TcxEditorRow;
begin
vgSumarios.BeginUpdate;
try
ACategory := (vgSumarios.AddChild(nil, TcxCategoryRow) as TcxCategoryRow);
with ACategory.Properties do
begin
ASummary := ViewControlGrid.FocusedView.DataController.Summary.FooterSummaryItems;
ImageIndex := 0;
Caption := 'Resúmenes totales'
end;
for i := 0 to ViewControlGrid.FocusedView.VisibleColumnCount - 1 do
begin
ACaption := ViewControlGrid.FocusedView.VisibleColumns[i].Caption;
AClase := ViewControlGrid.FocusedView.VisibleColumns[i].Summary.FooterKind;
ARow := AnadirSumario(ACaption, AClase);
ARow.Parent := ACategory;
end;
finally
vgSumarios.EndUpdate;
end;
end;
procedure TfrViewSumarios.RellenarCategoria(
const APosition: TcxSummaryPosition; const AGroupName: String);
begin
if APosition = spFooter then
RellenarTotalesPie
else
RellenarTotalesGrupo(AGroupName);
end;
procedure TfrViewSumarios.RellenarCategorias;
var
i : Integer;
begin
vgSumarios.ClearRows;
RellenarCategoria(spFooter);
// Recuperar las agrupaciones del grid
for i := 0 to ViewControlGrid.GroupedColumnCount - 1 do
begin
if i = 3 then
Break; // Sólo meter las 3 primera agrupaciones
RellenarCategoria(spGroup, ViewControlGrid.GroupedColumns[i].Caption);
end;
end;
procedure TfrViewSumarios.vgSumariosEditorRowInitPopup(Sender: TObject);
var
AColumn: TcxGridDBColumn;
ARow : TcxEditorRow;
const
NumberFieldTypes =
[ftSmallint, ftInteger, ftWord, ftFloat, ftCurrency, ftBCD, ftDate, ftTime,
ftDateTime, ftAutoInc];
TimeFieldTypes = [ftDate, ftTime, ftDateTime];
begin
inherited;
ARow := TcxEditorRow(vgSumarios.FocusedRow);
AColumn := TcxGridDBColumn(ViewControlGrid.FocusedView.VisibleColumns[ARow.Index]);
if Assigned(AColumn.DataBinding.Field) then
with TcxComboBoxProperties(TcxPopupEdit(Sender).Properties) do
begin
Items.Clear;
BeginUpdate;
try
Items.Add(SumaryKindStrArray[skNone]);
Items.Add(SumaryKindStrArray[skCount]);
if AColumn.DataBinding.Field.DataType in NumberFieldTypes then
begin
Items.Add(SumaryKindStrArray[skMax]);
Items.Add(SumaryKindStrArray[skMin]);
if not (AColumn.DataBinding.Field.DataType in TimeFieldTypes) then
begin
Items.Add(SumaryKindStrArray[skSum]);
Items.Add(SumaryKindStrArray[skAverage]);
end;
end;
finally
EndUpdate;
end;
end;
end;
procedure TfrViewSumarios.vgSumariosEditorRowEditValueChanged(
Sender: TObject);
var
AColumn : String;
ARow : TcxEditorRow;
AKind : TcxSummaryKind;
function DarSummaryKind(AKind : String) : TcxSummaryKind;
var
i : TcxSummaryKind;
begin
if Length(AKind) = 0 then
Result := skNone
else
for i := skSum to skAverage do
if SumaryKindStrArray[i] = AKind then
begin
Result := i;
Break;
end;
end;
begin
inherited;
ARow := TcxEditorRow(vgSumarios.FocusedRow);
AColumn := ARow.Properties.Caption;
AKind := DarSummaryKind(VarToStr(ARow.Properties.Value));
if Assigned(ARow.Parent) then
begin
if(ARow.Parent.Index = 0) then
AplicarSumarioVista(spFooter, AColumn, AKind)
else
AplicarSumarioVista(spGroup, AColumn, AKind)
end;
end;
procedure TfrViewSumarios.RellenarTotalesGrupo(const AGroupName: String);
var
i, j: Integer;
ASummary: TcxDataSummaryGroup;
AClase : TcxSummaryKind;
ACaption : String;
ACategory : TcxCategoryRow;
ARow : TcxEditorRow;
begin
ASummary := ViewControlGrid.FocusedView.DataController.Summary.SummaryGroups.FindByItemLink(ViewControlGrid.GetColumnByCaption(AGroupName));
vgSumarios.BeginUpdate;
try
ACategory := (vgSumarios.AddChild(nil, TcxCategoryRow) as TcxCategoryRow);
with ACategory.Properties do
begin
ImageIndex := 1;
Caption := 'Totales de ' + AGroupName;
end;
for i := 0 to ViewControlGrid.FocusedView.VisibleColumnCount - 1 do
begin
ACaption := ViewControlGrid.FocusedView.VisibleColumns[i].Caption;
AClase := ViewControlGrid.FocusedView.VisibleColumns[i].Summary.GroupFooterKind;
ARow := AnadirSumario(ACaption, AClase);
ARow.Parent := ACategory;
end;
finally
vgSumarios.EndUpdate;
end;
end;
procedure TfrViewSumarios.Execute;
begin
inherited;
//
end;
procedure TfrViewSumarios.SetModificable(const Value: Boolean);
begin
inherited;
vgSumarios.Enabled := Value;
if Value then
begin
vgSumarios.Styles.Category := cxStyleCategoria;
vgSumarios.Styles.Header := cxStyleNombreColumna;
vgSumarios.Styles.Content := nil;
end
else begin
vgSumarios.Styles.Category := cxStyleCategoriaInactivo;
vgSumarios.Styles.Header := cxStyleNombreColumnaInactivo;
vgSumarios.Styles.Content := cxStyleContentInactivo;
end;
end;
end.

View File

@ -1,613 +0,0 @@
unit uRemesasProveedorController;
interface
uses
Classes, SysUtils, uDADataTable, uControllerBase, uEditorDBItem,
uIDataModuleRemesasProveedor, uBizRemesasProveedor, uProveedoresController,
uBizContactos, uRecibosProveedorController;
type
IRemesasProveedorController = interface(IObservador)
['{C14143FE-0806-4E64-93E2-A2C0170BBD41}']
function Buscar(const ID: Integer): IBizRemesaProveedor;
function BuscarTodos: IBizRemesaProveedor; overload;
procedure Ver(ARemesaProveedor : IBizRemesaProveedor);
procedure VerTodos(ARemesasProveedor: IBizRemesaProveedor);
function Nuevo : IBizRemesaProveedor;
procedure Anadir(ARemesaProveedor : IBizRemesaProveedor);
function Eliminar(const ID : Integer): Boolean; overload;
function Eliminar(ARemesaProveedor : IBizRemesaProveedor; AllItems: Boolean = false): Boolean; overload;
function Guardar(ARemesaProveedor : IBizRemesaProveedor): Boolean;
procedure DescartarCambios(ARemesaProveedor : IBizRemesaProveedor);
function Existe(const ID: Integer) : Boolean;
procedure Preview(ARemesaProveedor : IBizRemesaProveedor; AllItems: Boolean = false);
procedure Print(ARemesaProveedor : IBizRemesaProveedor; AllItems: Boolean = false);
function EsModificable(ARemesaProveedor : IBizRemesaProveedor): Boolean;
function EsEliminable(ARemesaProveedor : IBizRemesaProveedor): Boolean;
function ElegirRecibosProveedor(ARemesaProveedor : IBizRemesaProveedor): Boolean;
procedure EliminarReciboProveedor(ARemesaProveedor : IBizRemesaProveedor);
function GetRecibosProveedorController: IRecibosProveedorController;
property RecibosProveedorController: IRecibosProveedorController read GetRecibosProveedorController;
procedure RecuperarRecibos(ARemesaProveedor: IBizRemesaProveedor);
function ExtraerSeleccionados(ARemesasProveedor: IBizRemesaProveedor; Const ViewGrid: IViewGridBase = Nil) : IBizRemesaProveedor;
end;
TRemesasProveedorController = class(TObservador, IRemesasProveedorController)
protected
FDataModule : IDataModuleRemesasProveedor;
FRecibosProveedorController: IRecibosProveedorController;
function GetRecibosProveedorController: IRecibosProveedorController;
procedure RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable); override;
procedure AsignarID(ARemesaProveedor: IBizRemesaProveedor; const IDNuevo: Integer); virtual;
function CreateEditor(const AName : String; const IID: TGUID; out Intf): Boolean;
function _Vacio : IBizRemesaProveedor;
procedure FiltrarEmpresa(ARemesaProveedor: IBizRemesaProveedor);
function ValidarRemesaProveedor(ARemesaProveedor: IBizRemesaProveedor): Boolean; virtual;
procedure RecuperarRecibos(ARemesaProveedor: IBizRemesaProveedor);
procedure RecuperarObjetos(ARemesaProveedor: IBizRemesaProveedor); virtual;
procedure AsignarDataModule; virtual;
public
property RecibosProveedorController: IRecibosProveedorController read GetRecibosProveedorController;
constructor Create; virtual;
destructor Destroy; override;
function Eliminar(const ID : Integer): Boolean; overload;
function Eliminar(ARemesaProveedor : IBizRemesaProveedor; AllItems: Boolean = false): Boolean; overload;
function Guardar(ARemesaProveedor : IBizRemesaProveedor): Boolean;
procedure DescartarCambios(ARemesaProveedor : IBizRemesaProveedor); virtual;
function Existe(const ID: Integer) : Boolean; virtual;
procedure Anadir(ARemesaProveedor : IBizRemesaProveedor); virtual;
function Buscar(const ID: Integer): IBizRemesaProveedor; virtual;
function BuscarTodos: IBizRemesaProveedor; overload;
function Nuevo : IBizRemesaProveedor; virtual;
procedure Ver(ARemesaProveedor : IBizRemesaProveedor); virtual;
procedure VerTodos(ARemesasProveedor: IBizRemesaProveedor); virtual;
procedure Preview(ARemesaProveedor : IBizRemesaProveedor; AllItems: Boolean = false); virtual;
procedure Print(ARemesaProveedor : IBizRemesaProveedor; AllItems: Boolean = false); virtual;
function EsModificable(ARemesaProveedor : IBizRemesaProveedor): Boolean;
function EsEliminable(ARemesaProveedor : IBizRemesaProveedor): Boolean;
function ExtraerSeleccionados(ARemesasProveedor: IBizRemesaProveedor; Const ViewGrid: IViewGridBase = Nil) : IBizRemesaProveedor; virtual;
function ElegirRecibosProveedor(ARemesaProveedor : IBizRemesaProveedor): Boolean;
procedure EliminarReciboProveedor(ARemesaProveedor : IBizRemesaProveedor);
end;
implementation
uses
cxControls, DB, uEditorRegistryUtils, schRemesasProveedorClient_Intf,
schRecibosProveedorClient_Intf, uIEditorRemesasProveedor, uIEditorRemesaProveedor,
Dialogs, uDataModuleRemesasProveedor, uDataModuleUsuarios, uDAInterfaces,
uDataTableUtils, uDateUtils, uROTypes, DateUtils, Controls, Windows,
uBizRecibosProveedor, Variants, uRemesasProveedorReportController;
{ TRemesasProveedorController }
procedure TRemesasProveedorController.Anadir(ARemesaProveedor: IBizRemesaProveedor);
begin
ARemesaProveedor.Insert;
end;
procedure TRemesasProveedorController.EliminarReciboProveedor(ARemesaProveedor: IBizRemesaProveedor);
var
ARecibosRemesa : IBizRecibosProveedor;
begin
inherited;
ARecibosRemesa := ARemesaProveedor.Recibos;
RecibosProveedorController.QuitarRemesa(ARecibosRemesa);
//Quitamos el recibo de la remesa sin que el servidor se entere para que no elimine el recibo
DesconectarTabla(ARecibosRemesa.DataTable);
ARecibosRemesa.DataTable.Delete;
ConectarTabla(ARecibosRemesa.DataTable);
ARecibosRemesa := Nil;
end;
function TRemesasProveedorController.EsEliminable(ARemesaProveedor: IBizRemesaProveedor): Boolean;
begin
Result := True;
end;
function TRemesasProveedorController.EsModificable(ARemesaProveedor: IBizRemesaProveedor): Boolean;
begin
Result := True;
end;
procedure TRemesasProveedorController.AsignarDataModule;
begin
FDataModule := TDataModuleRemesasProveedor.Create(Nil);
FRecibosProveedorController := TRecibosProveedorController.Create;
end;
procedure TRemesasProveedorController.AsignarID(ARemesaProveedor: IBizRemesaProveedor; const IDNuevo: Integer);
begin
if not Assigned(ARemesaProveedor) then
raise Exception.Create ('RemesaProveedor no asignado');
ARemesaProveedor.Edit;
ARemesaProveedor.ID := IDNuevo;
ARemesaProveedor.Post;
end;
function TRemesasProveedorController.Buscar(const ID: Integer): IBizRemesaProveedor;
begin
Result := (FDataModule as IDataModuleRemesasProveedor).GetItem(ID);
FiltrarEmpresa(Result);
end;
function TRemesasProveedorController.BuscarTodos: IBizRemesaProveedor;
begin
Result := FDataModule.GetItems;
FiltrarEmpresa(Result);
end;
constructor TRemesasProveedorController.Create;
begin
AsignarDataModule;
end;
function TRemesasProveedorController.CreateEditor(const AName: String;
const IID: TGUID; out Intf): Boolean;
begin
Result := Supports(EditorRegistry.CreateEditor(AName), IID, Intf);
end;
procedure TRemesasProveedorController.DescartarCambios(ARemesaProveedor: IBizRemesaProveedor);
begin
if not Assigned(ARemesaProveedor) then
raise Exception.Create ('RemesaProveedor no asignado');
ShowHourglassCursor;
try
if (ARemesaProveedor.State in dsEditModes) then
ARemesaProveedor.Cancel;
ARemesaProveedor.DataTable.CancelUpdates;
finally
HideHourglassCursor;
end;
end;
destructor TRemesasProveedorController.Destroy;
begin
FDataModule := Nil;
FRecibosProveedorController := Nil;
inherited;
end;
function TRemesasProveedorController.ValidarRemesaProveedor(ARemesaProveedor: IBizRemesaProveedor): Boolean;
begin
Result := False;
if not Assigned(ARemesaProveedor) then
raise Exception.Create ('Remesa no asignada');
if (ARemesaProveedor.DataTable.State in dsEditModes) then
ARemesaProveedor.DataTable.Post;
if ARemesaProveedor.DataTable.FieldByName(fld_RemesasProveedorFECHA_REMESA).IsNull then
raise Exception.Create('Debe indicar la fecha de esta remesa.');
if ARemesaProveedor.ID_DATOS_BANCO < 1 then
raise Exception.Create('Debe la cuenta bancaria sobre la que realizará la remesa.');
// Asegurarse de valores en campos "automáticos"
ARemesaProveedor.Edit;
try
ARemesaProveedor.USUARIO := dmUsuarios.LoginInfo.Usuario;
Result := True;
finally
ARemesaProveedor.Post;
end;
end;
procedure TRemesasProveedorController.Ver(ARemesaProveedor: IBizRemesaProveedor);
var
AEditor : IEditorRemesaProveedor;
begin
AEditor := NIL;
ShowHourglassCursor;
try
RecuperarObjetos(ARemesaProveedor);
CreateEditor('EditorRemesaProveedor', IEditorRemesaProveedor, AEditor);
if Assigned(AEditor) then
with (AEditor as IEditorRemesaProveedor) do
begin
Controller := Self; //OJO ORDEN MUY IMPORTANTE
RemesaProveedor := ARemesaProveedor;
//MODO CONSULTAR
if not EsModificable(ARemesaProveedor) then
begin
SetDataTableReadOnly(ARemesaProveedor.DataTable, True);
ReadOnly := True;
end;
ShowModal;
//MODO CONSULTAR (Se deja la tabla como estaba)
if ReadOnly then
SetDataTableReadOnly(ARemesaProveedor.DataTable, False);
AEditor.Release;
end;
finally
AEditor := NIL;
HideHourglassCursor;
end;
end;
procedure TRemesasProveedorController.VerTodos(ARemesasProveedor: IBizRemesaProveedor);
var
AEditor : IEditorRemesasProveedor;
begin
AEditor := NIL;
ShowHourglassCursor;
try
CreateEditor('EditorRemesasProveedor', IEditorRemesasProveedor, AEditor);
if Assigned(AEditor) then
with (AEditor as IEditorRemesasProveedor) do
begin
Controller := Self; //OJO ORDEN MUY IMPORTANTE
RemesasProveedor := ARemesasProveedor;
MultiSelect := True;
ShowEmbedded;
end;
finally
AEditor := Nil;
HideHourglassCursor;
end;
end;
function TRemesasProveedorController._Vacio: IBizRemesaProveedor;
begin
Result := Buscar(ID_NULO);
end;
function TRemesasProveedorController.Eliminar(const ID: Integer): Boolean;
var
ARemesaProveedor : IBizRemesaProveedor;
begin
ARemesaProveedor := Buscar(ID);
if not Assigned(ARemesaProveedor) then
raise Exception.Create(Format('No se ha encontrado la remesa con ID = %d', [ID]));
Result := Eliminar(ARemesaProveedor);
ARemesaProveedor := NIL;
end;
function TRemesasProveedorController.ElegirRecibosProveedor(ARemesaProveedor: IBizRemesaProveedor): Boolean;
var
ARecibosRemesa : IBizRecibosProveedor;
ARecibosSeleccionados : IBizRecibosProveedor;
begin
Result := False;
ARecibosSeleccionados := (FRecibosProveedorController.ElegirRecibos(FRecibosProveedorController.BuscarRecibosARemesar, 'Elija uno o más recibos para incluirlos en esta remesa', True) as IBizRecibosProveedor);
if Assigned(ARecibosSeleccionados) then
begin
ShowHourglassCursor;
try
ARecibosRemesa := ARemesaProveedor.Recibos;
//Copia los recibos seleccionados a los recibos de la remesa sin que el servidor se entere de
//las inserciones
DuplicarRegistros(ARecibosSeleccionados.DataTable,ARecibosRemesa.DataTable, mdrTodos, False, False, True);
FRecibosProveedorController.SetSituacionCobrados(ARecibosRemesa);
Result := True;
finally
HideHourglassCursor;
end;
end;
ARecibosRemesa := Nil;
ARecibosSeleccionados := Nil;
end;
function TRemesasProveedorController.Eliminar(ARemesaProveedor: IBizRemesaProveedor; AllItems: Boolean = false): Boolean;
//En el caso de eliminar almenos un elemento del conjunto se devuelve true
var
bEliminado: Boolean;
begin
bEliminado := False;
if not Assigned(ARemesaProveedor) then
raise Exception.Create ('ARemesaProveedor no asignada');
ShowHourglassCursor;
try
if not ARemesaProveedor.DataTable.Active then
ARemesaProveedor.DataTable.Active := True;
if (ARemesaProveedor.State in dsEditModes) then
ARemesaProveedor.Cancel;
//Siempre eliminaremos el seleccionado
if EsEliminable(ARemesaProveedor) then
begin
//Si la llamada a eliminar es por el editor RemesasProveedor, debo recuperar los recibos
//de la remesa a eliminar, en caso de venir por el editor RemesaProveedor ya los tengo
if not Assigned(ARemesaProveedor.Recibos) then
RecuperarRecibos(ARemesaProveedor);
//Eliminaremos la remesa de los recibos asociados
With ARemesaProveedor.Recibos.DataTable do
begin
First;
While not Eof do
begin
RecibosProveedorController.QuitarRemesa(ARemesaProveedor.Recibos);
Next;
end;
end;
//Como no están declarados como maestro-detalles debemos hacer el applyupdates nosotros
ARemesaProveedor.Recibos.DataTable.ApplyUpdates;
ARemesaProveedor.Delete;
bEliminado := True;
end;
//En el caso de querer eliminar todos los items del objeto AAlbaran
if AllItems then
begin
with ARemesaProveedor.DataTable do
begin
First;
while not EOF do
begin
if EsEliminable(ARemesaProveedor) then
begin
//Si la llamada a eliminar es por el editor RemesasProveedor, debo recuperar los recibos
//de la remesa a eliminar, en caso de venir por el editor RemesaProveedor ya los tengo
if not Assigned(ARemesaProveedor.Recibos) then
RecuperarRecibos(ARemesaProveedor);
//Eliminaremos la remesa de los recibos asociados
With ARemesaProveedor.Recibos.DataTable do
begin
First;
While not Eof do
begin
RecibosProveedorController.QuitarRemesa(ARemesaProveedor.Recibos);
Next;
end;
end;
//Como no están declarados como maestro-detalles debemos hacer el applyupdates nosotros
ARemesaProveedor.Recibos.DataTable.ApplyUpdates;
ARemesaProveedor.Delete;
bEliminado := True
end
else Next;
end;
end;
end;
if bEliminado then
begin
ARemesaProveedor.DataTable.ApplyUpdates;
Result := True;
end
else
Result := False;
HideHourglassCursor;
except
//Hay algun recibo de la remesa que tiene movimientos (Cobros/Devoluciones) posteriores al cobro inicial de la remesa
on E: Exception do
begin
ARemesaProveedor.Recibos.DataTable.CancelUpdates;
ARemesaProveedor.DataTable.CancelUpdates;
HideHourglassCursor;
MessageBox(0, 'Exiten movimientos (Cobros/Devoluciones) en los recibos posteriores al cobro inicial de la remesa', 'Atención', MB_ICONWARNING or MB_OK);
end;
end;
end;
procedure TRemesasProveedorController.RecibirAviso(ASujeto: ISujeto; ADataTable: IDAStronglyTypedDataTable);
begin
inherited;
//
end;
procedure TRemesasProveedorController.RecuperarObjetos(ARemesaProveedor: IBizRemesaProveedor);
begin
RecuperarRecibos(ARemesaProveedor);
end;
procedure TRemesasProveedorController.RecuperarRecibos(ARemesaProveedor: IBizRemesaProveedor);
begin
ARemesaProveedor.Recibos := RecibosProveedorController.BuscarRecibosRemesa(ARemesaProveedor.ID);
end;
function TRemesasProveedorController.Existe(const ID: Integer): Boolean;
var
ARemesaProveedor : IBizRemesaProveedor;
begin
try
ARemesaProveedor := Buscar(ID);
Result := Assigned(ARemesaProveedor) and (ARemesaProveedor.ID = ID);
finally
ARemesaProveedor := NIL;
end;
end;
function TRemesasProveedorController.ExtraerSeleccionados(ARemesasProveedor: IBizRemesaProveedor; Const ViewGrid: IViewGridBase = Nil): IBizRemesaProveedor;
var
ASeleccionados : IBizRemesaProveedor;
begin
if Assigned(ViewGrid) then
begin
//Guardamos la situación porque el CopyDataTable nos cambia la posicion
ViewGrid.SaveGridStatus;
ViewGrid.DesactivarGrid;
end;
ASeleccionados := (Self.Buscar(ID_NULO) as IBizRemesaProveedor);
CopyDataTable(ARemesasProveedor.DataTable, ASeleccionados.DataTable, True);
Result := ASeleccionados;
if Assigned(ViewGrid) then
begin
ViewGrid.ActivarGrid;
ViewGrid.RestoreGridStatus;
end;
end;
procedure TRemesasProveedorController.FiltrarEmpresa(ARemesaProveedor: IBizRemesaProveedor);
begin
if ARemesaProveedor.DataTable.Active then
ARemesaProveedor.DataTable.Active := False;
// Filtrar los contactos actuales por empresa
with ARemesaProveedor.DataTable.Where do
begin
if NotEmpty then
AddOperator(opAND);
// Para evitar ambigüedades en la SQL del servidor
AddText(fld_RemesasProveedorID_EMPRESA + ' = ' + IntToStr(dmUsuarios.IDEmpresaActual));
// AddCondition('##' + fld_RemesasProveedorID_EMPRESA, cEqual, dmUsuarios.IDEmpresaActual);
end;
end;
function TRemesasProveedorController.GetRecibosProveedorController: IRecibosProveedorController;
begin
Result := FRecibosProveedorController;
end;
function TRemesasProveedorController.Guardar(ARemesaProveedor: IBizRemesaProveedor): Boolean;
var
NuevoID: Integer;
bEsNuevo: Boolean;
begin
Result := False;
if ValidarRemesaProveedor(ARemesaProveedor) then
begin
ShowHourglassCursor;
try
bEsNuevo := ARemesaProveedor.EsNuevo;
if (bEsNuevo) then
NuevoID := FDataModule.GetNextID(ARemesaProveedor.DataTable.LogicalName)
else
NuevoID := ARemesaProveedor.ID;
AsignarID(ARemesaProveedor, NuevoID);
//Si es nuevo debemos hacer el applyupdates por la integridad referencial de BD
if bEsNuevo then
ARemesaProveedor.DataTable.ApplyUpdates;
//Si todo ha ido bien, asignamos la remesa a los recibos asociados
//Como no están declarados como maestro-detalles debemos hacer el applyupdates nosotros
RecibosProveedorController.AsignarRemesa(ARemesaProveedor.Recibos, NuevoID);
ARemesaProveedor.Recibos.DataTable.ApplyUpdates; //En este applyupdates tambien se realizarán todos los cambios acumulados sobre los recibos asociados (EliminarReciboProveedor/ ElegirRecibosProveedor)
//Es necesario ya que no se refrescan bien los deltas y despues del applyupdates siguen
//existiendo deltas, de esta forma los limpiamos
if ARemesaProveedor.Recibos.DataTable.HasDelta then
ARemesaProveedor.Recibos.DataTable.Refresh;
ARemesaProveedor.DataTable.ApplyUpdates;
Result := True;
finally
HideHourglassCursor;
end;
end;
end;
function TRemesasProveedorController.Nuevo: IBizRemesaProveedor;
var
ARemesaProveedor : IBizRemesaProveedor;
begin
ARemesaProveedor := FDataModule.NewItem;
FiltrarEmpresa(ARemesaProveedor);
ARemesaProveedor.DataTable.Active := True;
ARemesaProveedor.Insert;
Result := ARemesaProveedor;
end;
procedure TRemesasProveedorController.Preview(ARemesaProveedor: IBizRemesaProveedor; AllItems: Boolean = false);
var
AReportController : IRemesasProveedorReportController;
ID_Remesas: TStringList;
begin
AReportController := TRemesasProveedorReportController.Create;
try
ID_Remesas := TStringList.Create;
//Si deseamos previsualizar todos los items del objeto albaran
if AllItems then
begin
with ARemesaProveedor.DataTable do
begin
First;
while not EOF do
begin
ID_Remesas.Add(IntToStr(ARemesaProveedor.ID));
Next;
end;
end;
end
//Solo previsualizamos el item seleccionado
else
ID_Remesas.Add(IntToStr(ARemesaProveedor.ID));
AReportController.Preview(ID_Remesas.CommaText);
finally
AReportController := NIL;
ID_Remesas.Free;
end;
end;
procedure TRemesasProveedorController.Print(ARemesaProveedor: IBizRemesaProveedor; AllItems: Boolean = false);
var
AReportController : IRemesasProveedorReportController;
ID_Remesas: TStringList;
begin
AReportController := TRemesasProveedorReportController.Create;
try
ID_Remesas := TStringList.Create;
//Si deseamos previsualizar todos los items del objeto albaran
if AllItems then
begin
with ARemesaProveedor.DataTable do
begin
First;
while not EOF do
begin
ID_Remesas.Add(IntToStr(ARemesaProveedor.ID));
Next;
end;
end;
end
//Solo previsualizamos el item seleccionado
else
ID_Remesas.Add(IntToStr(ARemesaProveedor.ID));
AReportController.Print(ID_Remesas.CommaText);
finally
AReportController := NIL;
ID_Remesas.Free;
end;
end;
end.