findOne($id); $tipos = model(TipoPago::class)->orderByAsc('descripcion')->findMany(); $estados = model(TipoEstadoPago::class)->orderByAsc('descripcion')->findMany(); return view('ventas.pagos.edit', compact('pago', 'asociado', 'id_asociado', 'tipos', 'estados')); } public static function editar() { $id = get('pago'); $pago = model(Pago::class)->findOne($id); $fp = Carbon::createFromDate(post('year'), post('month'), post('day'), config('app.timezone')); $tipo = model(TipoPago::class)->findOne(post('tipo')); $valor = correctNumber(post('valor')); $banco = model(Banco::class)->where('nombre', post('banco'))->findOne(); $fe = Carbon::createFromDate(post('yearestado'), post('monthestado'), post('dayestado'), config('app.timezone')); $estado = model(TipoEstadoPago::class)->findOne(post('estado')); $uf = uf($fe); $est = $pago->estado(); if ($est->fecha != $fe->format('Y-m-d')) { $est->fecha = $fe->format('Y-m-d'); $pago->uf = $uf->uf->value; } if ($est->estado != $estado->id) { $est->estado = $estado->id; } if ($pago->fecha != $fp->format('Y-m-d')) { $pago->fecha = $fp->format('Y-m-d'); } if ($pago->tipo != $tipo->id) { $pago->tipo = $tipo->id; } if ($pago->valor != $valor) { $pago->valor = $valor; } if ($pago->identificador != post('identificador')) { $pago->identificador = post('identificador'); } if ($pago->pagador != post('pagador')) { $pago->pagador = post('pagador'); } if ($pago->banco != $banco->id) { $pago->banco = $banco->id; } $est->save(); $pago->save(); header('Location: ' . url('', ['p' => get('asociado') . 's', 'a' => 'show', get('asociado') => get(get('asociado'))])); } public static function pendientes() { $ventas = model(Venta::class) ->select('venta.*') ->rawJoin('JOIN (SELECT e1.* FROM estado_venta e1 JOIN (SELECT venta, MAX(id) AS id FROM estado_venta GROUP BY venta) e0 ON e0.id = e1.id)', ['ev.venta', '=', 'venta.id'], 'ev') ->join('tipo_estado_venta', ['te.id', '=', 'ev.estado'], 'te') ->join('propiedad', ['propiedad.id', '=', 'venta.propiedad']) ->join('unidad', ['unidad.id', '=', 'propiedad.unidad_principal']) ->join('proyecto', ['proyecto.id', '=', 'unidad.proyecto']) ->where('te.activa', 1) ->orderByAsc('proyecto.descripcion') ->orderByExpr('LPAD(unidad.descripcion, 4, "0")') ->findMany(); $n = 30; $mod = floor(count($ventas) / $n); $i_rest = count($ventas) - count($ventas) % $mod + 1; $rest = count($ventas) - $i_rest; $lots = (object) ['size' => $mod, 'N' => $n, 'rest' => (object) [ 'size' => $rest, 'start' => $i_rest ] ]; return view('ventas.pagos.pendientes', compact('ventas', 'lots')); } public static function para_pendientes() { $timezone = config('app.timezone'); $today = Carbon::today($timezone); $days = []; $fechas = []; for ($i = $today->copy()->subDays(15); $i <= $today->copy()->addDays(15); $i = $i->copy()->addDay()) { $days []= $i->format('Y-m-d'); $fechas []= $i->format('d-m-Y'); } $pagos_pendientes = model(Pago::class) ->select('estado_pago.fecha') ->selectExpr('COUNT(pago.id)', 'cantidad') ->join('cuota', ['cuota.pago', '=', 'pago.id']) ->join('venta', ['venta.pie', '=', 'cuota.pie']) ->filter('filterEstado') ->where('estado_pago.estado', 0) ->where('venta.estado', 1) ->whereGte('estado_pago.fecha', $today->copy()->subDays(15)->format('Y-m-d')) ->whereLte('estado_pago.fecha', $today->copy()->addDays(15)->format('Y-m-d')) ->orderByAsc('estado_pago.fecha') ->groupBy('estado_pago.fecha') ->findMany(); $valores = array_fill(0, count($days), 0); $anteriores = model(Pago::class) ->join('cuota', ['cuota.pago', '=', 'pago.id']) ->join('venta', ['venta.pie', '=', 'cuota.pie']) ->filter('filterEstado') ->where('estado_pago.estado', 0) ->where('venta.estado', 1) ->whereLt('estado_pago.fecha', $today->copy()->subDays(15)->format('Y-m-d')) ->count(); foreach ($pagos_pendientes as $pago) { $valores[array_search($pago->fecha()->format('Y-m-d'), $days)] = $pago->cantidad; } $acum = []; $sum = 0; foreach ($valores as $valor) { $sum += $valor; $acum []= $sum; } $t = array_search($today->format('Y-m-d'), $days); $color = array_merge( array_fill(0, $t, 'red'), ['blue'], array_fill(0, count($days) - $t, 'green') ); $pagos = ['data' => $acum, 'historico' => $anteriores, 'backgroundColor' => $color]; $abonos_pendientes = model(Pago::class) ->select('estado_pago.fecha') ->selectExpr('COUNT(pago.id)', 'cantidad') ->filter('filterEstado') ->where('estado_pago.estado', 1) ->whereGte('estado_pago.fecha', $today->copy()->subDays(15)->format('Y-m-d')) ->whereLt('estado_pago.fecha', $today->copy()->format('Y-m-d')) ->orderByAsc('estado_pago.fecha') ->groupBy('estado_pago.fecha') ->findMany(); $anteriores = model(Pago::class) ->join('cuota', ['cuota.pago', '=', 'pago.id']) ->join('venta', ['venta.pie', '=', 'cuota.pie']) ->filter('filterEstado') ->where('estado_pago.estado', 1) ->where('venta.estado', 1) ->whereLt('estado_pago.fecha', $today->copy()->subDays(15)->format('Y-m-d')) ->count(); $valores = array_fill(0, count($days), 0); foreach ($abonos_pendientes as $pago) { $valores[array_search($pago->fecha()->format('Y-m-d'), $days)] = $pago->cantidad; } $acum = []; $sum = 0; foreach ($valores as $valor) { $sum += $valor; $acum []= $sum; } $color = array_fill(0, count($pagos), 'rgb(200, 0, 0)'); $abonos = ['data' => $acum, 'historico' => $anteriores, 'backgroundColor' => $color]; $output = ['count' => count($days), 'fechas' => $fechas, 'pagos' => $pagos, 'abonos' => $abonos]; echo json_encode($output); } public static function para_abonar() { $ids = json_decode(post('ids')); //$id = get('id'); function checkPago(&$pagos, $tipo, $pago) { if (!$pago) { return; } if (!$pago->estado()) { $pagos []= [ 'tipo' => $tipo, 'pago' => $pago->asArray(), 'estado' => -1 ]; return; } if ($pago->estado()->tipo()->descripcion == 'depositado') { $pagos []= [ 'tipo' => $tipo, 'pago' => $pago->asArray(), 'fecha' => format('shortDate', $pago->estado()->fecha), 'valor' => format('pesos', $pago->valor, true), 'estado' => 1 ]; } } $output = []; foreach ($ids as $id) { $venta = model(Venta::class)->findOne($id); if ($venta->estado()->tipo()->activa == 0) { $output []= ['status' => -1, 'venta' => $venta->id]; continue; } $pagos = []; if ($venta->pie()) { foreach ($venta->pie()->cuotas() as $cuota) { checkPago($pagos, 'Pie', $cuota->pago()); } if ($venta->pie()->reajuste()) { checkPago($pagos, 'Reajuste', $venta->pie()->reajuste()); } } if ($venta->credito()) { checkPago($pagos, 'Credito', $venta->credito()->pago()); } if ($venta->escritura()) { checkPago($pagos, 'Abono Escritura', $venta->escritura()->pago()); } if ($venta->subsidio()) { checkPago($pagos, 'Subsidio', $venta->subsidio()->subsidio()); checkPago($pagos, 'Ahorro', $venta->subsidio()->pago()); } if (count($pagos) <= 0) { $output []= ['status' => -1, 'venta' => $venta->id]; continue; } $output []= [ 'status' => 1, 'proyecto' => $venta->proyecto()->descripcion, 'venta' => $venta->id, 'propietario' => $venta->propietario()->nombreCompleto(), 'departamento' => $venta->unidad()->descripcion, 'pagos' => $pagos ]; } return json_encode($output); } public static function rebotes() { $ids = json_decode(post('ids')); $response = []; foreach ($ids as $id) { //$id = get('id'); $venta = model(Venta::class)->findOne($id); $rebotes = $venta->pagos(-1); if (count($rebotes) < 1) { $response []= ['status' => -1, 'venta' => $venta->id]; continue; } usort($rebotes, function($a, $b) { return $b->estado()->fecha()->diffInDays($a->estado()->fecha(), false); }); $output = []; $textos = []; foreach ($rebotes as $rebote) { $fuente = $rebote->fuente()[0]; $text = '