src/Controller/ToDoController.php line 2773

Open in your IDE?
  1. <?php
  2. /**
  3.  * Created by Mediterranean Develup Solutions
  4.  * User: jorge.defreitas@develup.solutions
  5.  * Date: 06/07/2017
  6.  * Time: 14:26
  7.  */
  8. namespace App\Controller;
  9. use App\Entity\Cities;
  10. use App\Entity\Client;
  11. use App\Entity\ClientContact;
  12. use App\Entity\Country;
  13. use App\Entity\Group;
  14. use App\Entity\Provinces;
  15. use App\Entity\Regions;
  16. use App\Entity\SettingsTeam;
  17. use App\Entity\Supplier;
  18. use App\Entity\SupplierContact;
  19. use App\Entity\SupplierIdeaServicesControl;
  20. use App\Entity\ToDo;
  21. use App\Entity\ToDoComments;
  22. use App\Entity\ToDoLogs;
  23. use App\Form\ToDoCommentsType;
  24. use App\Form\ToDoType;
  25. use App\Entity\SupplierSettingsType;
  26. use App\Entity\User;
  27. use App\MDS\EventsBundle\Entity\Proposal;
  28. use App\MDS\EventsBundle\Entity\ProposalInvoice;
  29. use App\MDS\EventsBundle\Entity\ProposalSupplierServicesCosts;
  30. use App\MDS\EventsBundle\Entity\ProposalSupplierServicesCostsClient;
  31. use App\MDS\StatisticsBundle\Controller\InvoiceStatisticsController;
  32. use Doctrine\ORM\EntityManagerInterface;
  33. use Psr\Log\LoggerInterface;
  34. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  35. use Symfony\Component\Routing\Annotation\Route;
  36. use Symfony\Component\HttpFoundation\JsonResponse;
  37. use Symfony\Component\HttpFoundation\Request;
  38. use Symfony\Component\HttpFoundation\Response;
  39. use Symfony\Contracts\Translation\TranslatorInterface;
  40. class ToDoController extends AbstractController
  41. {
  42.     private $translator;
  43.     public function __construct(TranslatorInterface $translator) {
  44.         $this->translator $translator;
  45.     }
  46.     
  47.     /**
  48.      * @Route("/statistics/clientbenefit/{id}", name="statistics_client_benefit_new")
  49.      */
  50.     public function statisticsClientBenefitAction($idRequest $request){
  51.         $em $this->getDoctrine()->getManager();
  52.         $proposal_inv $em->getRepository(Proposal::class)->findBy(
  53.             array(
  54.                 'clientId' => $id,
  55.                 'status' => 'Invoiced'
  56.             )
  57.         );
  58.         $agent_user = array();
  59.         $commercial_user = array();
  60.         $client_consulta = array();
  61.         $group_consulta = array();
  62.         $data = array();
  63.         $totales_net "0";
  64.         $totales_total "0";
  65.         $totales_benefit "0";
  66.         $totales_benefit_por "0";
  67.         $staticObject= new InvoiceStatisticsController();
  68.         d($proposal_inv);
  69.         foreach($proposal_inv as $proposal ){
  70.             $invoice_numero $em->getRepository(ProposalInvoice::class)->findOneByProposalId($proposal->getId());
  71. //            if ($listar_invoice == "Invoiced" and !empty($invoice_numero)){
  72.                 if (!empty($invoice_numero)){
  73.                     $numerofactura $invoice_numero->getNumber();
  74.                 }else{
  75.                     $numerofactura "NF";
  76.                 }
  77.                 $client_data $em->getRepository(Client::class)->findOneById($proposal->getClientId());
  78.                 $clientGroup_data $em->getRepository(Group::class)->findOneById($client_data->getGroupId());
  79.                 if (!empty($clientGroup_data)){
  80.                     $clientGroup $clientGroup_data->getTitle();
  81.                 }else{
  82.                     $clientGroup "-";
  83.                 }
  84.                 $confirmed_list $em->getRepository(ProposalSupplierServicesCostsClient::class)->findByProposalId($proposal->getId());
  85. //                d($confirmed_list);
  86.                 $total_neto_client "0";
  87.                 $total_con_iva_client "0";
  88.                 $data_iva "0";
  89.                 if (!empty($confirmed_list)){
  90. //                    $data_iva = array();
  91.                     $reset_iva 0;
  92.                     $totales_ivas_all = array();
  93.                     foreach($confirmed_list as $confirmed ){
  94.                         $idcat $confirmed->getServiceCatId();
  95.                         $price $confirmed->getPrice();
  96.                         $units $confirmed->getUnits();
  97.                         $pax $confirmed->getPax();
  98.                         $opcommission $confirmed->getOpCommission();
  99.                         $commission $confirmed->getCommission();
  100.                         $opover $confirmed->getOpOver();
  101.                         $over $confirmed->getOver();
  102.                         $opiva $confirmed->getOpIva();
  103.                         $iva_client $confirmed->getIva();
  104.                         $dateInAt $confirmed->getDateInAt();
  105.                         $dateOutAt $confirmed->getDateOutAt();
  106.                         if (!is_null($dateInAt) and !is_null($dateOutAt)){
  107.                             $days $dateInAt->diff($dateOutAt);
  108.                             $day $days->days;
  109.                         }else{
  110.                             $day "0";
  111.                         }
  112.                         $calculos $staticObject->CalculoTotalesservices($price$units$pax$day$opcommission$commission$opover$over$opiva$iva_client$idcat);
  113.                         d($calculos);
  114.                         $total_neto_client += $calculos['total_neto'];
  115.                         //                        $total_iva_client += $calculos['sub_total_iva'];
  116.                         $total_con_iva_client += $calculos['total'];
  117.                         $data_iva += $calculos['sub_total_iva'];
  118.                         $cost_data $em->getRepository(ProposalSupplierServicesCosts::class)->findByProposalId($proposal->getId());
  119.                         $cost_neto 0;
  120.                         foreach($cost_data as $costdata ){
  121.                             if ($costdata->getTotalServices() != "0"){
  122.                                 if ($costdata->getServiceCatId() != "0"){
  123.                                     if (empty($costdata->getCommission())){
  124.                                         $commission "0";
  125.                                     }else{
  126.                                         $commission $costdata->getCommission();
  127.                                     }
  128.                                     if (empty($costdata->getTotalServices())){
  129.                                         $cost_total "0";
  130.                                     }else{
  131.                                         $cost_total $costdata->getTotalServices();
  132.                                     }
  133.                                     $cost_base $cost_total *  ( ( 100 $commission ) / 100);
  134.                                     if ($costdata->getOpIva() == "0"){
  135.                                         if (!empty($costdata->getIvaServices()) or $costdata->getIvaServices() == "0"){
  136.                                             $cost_base $cost_base  /  ($costdata->getIvaServices() / 100 1);
  137.                                         }
  138.                                     }
  139.                                     $cost_neto $cost_base $cost_neto;
  140.                                 }
  141.                             }
  142.                         }
  143.                     }
  144.                 }
  145.                 $invoice = array(
  146.                     'id' => 'NID',
  147.                     'type' => 'Confirmed',
  148.                     'proposalId' => $confirmed->getProposalId(),
  149.                     'number' => $numerofactura,
  150.                     'dateAt' => $proposal->getDateEventStarAt(),
  151.                     'totalnet' => $total_neto_client,
  152.                     'vat' => $data_iva,
  153.                     'total' => $total_con_iva_client,
  154.                 );
  155.                 $benefit $total_neto_client $cost_neto;
  156.                 $benefit_por $benefit $total_neto_client 100;
  157.             $agent $proposal->getAgentId();
  158.             $commercial $proposal->getAgencommercialId();
  159.             $groupclient = ($em->getRepository(Client::class)->findOneById($proposal->getClientId()))->getGroupId();
  160.             $client $proposal->getClientId();
  161.                 if (is_null($agent) and is_null($commercial) and is_null($groupclient) and is_null($client)){
  162.                     $data[] = array(
  163.                         'invoice' => $invoice,
  164.                         'client' => $client_data,
  165.                         'clientgroup' => $clientGroup,
  166.                         'benefit' => $benefit,
  167.                         'benefitpor' => $benefit_por,
  168.                         'nameevent' => $proposal->getName(),
  169.                         'status' => $proposal->getStatus()
  170.                     );
  171.                     $totales_benefit += $benefit;
  172.                     $totalnet $total_neto_client;
  173.                     $totales_net += $totalnet;
  174.                     $total $total_con_iva_client;
  175.                     $totales_total += $total;
  176.                     $totales_benefit_por $totales_benefit $totales_net 100;
  177.                 }else{
  178.                     if (!is_null($agent) and is_null($commercial) and is_null($groupclient) and is_null($client)){
  179.                         if ($proposal->getAgentId() == $agent){
  180.                             $data[] = array(
  181.                                 'invoice' => $invoice,
  182.                                 'client' => $client_data,
  183.                                 'clientgroup' => $clientGroup,
  184.                                 'benefit' => $benefit,
  185.                                 'benefitpor' => $benefit_por,
  186.                                 'nameevent' => $proposal->getName(),
  187.                                 'status' => $proposal->getStatus()
  188.                             );
  189.                             $agent_user $em->getRepository(User::class)->findOneBy(
  190.                                 array(
  191.                                     'id' => $agent
  192.                                 )
  193.                             );
  194.                             $totales_benefit += $benefit;
  195.                             $totalnet $total_neto_client;
  196.                             $totales_net += $totalnet;
  197.                             $total $total_con_iva_client;
  198.                             $totales_total += $total;
  199.                             $totales_benefit_por $totales_benefit $totales_net 100;
  200.                         }
  201.                     }
  202.                     if (is_null($agent) and !is_null($commercial) and is_null($groupclient) and is_null($client)){
  203.                         if ($proposal->getAgencommercialId() == $commercial){
  204.                             $data[] = array(
  205.                                 'invoice' => $invoice,
  206.                                 'client' => $client_data,
  207.                                 'clientgroup' => $clientGroup,
  208.                                 'benefit' => $benefit,
  209.                                 'benefitpor' => $benefit_por,
  210.                                 'nameevent' => $proposal->getName(),
  211.                                 'status' => $proposal->getStatus()
  212.                             );
  213.                             $commercial_user $em->getRepository(User::class)->findOneBy(
  214.                                 array(
  215.                                     'id' => $commercial
  216.                                 )
  217.                             );
  218.                             $totales_benefit += $benefit;
  219.                             $totalnet $total_neto_client;
  220.                             $totales_net += $totalnet;
  221.                             $total $total_con_iva_client;
  222.                             $totales_total += $total;
  223.                             $totales_benefit_por $totales_benefit $totales_net 100;
  224.                         }
  225.                     }
  226.                     if (is_null($agent) and is_null($commercial) and !is_null($groupclient) and is_null($client)){
  227.                         if ($client_data->getGroupId() == $groupclient){
  228.                             $data[] = array(
  229.                                 'invoice' => $invoice,
  230.                                 'client' => $client_data,
  231.                                 'clientgroup' => $clientGroup,
  232.                                 'benefit' => $benefit,
  233.                                 'benefitpor' => $benefit_por,
  234.                                 'nameevent' => $proposal->getName(),
  235.                                 'status' => $proposal->getStatus()
  236.                             );
  237.                             $group_consulta $em->getRepository(Group::class)->findOneBy(
  238.                                 array(
  239.                                     'id' => $groupclient
  240.                                 )
  241.                             );
  242.                             $totales_benefit += $benefit;
  243.                             $totalnet $total_neto_client;
  244.                             $totales_net += $totalnet;
  245.                             $total $total_con_iva_client;
  246.                             $totales_total += $total;
  247.                             $totales_benefit_por $totales_benefit $totales_net 100;
  248.                         }
  249.                     }
  250.                     if (is_null($agent) and is_null($commercial) and is_null($groupclient) and !is_null($client)){
  251.                         if ($client_data->getId() == $client){
  252.                             $data[] = array(
  253.                                 'invoice' => $invoice,
  254.                                 'client' => $client_data,
  255.                                 'clientgroup' => $clientGroup,
  256.                                 'benefit' => $benefit,
  257.                                 'benefitpor' => $benefit_por,
  258.                                 'nameevent' => $proposal->getName(),
  259.                                 'status' => $proposal->getStatus()
  260.                             );
  261.                             $client_consulta $em->getRepository(Client::class)->findOneBy(
  262.                                 array(
  263.                                     'id' => $client
  264.                                 )
  265.                             );
  266.                             $totales_benefit += $benefit;
  267.                             $totalnet $total_neto_client;
  268.                             $totales_net += $totalnet;
  269.                             $total $total_con_iva_client;
  270.                             $totales_total += $total;
  271.                             $totales_benefit_por $totales_benefit $totales_net 100;
  272.                         }
  273.                     }
  274.                 }
  275. //            }
  276. //            if ($listar_invoice == "Confirmed"){
  277.                 if (!empty($invoice_numero)){
  278.                     $numerofactura $invoice_numero->getNumber();
  279.                 }else{
  280.                     $numerofactura "NF";
  281.                 }
  282.                 $client_data $em->getRepository(Client::class)->findOneById($proposal->getClientId());
  283.                 $clientGroup_data $em->getRepository(Group::class)->findOneById($client_data->getGroupId());
  284.                 if (!empty($clientGroup_data)){
  285.                     $clientGroup $clientGroup_data->getTitle();
  286.                 }else{
  287.                     $clientGroup "-";
  288.                 }
  289.                 $confirmed_list $em->getRepository(ProposalSupplierServicesCostsClient::class)->findByProposalId($proposal->getId());
  290.                 $data_iva "0";
  291.                 $total_neto_client "0";
  292.                 $total_con_iva_client "0";
  293.                 if (!empty($confirmed_list)){
  294.                     $reset_iva 0;
  295.                     $totales_ivas_all = array();
  296.                     foreach($confirmed_list as $confirmed ){
  297.                         $idcat $confirmed->getServiceCatId();
  298.                         $price $confirmed->getPrice();
  299.                         $units $confirmed->getUnits();
  300.                         $pax $confirmed->getPax();
  301.                         $opcommission $confirmed->getOpCommission();
  302.                         $commission $confirmed->getCommission();
  303.                         $opover $confirmed->getOpOver();
  304.                         $over $confirmed->getOver();
  305.                         $opiva $confirmed->getOpIva();
  306.                         $iva_client $confirmed->getIva();
  307.                         $dateInAt $confirmed->getDateInAt();
  308.                         $dateOutAt $confirmed->getDateOutAt();
  309.                         if (!is_null($dateInAt) and !is_null($dateOutAt)){
  310.                             $days $dateInAt->diff($dateOutAt);
  311.                             $day $days->days;
  312.                         }else{
  313.                             $day "0";
  314.                         }
  315.                         $calculos $staticObject->CalculoTotalesservices($price$units$pax$day$opcommission$commission$opover$over$opiva$iva_client$idcat);
  316.                         $total_neto_client += $calculos['total_neto'];
  317.                         //                        $total_iva_client += $calculos['sub_total_iva'];
  318.                         $total_con_iva_client += $calculos['total'];
  319.                         //                        if (empty($totales_ivas_all[$iva_client])){
  320.                         //                            $totales_ivas_all[$iva_client]= 0;
  321.                         //                        }
  322.                         //                        $totales_ivas_all[$iva_client] += $calculos['sub_total_iva'];
  323.                         //
  324.                         //                        $data_iva[$iva_client] = array(
  325.                         //                            'iva' => $iva_client,
  326.                         //                            'ivas' => $totales_ivas_all[$iva_client],
  327.                         //                        );
  328.                         $data_iva += $calculos['sub_total_iva'];
  329.                         $cost_data $em->getRepository(ProposalSupplierServicesCosts::class)->findByProposalId($proposal->getId());
  330.                         $cost_neto 0;
  331.                         foreach($cost_data as $costdata ){
  332.                             if ($costdata->getTotalServices() != "0"){
  333.                                 if ($costdata->getServiceCatId() != "0"){
  334.                                     if (empty($costdata->getCommission())){
  335.                                         $commission "0";
  336.                                     }else{
  337.                                         $commission $costdata->getCommission();
  338.                                     }
  339.                                     if (empty($costdata->getTotalServices())){
  340.                                         $cost_total "0";
  341.                                     }else{
  342.                                         $cost_total $costdata->getTotalServices();
  343.                                     }
  344.                                     $cost_base $cost_total *  ( ( 100 $commission ) / 100);
  345.                                     if ($costdata->getOpIva() == "0"){
  346.                                         if (!empty($costdata->getIvaServices()) or $costdata->getIvaServices() == "0"){
  347.                                             $cost_base $cost_base  /  ($costdata->getIvaServices() / 100 1);
  348.                                         }
  349.                                     }
  350.                                     $cost_neto $cost_base $cost_neto;
  351.                                 }
  352.                             }
  353.                         }
  354.                     }
  355.                 }
  356.                 $invoice = array(
  357.                     'id' => 'NID',
  358.                     'type' => 'Confirmed',
  359.                     'proposalId' => $proposal->getId(),
  360.                     'number' => $numerofactura,
  361.                     'dateAt' => $proposal->getDateEventStarAt(),
  362.                     'totalnet' => $total_neto_client,
  363.                     'vat' => $data_iva,
  364.                     'total' => $total_con_iva_client,
  365.                 );
  366.                 $benefit $total_neto_client $cost_neto;
  367.                 $benefit_por $benefit $total_neto_client 100;
  368.                 //                    if (empty($total_neto_client)){
  369.                 //                    $benefit = "0";
  370.                 //                    $benefit_por = "0";
  371.                 //                    }else{
  372.                 //                        $benefit = $invoice->getTotalnet() - $total_neto_client;
  373.                 //                        $benefit_por = $benefit / $invoice->getTotalnet() * 100;
  374.                 //                    }
  375. //            d($agent,$commercial,$groupclient,$client);
  376.                 if (is_null($agent) and is_null($commercial) and is_null($groupclient) and is_null($client)){
  377.                     $data[] = array(
  378.                         'invoice' => $invoice,
  379.                         'client' => $client_data,
  380.                         'clientgroup' => $clientGroup,
  381.                         'benefit' => $benefit,
  382.                         'benefitpor' => $benefit_por,
  383.                         'nameevent' => $proposal->getName(),
  384.                         'status' => $proposal->getStatus()
  385.                     );
  386.                     $totales_benefit += $benefit;
  387.                     $totalnet $total_neto_client;
  388.                     $totales_net += $totalnet;
  389.                     $total $total_con_iva_client;
  390.                     $totales_total += $total;
  391.                     $totales_benefit_por $totales_benefit $totales_net 100;
  392.                 }else{
  393.                     if (!is_null($agent) and is_null($commercial) and is_null($groupclient) and is_null($client)){
  394.                         if ($proposal->getAgentId() == $agent){
  395.                             $data[] = array(
  396.                                 'invoice' => $invoice,
  397.                                 'client' => $client_data,
  398.                                 'clientgroup' => $clientGroup,
  399.                                 'benefit' => $benefit,
  400.                                 'benefitpor' => $benefit_por,
  401.                                 'nameevent' => $proposal->getName(),
  402.                                 'status' => $proposal->getStatus()
  403.                             );
  404.                             $agent_user $em->getRepository(User::class)->findOneBy(
  405.                                 array(
  406.                                     'id' => $agent
  407.                                 )
  408.                             );
  409.                             $totales_benefit += $benefit;
  410.                             $totalnet $total_neto_client;
  411.                             $totales_net += $totalnet;
  412.                             $total $total_con_iva_client;
  413.                             $totales_total += $total;
  414.                             $totales_benefit_por $totales_benefit $totales_net 100;
  415.                         }
  416.                     }
  417.                     if (is_null($agent) and !is_null($commercial) and  is_null($groupclient) and is_null($client)){
  418.                         if ($proposal->getAgencommercialId() == $commercial){
  419.                             $data[] = array(
  420.                                 'invoice' => $invoice,
  421.                                 'client' => $client_data,
  422.                                 'clientgroup' => $clientGroup,
  423.                                 'benefit' => $benefit,
  424.                                 'benefitpor' => $benefit_por,
  425.                                 'nameevent' => $proposal->getName(),
  426.                                 'status' => $proposal->getStatus()
  427.                             );
  428.                             $commercial_user $em->getRepository(User::class)->findOneBy(
  429.                                 array(
  430.                                     'id' => $agent
  431.                                 )
  432.                             );
  433.                             $totales_benefit += $benefit;
  434.                             $totalnet $total_neto_client;
  435.                             $totales_net += $totalnet;
  436.                             $total $total_con_iva_client;
  437.                             $totales_total += $total;
  438.                             $totales_benefit_por $totales_benefit $totales_net 100;
  439.                         }
  440.                     }
  441.                     if (is_null($agent) and is_null($commercial) and !is_null($groupclient) and is_null($client)){
  442.                         if ($client_data->getGroupId() == $groupclient){
  443.                             $data[] = array(
  444.                                 'invoice' => $invoice,
  445.                                 'client' => $client_data,
  446.                                 'clientgroup' => $clientGroup,
  447.                                 'benefit' => $benefit,
  448.                                 'benefitpor' => $benefit_por,
  449.                                 'nameevent' => $proposal->getName(),
  450.                                 'status' => $proposal->getStatus()
  451.                             );
  452.                             $group_consulta $em->getRepository(Group::class)->findOneBy(
  453.                                 array(
  454.                                     'id' => $groupclient
  455.                                 )
  456.                             );
  457.                             $totales_benefit += $benefit;
  458.                             $totalnet $total_neto_client;
  459.                             $totales_net += $totalnet;
  460.                             $total $total_con_iva_client;
  461.                             $totales_total += $total;
  462.                             $totales_benefit_por $totales_benefit $totales_net 100;
  463.                         }
  464.                     }
  465. //                    d($agent,$commercial,$groupclient,$client);
  466.                     if (is_null($agent) and is_null($commercial) and is_null($groupclient) and !is_null($client)){
  467.                         if ($client_data->getId() == $client){
  468.                             $data[] = array(
  469.                                 'invoice' => $invoice,
  470.                                 'client' => $client_data,
  471.                                 'clientgroup' => $clientGroup,
  472.                                 'benefit' => $benefit,
  473.                                 'benefitpor' => $benefit_por,
  474.                                 'nameevent' => $proposal->getName(),
  475.                                 'status' => $proposal->getStatus()
  476.                             );
  477.                             $client_consulta $em->getRepository(Client::class)->findOneBy(
  478.                                 array(
  479.                                     'id' => $client
  480.                                 )
  481.                             );
  482.                             $totales_benefit += $benefit;
  483.                             $totalnet $total_neto_client;
  484.                             $totales_net += $totalnet;
  485.                             $total $total_con_iva_client;
  486.                             $totales_total += $total;
  487.                             $totales_benefit_por $totales_benefit $totales_net 100;
  488.                         }
  489.                     }
  490.                 }
  491.             d($totales_benefit,$totalnet,$totales_net,$total,$totales_total,$totales_benefit_por);
  492.         }
  493.         d($totales_benefit,$totalnet,$totales_net,$total,$totales_total,$totales_benefit_por);
  494.     }
  495.     /**
  496.      * @Route("/todo", name="todo_home")
  497.      */
  498.     public function indexAction(Request $request)
  499.     {
  500.         return $this->redirectToRoute('todo_index');
  501.     }
  502.     /**
  503.      * @Route("/todo/add", name="todo_add")
  504.      * @param Request $request
  505.      * @return Response
  506.      */
  507.     public function addAction(Request $request)
  508.     {
  509.         $temp $request->query->all();                                                 // {{id}} {{title}} {{agentId}} {{clientId}}
  510.         $em $this->getDoctrine()->getManager();
  511.         $propopsal_consulta $em->getRepository(Proposal::class)->findAll();
  512.         $client_consulta $em->getRepository(Client::class)->findAll();
  513.         $suppliers_consulta $em->getRepository(Supplier::class)->findAll();
  514.         $todo = new ToDo();
  515.         if (sizeof($temp) != 0) {                                                          //En el Request vienen los campos que relacionan el ToDo con el Proposal
  516.             $todo->setIdToDoControl($temp['id']);
  517.             $todo->setTitle($temp['title']);
  518.             $todo->setOwnerToDo($temp['agentId']);
  519.             $todo->setidToDoClient($temp['clientId']);
  520.             $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  521.             $user_id $user_logueado->getId();
  522.             $todo->setBossToDo($user_id);
  523.         }
  524.         $form $this->createToDoForm($todo);
  525.         return $this->render('todo/newadd-todo.html.twig', array('form' => $form->createView(),
  526.                                                                 'propopsal_consulta' => $propopsal_consulta,
  527.                                                                 'client_consulta' => $client_consulta,
  528.                                                                 'suppliers_consulta' => $suppliers_consulta));
  529. //        return $this->render('todo/add-todo.html.twig', array('form' => $form->createView()));
  530.     }
  531.     private function createToDoForm(ToDo $entity)
  532.     {
  533.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  534.         $user_id $user_logueado->getId();
  535.         if (empty($entity->getBossToDo())) {
  536.             //Si llega vacio el campo del boss se le asigna el usuario logeado
  537.             $entity->setBossToDo($user_id);
  538.         }
  539.         if (empty($entity->getFolowerToDo()) and empty($entity->getOwnerToDo())){
  540.             //Si se recibe solo el creador de la tarea, la tarea se le asigna al creador para evitar problemas de NULL
  541.             $entity->setOwnerToDo($user_id);
  542.         }
  543.             $actualTime = new \Datetime();
  544.         $form $this->createForm(ToDoType::class, $entity, array(
  545.             'action' => $this->generateUrl('todo_create'),
  546.             'method' => 'POST'
  547.         ));
  548.         return $form;
  549.     }
  550.     /**
  551.      * @Route("/todo/create", name="todo_create")
  552.      */
  553.     public function createAction(Request $request)
  554.     {
  555.         $todo = new ToDo();
  556.         $form $this->createToDoForm($todo);
  557.         $form->handleRequest($request);
  558.         $em $this->getDoctrine()->getManager();
  559.         if ($form->isValid()) {
  560.             if (empty($todo->getDetails())) {
  561.                 $todo->setDetails(' ');
  562.             }
  563.             if (empty($todo->getDetails2())) {
  564.                // $todo->setDetails2(' ');                  //esta nullable true
  565.             }
  566.             //IdToDoControl vacio o en 0 indica que es una tarea padre(no es hija de otra tarea)
  567.             if (empty($todo->getIdToDoControl())) {
  568.                 $todo->setIdToDoControl('0');
  569.             }
  570.             if (empty($todo->getTitle())) {
  571.                 $todo->setTitle(' ');
  572.             }
  573.             if (!(empty($todo->getCreatedAt()))) {
  574.                 $todo->setCreatedAtValue($todo->getCreatedAt());
  575.             }
  576.             //Obtengo de los objetos el id del creador(boss), encargado(owner) y seguidor(folower) de la tarea
  577.             if (!(empty($todo->getOwnerToDo()))) { //El encargado de la tarea puede estar vacio si aun no se ha decidido a quien se le va a asignar
  578.                 $ownerToDo $form->get('ownerToDo')->getData();
  579.                 $todo->setOwnerToDo($ownerToDo->getId());
  580.             } else {
  581.                 $todo->setOwnerToDo(0);                                                         //"0" es el item: "Select a person"
  582.             }
  583.             if (!(empty($todo->getFolowerToDo()))) { //Puede no haber un seguidor de la tarea
  584.                 $folowerToDo $form->get('folowerToDo')->getData();
  585.                 $todo->setFolowerToDo($folowerToDo->getId());
  586.             } else {
  587.                 $todo->setFolowerToDo(0);                                                       //"0" es el item: "Select a person"
  588.             }
  589.             if (!(empty($todo->getBossToDo()))) { //El creador de la tarea puede venir vacio
  590.                 $bossToDo $form->get('bossToDo')->getData();
  591. //                d($todo, $bossToDo);
  592.                 $todo->setBossToDo($bossToDo->getId());
  593.             } else {
  594.                 $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  595.                 $user_id $user_logueado->getId();
  596.                 $todo->setBossToDo($user_id);
  597.             }
  598.             $actualTime = new \Datetime();
  599.             if (($todo->getEndAt() < $actualTime) || (empty($todo->getEndAt()))) {
  600.                 //La fecha de finalizacion es anterior a la fecha actual
  601.                 $todo->setEndAt($actualTime);
  602.             }
  603.             if (empty($todo->gettypeTime())) {                                           //La prioridad puede venir vacio, en ese caso le establecemos la menor de las prioridades, Refrescar se encargara de ajustar esta prioridad en funcion de sus tiempos
  604.                 $todo->settypeTime('Para luego . . .');
  605.             }
  606.             if (!(empty($todo->getidToDoClient()))) {
  607.                 $todo->setidToDoClient($todo->getidToDoClient());
  608.             }
  609.             $todo->setIdToDoControl($request->request->all()['data']['proposal']);
  610.             $todo->setidToDoClient($request->request->all()['data']['client']);
  611.             $todo->setidToDoSupplier($request->request->all()['data']['supplier']);
  612.             $em->persist($todo);
  613.             $em->flush();
  614.             $event 'The task has been created.';
  615.             $successMessage $this->translator->trans($event);
  616.             $this->addFlash('mensajetodo'$successMessage);
  617.             //Se ha creado la tarea, se deben crear las notificaciones correspondientes
  618.             $datalog = array();
  619.             if (($todo->getOwnerToDo() == $todo->getBossToDo()) and ($todo->getBossToDo() == $todo->getFolowerToDo())) {                //Solo se creara un mensaje de notificación ya que es el mismo usuario en los 3 roles
  620.                 $ownerToDoLogs 1;
  621.                 $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  622.                 $user_id $user_logueado->getId();
  623.                 $user $em->getRepository(User::class)->findOneById($user_id);
  624.                 $datalog[] = array(
  625.                     'title' => $todo->getTitle(),
  626.                     'message' => $user->getUsername()." ha creado la tarea",
  627.                     'ownerToDoLog' => $todo->getOwnerToDo(),
  628. //                'createdAt' => $todo->getCreatedAt(),
  629.                     'todoId' => $todo->getId(),
  630.                     'readed' => true,
  631.                     'createdid' => $user_id
  632.                 );
  633.             } else {
  634.                 if (($todo->getOwnerToDo() != $todo->getBossToDo()) and ($todo->getBossToDo() != $todo->getFolowerToDo()) and ($todo->getOwnerToDo() != $todo->getFolowerToDo())) {   //Se crearan tres mensajes de notificación ya que no se repite ningun rol
  635.                     $ownerToDoLogs 3;
  636.                     $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  637.                     $user_id $user_logueado->getId();
  638.                     $user $em->getRepository(User::class)->findOneById($user_id);
  639.                     $datalog[0] = array(
  640.                         'title' => $todo->getTitle(),
  641. //                        'message' => "Se ha creado la tarea",
  642.                         'message' => $user->getUsername()." ha creado la tarea",
  643.                         'ownerToDoLog' => $todo->getOwnerToDo(),
  644. //                'createdAt' => $todo->getCreatedAt(),
  645.                         'todoId' => $todo->getId(),
  646.                         'readed' => true,
  647.                         'createdid' => $user_id
  648.                     );
  649.                     $datalog[1] = array(
  650.                         'title' => $todo->getTitle(),
  651. //                        'message' => "Se ha creado la tarea",
  652.                         'message' => $user->getUsername()." ha creado la tarea",
  653.                         'ownerToDoLog' => $todo->getBossToDo(),
  654. //                'createdAt' => $todo->getCreatedAt(),
  655.                         'todoId' => $todo->getId(),
  656.                         'readed' => true,
  657.                         'createdid' => $user_id
  658.                     );
  659.                     $datalog[2] = array(
  660.                         'title' => $todo->getTitle(),
  661. //                        'message' => "Se ha creado la tarea",
  662.                         'message' => $user->getUsername()." ha creado la tarea",
  663.                         'ownerToDoLog' => $todo->getFolowerToDo(),
  664. //                'createdAt' => $todo->getCreatedAt(),
  665.                         'todoId' => $todo->getId(),
  666.                         'readed' => true,
  667.                         'createdid' => $user_id
  668.                     );
  669.                 } else {    //Se crearan 2 mensajes ya que se repite unb rol, el Boss siempre debe existir ya que es quien asigna el ToDo
  670.                     $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  671.                     $user_id $user_logueado->getId();
  672.                     $user $em->getRepository(User::class)->findOneById($user_id);
  673.                     $ownerToDoLogs 2;
  674.                     $datalog[0] = array(
  675.                         'title' => $todo->getTitle(),
  676. //                        'message' => "Se ha creado la tarea",
  677.                         'message' => $user->getUsername()." ha creado la tarea",
  678.                         'ownerToDoLog' => $todo->getBossToDo(),
  679. //                'createdAt' => $todo->getCreatedAt(),
  680.                         'todoId' => $todo->getId(),
  681.                         'readed' => true,
  682.                         'createdid' => $user_id
  683.                     );
  684.                     //Buscas el rol repetido
  685.                     if ($todo->getOwnerToDo() != $todo->getBossToDo()) {
  686.                         $ownerRol $todo->getOwnerToDo();
  687.                     } else {
  688.                         $ownerRol $todo->getFolowerToDo();
  689.                     }
  690.                     $datalog[1] = array(
  691.                         'title' => $todo->getTitle(),
  692. //                        'message' => "Se ha creado la tarea",
  693.                         'message' => $user->getUsername()." ha creado la tarea",
  694.                         'ownerToDoLog' => $ownerRol,
  695. //                'createdAt' => $todo->getCreatedAt(),
  696.                         'todoId' => $todo->getId(),
  697.                         'readed' => true,
  698.                         'createdid' => $user_id
  699.                     );
  700.                 }
  701.             }
  702.             foreach ($datalog as $datalogData) {
  703.                 if ($datalogData != 0) {                         //0 no es un usuario
  704.                     $todolog = new ToDoLogs();
  705.                     $todolog->setTitle($datalogData['title']);
  706.                     $todolog->setMessage($datalogData['message']);
  707.                     $todolog->setOwnerToDoLog($datalogData['ownerToDoLog']);
  708. //                $todolog->setTodoId($datalogData['todoId']);
  709.                     $todolog->setCreatedAt(new \Datetime());
  710.                     $todolog->setCreatedId($user_id);
  711.                     if (($datalogData['message']=='Se ha modificado la tarea') or ($datalogData['message']=='La tarea se ha marcado como no finalizada') or ($datalogData['message']=='Se ha finalizado la tarea') ) {
  712.                         $todolog->setReaded(true);                                             //Por indicacion de Rafael Guerrero solo se reportan los mensajes
  713.                     } else {
  714.                         if ($datalogData != $user_id){
  715.                             $todolog->setReaded(false);
  716.                         }
  717.                         else {$todolog->setReaded(true);}
  718.                     }
  719.                     $todolog->setTodoId($todo->getId());
  720.                     $em->persist($todolog);
  721.                 }
  722.             }
  723.             $em->flush();
  724.         }
  725. //        $em = $this->getDoctrine()->getManager();
  726. //        $todos = $em->getRepository(ToDo::class)->findAll();
  727. //        $data = array();
  728. //        $user_logueado = $this->get('security.token_storage')->getToken()->getUser();
  729. //        $user_id = $user_logueado->getId();
  730. //
  731. //        foreach($todos as $todo) {
  732. //
  733. //            if ((($todo->getOwnerToDo()==$user_id) || ($todo->getBossToDo()==$user_id) || ($todo->getFolowerToDo()==$user_id)) && !($todo->getState())){
  734. //                //Se buscan relacionadas con el usuario logeado y que no se estén finalizadas
  735. //                $data[] = array(
  736. //                    'id' => $todo->getId(),
  737. //                    'title' => $todo->getTitle(),
  738. //                    'idToDoControl' => $todo->getIdToDoControl(),
  739. //                    'ownerToDo' => $todo->getOwnerToDo(),
  740. //                    'folowerTodo' => $todo->getFolowerToDo(),
  741. //                    'bossToDo' => $todo->getBossToDo(),
  742. //                    'endAt' => $todo->getEndAt(),
  743. //                    'typeTime' => $todo->getTypeTime(),
  744. //                    'createdAt' => $todo->getCreatedAt(),
  745. ////                    'createdId' => $todo->getUpdatedId(),
  746. ////                    'updatedAt' => $todo->getUpdatedAt(),
  747. ////                    'updatedId' => $todo->getCreatedId(),
  748. //                    'description' => $todo->getDescription(),
  749. //                    'details' => $todo->getDetails(),
  750. //                    'details2' => $todo->getDetails2(),
  751. //                    'state' => $todo->getState()
  752. //                );
  753. //            }
  754. //        }
  755.         return $this->redirectToRoute('todo_log');
  756.     }
  757.     /**
  758.      * @Route("/todo/list", name="todo_index")
  759.      */
  760.     public function listIndexAction(Request $request)
  761.     {
  762.         $em $this->getDoctrine()->getManager();
  763.         $todos $em->getRepository(ToDo::class)->findBy(array(),array('endAt' => 'DESC'));
  764.         $data = array();
  765.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  766.         $user_id $user_logueado->getId();
  767.         foreach ($todos as $todo) {
  768. //            d($todo->getEndAt());
  769.             if ((($todo->getOwnerToDo() == $user_id) || ($todo->getBossToDo() == $user_id) || ($todo->getFolowerToDo() == $user_id)) && !($todo->getState())) {
  770.                 //Se buscan relacionadas con el usuario logeado y que no se estén finalizadas
  771.                 $data[] = array(
  772.                     'id' => $todo->getId(),
  773.                     'title' => $todo->getTitle(),
  774.                     'idToDoControl' => $todo->getIdToDoControl(),
  775.                     'ownerToDo' => $todo->getOwnerToDo(),
  776.                     'folowerTodo' => $todo->getFolowerToDo(),
  777.                     'bossToDo' => $todo->getBossToDo(),
  778.                     'endAt' => $todo->getEndAt(),
  779.                     'typeTime' => $todo->getTypeTime(),
  780.                     'createdAt' => $todo->getCreatedAt(),
  781. //                    'createdId' => $todo->getUpdatedId(),
  782. //                    'updatedAt' => $todo->getUpdatedAt(),
  783. //                    'updatedId' => $todo->getCreatedId(),
  784.                     'description' => $todo->getDescription(),
  785.                     'details' => $todo->getDetails(),
  786.                     'details2' => $todo->getDetails2(),
  787.                     'state' => $todo->getState()
  788.                 );
  789.             }
  790.         }
  791.         return $this->redirectToRoute('todo_log');
  792. //        return $this->render('todo/list-todo.html.twig', array(
  793. //            'todos' => $data
  794. //
  795. //        ));
  796.     }
  797.     /**
  798.      * @Route("/todo/edit/{id}", name="todo_edit")
  799.      */
  800.     public function editAction($id)
  801.     {
  802.         $em $this->getDoctrine()->getManager();
  803.         /*CONTROL GENERAL*/
  804.         $todo $em->getRepository(ToDo::class)->findOneById($id);
  805.         $datasuptodo = array();
  806.         if (!(is_null($todo->getidToDoClient()))) {
  807.             $client $em->getRepository(Client::class)->findById($todo->getidToDoClient());
  808.         } else {
  809.             $client 0;
  810.         }
  811.         if (!(is_null($todo->getidToDoSupplier()))) {
  812.             $suppliers $em->getRepository(Supplier::class)->findAll();
  813.             $a $todo->getidToDoSupplier();
  814.             $todosupids explode(','$a);
  815.             foreach ($suppliers as $supptodo) {
  816.                 if (in_array($supptodo->getId(), $todosupids)) {
  817.                     $datasuptodo[] = $supptodo;
  818.                 }
  819.             }
  820.         }
  821.         if (!(is_null($todo->getIdToDoControl()))) {
  822.             $idProp $todo->getIdToDoControl();
  823.             $proposal $em->getRepository(Proposal::class)->findOneById($idProp);
  824.         } else {
  825.             $proposal 0;
  826.         }
  827.         $bossToDo $em->getRepository(User::class)->findOneById($todo->getBossToDo());
  828.         $folowerToDo $em->getRepository(User::class)->findOneById($todo->getFolowerToDo());
  829.         $ownerToDo $em->getRepository(User::class)->findOneById($todo->getOwnerToDo());
  830.         $todo->setBossToDo($bossToDo);
  831.         $todo->setFolowerToDo($folowerToDo);
  832.         $todo->setOwnerToDo($ownerToDo);
  833.         $form $this->createEditToDoForm($todo$id);
  834.         $propopsal_consulta $em->getRepository(Proposal::class)->findAll();
  835.         $client_consulta $em->getRepository(Client::class)->findAll();
  836.         $suppliers_consulta $em->getRepository(Supplier::class)->findAll();
  837.         return $this->render('todo/edit-todo.html.twig',
  838.             array(
  839.                 'id' => $id,
  840.                 'ids' => '',
  841.                 'todo' => $todo,
  842.                 'client' => $client,
  843.                 'suppliers' => $datasuptodo,
  844.                 'proposal' => $proposal,
  845.                 'propopsal_consulta' => $propopsal_consulta,
  846.                 'client_consulta' => $client_consulta,
  847.                 'suppliers_consulta' => $suppliers_consulta,
  848.                 'form' => $form->createView()
  849.             )
  850.         );
  851.     }
  852.     private function createEditToDoForm(ToDo $entity$id)
  853.     {
  854.         $form $this->createForm(ToDoType::class, $entity,
  855.             array(
  856.                 'action' => $this->generateUrl('todo_update',
  857.                     array(
  858.                         'id' => $id
  859.                     )
  860.                 ), 'method' => 'PUT'));
  861.         return $form;
  862.     }
  863.     /**
  864.      * @Route("/todo/update/{id}", name="todo_update", methods={"POST","PUT"})
  865.      */
  866.     public function updateAction($idRequest $requestLoggerInterface $logger)
  867.     {
  868.         /*PARA MAYUSCULAS*/
  869.         $title $request->request->get('ToDo')['title'];
  870.         if (!empty($request->request->get('data')['proposalid'])){
  871.             $proposalid $request->request->get('data')['proposalid'];
  872.         }else{
  873.             $proposalid null;
  874.         }
  875.         if (!empty($request->request->get('data')['client'])){
  876.             $client $request->request->get('data')['client'];
  877.         }else{
  878.             $client null;
  879.         }
  880.         if (!empty($request->request->get('data')['supplierid'])){
  881.             $supplierid $request->request->get('data')['supplierid'];
  882.         }else{
  883.             $supplierid null;
  884.         }
  885.         $em $this->getDoctrine()->getManager();
  886.         /*CONTROL GENERAL*/
  887.         $todo $em->getRepository(ToDo::class)->findOneById($id);
  888.         $form $this->createEditToDoForm($todo$id);
  889.         $form->handleRequest($request);
  890.         $details $todo->getDetails();
  891.         $details2 $todo->getDetails2();
  892.         $bossToDo $em->getRepository(User::class)->findOneById($todo->getBossToDo());
  893.         $folowerToDo $em->getRepository(User::class)->findOneById($todo->getFolowerToDo());
  894.         $ownerToDo $em->getRepository(User::class)->findOneById($todo->getOwnerToDo());
  895.         $typeTime $todo->getTypeTime();
  896.         $bossToDo $bossToDo->getId();        //El creador de la tarea no se puede modificar
  897.         if (!empty($todo->getFolowerToDo())) {
  898.             $folowerToDo $folowerToDo->getId();
  899.         }
  900.         if (!empty($todo->getOwnerToDo())) {
  901.             $ownerToDo $ownerToDo->getId();
  902.         }
  903.         /* Obtengo usuario logueado */
  904.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  905.         $user_id $user_logueado->getId();
  906.         if (!empty($title)) {
  907.             $todo->setTitle(strtoupper($title));
  908.         }
  909.         if (!empty($endat)) {
  910.             $todo->setEndAt($endat);
  911.         }
  912.         if (!empty($details2)) {
  913.             $todo->setDetails2($details2);
  914.         }
  915.         if (!empty($typeTime)) {
  916.             $todo->setTypeTime($typeTime);
  917.         }
  918.         if (!empty($bossToDo)) {
  919.             $todo->setBossToDo($bossToDo);
  920.         }
  921.         if (!empty($folowerToDo)) {
  922.             $todo->setFolowerToDo($folowerToDo);
  923.         }
  924.         if (!empty($ownerToDo)) {
  925.             $todo->setOwnerToDo($ownerToDo);
  926.         }
  927.         if ($form->isSubmitted() && $form->isValid()) {
  928.             /* Gestión de eventos en Log */
  929.             $user_lastname $user_logueado->getLastname();
  930.             $user_name $user_logueado->getName();
  931.             $user_email $user_logueado->getEmail();
  932.             $user_rol $user_logueado->getRoles();
  933.             $event_url $request->getPathInfo();
  934.             $event_complete $user_name ' ' $user_lastname ' - ' $user_email ' - ' $user_rol[0] . ' | ' $event_url;
  935.             try {
  936.                 $todo->setIdToDoControl($proposalid);
  937.                 $todo->setIdToDoClient($client);
  938.                 $todo->setIdToDoSupplier($supplierid);
  939.                 $em->persist($todo);
  940.                 $em->flush();
  941.                 $event 'The task has been modified.';
  942.                 $successMessage $this->translator->trans($event);
  943.                 $this->addFlash('mensajesupplier'$successMessage);
  944.                 $logger->info($event_complete ' | ' $event);
  945.                 // Se ha modificado el ToDo se debe crear la notificacion
  946.                 $a = array();                               //Arreglo con los indices de los usuarios a notificar
  947.                 $a[0] = $todo->getBossToDo();               //Se asume que el Boss siempre existirá
  948.                 $i 1;
  949.                 if (!empty($todo->getOwnerToDo())) {
  950.                     $a[$i] = $todo->getOwnerToDo();
  951.                     $i++;
  952.                 }
  953.                 if (!empty($todo->getFolowerToDo())) {
  954.                     $a[$i] = $todo->getFolowerToDo();
  955.                 }
  956.                 $data array_unique($a);
  957.                 foreach ($data as $datalogData) {
  958.                     if ($datalogData != 0) {                         //0 no es un usuario
  959.                         $todolog = new ToDoLogs();
  960.                         $todolog->setTitle($todo->getTitle());
  961.                         $todolog->setMessage(($em->getRepository(User::class)->findOneById($user_id))->getUsername() . ' ha modificado la tarea');
  962.                         $todolog->setOwnerToDoLog($datalogData);
  963.                         $todolog->setCreatedAt(new \Datetime());
  964.                         $todolog->setReaded(true);                      //Se guarda el registro pero no se notifica (Por solicitud de Rafael Guerrero)
  965.                         $todolog->setTodoId($todo->getId());
  966.                         $em->persist($todolog);
  967.                         $em->flush();
  968.                     }
  969.                 }
  970.             } catch (\Exception $e) {
  971.                 $event 'An error occurred: ' $e->getMessage() . ' | transport';
  972.                 /* Para el log */
  973.                 $logger->error($event_complete ' | ' $event);
  974.                 /* Para el usuario */
  975.                 $errorMessage $this->translator->trans($event);
  976.                 $this->addFlash('mensajesuppliererror'$errorMessage);
  977.             }
  978.             /* Fin Gestión de eventos en Log */
  979.             $successMessage $this->translator->trans('The task has been modified.');
  980.             $this->addFlash('mensajesupplier'$successMessage);
  981.             return $this->redirectToRoute('todo_log');
  982.         }
  983.         return $this->redirectToRoute('todo_log');
  984. //        return $this->render('todo/list-todo.html.twig',
  985. //            array(
  986. //                'id' => $id,
  987. //                //'ids' =>$ids,
  988. //                'todo' => $todo,
  989. //                'form' => $form->createView()
  990. //            )
  991. //        );
  992.     }
  993.     /**
  994.      * @Route("/todo/view/{id}", name="todo_view")
  995.      */
  996.     public function viewAction($id)
  997.     {
  998.         $em $this->getDoctrine()->getManager();
  999.         /*CONTROL GENERAL*/
  1000.         $todo $em->getRepository(ToDo::class)->findOneById($id);
  1001.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  1002.         $user_id $user_logueado->getId();
  1003.         $bossToDo $em->getRepository(User::class)->findOneById($todo->getBossToDo());
  1004.         $folowerToDo $em->getRepository(User::class)->findOneById($todo->getFolowerToDo());
  1005.         $ownerToDo $em->getRepository(User::class)->findOneById($todo->getOwnerToDo());
  1006.         $todo->setBossToDo($bossToDo);
  1007.         $todo->setFolowerToDo($folowerToDo);
  1008.         $todo->setOwnerToDo($ownerToDo);
  1009.         $idtodo $todo->getId();
  1010.         $comments $em->getRepository('App:ToDoComments')->findByidtodo($idtodo);
  1011.         $arrayComments = array();
  1012.         $commentsform = new ToDoComments();
  1013.         $i 0;
  1014.         foreach ($comments as $commentsform) {
  1015.             $commentsform->setIdtodo($comments[$i]->getId());
  1016.             $commentsform->setCreatedAt($comments[$i]->getCreatedAt());
  1017.             $commentsform->setUpdatedAt($comments[$i]->getUpdatedAt());
  1018.             $commentsform->setTextComment($comments[$i]->getTextComment());
  1019.             $commentsform->setUpdatedId($comments[$i]->getUpdatedId());
  1020.             $commentsform->setCreatedId($comments[$i]->getCreatedId());
  1021.             $arrayComments[$i] = $commentsform;
  1022.             $i++;
  1023.         }
  1024.         $form1 $this->createView1ToDoForm($todo$id);
  1025.         $form3 $this->createView3ToDoForm($commentsform$id);
  1026.         return $this->render('todo/view-todo.html.twig',
  1027.             array(
  1028.                 'id' => $id,
  1029.                 'ids' => '',
  1030.                 'todo' => $todo,
  1031.                 'user' => $user_id,
  1032.                 'arrayComments' => $arrayComments,
  1033.                 'form1' => $form1->createView(),
  1034.                 'form3' => $form3->createView()
  1035.             )
  1036.         );
  1037.     }
  1038.     /**
  1039.      * @Route("/todo/addcomment/{comm}/{id}", name="todo_addcomment")
  1040.      */
  1041.     public function addCommentAction($comm$idRequest $request)
  1042.     {
  1043.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  1044.         $user_id $user_logueado->getId();
  1045.         $em $this->getDoctrine()->getManager();
  1046.         $user $em->getRepository(User::class)->findOneById($user_id);
  1047.         $user_name $user->getUsername();
  1048.         $comment = new ToDoComments();
  1049.         $comment->setIdtodo($id);
  1050.         $comment->setTextComment($comm);
  1051.         $comment->setCreatedId($user_id);
  1052.         $comment->setUpdatedId($user_id);
  1053.         try {
  1054.             $em->persist($comment);
  1055.             $em->flush();
  1056.             $todo $em->getRepository(ToDo::class)->findOneById($id);
  1057.             // Se ha creado un comentario en el ToDo se debe crear la notificacion
  1058.             $a = array();                               //Arreglo con los indices de los usuarios a notificar
  1059.             $i 0;
  1060. //            if ($todo->getBossToDo() != $user_id) {      //No se debe recibir notificacion de los mensajes emitidos por el propio usuario
  1061.                if (!empty($todo->getBossToDo())){
  1062.                 $a[0] = $todo->getBossToDo();               //Se asume que el Boss siempre existirá
  1063.                } else { $a[$i] = 0; }
  1064.                 $i++;
  1065.             if (!empty($todo->getOwnerToDo())) {
  1066. //                if ($todo->getOwnerToDo() != $user_id) {      //No se debe recibir notificacion de los mensajes emitidos por el propio usuario
  1067.                     $a[$i] = $todo->getOwnerToDo();
  1068.                     } else { $a[$i] = 0; }
  1069. //            }
  1070.             $i++;
  1071.             if (!empty($todo->getFolowerToDo())) {
  1072. //                if ($todo->getFolowerToDo() != $user_id) {      //No se debe recibir notificacion de los mensajes emitidos por el propio usuario
  1073.                     $a[$i] = $todo->getFolowerToDo(); } else { $a[$i] = 0; }
  1074. //            }
  1075.             $data array_unique($a);
  1076.             foreach ($data as $datalogData) {
  1077.                 if ($datalogData != 0) {                         //0 no es un usuario
  1078.                     $todolog = new ToDoLogs();
  1079.                     $todolog->setTitle($todo->getTitle());
  1080.                     $todolog->setMessage($user_name " : " $comm);
  1081.                     $todolog->setOwnerToDoLog($datalogData);
  1082.                     $todolog->setCreatedAt(new \Datetime());
  1083.                     $todolog->setReaded(false);                         //Estamos agregando un comentario se debe notificar
  1084.                     $todolog->setTodoId($todo->getId());
  1085.                     $em->persist($todolog);
  1086.                     $em->flush();
  1087.                 }
  1088.             }
  1089.         } catch (\ErrorException $e) {
  1090.             d($e->getMessage());
  1091.         }
  1092.         return $this->redirectToRoute('todo_log',
  1093.             array(
  1094.                 'id' => $id
  1095.             )
  1096.         );
  1097.     }
  1098.     private function createView1ToDoForm(ToDo $entity$id)
  1099.     {
  1100.         $form1 $this->createForm(ToDoType::class, $entity,
  1101.             array(
  1102.                 'action' => $this->generateUrl('todo_view',
  1103.                     array(
  1104.                         'id' => $id
  1105.                     )
  1106.                 ), 'method' => 'PUT'));
  1107.         return $form1;
  1108.     }
  1109.     private function createView3ToDoForm(ToDoComments $entity$id)
  1110.     {
  1111.         $form3 $this->createForm(ToDoCommentsType::class, $entity,
  1112.             array(
  1113.                 'action' => $this->generateUrl('todo_view',
  1114.                     array(
  1115.                         'id' => $id
  1116.                     )
  1117.                 ), 'method' => 'PUT'));
  1118.         return $form3;
  1119.     }
  1120.     /**
  1121.      * @Route("/todo/end/{id}", name="todo_end")
  1122.      */
  1123.     public function endToDoAction($id)
  1124.     {
  1125.         $em $this->getDoctrine()->getManager();
  1126.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  1127.         $user_id $user_logueado->getId();
  1128.         $todo $em->getRepository(ToDo::class)->findOneById($id);
  1129.         $status true;
  1130.         $todo->setState($status);
  1131.         //  Traigo los LOGS del usuario de ese  T O D O  y como esta finalizando la tarea, pongo como leidos y finalizados estos logs   ***Esto de forma inversa debe hacerse al reestablecer una tarea
  1132.         $finished $em->getRepository(ToDoLogs::class)->findBy(
  1133.             array(
  1134.                 'todoId' => $id,
  1135.                 'ownerToDoLog' => $user_id,
  1136.             )
  1137.         );
  1138.         foreach ($finished as $end){
  1139.             $end->setReaded(true);
  1140.             $end->setFinished(true);
  1141.             $em->persist($end);
  1142.             $em->flush();
  1143.         }
  1144.         //Se debe generar las notificaciones de la finalizacion de la tarea
  1145.             $usrSender = ($em->getRepository(User::class)->findOneById($user_id))->getUsername();          //Emisor del mensaje
  1146.         // Log para el OwnerTodo
  1147.         $todolog = new ToDoLogs();
  1148.         $todolog->setTitle($todo->getTitle());
  1149.         $todolog->setMessage($usrSender', ha finalizado la tarea.');
  1150.             // Se detecta un error si viene null
  1151.             if (is_null($todo->getOwnerToDo()) or ($todo->getOwnerToDo() == 0)){ $todolog->setOwnerToDoLog(0);} else { $todolog->setOwnerToDoLog($todo->getOwnerToDo()); }
  1152.         $todolog->setCreatedAt(new \Datetime());
  1153.         $todolog->setCreatedId($user_id);
  1154.         $todolog->setTodoId($todo->getId());
  1155.         $todolog->setCreatedId($user_id);
  1156.         $todolog->setFinished(true);
  1157.          // El mensaje debe ponerse en leido para el usuario que lo finaliza
  1158.         if ($todo->getOwnerTodo() == $user_id){ $todolog->setReaded(true); } else { $todolog->setReaded(false); }
  1159.         try {
  1160.             $em->persist($todolog);
  1161.             $em->flush();} catch (\ErrorException $e) { d($e->getMessage()); }
  1162.         // Log para el BossTodo
  1163.         $todolog = new ToDoLogs();
  1164.         $todolog->setTitle($todo->getTitle());
  1165.         $todolog->setMessage($usrSender', ha finalizado la tarea.');
  1166.             // Se detecta un error si viene null
  1167.             if (is_null($todo->getBossToDo()) or ($todo->getBossToDo() == 0)){ $todolog->setOwnerToDoLog(0);} else { $todolog->setOwnerToDoLog($todo->getBossToDo()); }
  1168.         $todolog->setCreatedAt(new \Datetime());
  1169.         $todolog->setCreatedId($user_id);
  1170.         $todolog->setTodoId($todo->getId());
  1171.         $todolog->setCreatedId($user_id);
  1172.         $todolog->setFinished(true);
  1173.         // El mensaje debe ponerse en leido para el usuario que lo finaliza
  1174.         if ($todo->getBossToDo() == $user_id){ $todolog->setReaded(true); } else { $todolog->setReaded(false); }
  1175.         try {
  1176.             $em->persist($todolog);
  1177.             $em->flush();} catch (\ErrorException $e) { d($e->getMessage()); }
  1178.         // Log para el FolowerTodo
  1179.         $todolog = new ToDoLogs();
  1180.         $todolog->setTitle($todo->getTitle());
  1181.         $todolog->setMessage($usrSender', ha finalizado la tarea.');
  1182.             // Se detecta un error si viene null
  1183.             if (is_null($todo->getFolowerToDo()) or ($todo->getFolowerToDo() == 0)){ $todolog->setOwnerToDoLog(0);} else { $todolog->setOwnerToDoLog($todo->getFolowerToDo()); }
  1184.         $todolog->setCreatedAt(new \Datetime());
  1185.         $todolog->setCreatedId($user_id);
  1186.         $todolog->setTodoId($todo->getId());
  1187.         $todolog->setCreatedId($user_id);
  1188.         $todolog->setFinished(true);
  1189.         // El mensaje debe ponerse en leido para el usuario que lo finaliza
  1190.         if ($todo->getFolowerToDo() == $user_id){ $todolog->setReaded(true); } else { $todolog->setReaded(false); }
  1191.         try {
  1192.             $em->persist($todolog);
  1193.             $em->flush();} catch (\ErrorException $e) { d($e->getMessage()); }
  1194.         return $this->redirectToRoute('todo_log');
  1195.     }
  1196.     /**
  1197.      * @Route("/todo/events", name="get_todos")
  1198.      */
  1199.     public function todosSelectAction(Request $requestEntityManagerInterface $em)
  1200.     {
  1201.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  1202.         $user_id $user_logueado->getId();
  1203.         $fechaInicio = new \DateTime();
  1204.         $fechaInicio->setDate($fechaInicio->format('Y') - 111);
  1205.         $fechaInicio->setTime(000); //Para buscar desde el primer minuto del año
  1206.         $queryBuilder $em->getRepository(ToDo::class)->createQueryBuilder('todo');
  1207.         $queryBuilder->where('todo.state = :state')
  1208.             ->andWhere('todo.ownerToDo = :userId OR todo.bossToDo = :userId OR todo.folowerToDo = :userId')
  1209.             ->andWhere('todo.createdAt >= :fechaInicio'// Añadir esta línea para filtrar por fecha
  1210.             ->setParameters([
  1211.                 'state' => false,
  1212.                 'userId' => $user_id,
  1213.                 'fechaInicio' => $fechaInicio,
  1214.             ]);
  1215.         $todos $queryBuilder->getQuery()->getResult();
  1216.         $datos = array();
  1217.         if (!empty($todos)) {
  1218.             foreach ($todos as $todo) {
  1219.                 if (($todo->getOwnerToDo() == $user_id)) {
  1220.                     //Si no esta finalizado y eres el responsable del ToDo
  1221.                     // $color = "#Red";
  1222.                     //Se establece la intensidad del color según la priridad de la tarea
  1223.                     if (($todo->gettypeTime() == 'Hoy . . .')) {
  1224. //                            $color = "#ba0000";  // $color = "#Red";
  1225.                         $color "#455293";
  1226.                     } else {
  1227.                         if (($todo->gettypeTime() == 'Durante esta semana . . .')) {
  1228. //                                $color = "#ff3d3d";   // $color = "#Red";
  1229.                             $color "#455293";
  1230.                         } else {
  1231. //                                $color = "#ff9191";    // $color = "#Red";  //Para Luego . . .
  1232.                             $color "#455293";
  1233.                         }
  1234.                     }
  1235.                 } else {
  1236.                     if (($todo->getBossToDo() == $user_id)) {
  1237.                         //Si no esta finalizado y eres el Supervisor del ToDo
  1238.                         // $color = "#Blue";
  1239.                         //Se establece la intensidad del color según la priridad de la tarea
  1240.                         if (($todo->gettypeTime() == 'Hoy . . .')) {
  1241.                             $color "#455293";                // "#000f5e";
  1242.                         } else {
  1243.                             if (($todo->gettypeTime() == 'Durante esta semana . . .')) {
  1244.                                 $color "#455293";
  1245.                             } else {
  1246.                                 $color "#455293";             //"#babaff";     //Para Luego . . .
  1247.                             }
  1248.                         }
  1249.                     } else {
  1250.                         if (($todo->getFolowerToDo() == $user_id)) {
  1251.                             //Si no esta finalizado y eres el Seguidor del ToDo
  1252.                             $color "#BDBDBD";
  1253.                             // $color = "#Blue";
  1254.                             //Se establece la intensidad del color según la priridad de la tarea
  1255.                             if (($todo->gettypeTime() == 'Hoy . . .')) {
  1256. //                                    $color = "#60005a";  //purple
  1257.                                 $color "#455293";
  1258.                             } else {
  1259.                                 if (($todo->gettypeTime() == 'Durante esta semana . . .')) {
  1260. //                                        $color = "#af2fa7";   //purple
  1261.                                     $color "#455293";
  1262.                                 } else {
  1263. //                                        $color = "#db7fd5";     //Para Luego . . .    //purple
  1264.                                     $color "#455293";
  1265.                                 }
  1266.                             }
  1267.                         }
  1268.                     }
  1269.                 }
  1270.                 if (is_null($todo->getEndAt())) {
  1271.                     $end = new \Datetime('now');
  1272.                     $color "#bc0000";
  1273.                 } else {
  1274.                     $end $todo->getEndAt();
  1275.                     $todayPlustwo = new \Datetime('+ 2 days');
  1276.                     if (($end==$todayPlustwo) or ($todayPlustwo>$end)){$color "#bc0000";}             //La tarea se finaliza en dos dias o menos
  1277.                 }
  1278.                 $datos[] = array(
  1279.                     "id" => $todo->getId(),
  1280.                     "title" => $todo->getTitle(),
  1281.                     "tooltip" => $todo->getTitle() . "<br>" $todo->getDescription(),
  1282.                     "start" => $todo->getCreatedAt(),                                   //.format(moment.ISO_8601),
  1283.                     "end" => $end,
  1284.                     "color" => $color,
  1285.                     "url" => "/todo/log",
  1286.                 );
  1287.             }
  1288.         } else {
  1289.             $datos = [];
  1290.         }
  1291.         $return = array(
  1292.             'todos' => $datos,
  1293.         );
  1294.         $response = new JsonResponse($return);
  1295.         return $response;
  1296.     }
  1297.     /**
  1298.      * @Route("/todo/refresh", name="todo_refresh")
  1299.      */
  1300.     public function refreshAction(Request $request)
  1301.     {
  1302.         $today = new \DateTime('now');
  1303.         $todayPlusWeek = new \Datetime('+ 7 days'); //Al dia actual se le suma una semana
  1304.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  1305.         $user_id $user_logueado->getId();
  1306.         $em $this->getDoctrine()->getManager();
  1307. // Los Owners
  1308.         $todos $em->getRepository(ToDo::class)->findByOwnerToDo($user_id);
  1309.         foreach ($todos as $todo) {
  1310.             if (!($todo->getState())) {
  1311.                 //Si no se está finalizada
  1312.                 $timechange false;
  1313.                 if ($todo->getTypeTime() == 'Para luego . . .') {
  1314.                     if (!($todo->getEndAt() > $todayPlusWeek)) {
  1315.                         $todo->settypeTime('Durante esta semana . . .');
  1316.                         $timechange true;
  1317.                     }
  1318.                 }
  1319.                 if ($todo->getTypeTime() == 'Durante esta semana . . .') {
  1320.                     if (!($todo->getEndAt() > $today)) {
  1321.                         $todo->settypeTime('Hoy . . .');
  1322.                         $timechange true;
  1323.                     }
  1324.                 }
  1325.                 if ($todo->getTypeTime() == 'Hoy . . .') {
  1326.                     if (!($todo->getEndAt() > $today)) {
  1327.                         $todo->setEndAt($today);
  1328.                         $timechange true;
  1329.                     }
  1330.                 }
  1331.                 if ($timechange) {
  1332.                     try {
  1333.                         $em->persist($todo);
  1334.                         $em->flush();
  1335.                         // Se ha modificado la prioridad del ToDo se debe crear la notificacion
  1336.                         $a = array();                               //Arreglo con los indices de los usuarios a notificar
  1337.                         $a[0] = $todo->getBossToDo();               //Se asume que el Boss siempre existirá
  1338.                         $i 1;
  1339.                         if (!empty($todo->getOwnerToDo())) {
  1340.                             $a[$i] = $todo->getOwnerToDo();
  1341.                             $i++;
  1342.                         } else {
  1343.                             $a[$i] = 0;
  1344.                             $i++; }
  1345.                         if (!empty($todo->getFolowerToDo())) {
  1346.                             $a[$i] = $todo->getFolowerToDo();
  1347.                         } else {
  1348.                             $a[$i] = 0; }
  1349.                         $data array_unique($a);
  1350.                         foreach ($data as $datalogData) {
  1351.                             if ($datalogData != 0) {                         //0 no es un usuario
  1352.                                 $todolog = new ToDoLogs();
  1353.                                 $todolog->setTitle($todo->getTitle());
  1354.                                 $todolog->setMessage('Se ha modificado de forma automatica la prioridad de la tarea');
  1355.                                 $todolog->setOwnerToDoLog($datalogData);
  1356.                                 $todolog->setCreatedAt(new \Datetime());
  1357.                                 $todolog->setReaded(true);                     //Se guarda el registro pero no se notifica (Por solicitud de Rafael Guerrero)
  1358.                                 $todolog->setTodoId($todo->getId());
  1359.                                 $em->persist($todolog);
  1360.                                 $em->flush();
  1361.                             }
  1362.                         }
  1363. //
  1364.                     } catch (\Exception $e) {
  1365.                         $event 'An error occurred: ' $e->getMessage();
  1366.                     }
  1367.                 }
  1368.             }
  1369.         }
  1370. //        Los Boss
  1371.         $todos $em->getRepository(ToDo::class)->findByBossToDo($user_id);
  1372.         foreach ($todos as $todo) {
  1373.             if (!($todo->getState())) {
  1374.                 //Si no se está finalizada
  1375.                 $timechange false;
  1376.                 if (($todo->getTypeTime()) == 'Para luego . . .') {
  1377.                     if (!($todo->getEndAt() > $todayPlusWeek)) {
  1378.                         //Si la tarea ha pasado al grupo de actividades para esta semana     -*-*-* NOTIFICAR
  1379.                         $todo->settypeTime('Durante esta semana . . .');
  1380.                         $timechange true;
  1381.                     }
  1382.                 }
  1383.                 if ($todo->getTypeTime() == 'Durante esta semana . . .') {
  1384.                     if (!($todo->getEndAt() > $today)) {
  1385.                         //Si la tarea ha pasado al grupo de actividades de hoy     -*-*-* NOTIFICAR
  1386.                         $todo->settypeTime('Hoy . . .');
  1387.                         $timechange true;
  1388.                     }
  1389.                 }
  1390.                 if ($todo->getTypeTime() == 'Hoy . . .') {
  1391.                     if (!($todo->getEndAt() > $today)) {
  1392.                         //Si la tarea estaba asignada para hoy y ha pasado el dia, aunque no cambie de prioridad se debe reprogramar la fecha de finalización   -*-*-* NOTIFICAR
  1393.                         $todo->setEndAt($today);
  1394.                         $timechange true;
  1395.                     }
  1396.                 }
  1397.                 if ($timechange) {
  1398.                     try {
  1399.                         $em->persist($todo);
  1400.                         $em->flush();
  1401.                     } catch (\Exception $e) {
  1402.                         $event 'An error occurred: ' $e->getMessage();
  1403.                     }
  1404.                 }
  1405.             }
  1406.         }
  1407. //        Los Followers
  1408.         $todos $em->getRepository(ToDo::class)->findByFolowerToDo($user_id);
  1409.         foreach ($todos as $todo) {
  1410.             if (!($todo->getState())) {
  1411.                 //Si no se está finalizada
  1412.                 $timechange false;
  1413.                 if (($todo->getTypeTime()) == 'Para luego . . .') {
  1414.                     if (!($todo->getEndAt() > $todayPlusWeek)) {
  1415.                         //Si la tarea ha pasado al grupo de actividades para esta semana     -*-*-* NOTIFICAR
  1416.                         $todo->settypeTime('Durante esta semana . . .');
  1417.                         $timechange true;
  1418.                     }
  1419.                 }
  1420.                 if ($todo->getTypeTime() == 'Durante esta semana . . .') {
  1421.                     if (!($todo->getEndAt() > $today)) {
  1422.                         //Si la tarea ha pasado al grupo de actividades de hoy     -*-*-* NOTIFICAR
  1423.                         $todo->settypeTime('Hoy . . .');
  1424.                         $timechange true;
  1425.                     }
  1426.                 }
  1427.                 if ($todo->getTypeTime() == 'Hoy . . .') {
  1428.                     if (!($todo->getEndAt() > $today)) {
  1429.                         //Si la tarea estaba asignada para hoy y ha pasado el dia, aunque no cambie de prioridad se debe reprogramar la fecha de finalización   -*-*-* NOTIFICAR
  1430.                         $todo->setEndAt($today);
  1431.                         $timechange true;
  1432.                     }
  1433.                 }
  1434.                 if ($timechange) {
  1435.                     try {
  1436.                         $em->persist($todo);
  1437.                         $em->flush();
  1438. //
  1439.                     } catch (\Exception $e) {
  1440.                         $event 'An error occurred: ' $e->getMessage();
  1441.                     }
  1442.                 }
  1443.             }
  1444.         }
  1445.         return $this->redirectToRoute('todo_index');
  1446.     }
  1447.     /**
  1448.      * @Route("/todo/log", name="todo_log")
  1449.      * @param Request $request
  1450.      * @return Response
  1451.      */
  1452.     public function logToDoAction(Request $request)
  1453.     {
  1454.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  1455.         $user_id $user_logueado->getId();
  1456.         $em $this->getDoctrine()->getManager();
  1457.         //Me quito los logs con ownertodo = 0, le quito la relacion con los   T O D O
  1458.         $todos_Log0 $em->getRepository(ToDoLogs::class)->findByOwnerToDoLog(0);
  1459.         foreach ($todos_Log0 as $tdl_0){
  1460.             $tdl_0->setTodoId(0);
  1461.             try {
  1462.                 $em->persist($tdl_0);
  1463.                 $em->flush();
  1464.             } catch (\ErrorException $e) {
  1465.                 d($e->getMessage());
  1466.             }
  1467.         }
  1468.         // Se buscan los Logs no leidos del usuario
  1469.         $arrayMiniChat = array();
  1470.         $countIdToDo 0;                                     // Si mas de un comentario esta como no leido se repetira la data por eso usamos este contador
  1471. //        $arrayTodo =$em->getRepository(ToDo::class)->findAll();
  1472.         $toDoPendiente $em->getRepository(ToDoLogs::class)->findBy(
  1473.             array(
  1474.                 'ownerToDoLog' => $user_id,
  1475.             )
  1476.         );
  1477.         $arrayTodo =array();
  1478.         $mensaje=array();
  1479.         $i=0;
  1480.         foreach ($toDoPendiente as $pending){
  1481.             if($pending->getFinished() === 0){
  1482.                 $mensaje[$pending->getTodoId()][$i] = $pending;
  1483.             }elseif($pending->getCreatedId() !== $user_id ){
  1484.                 $mensaje[$pending->getTodoId()][$i] = $pending;
  1485.             }
  1486.             $i++;
  1487.         }
  1488.         //Volteo el arreglo para que queden ordenados los mensajes por fecha descendiente
  1489. //        $mensaje_inv = array_reverse($mensaje);
  1490. //        $todo_log_usr = $em->getRepository(ToDoLogs::class)->findByOwnerToDoLog($user_id);             //falla porque lista los finalizados
  1491. //        $todo_log_usr = $em->getRepository(ToDoLogs::class)->findBy( array('ownerToDoLog' => $user_id, 'finished' => 0));                    //funciona pero no muestra el T o d o cuando otro lo ha finalizado
  1492.         $todo_log_usr $em->getRepository(ToDoLogs::class)->findBy( array('ownerToDoLog' => $user_id'finished' => 0));
  1493. //        foreach ($todo_log_usr as $tdl_us0){
  1494. ////funciona pero no muestra el T o d o cuando otro lo ha finalizado, al subir parece estar correcto, debo revisarlo con detenimiento
  1495. //        }
  1496. //        $mensaje_inv = array_reverse($mensaje);
  1497.         $mensaje_inv array_reverse($todo_log_usr);
  1498.         //genero un arreglo cin los indices de los T O D O, para eliminar repeticiones y contar numero de tareas a mostrar en la vista
  1499.             $array_contador = array();
  1500.             foreach ($mensaje_inv as $mi){
  1501.                 $array_contador[] = $mi->getTodoId();
  1502.             }
  1503.             //elimino repeticiones
  1504.             $array_contador array_unique($array_contador);
  1505.             //cuento el numero de tareas
  1506.             $countlog count($array_contador);
  1507.         //----
  1508.         //Agrupa los mensajes por T O D O debo recorrer el arreglo _inv
  1509.         $array_mix = array();                       //Contendra el   T O D O   y los   LOGS
  1510.         $todo_all= array();
  1511.         foreach ($mensaje_inv as $men_inv){
  1512.             //Traigo todos los mnensajes del T O D O, me vi forzado a entrar al arreglo porque desconozco el valor del indice
  1513.             $todo_all $em->getRepository(ToDo::class)->findById($men_inv->getTodoId());
  1514.             if(count($todo_all)>0){
  1515.                 // Si la tarea no esta finalizada
  1516.                 if(!($todo_all[0]->getState())){
  1517.     //                $todo_logs = $em->getRepository(ToDoLogs::class)->findByTodoId($men_inv0->getTodoId());
  1518.                     $todo_logs $em->getRepository(ToDoLogs::class)->findBy( array('todoId' => $men_inv->getTodoId(), 'ownerToDoLog' => $user_id));
  1519. //                    d($todo_logs); exit();
  1520.                     // Para evitar repeticiones solo lo meto en el arreglo definito si no he metido la tarea actual
  1521.                     if (in_array($todo_all[0]->getId(), $array_contadortrue)){
  1522.                         $array_mix[] = array(
  1523.                             'todo' => $todo_all[0],
  1524.                             'todo_logs' => $todo_logs,
  1525.                         );
  1526.                         // Lo saco del arreglo para evitar repeticiones
  1527.                         foreach (array_keys($array_contador$todo_all[0]->getId()) as $key) {
  1528.                             unset($array_contador[$key]);
  1529.                         }
  1530.                     }
  1531.                 } else {
  1532.                 // Si esta finalizada verificar si la finalizo otro que no sea el user_id
  1533.                     // Si hemos vaciado el contador de los  T O D O  ya no debo considerar mas mensajes
  1534.                     if ((count($array_contador)) != ) {
  1535.                         // Voy a buscar el log que indique si se finalizo y el creador de ese log es user_id, si no encuentro este valor se debe agregar el mensaje ya que otro fue el finalizador de la tarea
  1536.                         $todo_logs $em->getRepository(ToDoLogs::class)->findBy( array('todoId' => $men_inv->getTodoId(),
  1537.                             'message' => 'Se ha finalizado la tarea',
  1538.                             'createdId' => $user_id,
  1539.                         ));
  1540.                         if(count($todo_logs) == 0){     // Debo pintar ya que la finalizo otro usuario
  1541.                             $todo_logs $em->getRepository(ToDoLogs::class)->findBy( array('todoId' => $men_inv->getTodoId()));
  1542.                             $array_mix[] = array(
  1543.                                 'todo' => $todo_all[0],
  1544.                                 'todo_logs' => $todo_logs,
  1545.                             );
  1546.                             foreach (array_keys($array_contador$todo_all[0]->getId()) as $key) {
  1547.                                 unset($array_contador[$key]);
  1548.                             }
  1549.                         }
  1550.                     }
  1551.                 }
  1552.             }
  1553.         }
  1554.         $arrayTodo = array();
  1555.         foreach($mensaje as $men){
  1556.             foreach($men as $m1){
  1557.                 $arrayMen =$em->getRepository(ToDo::class)->findOneById($m1->getTodoId());
  1558.                 $arrayTodo[] = array(
  1559.                     'todo' => $arrayMen,
  1560.                     'mensaje' => $men,
  1561.                 );
  1562.             }
  1563.         }
  1564. //        d($arrayTodo);
  1565. //        $arrayTodo =array();
  1566. //        foreach($mensaje as $men){
  1567. //
  1568. //            foreach($men as $m1){
  1569. //                d($men);exit;
  1570. //                $arrayMen =$em->getRepository(ToDo::class)->findById($m1->getTodoId());
  1571. //                $arrayTodo[] = array(
  1572. //                    '0' => $arrayMen,
  1573. //                    '1' => $men,
  1574. //                );
  1575. //            }
  1576. //
  1577. //
  1578. //        }
  1579.         return $this->render('todo/log-todo.html.twig', array(
  1580.             'arrayComm' => $mensaje,
  1581.             'countlog' => $countlog,
  1582. //            'arrayTodo' => $arrayTodo,
  1583.             'arrayTodo' => $array_mix,
  1584.             'arrayMiniChat' => $arrayMiniChat
  1585.         ));
  1586. /*
  1587.                 foreach($todos_Log0 as $tdlgUnreaded){
  1588. //                    $todos_master = $em->getRepository(ToDo::class)->findBy(
  1589. //                        array(
  1590. //                            'state' => '0',
  1591. //                            'id' => $tdlgUnreaded->getTodoId(),
  1592. //                        )
  1593. //                    );
  1594. //
  1595. //                    if (!empty($todos_master)){
  1596. //                        d($todos_master);
  1597.                     $log_all_readed = true;
  1598.                     foreach($todos_Log as $tdlgUn) {
  1599.                         // Si hay un log de tarea finalizada y el el log no ha sido leido debe pasar de resto no
  1600.                         // Verifico que haya al menos un log de la tarea sin leer
  1601.                         $a1 = $em->getRepository(ToDo::class)->findById($tdlgUn->getTodoId());
  1602.                         foreach($a1 as $a){
  1603.                             $a2 = $a->getState();
  1604.                             $atdid = $a->getId();
  1605.                         }
  1606.                         if ($a2){                        //Si esta finalizado veo si lo hizo el usuario actual
  1607.                             $b = ($em->getRepository(ToDoLogs::class)->findBy( array('ownerToDoLog' => $user_id, 'todoId' => $atdid, 'createdId' => $user_id)));
  1608.                             if (count($b) != 0){
  1609.                                 $log_all_readed = ($log_all_readed and true);
  1610.                             } else{
  1611.                                 $log_all_readed = ($log_all_readed and false);}
  1612. //                                d('false');
  1613.                         } else {
  1614.                             $log_all_readed = ($log_all_readed and false);
  1615. //                            d('false');
  1616.                         }
  1617. //d($log_all_readed, $tdlgUnreaded->getTodoId());
  1618.                         if(!$log_all_readed) {
  1619.                     if (!($tdlgUnreaded->getReaded())){
  1620.                         // Busco todos los mensajes relacionados con el IdToDo
  1621.                         $msgTDs = $em->getRepository('App:ToDoComments')->findByidtodo($tdlgUnreaded->getTodoId());
  1622. //                $msgTDs = array_reverse($msgTDs);               // Volteamos el arreglo para ir de mayor a menor en indices solo dejaremos el ultimo mensaje como no leido, es necesario para que al tener 2 o mas sin leer  no se duplique la data
  1623.                         foreach ($msgTDs as $msgTD){
  1624.                             $usrSender = ($em->getRepository(User::class)->findOneById($msgTD->getCreatedId()))->getUsername();          //Emisor del mensaje
  1625.                             if (!($countIdToDo > $msgTD->getIdtodo())) {            //Si el Id del comentario a agregar es igual o mayor se agrega, si no se omite porque ya ha sido agregado y no queremos repetir data
  1626.                                 $countIdToDo = ($msgTD->getIdtodo());
  1627.                                 $arrayMiniChat[$msgTD->getIdtodo()][] = array(
  1628.                                     'idTodo' => $msgTD->getIdtodo(),
  1629.                                     'msgCreatedAt' => $msgTD->getCreatedAt(),
  1630.                                     'msgCreatedAtSP' => ($msgTD->getCreatedAt())->format('H:i d/m/Y'),
  1631.                                     'userSender' => $usrSender,
  1632.                                     'textComment' => $msgTD->getTextComment(),
  1633.                                     'idComment' => $msgTD->getId(),
  1634.                                     'idUserCreated' => $msgTD->getCreatedId(),
  1635.                                     'idUserLoged' => $user_id
  1636.                                 );
  1637.                             }
  1638.                         }
  1639.                     }
  1640.                 $srtTdolog = $em->getRepository(ToDoLogs::class)->findByOwnerToDoLog($user_id);
  1641.                 $srtTdolog = array_reverse($srtTdolog);                                                   //Se tiene los logs de un usuario del mas reciente al mas antiguo, esto determina como se presentaran los Todo en la vista
  1642.                 // quiero obtener el id de los todossin repeticiones de $srtTdolog
  1643.                 $newarray = $srtTdolog;
  1644.                 foreach($srtTdolog as $sti){
  1645.                     foreach($newarray as $newar){
  1646.                         if (($sti->getTodoId() == $newar->getTodoId()) and ($sti->getId() != $newar->getId())) {
  1647.                             $newar->setTodoId('0');             // Se implementa un pseudo UNSET de los valores repetidos
  1648.                         }
  1649.                     }
  1650.                 }
  1651.                 //  Los que tenian un 0 en el IdToDo eran repeticiones y se eliminaran
  1652.                 $pseudoUnset = array();
  1653.                 foreach ($newarray as $newar){
  1654.                     if ($newar->getTodoId() != 0){
  1655.                         $pseudoUnset[] = $newar;
  1656.                     }
  1657.                 }
  1658.                 $arrayComm = array();
  1659.                 //  Se buscan los logs
  1660.                 foreach ($pseudoUnset as $ps){
  1661.                     $td = $em->getRepository(ToDo::class)->findById($ps->getTodoId());             //Busco toda la informacion del todo
  1662. //                    $td = $em->getRepository(ToDo::class)->findBy(
  1663. //                        array(
  1664. //                            'state' => '0',
  1665. //                            'id' => $ps->getTodoId(),
  1666. //                        )
  1667. //                    );             //Busco toda la informacion del todo
  1668. //            $lg = $em->getRepository(ToDoLogs::class)->findByTodoId($ps->getTodoId());             //Busco los mensajes del todo
  1669.                     $lg_0 = $em->getRepository(ToDoLogs::class)->findByTodoId($ps->getTodoId());             //Busco los mensajes del todo
  1670.                     $lg_1 = $em->getRepository(ToDoLogs::class)->findByTodoId($ps->getTodoId());
  1671.                     // Elimino repeticiones de Logs
  1672.                     $lg = array();
  1673.                     foreach ($lg_0 as $lg0){
  1674.                         //Verifico numero de repeticiones del elemento en el arreglo
  1675.                         $contador =1;
  1676.                         foreach ($lg_1 as $lg1){
  1677.                             if(($lg1->getMessage() == $lg0->getMessage()) and ($lg1->getOwnerToDoLog() != $lg0->getOwnerToDoLog())) {
  1678.                                 $contador ++;
  1679.                             }
  1680.                         }
  1681.                         //Verifico si ya lo he metido en el arreglo
  1682.                         if ($contador>1){
  1683.                             $log =true;
  1684.                             foreach ($lg as $lgDef) {
  1685.                                 // Si encuentras que el mensaje ya esta en el arreglo pones el logico en falso
  1686.                                 if (($lgDef->getMessage() == $lg0->getMessage())) {
  1687.                                     $log = false;
  1688.                                 }
  1689.                             }
  1690.                             // Si no estaba el mensaje en el arreglo de salida se agrega
  1691.                             if ($log){
  1692.                                 $lg[] = $lg0;
  1693.                             }
  1694.                         } else {
  1695.                             $lg[] = $lg0;
  1696.                         }
  1697.                     }
  1698.                     $arrayComm[] = array($td,$lg);
  1699.                 }
  1700.             }
  1701.         }
  1702.                 }
  1703. //                }
  1704. //d($arrayComm);*/
  1705. //        }
  1706.     }
  1707.     /**
  1708.      * @Route("/todolog/update/", name="todolog_update")
  1709.      */
  1710.     public function updateToDoLogAction(Request $request)
  1711.     {
  1712.         $id_todo $request->request->all()['text_reply']['id_todo'];
  1713.         $todo_reply $request->request->all()['text'];
  1714.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  1715.         $user_id $user_logueado->getId();
  1716.         $em $this->getDoctrine()->getManager();
  1717.         $usrSender = ($em->getRepository(User::class)->findOneById($user_id))->getUsername();
  1718.         $todologs $em->getRepository(ToDoLogs::class)-> findBy( array('ownerToDoLog' => $user_id'todoId' => $id_todo ));
  1719.         $stateTodo = ($em->getRepository(ToDo::class)->findOneById($id_todo))->getState();
  1720.         foreach($todologs as $todolog){
  1721.                         $todolog->setReaded(true);
  1722.                         $todolog->setFinished($stateTodo);
  1723.                         try {
  1724.                             $em->persist($todolog);
  1725.                             $em->flush();
  1726.                         } catch (\ErrorException $e) {
  1727.                             d($e->getMessage());
  1728.                         }
  1729.         }
  1730. //        if (!(is_null($todo_reply))) {                        //estaba generando mensaje en vacio solo con el nombre del user
  1731.         if (strlen($todo_reply)>0) {
  1732.             //Se debe crear un comentario de respuesta desde log_todo se debe redirigir de vuelta al log_todo
  1733.             $id $id_todo;
  1734.             $comm $todo_reply;
  1735.             $comment = new ToDoComments();
  1736.             $comment->setIdtodo($id);
  1737.             $usrSender = ($em->getRepository(User::class)->findOneById($user_id))->getUsername();
  1738.             $creatMsg = (new \Datetime())->format('H:i d/m/Y');
  1739.             $comment->setTextComment($usrSender' : '.$comm);
  1740.             $comment->setCreatedId($user_id);
  1741.             $comment->setUpdatedId($user_id);
  1742.             try {
  1743.                 $em->persist($comment);
  1744.                 $em->flush();
  1745.                 $todo $em->getRepository(ToDo::class)->findOneById($id);
  1746.                 $a = array();                               //Arreglo con los indices de los usuarios a notificar
  1747.                 $i 0;
  1748. //                if ($todo->getBossToDo() != $user_id) {      //No se debe recibir notificacion de los mensajes emitidos por el propio usuario - Se cambio la logica
  1749.                 $a[0] = $todo->getBossToDo();               //Se asume que el Boss siempre existirá
  1750.                 $i++;
  1751.                 if (!empty($todo->getOwnerToDo())) {
  1752. //                    if ($todo->getOwnerToDo() != $user_id) {      //No se debe recibir notificacion de los mensajes emitidos por el propio usuario
  1753.                         $a[$i] = $todo->getOwnerToDo();
  1754.                         $i++;
  1755. //                    }
  1756.                 }
  1757.                 if (!empty($todo->getFolowerToDo())) {
  1758. //                    if ($todo->getFolowerToDo() != $user_id) {      //No se debe recibir notificacion de los mensajes emitidos por el propio usuario
  1759.                         $a[$i] = $todo->getFolowerToDo();
  1760. //                    }
  1761.                 }
  1762.                 $data array_unique($a);
  1763.                 foreach ($data as $datalogData) {
  1764.                     if ($datalogData != 0) {                         //0 no es un usuario
  1765.                         $todolog = new ToDoLogs();
  1766.                         $todolog->setTitle($todo->getTitle());
  1767.                         $todolog->setMessage($comm);
  1768.                         $todolog->setOwnerToDoLog($datalogData);
  1769.                         $todolog->setCreatedAt(new \Datetime());
  1770.                         $todolog->setCreatedId($user_id);
  1771.                         $todolog->setReaded(true);                                  //Comente el if que va a continuacion
  1772. //                        if (($comm == 'Se ha modificado la tarea') or ($comm == 'La tarea se ha marcado como no finalizada') or ($comm == 'Se ha finalizado la tarea')) {
  1773. //                            $todolog->setReaded(true);                                              //Por indicacion de Rafael Guerrero solo se reportan los mensajes
  1774. //                        } else {
  1775. //                            if ($datalogData != $user_id){
  1776. //                                $todolog->setReaded(false);
  1777. //                            }
  1778. //                            else {$todolog->setReaded(true);}
  1779. //                        }
  1780.                         $todolog->setMessage($usrSender ': '.$comm);
  1781.                         $todolog->setTodoId($todo->getId());
  1782.                         $em->persist($todolog);
  1783.                         $em->flush();
  1784.                     }
  1785.                 }
  1786.             } catch (\ErrorException $e) {
  1787.                 d($e->getMessage());
  1788.             }
  1789.         }
  1790.         return $this->redirectToRoute('todo_log');
  1791.     }
  1792.     /**
  1793.      * @Route("/todo/gotodo/{id}/{title}/{agentId}/{clientId}", name="todo_gotodo")
  1794.      */
  1795.     public function goToDoAction($id$title$agentId$clientIdRequest $request)
  1796.     {
  1797.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  1798.         $user_id $user_logueado->getId();
  1799.         $em $this->getDoctrine()->getManager();
  1800.         $todo $em->getRepository(ToDo::class)->findOneByIdToDoControl($id);
  1801.         if (is_null($todo)) {
  1802.             return $this->redirectToRoute('todo_add',                       //Se le manda por el request la información que se copia automaticamente
  1803.                 array(
  1804.                     'id' => $id,
  1805.                     'title' => $title,
  1806.                     'agentId' => $agentId,
  1807.                     'clientId' => $clientId
  1808.                 )
  1809.             );
  1810.         } else {
  1811.             $id $todo->getId();                                       //El Id que teniamos previamente era el del Proposal, es necesario pasar el Id del Todo
  1812.             return $this->redirectToRoute('todo_edit',
  1813.                 array(
  1814.                     'id' => $id
  1815.                 )
  1816.             );
  1817.         }
  1818.     }
  1819.     /**
  1820.      * @Route("/todo/gochattodo/{id}/{title}/{agentId}/{clientId}", name="todo_gochattodo")
  1821.      */
  1822.     public function goChatToDoAction($id$title$agentId$clientIdRequest $request)
  1823.     {
  1824.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  1825.         $user_id $user_logueado->getId();
  1826.         $em $this->getDoctrine()->getManager();
  1827.         $todo $em->getRepository(ToDo::class)->findOneByIdToDoControl($id);
  1828.         if (is_null($todo)) {
  1829.             return $this->redirectToRoute('todo_add',                       //Se le manda por el request la información que se copia automaticamente
  1830.                 array(
  1831.                     'id' => $id,
  1832.                     'title' => $title,
  1833.                     'agentId' => $agentId,
  1834.                     'clientId' => $clientId
  1835.                 )
  1836.             );
  1837.         } else {
  1838.             $id $todo->getId();                                       //El Id que teniamos previamente era el del Proposal, es necesario pasar el Id del Todo
  1839.             return $this->redirectToRoute('todo_log',
  1840.                 array(
  1841.                     'id' => $id
  1842.                 )
  1843.             );
  1844.         }
  1845.     }
  1846.     /**
  1847.      * @Route("/todo/historic", name="todo_historic")
  1848.      */
  1849.     public function listHistoricAction(Request $request)
  1850.     {
  1851.         $em $this->getDoctrine()->getManager();
  1852.         $todos $em->getRepository(ToDo::class)->findAll();
  1853.         $data = array();
  1854.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  1855.         $user_id $user_logueado->getId();
  1856.         foreach ($todos as $todo) {
  1857.             if ((($todo->getOwnerToDo() == $user_id) || ($todo->getBossToDo() == $user_id) || ($todo->getFolowerToDo() == $user_id)) && ($todo->getState())) {
  1858.                 //Se buscan relacionadas con el usuario logeado y que no se estén finalizadas
  1859.                 $data[] = array(
  1860.                     'id' => $todo->getId(),
  1861.                     'title' => $todo->getTitle(),
  1862.                     'idToDoControl' => $todo->getIdToDoControl(),
  1863.                     'ownerToDo' => $todo->getOwnerToDo(),
  1864.                     'folowerTodo' => $todo->getFolowerToDo(),
  1865.                     'bossToDo' => $todo->getBossToDo(),
  1866.                     'endAt' => $todo->getEndAt(),
  1867.                     'typeTime' => $todo->getTypeTime(),
  1868.                     'createdAt' => $todo->getCreatedAt(),
  1869. //                    'createdId' => $todo->getUpdatedId(),
  1870. //                    'updatedAt' => $todo->getUpdatedAt(),
  1871. //                    'updatedId' => $todo->getCreatedId(),
  1872.                     'description' => $todo->getDescription(),
  1873.                     'details' => $todo->getDetails(),
  1874.                     'details2' => $todo->getDetails2(),
  1875.                     'state' => $todo->getState()
  1876.                 );
  1877.             }
  1878.         }
  1879.         return $this->render('todo/hist-todo.html.twig', array(
  1880.             'todos' => $data
  1881.         ));
  1882.     }
  1883.     /**
  1884.      * @Route("/todo/unfinish/{id}", name="todo_unfinish")
  1885.      */
  1886.     public function unfinishToDoAction($id)
  1887.     {
  1888.         $em $this->getDoctrine()->getManager();
  1889.         $todo $em->getRepository(ToDo::class)->findOneById($id);
  1890.         $status false;
  1891.         $todo->setState($status);
  1892.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  1893.         $user_id $user_logueado->getId();
  1894.         try {
  1895.             $em->persist($todo);
  1896.             $em->flush();
  1897.             $todo $em->getRepository(ToDo::class)->findOneById($id);
  1898.             // Se ha marcado como no finalizado el ToDo se debe crear la notificacion
  1899.             $a = array();                               //Arreglo con los indices de los usuarios a notificar
  1900.             $a[0] = $todo->getBossToDo();               //Se asume que el Boss siempre existirá
  1901.             $i 1;
  1902.             if (!empty($todo->getOwnerToDo())) {
  1903.                 $a[$i] = $todo->getOwnerToDo();
  1904.                 $i++;
  1905.             } else {$a[$i] = 0$i++;}
  1906.             if (!empty($todo->getFolowerToDo())) {
  1907.                 $a[$i] = $todo->getFolowerToDo();
  1908.             } else {$a[$i] = 0$i++;}
  1909.             $data array_unique($a);
  1910.             foreach ($data as $datalogData) {
  1911.                 if ($datalogData != 0) {                         //0 no es un usuario
  1912.                     $todolog = new ToDoLogs();
  1913.                     $todolog->setTitle($todo->getTitle());
  1914.                     $todolog->setMessage('La tarea se ha marcado como no finalizada');
  1915.                     $todolog->setOwnerToDoLog($datalogData);
  1916.                     $todolog->setCreatedAt(new \Datetime());
  1917.                     $todolog->setReaded(true);                      //Se guarda el registro pero no se notifica (Por solicitud de Rafael Guerrero)
  1918.                     $todolog->setTodoId($todo->getId());
  1919.                     $em->persist($todolog);
  1920.                     $em->flush();
  1921.                 }
  1922.             }
  1923.         } catch (\ErrorException $e) {
  1924.             d($e->getMessage());
  1925.         }
  1926.         $em $this->getDoctrine()->getManager();
  1927.         $todos $em->getRepository(ToDo::class)->findAll();
  1928.         $data = array();
  1929.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  1930.         $user_id $user_logueado->getId();
  1931.         foreach ($todos as $todo) {
  1932.             if (($todo->getOwnerToDo() == $user_id) && !($todo->getState())) {
  1933.                 //Se buscan las tareas del usuario logeado y que no se estén finalizadas
  1934.                 $data[] = array(
  1935.                     'id' => $todo->getId(),
  1936.                     'title' => $todo->getTitle(),
  1937.                     'idToDoControl' => $todo->getIdToDoControl(),
  1938.                     'ownerToDo' => $todo->getOwnerToDo(),
  1939.                     'folowerTodo' => $todo->getFolowerToDo(),
  1940.                     'bossToDo' => $todo->getBossToDo(),
  1941.                     'endAt' => $todo->getEndAt(),
  1942.                     'typeTime' => $todo->getTypeTime(),
  1943.                     'createdAt' => $todo->getCreatedAt(),
  1944. //                    'createdId' => $todo->getUpdatedId(),
  1945. //                    'updatedAt' => $todo->getUpdatedAt(),
  1946. //                    'updatedId' => $todo->getCreatedId(),
  1947.                     'description' => $todo->getDescription(),
  1948.                     'details' => $todo->getDetails(),
  1949.                     'details2' => $todo->getDetails2(),
  1950.                     'state' => $todo->getState()
  1951.                 );
  1952.             }
  1953.         }
  1954.         return $this->redirectToRoute('todo_index');
  1955.     }
  1956.     /**
  1957.      * @Route("/todo/clientlist/{id}", name="todo_clientlist")
  1958.      */
  1959.     public function todoClientListAction($idRequest $request)
  1960.     {
  1961.         $em $this->getDoctrine()->getManager();
  1962.         /* ALL LO QUE HAY  */
  1963.         $dql 'SELECT cl,  c.country, p.region, r.city
  1964.                 FROM App:Client cl
  1965.                 INNER JOIN App:Country c WITH c.id = cl.country
  1966.                 INNER JOIN App:Regions p WITH p.id = cl.province
  1967.                 INNER JOIN App:Cities r WITH r.id = cl.population';
  1968.         $query $em->createQuery($dql);
  1969.         $clients $query->getResult();
  1970.         foreach ($clients as $client) {
  1971.             $group $em->getRepository(Group::class)->findOneById($client[0]->getGroupId());
  1972.             $parameters = array(
  1973.                 'clientId' => $client[0]->getId()
  1974.             );
  1975.             $dqlc 'SELECT cc,  u.name, u.lastname
  1976.                 FROM App:ClientContact cc
  1977.                 INNER JOIN App\Entity\User u WITH u.id = cc.assignedAgent
  1978.                 WHERE cc.clientId = :clientId ';
  1979.             $queryc $em->createQuery($dqlc)->setParameters($parameters);
  1980.             $contacts $queryc->getResult();
  1981.             $data_clients[] = array(
  1982.                 'client' => $client,
  1983.                 'group' => $group,
  1984.                 'contacts' => $contacts,
  1985.             );
  1986.         }
  1987.         return $this->render('todo/clients-todo-list.html.twig',
  1988.             array(
  1989.                 'datosclientes' => $data_clients,
  1990.                 'idToDo' => $id
  1991.             )
  1992.         );
  1993.     }
  1994.     /**
  1995.      * @Route("/todo/client/add/{id}/{idToDo}", name="todo_addclient")
  1996.      */
  1997.     public function addToDoClientAction($id$idToDoRequest $request)
  1998.     {
  1999.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  2000.         $user_id $user_logueado->getId();
  2001.         $em $this->getDoctrine()->getManager();
  2002.         $todo $em->getRepository(ToDo::class)->findOneById($idToDo);
  2003.         $todo->setidToDoClient($id);
  2004.         try {
  2005.             $em->persist($todo);
  2006.             $em->flush();
  2007.         } catch (\ErrorException $e) {
  2008.             d($e->getMessage());
  2009.         }
  2010.         return $this->redirectToRoute('todo_edit',
  2011.             array(
  2012.                 'id' => $idToDo
  2013.             )
  2014.         );
  2015.     }
  2016.     /**
  2017.      * @Route("/todo/client/remove/{id}/{idToDo}", name="todo_removeclient")
  2018.      */
  2019.     public function removeToDoClientAction($id$idToDoRequest $request)
  2020.     {
  2021.         $em $this->getDoctrine()->getManager();
  2022.         $todo $em->getRepository(ToDo::class)->findOneById($idToDo);
  2023.         $todo->setidToDoClient("");
  2024.         try {
  2025.             $em->persist($todo);
  2026.             $em->flush();
  2027.         } catch (\ErrorException $e) {
  2028.             d($e->getMessage());
  2029.         }
  2030.         return $this->redirectToRoute('todo_edit',
  2031.             array(
  2032.                 'id' => $idToDo
  2033.             )
  2034.         );
  2035.     }
  2036.     /**
  2037.      * @Route("/todo/supplierlist/{id}", name="todo_supplierlist")
  2038.      */
  2039.     public function todoSupplierListAction($idRequest $request)
  2040.     {
  2041.         $em $this->getDoctrine()->getManager();
  2042.         $name $request->request->get('settingstype')['name'];
  2043.         $suppliersettingstypefrom = new SupplierSettingsType();
  2044.         if (!empty($name)) {
  2045.             $suppliersettingstype $em->getRepository(SupplierSettingsType::class)->findAll();
  2046.             $suppliersettingstypefrom->setName($suppliersettingstype);
  2047.         }
  2048.         $suppliers $em->getRepository(Supplier::class)->findAll();
  2049.         /* evitar errores por no tener nada */
  2050.         $data_supplier = array();
  2051.         foreach ($suppliers as $supplier) {
  2052.             $country $em->getRepository(Country::class)->findOneById($supplier->getCountry());
  2053.             $supplier->setCountry($country->getCountry());
  2054.             $regions $em->getRepository(Regions::class)->findOneById($supplier->getRegion());
  2055.             $supplier->setRegion($regions->getRegion());
  2056.             $province $em->getRepository(Provinces::class)->findOneById($supplier->getProvince());
  2057.             $supplier->setProvince($province->getName());
  2058.             $cities $em->getRepository(Cities::class)->findOneById($supplier->getPopulation());
  2059.             $supplier->setPopulation($cities->getCity());
  2060.             $contacts $em->getRepository(SupplierContact::class)->findBy(
  2061.                 array('supplierId' => $supplier->getId())
  2062.             );
  2063.             $supplierIdeaServicesControl $em->getRepository(SupplierIdeaServicesControl::class)->findOneBySupplierId($supplier->getId());
  2064.             if (!empty($supplierIdeaServicesControl)) {     //Gustavo Ayala: agregué este condicional para para que si viene vacio el getId no genere un error
  2065.                 $data_supplier[] = array(
  2066.                     'controlGid' => $supplierIdeaServicesControl->getId(),
  2067.                     'supplier' => $supplier,
  2068.                     'contacts' => $contacts
  2069.                 );
  2070.             }
  2071.         }
  2072.         return $this->render('todo/supplier-todo-list.html.twig', array(
  2073. //            'groups' => $group,
  2074.             'supplier' => $data_supplier,
  2075.             'id' => $id
  2076. //            'form' => $form->createView()
  2077.         ));
  2078.     }
  2079.     /**
  2080.      * @Route("/todo/supplier/add/{id}/{idToDo}", name="todo_addsupplier")
  2081.      */
  2082.     public function addToDoSupplierAction($id$idToDoRequest $request)
  2083.     {
  2084.         $em $this->getDoctrine()->getManager();
  2085.         $todo $em->getRepository(ToDo::class)->findOneById($idToDo);
  2086.         $suppliers $em->getRepository(Supplier::class)->findAll();
  2087.         if (is_null($todo->getidToDoSupplier())) {
  2088.             $todo->setidToDoSupplier($id);
  2089.         } else {
  2090.             $a $todo->getidToDoSupplier();
  2091.             $a $a "," $id;
  2092.             $todo->setidToDoSupplier($a);
  2093.         }
  2094.         try {
  2095.             $em->persist($todo);
  2096.             $em->flush();
  2097.         } catch (\ErrorException $e) {
  2098.             d($e->getMessage());
  2099.         }
  2100.         return $this->redirectToRoute('todo_edit',
  2101.             array(
  2102.                 'id' => $idToDo
  2103.             )
  2104.         );
  2105.     }
  2106.     /**
  2107.      * @Route("/todo/supplier/remove/{id}/{idToDo}", name="todo_removeclient")
  2108.      */
  2109.     public function removeToDoSupplierAction($id$idToDoRequest $request)
  2110.     {
  2111.         $em $this->getDoctrine()->getManager();
  2112.         $todo $em->getRepository(ToDo::class)->findOneById($idToDo);
  2113.         $a $todo->getidToDoSupplier();
  2114.         $c explode(','$a);
  2115.         $b array_diff($c, array($id));
  2116.         $newsuplist implode(','$b);
  2117.         $todo->setidToDoSupplier($newsuplist);
  2118.         try {
  2119.             $em->persist($todo);
  2120.             $em->flush();
  2121.         } catch (\ErrorException $e) {
  2122.             d($e->getMessage());
  2123.         }
  2124.         return $this->redirectToRoute('todo_edit',
  2125.             array(
  2126.                 'id' => $idToDo
  2127.             )
  2128.         );
  2129.     }
  2130.     /**
  2131.      * @Route("/todo/proposal/{id}", name="todo_proposal")
  2132.      */
  2133.     public function proposalToDoListAction($idRequest $request)
  2134. {
  2135.         $em $this->getDoctrine()->getManager();
  2136.         //La busqueda de fechas no la limito a un rango de fechas
  2137.         //$desde = $request->request->get('buscarFecha')['desde'];
  2138.         $desde = new \DateTime();
  2139.         $desde -> setDate(1900,1,1);
  2140.         //$hasta = $request->request->get('buscarFecha')['hasta'];
  2141.         $hasta = new \DateTime();
  2142.         $hasta -> setDate(2078,1,1);
  2143.         $todo $em->getRepository(ToDo::class)->findOneById($id);
  2144.         $cliente $todo->getidToDoClient();
  2145. //        $cliente = $request->request->get('buscarFecha')['clientid'];
  2146.             /* Consulta con fechas desde y hasta con id cliente */
  2147.             if(!empty($cliente)){
  2148.                 $parameters = array(
  2149.                     'desde' => $desde,
  2150.                     'hasta' => $hasta,
  2151.                     'cliente' => $cliente
  2152.                 );
  2153.                 $dql 'SELECT p
  2154.                         FROM EventsBundle:Proposal p
  2155.                         WHERE p.dateProposedAt >= :desde AND p.dateProposedAt <= :hasta AND p.clientId = :cliente
  2156.                         ORDER BY p.id DESC';
  2157.             } else {
  2158.                 /* Consulta con fechas desde y hasta sin id cliente */
  2159.                 $parameters = array(
  2160.                     'desde' => $desde,
  2161.                     'hasta' => $hasta
  2162.                 );
  2163.                 $dql 'SELECT p
  2164.                         FROM EventsBundle:Proposal p
  2165.                         WHERE p.dateProposedAt >= :desde AND p.dateProposedAt <= :hasta
  2166.                         ORDER BY p.id DESC';
  2167.             }
  2168.             $query $em->createQuery($dql)->setParameters($parameters);
  2169.             $proposals $query->getResult();
  2170.         $datos_proposal = array();
  2171.         foreach($proposals as $proposal){
  2172.             /*
  2173.              * Estado, date create, id, Nombre, Cliente, Comercial, Equipo, Usuario, Inicio, Fin
  2174.              * */
  2175.             switch ($proposal->getStatus()) {
  2176.                 case "Pending":
  2177.                     $iconstatus ='<i class="icon-bell3 text-danger parpadea"></i>';
  2178.                     break;
  2179.                 case "Sent":
  2180.                     $iconstatus ='<i class="icon-paperplane text-orange"></i>';
  2181.                     break;
  2182.                 case "Confirmed":
  2183.                     $iconstatus ='<i class="icon-unlocked text-success"></i>';
  2184.                     break;
  2185.                 case "Invoiced":
  2186.                     $iconstatus ='<i class="icon-lock2 text-green"></i>';
  2187.                     break;
  2188.                 case "Cancel":
  2189.                     $iconstatus ='<i class=" icon-blocked text-grey"></i>';
  2190.                     break;
  2191.             }
  2192.             if ($proposal->getSent() == "Yes"){
  2193.                 $iconsent ='<i class="icon-paperplane text-orange"></i>';
  2194.                 if ($proposal->getStatus() == "Pending"){
  2195.                     $iconstatus ='<i class="icon-bell3 text-danger"></i>';
  2196.                 }
  2197.             }else{
  2198.                 $iconsent ='';
  2199.             }
  2200.             /* Consultas */
  2201.             $client $em->getRepository(Client::class)->findOneByid($proposal->getClientId());
  2202.             $contact $em->getRepository(ClientContact::class)->findOneById($proposal->getContactId());
  2203.             $commercial $em->getRepository(User::class)->findOneById($proposal->getAgencommercialId());
  2204.             if(empty($commercial)){$comercial="";}else{$comercial $commercial->getName();}
  2205.             $teams $em->getRepository(SettingsTeam::class)->findOneById($proposal->getTeamId());
  2206.             if(empty($teams)){$team="";}else{$team $teams->getTeam();}
  2207.             $agente $em->getRepository(User::class)->findOneById($proposal->getAgentId());
  2208.             if(empty($agente)){$agent="";}else{$agent $agente->getName();}
  2209.             /* Visto por ultima ves por parte del cliente o atraves del Access Key */
  2210.             if ($proposal->getViewedAt() == $proposal->getCreatedAt()){
  2211.                 //no Visto
  2212.                 $novisto $this->translator->trans('Not seen');
  2213.             }else{
  2214.                 //visto
  2215.                 $novisto $this->translator->trans('Seen by Client');
  2216.             }
  2217.             $datos_proposal[] = array(
  2218.                 'status'             => $this->translator->trans($proposal->getStatus()),
  2219.                 'iconstatus'         => $iconstatus,
  2220.                 'iconsent'           => $iconsent,
  2221.                 'viewedAt'           => $proposal->getViewedAt()->format('d/m/Y H:i:s'),
  2222.                 'novisto'            => $novisto,
  2223.                 'create'             => $proposal->getDateProposedAt()->format('d/m/Y'),
  2224.                 'id'                 => $proposal->getId(),
  2225.                 'token'              => $proposal->getAccessKey(),
  2226.                 'mcp'                => $proposal->getMcp(),
  2227.                 'name'               => $proposal->getName(),
  2228.                 'client'             => $client->getName(),
  2229.                 'client_id'          => $client->getId(),
  2230.                 'contact'            => $contact->getName().' '.$contact->getLastname(),
  2231.                 'contactdepartment'  => $contact->getDepartment(),
  2232.                 'contactphone'       => $contact->getPhone(),
  2233.                 'contactmovil'       => $contact->getMobile(),
  2234.                 'contactmail'        => $contact->getEmail(),
  2235.                 'commercial'         => $comercial,
  2236.                 'team'               => $team,
  2237.                 'agent'              => $agent,
  2238.                 'event_star'         => $proposal->getDateEventStarAt()->format('d/m/Y'),
  2239.                 'event_end'          => $proposal->getDateEventEndAt()->format('d/m/Y'),
  2240.                 'list_client'        => 'si'
  2241.             );
  2242.         }
  2243.         return $this->render('todo/proposal-todo-list.html.twig', array(
  2244.             'proposals' => $datos_proposal,
  2245.             'idTodo' => $id
  2246.         ));
  2247. }
  2248.     /**
  2249.      * @Route("/todo/proposal/add/{id}/{idToDo}", name="todo_addproposal")
  2250.      */
  2251.     public function addToDoProposalAction($id$idToDoRequest $request)
  2252.     {
  2253.         $em $this->getDoctrine()->getManager();
  2254.         $todo $em->getRepository(ToDo::class)->findOneById($idToDo);
  2255. //        if (is_null($todo->getIdToDoControl()) or ($todo->getIdToDoControl()=='0') ) {
  2256.             $todo->setIdToDoControl($id);
  2257. //        } else {
  2258. //            $a = $todo->getIdToDoControl();
  2259. ////            $a = $a . "," . $id;                              //Futuro desarrollo: multiples eventos relacionados con una tarea
  2260. //            $todo->setIdToDoControl($a);
  2261. //        }
  2262.         try {
  2263.             $em->persist($todo);
  2264.             $em->flush();
  2265.         } catch (\ErrorException $e) {
  2266.             d($e->getMessage());
  2267.         }
  2268.         return $this->redirectToRoute('todo_edit',
  2269.             array(
  2270.                 'id' => $idToDo
  2271.             )
  2272.         );
  2273.     }
  2274.     /**
  2275.      * @Route("/todo/proposal/remove/{id}/{idToDo}", name="todo_removeproposal")
  2276.      */
  2277.     public function removeToDoProposalAction($id$idToDoRequest $request)
  2278.     {
  2279.         $em $this->getDoctrine()->getManager();
  2280.         $todo $em->getRepository(ToDo::class)->findOneById($idToDo);
  2281.         $todo->setIdToDoControl("0");
  2282.         try {
  2283.             $em->persist($todo);
  2284.             $em->flush();
  2285.         } catch (\ErrorException $e) {
  2286.             d($e->getMessage());
  2287.         }
  2288.         return $this->redirectToRoute('todo_edit',
  2289.             array(
  2290.                 'id' => $idToDo
  2291.             )
  2292.         );
  2293.     }
  2294.     /**
  2295.      * @Route("/todo/ssupdate", name="todo_ssupdate")
  2296.      */
  2297.     public function todoSessionUpdate(Request $request)
  2298.     {                                                                   //Actualizador de la sesion, desde la la base (base.html) se llama al javascript (base-ssupdate) que levanta este controlador
  2299.         $em $this->getDoctrine()->getManager();
  2300.         // En idusr tenemos el arreglo de los usuarios que debemos refrescar la sesion
  2301.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  2302.         $user_id $user_logueado->getId();
  2303.         /* ALL LO QUE HAY -- ALERTAS DE ToDo */
  2304.         $parametersB = array(
  2305.             'user_id' => $user_id,
  2306.         );
  2307.         $dqlB 'SELECT COUNT (tdl.id) 
  2308.                     FROM App:ToDoLogs tdl
  2309.                     WHERE tdl.readed = FALSE AND tdl.ownerToDoLog = :user_id';
  2310.         $query $em->createQuery($dqlB)->setParameters($parametersB);;
  2311.         $alertTodo $query->getResult()[0][1];
  2312.         $request->getSession()->set('_todoalert'$alertTodo);
  2313.         $return "Actualizado!";
  2314.         $response = new JsonResponse($return);
  2315.         return $response;
  2316.     }
  2317.     /**
  2318.      * @Route("/todo/gomultitodo/{id}/{title}/{agentId}/{clientId}", name="todo_gomultitodo")
  2319.      */
  2320.     public function goMultiToDoAction($id$title$agentId$clientIdRequest $request)
  2321.     {
  2322.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  2323.         $user_id $user_logueado->getId();
  2324.         $em $this->getDoctrine()->getManager();
  2325.         $multitodo $em->getRepository(ToDo::class)->findByIdToDoControl($id);
  2326.         if (count($multitodo)==0) {
  2327.             return $this->redirectToRoute('todo_add',                       //Se le manda por el request la información del proposal que se copia automaticamente
  2328.                 array(
  2329.                     'id' => $id,
  2330.                     'title' => $title,
  2331.                     'agentId' => $agentId,
  2332.                     'clientId' => $clientId
  2333.                 )
  2334.             );
  2335.         } else {
  2336.             if (count($multitodo)==1){
  2337.                 $id $multitodo[0]->getId();                                       //El Id que teniamos previamente era el del Proposal, es necesario pasar el Id del Todo
  2338.                 return $this->redirectToRoute('todo_edit',
  2339.                     array(
  2340.                         'id' => $id
  2341.                     )
  2342.                 );
  2343.             } else {
  2344. //                return $this->render('todo/list-todo.html.twig', array(
  2345. //                    'todos' => $multitodo
  2346. //
  2347. //                ));
  2348.                 return $this->redirectToRoute('todo_log');
  2349.             }
  2350.         }
  2351.     }
  2352.     /**
  2353.      * @Route("/todo/gomultichattodo/{id}/{title}/{agentId}/{clientId}", name="todo_gomultichattodo")
  2354.      */
  2355.     public function goMultiChatToDoAction($id$title$agentId$clientIdRequest $request)
  2356.     {
  2357.         $user_logueado $this->get('security.token_storage')->getToken()->getUser();
  2358.         $user_id $user_logueado->getId();
  2359.         $em $this->getDoctrine()->getManager();
  2360.         $multitodo $em->getRepository(ToDo::class)->findByIdToDoControl($id);
  2361.         if (count($multitodo)==0) {
  2362.             return $this->redirectToRoute('todo_add',                       //Se le manda por el request la información que se copia automaticamente
  2363.                 array(
  2364.                     'id' => $id,
  2365.                     'title' => $title,
  2366.                     'agentId' => $agentId,
  2367.                     'clientId' => $clientId
  2368.                 )
  2369.             );
  2370.         } else {
  2371.             if (count($multitodo)==1){
  2372.                 $id $multitodo[0]->getId();                                       //El Id que teniamos previamente era el del Proposal, es necesario pasar el Id del Todo
  2373.                 return $this->redirectToRoute('todo_log',
  2374.                     array(
  2375.                         'id' => $id
  2376.                     )
  2377.                 );
  2378.             } else {
  2379. //                return $this->render('todo/list-todo.html.twig', array(
  2380. //                    'todos' => $multitodo
  2381. //                ));
  2382.                 return $this->redirectToRoute('todo_log');
  2383.             }
  2384.         }
  2385.     }
  2386.     /**
  2387.      * @Route("/todo/proposalnewadd/{idPrp}", name="todo_proposal_newadd")
  2388.      */
  2389.     public function proposalToDoNewAddListAction($idRequest $request)
  2390.     {
  2391.         $em $this->getDoctrine()->getManager();
  2392.         //La busqueda de fechas no la limito a un rango de fechas
  2393.         //$desde = $request->request->get('buscarFecha')['desde'];
  2394.         $desde = new \DateTime();
  2395.         $desde -> setDate(1900,1,1);
  2396.         //$hasta = $request->request->get('buscarFecha')['hasta'];
  2397.         $hasta = new \DateTime();
  2398.         $hasta -> setDate(2078,1,1);
  2399.         $todo $em->getRepository(ToDo::class)->findOneById($id);
  2400.         $cliente $todo->getidToDoClient();
  2401. //        $cliente = $request->request->get('buscarFecha')['clientid'];
  2402.         /* Consulta con fechas desde y hasta con id cliente */
  2403.         if(!empty($cliente)){
  2404.             $parameters = array(
  2405.                 'desde' => $desde,
  2406.                 'hasta' => $hasta,
  2407.                 'cliente' => $cliente
  2408.             );
  2409.             $dql 'SELECT p
  2410.                         FROM EventsBundle:Proposal p
  2411.                         WHERE p.dateProposedAt >= :desde AND p.dateProposedAt <= :hasta AND p.clientId = :cliente
  2412.                         ORDER BY p.id DESC';
  2413.         } else {
  2414.             /* Consulta con fechas desde y hasta sin id cliente */
  2415.             $parameters = array(
  2416.                 'desde' => $desde,
  2417.                 'hasta' => $hasta
  2418.             );
  2419.             $dql 'SELECT p
  2420.                         FROM EventsBundle:Proposal p
  2421.                         WHERE p.dateProposedAt >= :desde AND p.dateProposedAt <= :hasta
  2422.                         ORDER BY p.id DESC';
  2423.         }
  2424.         $query $em->createQuery($dql)->setParameters($parameters);
  2425.         $proposals $query->getResult();
  2426.         $datos_proposal = array();
  2427.         foreach($proposals as $proposal){
  2428.             /*
  2429.              * Estado, date create, id, Nombre, Cliente, Comercial, Equipo, Usuario, Inicio, Fin
  2430.              * */
  2431.             switch ($proposal->getStatus()) {
  2432.                 case "Pending":
  2433.                     $iconstatus ='<i class="icon-bell3 text-danger parpadea"></i>';
  2434.                     break;
  2435.                 case "Sent":
  2436.                     $iconstatus ='<i class="icon-paperplane text-orange"></i>';
  2437.                     break;
  2438.                 case "Confirmed":
  2439.                     $iconstatus ='<i class="icon-unlocked text-success"></i>';
  2440.                     break;
  2441.                 case "Invoiced":
  2442.                     $iconstatus ='<i class="icon-lock2 text-green"></i>';
  2443.                     break;
  2444.                 case "Cancel":
  2445.                     $iconstatus ='<i class=" icon-blocked text-grey"></i>';
  2446.                     break;
  2447.             }
  2448.             if ($proposal->getSent() == "Yes"){
  2449.                 $iconsent ='<i class="icon-paperplane text-orange"></i>';
  2450.                 if ($proposal->getStatus() == "Pending"){
  2451.                     $iconstatus ='<i class="icon-bell3 text-danger"></i>';
  2452.                 }
  2453.             }else{
  2454.                 $iconsent ='';
  2455.             }
  2456.             /* Consultas */
  2457.             $client $em->getRepository(Client::class)->findOneByid($proposal->getClientId());
  2458.             $contact $em->getRepository(ClientContact::class)->findOneById($proposal->getContactId());
  2459.             $commercial $em->getRepository(User::class)->findOneById($proposal->getAgencommercialId());
  2460.             if(empty($commercial)){$comercial="";}else{$comercial $commercial->getName();}
  2461.             $teams $em->getRepository(SettingsTeam::class)->findOneById($proposal->getTeamId());
  2462.             if(empty($teams)){$team="";}else{$team $teams->getTeam();}
  2463.             $agente $em->getRepository(User::class)->findOneById($proposal->getAgentId());
  2464.             if(empty($agente)){$agent="";}else{$agent $agente->getName();}
  2465.             /* Visto por ultima ves por parte del cliente o atraves del Access Key */
  2466.             if ($proposal->getViewedAt() == $proposal->getCreatedAt()){
  2467.                 //no Visto
  2468.                 $novisto $this->translator->trans('Not seen');
  2469.             }else{
  2470.                 //visto
  2471.                 $novisto $this->translator->trans('Seen by Client');
  2472.             }
  2473.             $datos_proposal[] = array(
  2474.                 'status'             => $this->translator->trans($proposal->getStatus()),
  2475.                 'iconstatus'         => $iconstatus,
  2476.                 'iconsent'           => $iconsent,
  2477.                 'viewedAt'           => $proposal->getViewedAt()->format('d/m/Y H:i:s'),
  2478.                 'novisto'            => $novisto,
  2479.                 'create'             => $proposal->getDateProposedAt()->format('d/m/Y'),
  2480.                 'id'                 => $proposal->getId(),
  2481.                 'token'              => $proposal->getAccessKey(),
  2482.                 'mcp'                => $proposal->getMcp(),
  2483.                 'name'               => $proposal->getName(),
  2484.                 'client'             => $client->getName(),
  2485.                 'client_id'          => $client->getId(),
  2486.                 'contact'            => $contact->getName().' '.$contact->getLastname(),
  2487.                 'contactdepartment'  => $contact->getDepartment(),
  2488.                 'contactphone'       => $contact->getPhone(),
  2489.                 'contactmovil'       => $contact->getMobile(),
  2490.                 'contactmail'        => $contact->getEmail(),
  2491.                 'commercial'         => $comercial,
  2492.                 'team'               => $team,
  2493.                 'agent'              => $agent,
  2494.                 'event_star'         => $proposal->getDateEventStarAt()->format('d/m/Y'),
  2495.                 'event_end'          => $proposal->getDateEventEndAt()->format('d/m/Y'),
  2496.                 'list_client'        => 'si'
  2497.             );
  2498.         }
  2499.         return $this->render('todo/proposal-todo-list.html.twig', array(
  2500.             'proposals' => $datos_proposal,
  2501.             'idTodo' => $id
  2502.         ));
  2503.     }
  2504.     /**
  2505.      * @Route("/todo/adminGlobalList", name="admin_global_list")
  2506.      */
  2507.     public function adminGlobalListAction(Request $request)
  2508.     {
  2509.         $em $this->getDoctrine()->getManager();
  2510.         // -- Buscamos las tareas que no se hayan finalizado
  2511.         $tareasActivas $em->getRepository(ToDo::class)->findBy(
  2512.             array(
  2513.                 'state' => 0,
  2514.                 )
  2515.             );
  2516.         // -- fin--  Buscamos las tareas que no se hayan finalizado
  2517.         // Se buscan los Logs no leidos del usuario
  2518.         $arrayMiniChat = array();
  2519.         $countIdToDo 0;                                     // Si mas de un comentario esta como no leido se repetira la data por eso usamos este contador
  2520.         $toDoPendiente $em->getRepository(ToDoLogs::class)->findAll();
  2521.         $arrayTodo =array();
  2522.         $mensaje=array();
  2523.         $i=0;
  2524.         foreach ($toDoPendiente as $pending){
  2525.             if($pending->getFinished() === 0){
  2526.                 $mensaje[$pending->getTodoId()][$i] = $pending;
  2527.             }
  2528.             $i++;
  2529.         }
  2530.         //Volteo el arreglo para que queden ordenados los mensajes por fecha descendiente
  2531.         $todo_log_usr $em->getRepository(ToDoLogs::class)->findBy( array('finished' => 0));
  2532.         $mensaje_inv array_reverse($todo_log_usr);
  2533.         //genero un arreglo cin los indices de los T O D O, para eliminar repeticiones y contar numero de tareas a mostrar en la vista
  2534.         $array_contador = array();
  2535.         foreach ($mensaje_inv as $mi){
  2536.             $array_contador[] = $mi->getTodoId();
  2537.         }
  2538.         //elimino repeticiones
  2539.         $array_contador array_unique($array_contador);
  2540.         //cuento el numero de tareas
  2541.         $countlog count($array_contador);
  2542.         //Agrupa los mensajes por T O D O debo recorrer el arreglo _inv
  2543.         $array_mix = array();                       //Contendra el   T O D O   y los   LOGS
  2544.         $todo_all= array();
  2545.         foreach ($mensaje_inv as $men_inv){
  2546.             //Traigo todos los mnensajes del T O D O, me vi forzado a entrar al arreglo porque desconozco el valor del indice
  2547.             $todo_all $em->getRepository(ToDo::class)->findById($men_inv->getTodoId());
  2548.             if(count($todo_all)>0){
  2549.                 // Si la tarea no esta finalizada
  2550.                 if(!($todo_all[0]->getState())){
  2551.                     $todo_logs $em->getRepository(ToDoLogs::class)->findBy( array('todoId' => $men_inv->getTodoId()));
  2552.                     // Para evitar repeticiones solo lo meto en el arreglo definito si no he metido la tarea actual
  2553.                     if (in_array($todo_all[0]->getId(), $array_contadortrue)){
  2554.                         $array_mix[] = array(
  2555.                             'todo' => $todo_all[0],
  2556.                             'todo_logs' => $todo_logs,
  2557.                         );
  2558.                         // Lo saco del arreglo para evitar repeticiones
  2559.                         foreach (array_keys($array_contador$todo_all[0]->getId()) as $key) {
  2560.                             unset($array_contador[$key]);
  2561.                         }
  2562.                     }
  2563.                 } else {
  2564.                     // Si esta finalizada verificar si la finalizo otro que no sea el user_id
  2565.                     // Si hemos vaciado el contador de los  T O D O  ya no debo considerar mas mensajes
  2566.                     if ((count($array_contador)) != ) {
  2567.                         // Voy a buscar el log que indique si se finalizo y el creador de ese log es user_id, si no encuentro este valor se debe agregar el mensaje ya que otro fue el finalizador de la tarea
  2568.                         $todo_logs $em->getRepository(ToDoLogs::class)->findBy( array('todoId' => $men_inv->getTodoId(),
  2569.                             'message' => 'Se ha finalizado la tarea'
  2570.                         ));
  2571.                         if(count($todo_logs) == 0){     // Debo pintar ya que la finalizo otro usuario
  2572.                             $todo_logs $em->getRepository(ToDoLogs::class)->findBy( array('todoId' => $men_inv->getTodoId()));
  2573.                             $array_mix[] = array(
  2574.                                 'todo' => $todo_all[0],
  2575.                                 'todo_logs' => $todo_logs,
  2576.                             );
  2577.                             foreach (array_keys($array_contador$todo_all[0]->getId()) as $key) {
  2578.                                 unset($array_contador[$key]);
  2579.                             }
  2580.                         }
  2581.                     }
  2582.                 }
  2583.             }
  2584.         }
  2585.         $arrayTodo = array();
  2586.         foreach($mensaje as $men){
  2587.             foreach($men as $m1){
  2588.                 $arrayMen =$em->getRepository(ToDo::class)->findOneById($m1->getTodoId());
  2589.                 $arrayTodo[] = array(
  2590.                     'todo' => $arrayMen,
  2591.                     'mensaje' => $men,
  2592.                 );
  2593.             }
  2594.         }
  2595.         // --**
  2596.         return $this->render('todo/adminTodoList.html.twig', array(
  2597.             'todos' => $tareasActivas,
  2598.             'arrayComm' => $mensaje,
  2599.             'countlog' => $countlog,
  2600.             'arrayTodo' => $array_mix,
  2601.             'arrayMiniChat' => $arrayMiniChat
  2602.         ));
  2603.     }
  2604.     /**
  2605.      * @Route("/todo/adminDetailTodo/{ind}", name="adminDetailTodo")
  2606.      */
  2607.     public function adminDetailTodoAction($indRequest $request)
  2608.     {
  2609.         return $this->render('todo/adminDetailTodo.html.twig',
  2610.             array(
  2611. //                'ind' => $ind,
  2612. //                'suppliers_consulta' => $suppliers_consulta,
  2613. //                'form' => $form->createView()
  2614.             )
  2615.         );
  2616.     }
  2617. }