Пример #1
0
		/// <summary>
		/// Registra las operaciones de caja en la base de datos
		/// </summary>
		private void RegistrarOperaciones()
		{
			//  Validamos las operaciones
			Validar();

			//  Obtenemos la fecha
			getDate = DB.GetDate();

			//  Instanciamos una cuenta de flujo de caja
			Entities.CuentaFlujoCajas CuentaFlujo = new Entities.CuentaFlujoCajas();

			//  Creamos el ticket
			Ticket = new Entities.Tickets();
			Ticket.Caja_ID = Sesion.Caja_ID.Value;
			Ticket.Conductor_ID = DatosConductor.Conductor_ID;
			Ticket.Empresa_ID = (DatosConductor.Empresa_ID != null) ? DatosConductor.Empresa_ID.Value : GetEmpresa_ID();
			Ticket.Estacion_ID = Sesion.Estacion_ID.Value;
			Ticket.EstatusTicket_ID = 1;
			Ticket.Fecha = getDate;
			Ticket.Sesion_ID = Sesion.Sesion_ID;
			Ticket.Unidad_ID = DatosConductor.Unidad_ID;
			Ticket.Usuario_ID = Sesion.Usuario_ID;

			Ticket.Create();

			//  Realizamos las operaciones de Cuenta conductores // Cuenta cajas // Cuenta Unidades

			//  Para cada adeudo en la lista
			foreach (Entities.AdeudosDeConductor adeudo in Adeudos)
			{
				//  Si el adeudo ha sido pagado
				if (adeudo.Pagar > 0)
				{
					#region CuentaConductores

					//  Ingresamos en pago en la cuenta de conductores
					Entities.CuentaConductores cc = new Entities.CuentaConductores();
					cc.Abono = adeudo.Pagar;
					cc.Caja_ID = Sesion.Caja_ID.Value;
					cc.Cargo = 0;
					cc.Comentarios = "PAGO EN CAJA";
					cc.Concepto_ID = adeudo.Concepto_ID;
					cc.Conductor_ID = Ticket.Conductor_ID;
					cc.Cuenta_ID = adeudo.Cuenta_ID;
					cc.Empresa_ID = adeudo.Empresa_ID;
					cc.Estacion_ID = Sesion.Estacion_ID.Value;
					cc.Fecha = getDate;
					cc.Saldo = 0; // Se calcula solo
					cc.Ticket_ID = Ticket.Ticket_ID;
					cc.Unidad_ID = DatosConductor.Unidad_ID;
					cc.Usuario_ID = Sesion.Usuario_ID;
					cc.Create();

					//  Si la cuenta es de "SUPERPRODUCTIVIDAD"
					//  calculamos el cargo correspondiente
					if (adeudo.Cuenta_ID == 18)
					{
						cc = new Entities.CuentaConductores();
						cc.Abono = 0;
						cc.Caja_ID = Sesion.Caja_ID.Value;
						cc.Cargo = adeudo.Pagar;
						cc.Comentarios = "CARGO POR SUPERPRODUCTIVIDAD";
						cc.Concepto_ID = 133; // El concepto de cargo
						cc.Conductor_ID = Ticket.Conductor_ID;
						cc.Cuenta_ID = adeudo.Cuenta_ID;
						cc.Empresa_ID = adeudo.Empresa_ID;
						cc.Estacion_ID = Sesion.Estacion_ID.Value;
						cc.Fecha = getDate;
						cc.Saldo = 0; // Se calcula solo
						//cc.Ticket_ID = Ticket.Ticket_ID; //   Entra sin ticket, para no afectar el reporte de tickets
						cc.Unidad_ID = DatosConductor.Unidad_ID;
						cc.Usuario_ID = Sesion.Usuario_ID;
						cc.Create();
					}

					#endregion

					#region CuentaUnidades

					//  Si hay registro de unidad
					if (DatosConductor.Unidad_ID != null)
					{
						//  Realizamos el registro de un abono
						//  a la cuenta de unidad
						Entities.CuentaUnidades cu = new Entities.CuentaUnidades();
						cu.Abono = adeudo.Pagar;
						cu.Caja_ID = Sesion.Caja_ID.Value;
						cu.Comentarios = "PAGO EN CAJA";
						cu.Concepto_ID = adeudo.Concepto_ID;
						cu.Conductor_ID = Ticket.Conductor_ID;
						cu.Cuenta_ID = adeudo.Cuenta_ID;
						cu.Empresa_ID = adeudo.Empresa_ID;
						cu.Estacion_ID = Sesion.Estacion_ID.Value;
						cu.Fecha = getDate;
						cu.Saldo = 0; // Se calcula solo;
						cu.Ticket_ID = Ticket.Ticket_ID;
						cu.Unidad_ID = DatosConductor.Unidad_ID.Value;
						cu.Usuario_ID = Sesion.Usuario_ID;
						cu.Create();
					}

					#endregion

					#region CuentaCajas

					//  El pago lo registramos en la cuenta de cajas
					Entities.CuentaCajas ccs = new Entities.CuentaCajas();
					ccs.Abono = adeudo.Pagar;
					ccs.Caja_ID = Sesion.Caja_ID.Value;
					ccs.Cargo = 0;
					ccs.Comentarios = "PAGO EN CAJA";
					ccs.Concepto_ID = adeudo.Concepto_ID;
					ccs.Cuenta_ID = adeudo.Cuenta_ID;
					ccs.Empresa_ID = adeudo.Empresa_ID;
					ccs.Estacion_ID = Sesion.Estacion_ID.Value;
					ccs.Fecha = getDate;
					ccs.Saldo = 0; // Se calcula solo
					ccs.Sesion_ID = Sesion.Sesion_ID;
					ccs.Ticket_ID = Ticket.Ticket_ID;
					ccs.Usuario_ID = Sesion.Usuario_ID;
					ccs.Create();

					#endregion
				}
			}

			#region Planillas Cuenta Cajas

			//  Para cada planilla fiscal
			foreach (Entities.PlanillasFiscales planilla in Planillas)
			{
				//  Creamos un abono en la cuenta de cajas
				Entities.CuentaCajas ccs = new Entities.CuentaCajas();
				ccs.Abono = planilla.Precio;
				ccs.Caja_ID = Sesion.Caja_ID.Value;
				ccs.Cargo = 0;
				ccs.Comentarios = "PAGO EN CAJA - PLANILLAS -";
				ccs.Concepto_ID = 147;
				ccs.Cuenta_ID = 6;
				ccs.Empresa_ID = planilla.Empresa_ID;
				ccs.Estacion_ID = Sesion.Estacion_ID.Value;
				ccs.Fecha = getDate;
				ccs.Saldo = 0; // Se calcula solo
				ccs.Sesion_ID = Sesion.Sesion_ID;
				ccs.Ticket_ID = Ticket.Ticket_ID;
				ccs.Usuario_ID = Sesion.Usuario_ID;
				ccs.Create();
			}

			#endregion


			#region Vales Cuenta Cajas

			//  Para cada vale prepagado
			foreach (Entities.ValesPrepagados vale in Vales)
			{
				//  Creamos un abono en la cuenta de cajas
				Entities.CuentaCajas ccs = new Entities.CuentaCajas();
				ccs.Abono = vale.Denominacion;
				ccs.Caja_ID = Sesion.Caja_ID.Value;
				ccs.Cargo = 0;
				ccs.Comentarios = "PAGO EN CAJA - VALES -";
				ccs.Concepto_ID = 148;
				ccs.Cuenta_ID = 5;
				ccs.Empresa_ID = 6; // Los vales son de Axertis
				ccs.Estacion_ID = Sesion.Estacion_ID.Value;
				ccs.Fecha = getDate;
				ccs.Saldo = 0; // Se calcula solo
				ccs.Sesion_ID = Sesion.Sesion_ID;
				ccs.Ticket_ID = Ticket.Ticket_ID;
				ccs.Usuario_ID = Sesion.Usuario_ID;
				ccs.Create();
			}

			#endregion

			// Si hay vales prepagados
			if (Operacion.TotalVales > 0)
			{
				#region Flujo Caja Vales

				//  Creamos un abono en la cuenta de flujo de caja
				CuentaFlujo = new Entities.CuentaFlujoCajas();
				CuentaFlujo.Abono = Operacion.TotalVales;
				CuentaFlujo.Caja_ID = Sesion.Caja_ID.Value;
				CuentaFlujo.Cargo = 0;
				CuentaFlujo.Concepto = "PAGO CON VALES";
				CuentaFlujo.Fecha = getDate;
				CuentaFlujo.Moneda_ID = 3; // Los vales
				CuentaFlujo.Saldo = 0; // Se calcula solo
				CuentaFlujo.Sesion_ID = Sesion.Sesion_ID;
				CuentaFlujo.Ticket_ID = Ticket.Ticket_ID;
				CuentaFlujo.Usuario_ID = Sesion.Usuario_ID;
				CuentaFlujo.Create();

				#endregion

				#region Retribucion de Vales

				//  El total de los vales
				decimal totalvales = this.Operacion.TotalVales;

				//  El pago con vales
				decimal pagovales;

				//  Para cada adeudo
				foreach (Entities.AdeudosDeConductor adeudo in Adeudos)
				{
					//  Si fue pagado
					if (adeudo.Pagar > 0)
					{
						//  Si el total de vales es menor o igual que el adeudo pagado
						if (totalvales <= adeudo.Pagar)
						{
							//  El pago de vales es el tota
							pagovales = totalvales;
						}
						else // Si no
						{
							//  El pago de vales es la cantidad pagada
							pagovales = adeudo.Pagar;
						}

						//  Creamos la retribución de vales para la cuenta de cajas
						//  es decir, se carga la cantidad de pago con vales
						//  que fueron utilizados en lugar del pago con efectivo
						Entities.CuentaCajas ccs = new Entities.CuentaCajas();
						ccs.Cargo = Math.Abs(pagovales);
						ccs.Caja_ID = Sesion.Caja_ID.Value;
						ccs.Abono = 0;
						ccs.Comentarios = "RETRIBUCION EN CAJA - VALES -";
						ccs.Concepto_ID = adeudo.Concepto_ID;
						ccs.Cuenta_ID = adeudo.Cuenta_ID;
						ccs.Empresa_ID = adeudo.Empresa_ID; // Los vales son de Axertis
						ccs.Estacion_ID = Sesion.Estacion_ID.Value;
						ccs.Fecha = getDate;
						ccs.Saldo = 0; // Se calcula solo
						ccs.Sesion_ID = Sesion.Sesion_ID;
						ccs.Ticket_ID = Ticket.Ticket_ID;
						ccs.Usuario_ID = Sesion.Usuario_ID;
						ccs.Create();

						//  Se disminuye el total de vales
						totalvales -= pagovales;

						//  En cuanto se llegue a 0
						//  sale del ciclo
						if (totalvales == 0)
							break;
					}
				}
				#endregion
			}

			//  Si hubo pago con efectivo pago con efectivo
			if (Operacion.PagoEfectivo > 0)
			{
				//  El efectivo se ingresa a la cuenta de flujo de caja
				CuentaFlujo = new Entities.CuentaFlujoCajas();
				CuentaFlujo.Abono = Operacion.PagoEfectivo;
				CuentaFlujo.Caja_ID = Sesion.Caja_ID.Value;
				CuentaFlujo.Cargo = 0;
				CuentaFlujo.Concepto = "PAGO CON EFECTIVO";
				CuentaFlujo.Fecha = getDate;
				CuentaFlujo.Moneda_ID = 1; // El efectivo
				CuentaFlujo.Saldo = 0; // Se calcula automáticamente
				CuentaFlujo.Sesion_ID = Sesion.Sesion_ID;
				CuentaFlujo.Ticket_ID = Ticket.Ticket_ID;
				CuentaFlujo.Usuario_ID = Sesion.Usuario_ID;
				CuentaFlujo.Create();
			}

			//  Si hay cambio            
			if (Math.Abs(Operacion.Cambio) > 0)
			{
				//  El cambio, en efectivo, sale de la caja
				CuentaFlujo = new Entities.CuentaFlujoCajas();
				CuentaFlujo.Abono = 0;
				CuentaFlujo.Caja_ID = Sesion.Caja_ID.Value;
				CuentaFlujo.Cargo = Math.Abs(Operacion.Cambio);
				CuentaFlujo.Concepto = "CAMBIO / PAGO CONDUCTOR";
				CuentaFlujo.Fecha = getDate;
				CuentaFlujo.Moneda_ID = 1; // El efectivo
				CuentaFlujo.Saldo = 0; // Se calcula automáticamente
				CuentaFlujo.Sesion_ID = Sesion.Sesion_ID;
				CuentaFlujo.Ticket_ID = Ticket.Ticket_ID;
				CuentaFlujo.Usuario_ID = Sesion.Usuario_ID;
				CuentaFlujo.Create();
			}

			//  Solamente si hay servicios, estos se ingresan
			//  a la cuenta de flujo de caja
			if (Math.Abs(Operacion.TotalServicios) > 0)
			{
				CuentaFlujo.Cargo = 0;
				CuentaFlujo.Caja_ID = Sesion.Caja_ID.Value;
				CuentaFlujo.Abono = Math.Abs(Operacion.TotalServicios);
				CuentaFlujo.Concepto = "CANJE DE BOLETOS";
				CuentaFlujo.Fecha = getDate;
				CuentaFlujo.Moneda_ID = 2; // Boletos de Servicios
				CuentaFlujo.Saldo = 0; // Se calcula automáticamente
				CuentaFlujo.Sesion_ID = Sesion.Sesion_ID;
				CuentaFlujo.Ticket_ID = Ticket.Ticket_ID;
				CuentaFlujo.Usuario_ID = Sesion.Usuario_ID;
				CuentaFlujo.Create();
			}

			// Dar de baja los vales
			foreach (Entities.ValesPrepagados vale in Vales)
			{
				MarcarVale(vale);
			}

			// Dar de baja las planillas fiscales
			foreach (Entities.PlanillasFiscales planilla in Planillas)
			{
				MarcarPlanilla(planilla);
			}

			//  Dar de baja los servicios que existan
			foreach (Entities.ServiciosPendientesConductor sp in this.ServiciosPendientes)
			{
				MarcarServicio(sp);
			}
		}