-
Notifications
You must be signed in to change notification settings - Fork 0
/
crm.prg
393 lines (358 loc) · 10.4 KB
/
crm.prg
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
*
* Modulo de CRM
*
*
* Dic2008
* Se agrego ventana de seguimiento a actividades. Para la recepcionista
*
* Sep2009
* Se agrego ventana de consulta de ordenes pendientes.
*
* AASO Ene2015 Se agrego control de oportunidades para ventas
* Agregar el menu principal
Define Pad PadCrm of _MSysMenu Prompt "C\<RM" Key ALT-R
On Pad PadCrm of _MSysMenu Activate PopUp Crm
Define PopUp Crm Margin Relative Shadow
AddBar('Crm','Agregar \<Actividad', 'Do DoForm With "CrmAddActiv" In Crm','CTRL+D')
AddBar('Crm','Consultar Actividad', 'Do DoForm With "CrmConsActiv" In Crm')
AddBar('Crm','Seguimiento de Actividades', 'Do DoForm With "CrmSeguimActiv" In Crm')
AddBar('Crm','\-','')
AddBar('Crm','Agregar Oportuni\<dad', 'Do DoModal With "CrmCrearOport" In Crm','CTRL+O')
AddBar('Crm','Consultar Oportunidades', 'Do DoForm With "CrmOportunidades" In Crm')
AddBar('Crm','\-','')
AddBar('Crm','Agregar \<Orden de Servicio', 'Do DoForm With "CrmAddOrden" In Crm','CTRL+S')
AddBar('Crm','Consulta \<Individual de Ordenes', 'Do DoForm With "CrmModOrden",2 In Crm')
AddBar('Crm','Consulta \<General de Ordenes', 'Do DoForm With "CrmConsOrden" In Crm')
AddBar('Crm','Consultar Ordenes \<Pendientes', 'Do DoForm With "CrmConsOrden2" In Crm')
AddBar('Crm','Agregar \<Servicio', 'Do DoForm With "CrmServRealizado" In Crm','CTRL+R')
AddBar('Crm','\-','')
AddBar('Crm','\<Reportes', 'Activate Popup CrmReportes')
AddBar('Crm','Reportes de Or\<denes', 'Activate PopUp CrmRepOrdenes')
AddBar('Crm','\-','')
AddBar('Crm','Catálogo de Proyectos', 'Do DoForm with "CrmCatProy" In Crm')
AddBar('Crm','Catálogo de Contactos', 'Do DoForm with "CrmCatContactos" In Crm')
AddBar('Crm','\-','')
AddBar('Crm','\<Configurar', 'Activate Popup CrmConfig')
* Definir submenu de configuracion
DefineMenuConfig()
* Definir submenu de reportes
DefineMenuReportes()
Set Procedure To Crm Additive
* Manda llamar el metodo para crear las bases de datos
CrearTablas()
Return
*
* DefineMenuConfig
*
* Muestra en el menu de configuracion del modulo
*
Procedure DefineMenuConfig
* Crear el submenu
Define Popup CrmConfig MARGIN RELATIVE SHADOW COLOR SCHEME 4
AddBar('CrmConfig','Categorías', 'Do DoForm with "CrmConfCat2" In Crm')
AddBar('CrmConfig','Tipos de Oportunidad', 'Do DoForm with "CrmTiposOport" In Crm')
AddBar('CrmConfig','Probabilidad de Cierre de Oportunidades','Do DoForm with "CrmProbCierre" In Crm')
* Evaluar si tiene definidos los tipos de probabilidad de cierre de oportunidades
Local cTiposProb
cTiposProb = GetMsl('CrmProbCierre')
If Empty(cTiposProb)
PutMsl('CrmProbCierre','Sin interes^Indeciso^Interesado^Aprobado')
EndIf
Return
*
* DefineMenuReportes
*
* Muestra en el menu los reportes del modulo
*
Procedure DefineMenuReportes
Use Reportes
* Crear el menu para los reportes de CRM
Define Popup CrmReportes MARGIN RELATIVE SHADOW COLOR SCHEME 4
Scan
If Allt(TIPO)=='CRM'
AddBar('CrmReportes',Allt(Reportes.DESC), 'Do DoForm With "CrmReporte" in Crm')
Endif
EndScan
AddBar('CrmReportes','\-','')
AddBar('CrmReportes','Configurar reportes de CRM', 'Do Form "ConfRep" With "CRM" ')
* Crear el menu para los reportes de ordenes
Define PopUp CrmRepOrdenes Margin Relative Shadow Color Scheme 4
Scan
If Allt(TIPO)=='REPORDENES'
AddBar('CrmRepOrdenes', Allt(Reportes.DESC), 'Do DoForm With "CrmRepOrdenes" in Crm')
Endif
EndScan
AddBar('CrmRepOrdenes','\-','')
AddBar('CrmRepOrdenes','Configurar reportes de Ordenes', 'Do Form "ConfRep" With "REPORDENES" ')
AddBar('CrmRepOrdenes','Configurar formatos de Ordenes', 'Do Form "ConfRep" With "ORDEN" ')
Use
Return
*
* CrearTablas
*
* Crea las tablas y campos especiales
*
Procedure CrearTablas
* Crear la tabla de Contactos.DBF
If Not File('Contactos.dbf')
Create Table Contactos(;
NUMCONT C(6),;
NOMCONT C(50),;
EMPRESA C(50),;
TELEFONO C(30),;
NUMCLI C(5),;
MAIL C(50))
Select Contactos
Index On NUMCONT Tag NUMCONT
Index On UPPER(NOMCONT) Tag NOMCONT
Use
* Crear el archivo Contactos.Key usado en la generacion de indices por SAIT
cProcKey = ;
'Delete Tag All '+Chr(13)+;
'Index On NUMCONT Tag NUMCONT '+Chr(13)+;
'Index On UPPER(NOMCONT) Tag NOMCONT '+Chr(13)
StrToFile(cProcKey, 'Contactos.Key')
EndIf
If Not File('Contactos.dbf')
Alerta('No existe Contactos.DBF')
QuitIt()
EndIf
* Crear la tabla de Crm.DBF
If Not File('Crm.dbf')
Create Table Crm(;
ID C(10),;
NUMCONT C(6),;
TIPO C(20),;
FECHA T(8),;
FECHAFIN T(8),;
OBS M(4),;
IDTECNICO C(5),;
NUMUSER C(5),;
NUMUSERGEN C(5),;
NUMORDEN C(10),;
NUMCOTIZA C(10),;
ACTIVIDAD L(1),;
TERMINADA L(1),;
REFER C(10),;
ORDENPOST C(10),;
STATUSCOT N(1),;
FOLIOSER C(10),;
SEGUIM M(4),;
NUMOPORT C(10))
Select Crm
Index On ID Tag ID
Index On NUMORDEN Tag NUMORDEN
Use
* Crear el archivo Crm.Key usado en la generacion de indices por SAIT
cProcKey = ;
'Delete Tag All '+Chr(13)+;
'Index On ID Tag ID '+Chr(13)+;
'Index On NUMORDEN Tag NUMORDEN '+Chr(13)
StrToFile(cProcKey, 'Crm.Key')
EndIf
If Not File('Crm.dbf')
Alerta('No existe Crm.DBF')
QuitIt()
EndIf
* Crear Crm.NUMOPORT
If Not ExisteCampo('Crm.NUMOPORT')
Alter Table Crm Add NUMOPORT C(10)
Use In Select('Crm')
EndIf
If Not ExisteCampo('Crm.NUMOPORT')
Alerta('No existe Crm.NUMOPORT')
QuitIt()
EndIf
* Crear la tabla de Ordenes.DBF
If Not File('Ordenes.dbf')
Create Table Ordenes(;
NUMORDEN C(10),;
NUMPROY C(10),;
NUMCONT C(6),;
CREADA T(8),;
CITA T(8),;
TERMINADA T(8),;
CERRADA T(8),;
NUMUSER C(5),;
ASESOR1 C(5),;
ASESOR2 C(5),;
ASESOR3 C(5),;
PRIORIDAD N(1),;
CALIF N(1),;
AVANCE N(3),;
REABIERTA N(2),;
HRSSERV N(6,2),;
CANTSERV N(3),;
FACTURA C(10),;
IMPORTE N(8,2),;
HRSESTIM N(6,2),;
INGESTIM N(8,2),;
PROBLEMA M(4),;
EQUIPOREC M(4),;
CAUSAS M(4),;
PENDPOR M(4),;
TIPO C(20))
Select Ordenes
Index On NUMORDEN Tag NUMORDEN
Use
* Crear el archivo Ordenes.Key usado en la generacion de indices por SAIT
cProcKey = ;
'Delete Tag All '+Chr(13)+;
'Index On NUMORDEN Tag NUMORDEN '+Chr(13)
StrToFile(cProcKey, 'Ordenes.Key')
EndIf
If Not File('Ordenes.dbf')
Alerta('No existe Ordenes.DBF')
QuitIt()
EndIf
* Crear la tabla de Proy.DBF
If Not File('Proy.dbf')
Create Table Proy(;
NUMPROY C(10),;
NUMCLI C(5),;
NOMBRE C(40),;
INICIO D(8),;
META D(8),;
COMPLETO L(1),;
IDTECNICO C(5),;
NUMCONT C(6),;
NUMUSER C(5))
Select Proy
Index On NUMPROY Tag NUMPROY
Use
* Crear el archivo Proy.Key usado en la generacion de indices por SAIT
EndIf
if not file('proy.key')
cProcKey = ;
'Delete Tag All '+Chr(13)+;
'Index On NUMPROY Tag NUMPROY '+Chr(13)
StrToFile(cProcKey, 'Proy.Key')
endif
If Not File('Proy.dbf')
Alerta('No existe Proy.DBF')
QuitIt()
EndIf
* Crear la tabla de Oport.DBF
If Not File('Oport.dbf')
Create Table Oport(;
NUMOPORT C(10),;
NUMCLI C(5),;
NUMUSER C(5),;
NUMCONT C(6),;
TIPO C(15),;
ASUNTO C(50),;
OBS M(10),;
OBSCLI M(10),;
CONOCIOEN M(10),;
IMPORTE N(12,2),;
STATUS N(1),;
CREADA D(8),;
INICIADA D(8),;
GANADA D(8),;
PERDIDA D(8),;
SIGLLAMADA D(8),;
PROBCIERRE C(15),;
NUMCOT C(10),;
NUMFACT C(10),;
CAUSAPERD M(10),;
OBSMEJORAR M(10))
Select Oport
Index On NUMOPORT Tag NUMOPORT
Use
* Crear el archivo Oport.Key usado en la generacion de indices por SAIT
cProcKey = ;
'Delete Tag All '+Chr(13)+;
'Index On NUMOPORT Tag NUMOPORT '+Chr(13)
StrToFile(cProcKey, 'Oport.Key')
EndIf
If Not File('Oport.dbf')
Alerta('No existe Oport.DBF')
QuitIt()
EndIf
Return
Function BuscarContacto
Local cNumCont
Do Form CrmBuscarContacto to cNumCont
Return cNumCont
Procedure Dumy
Do Form CrmAddActiv
Do Form CrmConsActiv
Do Form CrmAddOrden
Do Form CrmModOrden
Do Form CrmServRealizado
Do Form CrmVerifServ
Do Form CrmServTelef
Do Form CrmConsOrden
Do Form CrmConsOrden2
Do Form CrmAddProy
Do Form CrmCatProy
Do Form CrmHistCliente
Do Form CrmHistContacto
Do Form CrmReporte
Do Form CrmRepOrdenes
Do Form CrmConfCat2
Do Form CrmCatContactos
Do Form CrmContactos
Do Form CrmBuscarContacto
Do Form CrmFacturarOrden
Do Form CrmSeguimActiv
Do Form CrmCargaActiv
Do Form CrmCerrarOrden
Do Form CrmOportunidades
Do Form CrmCrearOport
Do Form CrmSeguimOport
Do Form CrmTiposOport
Do Form CrmProbCierre
Return
* Manda llamar las formas
*** Ejecuta una forma
Function DoForm
Parameters FormName,Par1,Par2,Par3,Par4,Par5,Par6,Par7,Par8,Par9
Do Case
Case Parameters()=1
Do Form (Formname)
Case Parameters()=2
Do Form (FormName) with m.Par1
Case Parameters()=3
Do Form (FormName) with m.Par1,m.Par2
Case Parameters()=4
Do Form (FormName) with m.Par1,m.Par2,m.Par3
Case Parameters()=5
Do Form (FormName) with m.Par1,m.Par2,m.Par3,m.Par4
Case Parameters()=6
Do Form (FormName) with m.Par1,m.Par2,m.Par3,m.Par4,m.Par5
Case Parameters()=7
Do Form (FormName) with m.Par1,m.Par2,m.Par3,m.Par4,m.Par5,Par6
Case Parameters()=8
Do Form (FormName) with m.Par1,m.Par2,m.Par3,m.Par4,m.Par5,Par6,Par7
Case Parameters()=9
Do Form (FormName) with m.Par1,m.Par2,m.Par3,m.Par4,m.Par5,Par6,Par7,Par8
EndCase
Return .t.
*
* DoModal
*
* Ejecuta una ventana en modo Modal
*
Function DoModal
lParameters FormName,Par1,Par2,Par3,Par4,Par5,Par6,Par7
Local RetVal
Do Case
Case Parameters()=1
Do Form (Formname) to m.RetVal
Case Parameters()=2
Do Form (FormName) with m.Par1 to m.RetVal
Case Parameters()=3
Do Form (FormName) with m.Par1,m.Par2 to m.RetVal
Case Parameters()=4
Do Form (FormName) with m.Par1,m.Par2,m.Par3 to m.RetVal
Case Parameters()=5
Do Form (FormName) with m.Par1,m.Par2,m.Par3,m.Par4 to m.RetVal
Case Parameters()=6
Do Form (FormName) with m.Par1,m.Par2,m.Par3,m.Par4,m.Par5 to m.RetVal
Case Parameters()=7
Do Form (FormName) with m.Par1,m.Par2,m.Par3,m.Par4,m.Par5,m.Par6 to m.RetVal
Case Parameters()=8
Do Form (FormName) with m.Par1,m.Par2,m.Par3,m.Par4,m.Par5,m.Par6,m.Par7 to m.RetVal
EndCase
Return m.RetVal