DTSServicios.cs
1 using sage.ew.db;
2 using System;
3 using System.Collections.Generic;
4 using System.Data;
5 using System.Linq;
6 using System.Text;
7 
8 namespace sage.addons.services.Negocio.DTS
9 {
10  public class DTSServicios
11  : BaseDTS
12  {
13 
18  public override string _NombreProceso()
19  {
20  return "servicios";
21  }
22 
23  protected override List<String> _Tables
24  {
25  get
26  {
27  return new List<string>() { "C_SERVICIOS", "D_SERVICIOS", "SERV_MAT", "SERSER", "MULTICA2" };
28  }
29  }
30 
31  protected override bool _Import(String tcTable, Dictionary<String, Object> toParams)
32  {
33  String lcCaseLetraServicios, lcSql = "";
34  List<String> loSql = new List<string>();
35  List<TraspasColumn> loColumns = new List<TraspasColumn>();
36  List<TraspasColumn> loColumnsComunes = new List<TraspasColumn>();
37 
38  switch (tcTable)
39  {
40  case "C_SERVICIOS":
41 
42  lcCaseLetraServicios = _GetCaseLetras(toParams, "LETRA_SERV");
43 
44  loColumns = new List<TraspasColumn>();
45  loColumns.Add(new TraspasColumn("'DTS-SERVICIO'", "USUARIO"));
46  loColumns.Add(new TraspasColumn(DB.SQLIif("EJERCICIO = 0 ", "YEAR(CAST(FECHA_INI AS DATETIME))", "EJERCICIO"), "EJERCICIO"));
47  loColumns.Add(new TraspasColumn("EMPRESA"));
48  loColumns.Add(new TraspasColumn(lcCaseLetraServicios, "LETRA")); //TODO
49  loColumns.Add(new TraspasColumn("CODIGO", "NUMERO"));
50  loColumns.Add(new TraspasColumn("CLIENTE"));
51  loColumns.Add(new TraspasColumn("'01'", "TIPOSERV"));
52  loColumns.Add(new TraspasColumn(String.Format("CAST(FECHA_INI AS DATETIME) + {0}", DB.SQLIif("ISDATE(HORA_INI) = 1", "CAST(HORA_INI AS DATETIME)", "CAST('00:00' AS DATETIME)")), "FECHA"));
53  loColumns.Add(new TraspasColumn(String.Format("CAST(FECHA_FIN AS DATETIME) + {0}", DB.SQLIif("ISDATE(HORA_FIN) = 1", "CAST(HORA_FIN AS DATETIME)", "CAST('00:00' AS DATETIME)")), "FECH_OUT"));
54  loColumns.Add(new TraspasColumn(String.Format("CAST(FECHA_FIN AS DATETIME) + {0}", DB.SQLIif("ISDATE(HORA_FIN) = 1", "CAST(HORA_FIN AS DATETIME)", "CAST('00:00' AS DATETIME)")), "FECH_PREVI"));
55  loColumns.Add(new TraspasColumn("SERVI", "PROBLEMA"));
56  loColumns.Add(new TraspasColumn("ISNULL(SOLUCIO, '')", "SOLUCION"));
57  loColumns.Add(new TraspasColumn("ISNULL(OBSERVA, '')", "OBSERVA"));
58  loColumns.Add(new TraspasColumn("TEC_AVISO", "TEC_IN"));
59  loColumns.Add(new TraspasColumn("TEC_DEST", "TEC_OUT"));
60  loColumns.Add(new TraspasColumn("ACABADO"));
61  loColumns.Add(new TraspasColumn("ENV_CLI", "ENV_CLI"));
62  loColumns.Add(new TraspasColumn("FECHA_FI", "FECH_END"));
63  loColumns.Add(new TraspasColumn("RUTA"));
64  loColumns.Add(new TraspasColumn("MODELO"));
65  loColumns.Add(new TraspasColumn("OBRA"));
66  loColumns.Add(new TraspasColumn("SERIE", _UsaSeries ? "SERIE": "ARTICULO"));
67  loColumns.Add(new TraspasColumn(DB.SQLIif("ACABADO = 1", "'03'", "'01'"), "ESTADOSERV"));
68  loColumns.Add(new TraspasColumn("TIPO", "CLASIFICA"));
69 
70  lcSql = String.Format("INSERT INTO {0} ({2}) SELECT {3} FROM {1};", DB.SQLDatabase("SERVICES", tcTable), DB.SQLDatabase("SERVEIS", "SERVEIS"), String.Join(",", loColumns.Select(f => f._ColumnNameDest)), String.Join(",", loColumns.Select(f => f._ColumnNameOri)));
71 
72  break;
73  case "D_SERVICIOS":
74 
75  lcCaseLetraServicios = String.Format("{0} as LETRA", _GetCaseLetras(toParams, "LETRA_SERV", "a.EMPRESA"));
76 
77  //Lineas
78  loColumnsComunes = new List<TraspasColumn>();
79  loColumnsComunes.Add(new TraspasColumn("a.EMPRESA", "EMPRESA"));
80  loColumnsComunes.Add(new TraspasColumn("a.CODIGO as NUMERO", "NUMERO"));
81  loColumnsComunes.Add(new TraspasColumn( lcCaseLetraServicios, "LETRA"));
82  loColumnsComunes.Add(new TraspasColumn(String.Format("{0} as EJERCICIO", DB.SQLIif(" a.EJERCICIO = 0 ", "YEAR(CAST(a.FECHA_INI AS DATETIME))", "EJERCICIO")), "EJERCICIO"));
83  loColumnsComunes.Add(new TraspasColumn("b.TECNICO", "TECNICO"));
84  loColumnsComunes.Add(new TraspasColumn("ISNULL(b.FECHA, a.FECHA_INI) as FECHA ", "FECHA"));
85  loColumnsComunes.Add(new TraspasColumn(String.Format("{0} as HORA_INI", _TrataFecha("b.HORA_ENT")), "HORA_INI"));
86  loColumnsComunes.Add(new TraspasColumn(String.Format("{0} as HORA_FIN", _TrataFecha("b.HORA_SAL")), "HORA_FIN"));
87  loColumnsComunes.Add(new TraspasColumn(String.Format("{0} as TIEMPO", String.Format("DATEPART(hour, (CAST({0} AS DATETIME) - CAST({1} AS DATETIME))) + ", _TrataFecha("b.HORA_SAL"), _TrataFecha("b.HORA_ENT")) + DB.SQLIif(String.Format("DATEPART(MINUTE, (CAST({0} AS DATETIME) - CAST({1} AS DATETIME))) > 0 ", _TrataFecha("b.HORA_SAL"), _TrataFecha("b.HORA_ENT")), String.Format("(DATEPART(MINUTE, (CAST({0} AS DATETIME) - CAST({1} AS DATETIME))))/60", _TrataFecha("b.HORA_SAL"), _TrataFecha("b.HORA_ENT")), "0")), "TIEMPO"));
88  loColumnsComunes.Add(new TraspasColumn("ISNULL(t.CODIGO, '') as TIPOGASTO", "TIPOGASTO"));
89  loColumnsComunes.Add(new TraspasColumn("1 as FACTURABLE", "FACTURABLE"));
90  loColumnsComunes.Add(new TraspasColumn(String.Format("LTRIM(CONCAT({0} COLLATE Modern_Spanish_CS_AI,' ', ISNULL(CAST(b.SOLUCION as varchar),''))) as NOTAS", DB.SQLIif("ISDATE(b.HORA_ENT) = 1 AND ISDATE(b.HORA_SAL) = 1 AND REPLACE(b.HORA_ENT,' ', '0') = b.HORA_ENT AND REPLACE(b.HORA_SAL,' ', '0') = b.HORA_SAL ", "''", "'Detectado formato incorrecto en las horas de origen, hora inicio:' + b.HORA_ENT + ' hora fin:' + + b.HORA_SAL ")), "NOTAS"));
91 
92  loColumns = new List<TraspasColumn>();
93  loColumns.AddRange(loColumnsComunes);
94  loColumns.Add(new TraspasColumn("b.TIEMPO as UNIDADES", "UNIDADES"));
95  loColumns.Add(new TraspasColumn("b.PRECIO_HO as COSTE", "COSTE"));
96  loColumns.Add(new TraspasColumn("b.TIEMPO * b.PRECIO_HO as COSTETOTAL", "COSTETOTAL"));
97 
98  loSql.Add(String.Format(" SELECT {0} FROM {1} a INNER JOIN {2} b ON a.EMPRESA = b.EMPRESA AND a.CODIGO = b.SERVICIO INNER JOIN {3} e ON e.EMPRESA = a.EMPRESA INNER JOIN {4} t ON t.ARTICULO = e.ART_HO WHERE b.TIEMPO <> 0 ", String.Join(",", loColumns.Select(f => f._ColumnNameOri)), DB.SQLDatabase("SERVEIS", "SERVEIS"), DB.SQLDatabase("SERVEIS", "SERVCON"), DB.SQLDatabase("SERVEIS", "CONFIGSE"), DB.SQLDatabase("SERVICES", "TIPOGASTOS")));
99 
100  //Lineas
101  loColumns = new List<TraspasColumn>();
102  loColumns.AddRange(loColumnsComunes);
103  loColumns.Add(new TraspasColumn("b.KM as UNIDADES", "UNIDADES"));
104  loColumns.Add(new TraspasColumn("b.PRECIO_KM as COSTE", "COSTE"));
105  loColumns.Add(new TraspasColumn("b.KM * b.PRECIO_KM as COSTETOTAL", "COSTETOTAL"));
106 
107  loSql.Add("UNION ");
108  loSql.Add(String.Format(" SELECT {0} FROM {1} a INNER JOIN {2} b ON a.EMPRESA = b.EMPRESA AND a.CODIGO = b.SERVICIO INNER JOIN {3} e ON e.EMPRESA = a.EMPRESA INNER JOIN {4} t ON t.ARTICULO = e.ART_KM WHERE b.KM <> 0", String.Join(",", loColumns.Select(f => f._ColumnNameOri)), DB.SQLDatabase("SERVEIS", "SERVEIS"), DB.SQLDatabase("SERVEIS", "SERVCON"), DB.SQLDatabase("SERVEIS", "CONFIGSE"), DB.SQLDatabase("SERVICES", "TIPOGASTOS")));
109 
110 
111  //Lineas
112  loColumns = new List<TraspasColumn>();
113  loColumns.AddRange(loColumnsComunes);
114  loColumns.Add(new TraspasColumn(String.Format("{0} as UNIDADES", DB.SQLIif("b.DIETAS > 0", "1", "0")), "UNIDADES"));
115  loColumns.Add(new TraspasColumn("b.DIETAS as COSTE", "COSTE"));
116  loColumns.Add(new TraspasColumn("b.DIETAS as COSTETOTAL", "COSTETOTAL"));
117 
118  loSql.Add("UNION ");
119  loSql.Add(String.Format(" SELECT {0} FROM {1} a INNER JOIN {2} b ON a.EMPRESA = b.EMPRESA AND a.CODIGO = b.SERVICIO INNER JOIN {3} e ON e.EMPRESA = a.EMPRESA INNER JOIN {4} t ON t.ARTICULO = e.ART_DIETAS WHERE b.DIETAS <> 0 ", String.Join(",", loColumns.Select(f => f._ColumnNameOri)), DB.SQLDatabase("SERVEIS", "SERVEIS"), DB.SQLDatabase("SERVEIS", "SERVCON"), DB.SQLDatabase("SERVEIS", "CONFIGSE"), DB.SQLDatabase("SERVICES", "TIPOGASTOS")));
120 
121  lcSql = String.Join(Environment.NewLine, loSql);
122  lcSql = String.Format("INSERT INTO {0} (LINEA, {1}) SELECT ROW_NUMBER() OVER(PARTITION BY g.EMPRESA, g.NUMERO, g.LETRA, g.EJERCICIO ORDER BY g.EMPRESA, g.NUMERO, g.LETRA, g.EJERCICIO) as LINEA, {2} FROM ({3}) as g ", DB.SQLDatabase("SERVICES", tcTable), String.Join(",", loColumns.Select(f => f._ColumnNameDest)), String.Join(",", loColumns.Select(f => String.Format("g.{0}", f._ColumnNameDest))), lcSql);
123 
124  break;
125 
126  case "SERV_MAT":
127 
128  lcCaseLetraServicios = String.Format("{0} as LETRA", _GetCaseLetras(toParams, "LETRA_SERV", "a.EMPRESA"));
129 
130  loColumns = new List<TraspasColumn>();
131  loColumns.Add(new TraspasColumn("a.EMPRESA", "EMPRESA"));
132  loColumns.Add(new TraspasColumn("a.CODIGO as NUMERO", "NUMERO"));
133  loColumns.Add(new TraspasColumn(lcCaseLetraServicios, "LETRA"));
134  loColumns.Add(new TraspasColumn(String.Format("{0} as EJERCICIO", DB.SQLIif(" a.EJERCICIO = 0 ", "YEAR(CAST(a.FECHA_INI AS DATETIME))", "EJERCICIO")), "EJERCICIO"));
135  loColumns.Add(new TraspasColumn("m.ARTICULO", "ARTICULO"));
136  loColumns.Add(new TraspasColumn("ISNULL(m.FECHA, m.APLICADA)", "FECHA"));
137  loColumns.Add(new TraspasColumn("m.LINIA", "LINEA"));
138  loColumns.Add(new TraspasColumn("m.UNIDADES", "UNIDADES"));
139  loColumns.Add(new TraspasColumn("m.PRECIO", "PRECIO"));
140  loColumns.Add(new TraspasColumn("m.DTO", "DTO1"));
141  loColumns.Add(new TraspasColumn("UNIDADES * (m.PRECIO * (1 - m.DTO/100))", "IMPORTE"));
142  loColumns.Add(new TraspasColumn("ISNULL(art.NOMBRE, '')", "NOMBRE"));
143 
144  lcSql = String.Format("SELECT {1} FROM {0} a ", DB.SQLDatabase("SERVEIS", "SERVEIS"), String.Join(",", loColumns.Select(f => f._ColumnNameOri)));
145  lcSql += String.Format("INNER JOIN {0} m ON a.EMPRESA = m.EMPRESA AND a.CODIGO = m.SERVEI ", DB.SQLDatabase("SERVEIS", "MATERSER"));
146  lcSql += String.Format("LEFT JOIN {0} art ON art.CODIGO = m.ARTICULO ", DB.SQLDatabase("GESTION", "ARTICULO"));
147 
148  lcSql = String.Format("INSERT INTO {0} ({1}) {2}", DB.SQLDatabase("SERVICES", tcTable), String.Join(",", loColumns.Select(f => f._ColumnNameDest)), lcSql);
149 
150  break;
151 
152  case "SERSER":
153 
154  lcCaseLetraServicios = _GetCaseLetras(toParams, "LETRA_SERV", "m.EMPRESA");
155 
156  loColumns = new List<TraspasColumn>();
157  loColumns.Add(new TraspasColumn("m.EMPRESA", "EMPRESA"));
158  loColumns.Add(new TraspasColumn("ARTICULO"));
159  loColumns.Add(new TraspasColumn("m.SERIE", "SERIE"));
160  loColumns.Add(new TraspasColumn("s.CODIGO as NUMERO", "ALBARAN"));
161  loColumns.Add(new TraspasColumn(lcCaseLetraServicios, "LETRA"));
162  loColumns.Add(new TraspasColumn("m.LINIA", "LINEA"));
163  loColumns.Add(new TraspasColumn("1", "NUMERO"));
164 
165  lcSql = String.Format("SELECT {0} FROM {1} m {2}", String.Join(",", loColumns.Select(f => f._ColumnNameOri)), DB.SQLDatabase("SERVEIS", "MATERSER"), Environment.NewLine);
166  lcSql += String.Format(" INNER JOIN {0} s ON m.EMPRESA = s.EMPRESA AND m.SERVEI = s.CODIGO WHERE SUBSTRING(m.SERIE, 1, 2) <> 'C-' ", DB.SQLDatabase("SERVEIS", "SERVEIS"));
167 
168  lcSql = String.Format("INSERT INTO {0} ({2}) {1} ", DB.SQLDatabase("SERVICES", tcTable), lcSql, String.Join(",", loColumns.Select(f => f._ColumnNameDest)));
169 
170 
171  break;
172 
173  }
174 
175  return _SQLExec(lcSql);
176  }
177 
178 
179  protected override Boolean _DataChanges(String tcTable, Dictionary<String, Object> toParams)
180  {
181  String lcCaseLetraServicios = "";
182  List<TraspasColumn> loColumns = new List<TraspasColumn>();
183  List<String> loSql = new List<String>();
184 
185  switch (tcTable)
186  {
187  case "C_SERVICIOS":
188 
189  DataTable loDt;
190 
191  String lcLetra, lcTabla, lcTablaServices;
192 
193  loDt = (DataTable)toParams["LETRAS"];
194  lcTabla = DB.SQLDatabase("SERVEIS", "SERVEIS");
195  lcTablaServices = DB.SQLDatabase("SERVICES", "C_SERVICIOS");
196 
197  loSql = new List<String>();
198  foreach (DataRow loRow in loDt.Rows)
199  {
200  lcLetra = Convert.ToString(loRow["LETRA_SERV"]);
201 
202  //Campo de albaran
203  loSql.Add(String.Format("UPDATE a SET a.ALBARAN = SUBSTRING(b.ALBARAN, 1, 10), a.ALB_EJER = b.EJERCICIO, a.ALB_LET = LEFT(SUBSTRING(b.ALBARAN, 11, LEN(b.ALBARAN)) + space(1), 2) FROM {0} a INNER JOIN {1} b ON a.NUMERO = b.CODIGO AND a.LETRA = {2} AND RTRIM(b.ALBARAN) <> '';", lcTablaServices, lcTabla, DB.SQLString(lcLetra)));
204  //Actualizar articulo a partir de la serie
205  if(_UsaSeries) loSql.Add(String.Format("UPDATE c SET c.ARTICULO = s.ARTICULO FROM {0} c INNER JOIN {1} s ON c.SERIE = s.SERIE AND c.EMPRESA = s.CODEMP WHERE RTRIM(c.ARTICULO) = '' AND RTRIM(c.SERIE) <> '' ", lcTablaServices, DB.SQLDatabase("COMUNES", "COMPRAS")));
206  }
207 
208  break;
209 
210  case "SERV_MAT":
211 
212  //Arreglar datos de articulos
213 
214  lcCaseLetraServicios = _GetCaseLetras(toParams, "LETRA_SERV", "a.EMPRESA");
215 
216  loSql.Add(String.Format("UPDATE se SET se.ARTICULO = SUBSTRING(a.SERIE, 3, LEN(a.SERIE)) FROM {0} se INNER JOIN {1} a ON se.EMPRESA = a.EMPRESA AND se.NUMERO = a.SERVEI AND se.LETRA = {2} LEFT JOIN {3} b ON a.ARTICULO = b.CODIGO WHERE b.CODIGO is NULL AND SUBSTRING(a.SERIE, 1, 2) = 'C-' AND 'C-' + a.ARTICULO <> SERIE; ", DB.SQLDatabase("SERVICES", "SERV_MAT"), DB.SQLDatabase("SERVEIS", "MATERSER"), lcCaseLetraServicios, DB.SQLDatabase("GESTION", "ARTICULO")));
217 
218  loSql.Add(String.Format("UPDATE se SET se.ARTICULO = co.ARTICULO FROM {0} se INNER JOIN {1} a ON se.EMPRESA = a.EMPRESA AND se.NUMERO = a.SERVEI AND se.LETRA = {2} AND se.LINEA = a.LINIA INNER JOIN {3} co ON co.SERIE = a.SERIE AND a.EMPRESA = co.CODEMP LEFT JOIN {4} b ON a.ARTICULO = b.CODIGO WHERE b.CODIGO is NULL;", DB.SQLDatabase("SERVICES", "SERV_MAT"), DB.SQLDatabase("SERVEIS", "MATERSER"), lcCaseLetraServicios, DB.SQLDatabase("COMUNES", "COMPRAS"), DB.SQLDatabase("GESTION", "ARTICULO")));
219 
220  loSql.Add(String.Format("UPDATE se SET se.NOMBRE = a.NOMBRE FROM {0} se INNER JOIN {1} a ON se.ARTICULO = a.CODIGO WHERE RTRIM(se.NOMBRE) = ''; ", DB.SQLDatabase("SERVICES", "SERV_MAT"), DB.SQLDatabase("GESTION", "ARTICULO")));
221 
222  break;
223 
224  case "SERSER":
225 
226  //Arreglar datos de articulos
227 
228  lcCaseLetraServicios = _GetCaseLetras(toParams, "LETRA_SERV", "a.EMPRESA");
229 
230  loSql.Add(String.Format("UPDATE se SET se.ARTICULO = co.ARTICULO FROM {0} se INNER JOIN {1} a ON se.EMPRESA = a.EMPRESA AND se.NUMERO = a.SERVEI AND se.LETRA = {2} AND se.LINEA = a.LINIA INNER JOIN {3} co ON co.SERIE = a.SERIE AND a.EMPRESA = co.CODEMP LEFT JOIN {4} b ON a.ARTICULO = b.CODIGO WHERE b.CODIGO is NULL; ", DB.SQLDatabase("SERVICES", "SERSER"), DB.SQLDatabase("SERVEIS", "MATERSER"), lcCaseLetraServicios, DB.SQLDatabase("COMUNES", "COMPRAS"), DB.SQLDatabase("GESTION", "ARTICULO")));
231 
232  break;
233  }
234 
235  return _SQLExec(loSql);
236  }
237 
238  }
239 }
override bool _Import(String tcTable, Dictionary< String, Object > toParams)
Definition: DTSServicios.cs:31
Es como el tipo de entrada asientos pero por negocio, sin formulario, pq quiero que me haga las propu...
override string _NombreProceso()
Nombre del proceso
Definition: DTSServicios.cs:18
override Boolean _DataChanges(String tcTable, Dictionary< String, Object > toParams)