<?php
/**
* Created by Mediterranean Develup Solutions
* User: jorge.defreitas@develup.solutions
* Date: 06/07/2017
* Time: 14:26
*/
namespace App\Controller;
use App\Entity\Cities;
use App\Entity\Client;
use App\Entity\ClientContact;
use App\Entity\Country;
use App\Entity\Group;
use App\Entity\Provinces;
use App\Entity\Regions;
use App\Entity\SettingsTeam;
use App\Entity\Supplier;
use App\Entity\SupplierContact;
use App\Entity\SupplierIdeaServicesControl;
use App\Entity\ToDo;
use App\Entity\ToDoComments;
use App\Entity\ToDoLogs;
use App\Form\ToDoCommentsType;
use App\Form\ToDoType;
use App\Entity\SupplierSettingsType;
use App\Entity\User;
use App\MDS\EventsBundle\Entity\Proposal;
use App\MDS\EventsBundle\Entity\ProposalInvoice;
use App\MDS\EventsBundle\Entity\ProposalSupplierServicesCosts;
use App\MDS\EventsBundle\Entity\ProposalSupplierServicesCostsClient;
use App\MDS\StatisticsBundle\Controller\InvoiceStatisticsController;
use Doctrine\ORM\EntityManagerInterface;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Contracts\Translation\TranslatorInterface;
class ToDoController extends AbstractController
{
private $translator;
public function __construct(TranslatorInterface $translator) {
$this->translator = $translator;
}
/**
* @Route("/statistics/clientbenefit/{id}", name="statistics_client_benefit_new")
*/
public function statisticsClientBenefitAction($id, Request $request){
$em = $this->getDoctrine()->getManager();
$proposal_inv = $em->getRepository(Proposal::class)->findBy(
array(
'clientId' => $id,
'status' => 'Invoiced'
)
);
$agent_user = array();
$commercial_user = array();
$client_consulta = array();
$group_consulta = array();
$data = array();
$totales_net = "0";
$totales_total = "0";
$totales_benefit = "0";
$totales_benefit_por = "0";
$staticObject= new InvoiceStatisticsController();
d($proposal_inv);
foreach($proposal_inv as $proposal ){
$invoice_numero = $em->getRepository(ProposalInvoice::class)->findOneByProposalId($proposal->getId());
// if ($listar_invoice == "Invoiced" and !empty($invoice_numero)){
if (!empty($invoice_numero)){
$numerofactura = $invoice_numero->getNumber();
}else{
$numerofactura = "NF";
}
$client_data = $em->getRepository(Client::class)->findOneById($proposal->getClientId());
$clientGroup_data = $em->getRepository(Group::class)->findOneById($client_data->getGroupId());
if (!empty($clientGroup_data)){
$clientGroup = $clientGroup_data->getTitle();
}else{
$clientGroup = "-";
}
$confirmed_list = $em->getRepository(ProposalSupplierServicesCostsClient::class)->findByProposalId($proposal->getId());
// d($confirmed_list);
$total_neto_client = "0";
$total_con_iva_client = "0";
$data_iva = "0";
if (!empty($confirmed_list)){
// $data_iva = array();
$reset_iva = 0;
$totales_ivas_all = array();
foreach($confirmed_list as $confirmed ){
$idcat = $confirmed->getServiceCatId();
$price = $confirmed->getPrice();
$units = $confirmed->getUnits();
$pax = $confirmed->getPax();
$opcommission = $confirmed->getOpCommission();
$commission = $confirmed->getCommission();
$opover = $confirmed->getOpOver();
$over = $confirmed->getOver();
$opiva = $confirmed->getOpIva();
$iva_client = $confirmed->getIva();
$dateInAt = $confirmed->getDateInAt();
$dateOutAt = $confirmed->getDateOutAt();
if (!is_null($dateInAt) and !is_null($dateOutAt)){
$days = $dateInAt->diff($dateOutAt);
$day = $days->days;
}else{
$day = "0";
}
$calculos = $staticObject->CalculoTotalesservices($price, $units, $pax, $day, $opcommission, $commission, $opover, $over, $opiva, $iva_client, $idcat);
d($calculos);
$total_neto_client += $calculos['total_neto'];
// $total_iva_client += $calculos['sub_total_iva'];
$total_con_iva_client += $calculos['total'];
$data_iva += $calculos['sub_total_iva'];
$cost_data = $em->getRepository(ProposalSupplierServicesCosts::class)->findByProposalId($proposal->getId());
$cost_neto = 0;
foreach($cost_data as $costdata ){
if ($costdata->getTotalServices() != "0"){
if ($costdata->getServiceCatId() != "0"){
if (empty($costdata->getCommission())){
$commission = "0";
}else{
$commission = $costdata->getCommission();
}
if (empty($costdata->getTotalServices())){
$cost_total = "0";
}else{
$cost_total = $costdata->getTotalServices();
}
$cost_base = $cost_total * ( ( 100 - $commission ) / 100);
if ($costdata->getOpIva() == "0"){
if (!empty($costdata->getIvaServices()) or $costdata->getIvaServices() == "0"){
$cost_base = $cost_base / ($costdata->getIvaServices() / 100 + 1);
}
}
$cost_neto = $cost_base + $cost_neto;
}
}
}
}
}
$invoice = array(
'id' => 'NID',
'type' => 'Confirmed',
'proposalId' => $confirmed->getProposalId(),
'number' => $numerofactura,
'dateAt' => $proposal->getDateEventStarAt(),
'totalnet' => $total_neto_client,
'vat' => $data_iva,
'total' => $total_con_iva_client,
);
$benefit = $total_neto_client - $cost_neto;
$benefit_por = $benefit / $total_neto_client * 100;
$agent = $proposal->getAgentId();
$commercial = $proposal->getAgencommercialId();
$groupclient = ($em->getRepository(Client::class)->findOneById($proposal->getClientId()))->getGroupId();
$client = $proposal->getClientId();
if (is_null($agent) and is_null($commercial) and is_null($groupclient) and is_null($client)){
$data[] = array(
'invoice' => $invoice,
'client' => $client_data,
'clientgroup' => $clientGroup,
'benefit' => $benefit,
'benefitpor' => $benefit_por,
'nameevent' => $proposal->getName(),
'status' => $proposal->getStatus()
);
$totales_benefit += $benefit;
$totalnet = $total_neto_client;
$totales_net += $totalnet;
$total = $total_con_iva_client;
$totales_total += $total;
$totales_benefit_por = $totales_benefit / $totales_net * 100;
}else{
if (!is_null($agent) and is_null($commercial) and is_null($groupclient) and is_null($client)){
if ($proposal->getAgentId() == $agent){
$data[] = array(
'invoice' => $invoice,
'client' => $client_data,
'clientgroup' => $clientGroup,
'benefit' => $benefit,
'benefitpor' => $benefit_por,
'nameevent' => $proposal->getName(),
'status' => $proposal->getStatus()
);
$agent_user = $em->getRepository(User::class)->findOneBy(
array(
'id' => $agent
)
);
$totales_benefit += $benefit;
$totalnet = $total_neto_client;
$totales_net += $totalnet;
$total = $total_con_iva_client;
$totales_total += $total;
$totales_benefit_por = $totales_benefit / $totales_net * 100;
}
}
if (is_null($agent) and !is_null($commercial) and is_null($groupclient) and is_null($client)){
if ($proposal->getAgencommercialId() == $commercial){
$data[] = array(
'invoice' => $invoice,
'client' => $client_data,
'clientgroup' => $clientGroup,
'benefit' => $benefit,
'benefitpor' => $benefit_por,
'nameevent' => $proposal->getName(),
'status' => $proposal->getStatus()
);
$commercial_user = $em->getRepository(User::class)->findOneBy(
array(
'id' => $commercial
)
);
$totales_benefit += $benefit;
$totalnet = $total_neto_client;
$totales_net += $totalnet;
$total = $total_con_iva_client;
$totales_total += $total;
$totales_benefit_por = $totales_benefit / $totales_net * 100;
}
}
if (is_null($agent) and is_null($commercial) and !is_null($groupclient) and is_null($client)){
if ($client_data->getGroupId() == $groupclient){
$data[] = array(
'invoice' => $invoice,
'client' => $client_data,
'clientgroup' => $clientGroup,
'benefit' => $benefit,
'benefitpor' => $benefit_por,
'nameevent' => $proposal->getName(),
'status' => $proposal->getStatus()
);
$group_consulta = $em->getRepository(Group::class)->findOneBy(
array(
'id' => $groupclient
)
);
$totales_benefit += $benefit;
$totalnet = $total_neto_client;
$totales_net += $totalnet;
$total = $total_con_iva_client;
$totales_total += $total;
$totales_benefit_por = $totales_benefit / $totales_net * 100;
}
}
if (is_null($agent) and is_null($commercial) and is_null($groupclient) and !is_null($client)){
if ($client_data->getId() == $client){
$data[] = array(
'invoice' => $invoice,
'client' => $client_data,
'clientgroup' => $clientGroup,
'benefit' => $benefit,
'benefitpor' => $benefit_por,
'nameevent' => $proposal->getName(),
'status' => $proposal->getStatus()
);
$client_consulta = $em->getRepository(Client::class)->findOneBy(
array(
'id' => $client
)
);
$totales_benefit += $benefit;
$totalnet = $total_neto_client;
$totales_net += $totalnet;
$total = $total_con_iva_client;
$totales_total += $total;
$totales_benefit_por = $totales_benefit / $totales_net * 100;
}
}
}
// }
// if ($listar_invoice == "Confirmed"){
if (!empty($invoice_numero)){
$numerofactura = $invoice_numero->getNumber();
}else{
$numerofactura = "NF";
}
$client_data = $em->getRepository(Client::class)->findOneById($proposal->getClientId());
$clientGroup_data = $em->getRepository(Group::class)->findOneById($client_data->getGroupId());
if (!empty($clientGroup_data)){
$clientGroup = $clientGroup_data->getTitle();
}else{
$clientGroup = "-";
}
$confirmed_list = $em->getRepository(ProposalSupplierServicesCostsClient::class)->findByProposalId($proposal->getId());
$data_iva = "0";
$total_neto_client = "0";
$total_con_iva_client = "0";
if (!empty($confirmed_list)){
$reset_iva = 0;
$totales_ivas_all = array();
foreach($confirmed_list as $confirmed ){
$idcat = $confirmed->getServiceCatId();
$price = $confirmed->getPrice();
$units = $confirmed->getUnits();
$pax = $confirmed->getPax();
$opcommission = $confirmed->getOpCommission();
$commission = $confirmed->getCommission();
$opover = $confirmed->getOpOver();
$over = $confirmed->getOver();
$opiva = $confirmed->getOpIva();
$iva_client = $confirmed->getIva();
$dateInAt = $confirmed->getDateInAt();
$dateOutAt = $confirmed->getDateOutAt();
if (!is_null($dateInAt) and !is_null($dateOutAt)){
$days = $dateInAt->diff($dateOutAt);
$day = $days->days;
}else{
$day = "0";
}
$calculos = $staticObject->CalculoTotalesservices($price, $units, $pax, $day, $opcommission, $commission, $opover, $over, $opiva, $iva_client, $idcat);
$total_neto_client += $calculos['total_neto'];
// $total_iva_client += $calculos['sub_total_iva'];
$total_con_iva_client += $calculos['total'];
// if (empty($totales_ivas_all[$iva_client])){
// $totales_ivas_all[$iva_client]= 0;
// }
// $totales_ivas_all[$iva_client] += $calculos['sub_total_iva'];
//
// $data_iva[$iva_client] = array(
// 'iva' => $iva_client,
// 'ivas' => $totales_ivas_all[$iva_client],
// );
$data_iva += $calculos['sub_total_iva'];
$cost_data = $em->getRepository(ProposalSupplierServicesCosts::class)->findByProposalId($proposal->getId());
$cost_neto = 0;
foreach($cost_data as $costdata ){
if ($costdata->getTotalServices() != "0"){
if ($costdata->getServiceCatId() != "0"){
if (empty($costdata->getCommission())){
$commission = "0";
}else{
$commission = $costdata->getCommission();
}
if (empty($costdata->getTotalServices())){
$cost_total = "0";
}else{
$cost_total = $costdata->getTotalServices();
}
$cost_base = $cost_total * ( ( 100 - $commission ) / 100);
if ($costdata->getOpIva() == "0"){
if (!empty($costdata->getIvaServices()) or $costdata->getIvaServices() == "0"){
$cost_base = $cost_base / ($costdata->getIvaServices() / 100 + 1);
}
}
$cost_neto = $cost_base + $cost_neto;
}
}
}
}
}
$invoice = array(
'id' => 'NID',
'type' => 'Confirmed',
'proposalId' => $proposal->getId(),
'number' => $numerofactura,
'dateAt' => $proposal->getDateEventStarAt(),
'totalnet' => $total_neto_client,
'vat' => $data_iva,
'total' => $total_con_iva_client,
);
$benefit = $total_neto_client - $cost_neto;
$benefit_por = $benefit / $total_neto_client * 100;
// if (empty($total_neto_client)){
// $benefit = "0";
// $benefit_por = "0";
// }else{
// $benefit = $invoice->getTotalnet() - $total_neto_client;
// $benefit_por = $benefit / $invoice->getTotalnet() * 100;
// }
// d($agent,$commercial,$groupclient,$client);
if (is_null($agent) and is_null($commercial) and is_null($groupclient) and is_null($client)){
$data[] = array(
'invoice' => $invoice,
'client' => $client_data,
'clientgroup' => $clientGroup,
'benefit' => $benefit,
'benefitpor' => $benefit_por,
'nameevent' => $proposal->getName(),
'status' => $proposal->getStatus()
);
$totales_benefit += $benefit;
$totalnet = $total_neto_client;
$totales_net += $totalnet;
$total = $total_con_iva_client;
$totales_total += $total;
$totales_benefit_por = $totales_benefit / $totales_net * 100;
}else{
if (!is_null($agent) and is_null($commercial) and is_null($groupclient) and is_null($client)){
if ($proposal->getAgentId() == $agent){
$data[] = array(
'invoice' => $invoice,
'client' => $client_data,
'clientgroup' => $clientGroup,
'benefit' => $benefit,
'benefitpor' => $benefit_por,
'nameevent' => $proposal->getName(),
'status' => $proposal->getStatus()
);
$agent_user = $em->getRepository(User::class)->findOneBy(
array(
'id' => $agent
)
);
$totales_benefit += $benefit;
$totalnet = $total_neto_client;
$totales_net += $totalnet;
$total = $total_con_iva_client;
$totales_total += $total;
$totales_benefit_por = $totales_benefit / $totales_net * 100;
}
}
if (is_null($agent) and !is_null($commercial) and is_null($groupclient) and is_null($client)){
if ($proposal->getAgencommercialId() == $commercial){
$data[] = array(
'invoice' => $invoice,
'client' => $client_data,
'clientgroup' => $clientGroup,
'benefit' => $benefit,
'benefitpor' => $benefit_por,
'nameevent' => $proposal->getName(),
'status' => $proposal->getStatus()
);
$commercial_user = $em->getRepository(User::class)->findOneBy(
array(
'id' => $agent
)
);
$totales_benefit += $benefit;
$totalnet = $total_neto_client;
$totales_net += $totalnet;
$total = $total_con_iva_client;
$totales_total += $total;
$totales_benefit_por = $totales_benefit / $totales_net * 100;
}
}
if (is_null($agent) and is_null($commercial) and !is_null($groupclient) and is_null($client)){
if ($client_data->getGroupId() == $groupclient){
$data[] = array(
'invoice' => $invoice,
'client' => $client_data,
'clientgroup' => $clientGroup,
'benefit' => $benefit,
'benefitpor' => $benefit_por,
'nameevent' => $proposal->getName(),
'status' => $proposal->getStatus()
);
$group_consulta = $em->getRepository(Group::class)->findOneBy(
array(
'id' => $groupclient
)
);
$totales_benefit += $benefit;
$totalnet = $total_neto_client;
$totales_net += $totalnet;
$total = $total_con_iva_client;
$totales_total += $total;
$totales_benefit_por = $totales_benefit / $totales_net * 100;
}
}
// d($agent,$commercial,$groupclient,$client);
if (is_null($agent) and is_null($commercial) and is_null($groupclient) and !is_null($client)){
if ($client_data->getId() == $client){
$data[] = array(
'invoice' => $invoice,
'client' => $client_data,
'clientgroup' => $clientGroup,
'benefit' => $benefit,
'benefitpor' => $benefit_por,
'nameevent' => $proposal->getName(),
'status' => $proposal->getStatus()
);
$client_consulta = $em->getRepository(Client::class)->findOneBy(
array(
'id' => $client
)
);
$totales_benefit += $benefit;
$totalnet = $total_neto_client;
$totales_net += $totalnet;
$total = $total_con_iva_client;
$totales_total += $total;
$totales_benefit_por = $totales_benefit / $totales_net * 100;
}
}
}
d($totales_benefit,$totalnet,$totales_net,$total,$totales_total,$totales_benefit_por);
}
d($totales_benefit,$totalnet,$totales_net,$total,$totales_total,$totales_benefit_por);
}
/**
* @Route("/todo", name="todo_home")
*/
public function indexAction(Request $request)
{
return $this->redirectToRoute('todo_index');
}
/**
* @Route("/todo/add", name="todo_add")
* @param Request $request
* @return Response
*/
public function addAction(Request $request)
{
$temp = $request->query->all(); // {{id}} {{title}} {{agentId}} {{clientId}}
$em = $this->getDoctrine()->getManager();
$propopsal_consulta = $em->getRepository(Proposal::class)->findAll();
$client_consulta = $em->getRepository(Client::class)->findAll();
$suppliers_consulta = $em->getRepository(Supplier::class)->findAll();
$todo = new ToDo();
if (sizeof($temp) != 0) { //En el Request vienen los campos que relacionan el ToDo con el Proposal
$todo->setIdToDoControl($temp['id']);
$todo->setTitle($temp['title']);
$todo->setOwnerToDo($temp['agentId']);
$todo->setidToDoClient($temp['clientId']);
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$todo->setBossToDo($user_id);
}
$form = $this->createToDoForm($todo);
return $this->render('todo/newadd-todo.html.twig', array('form' => $form->createView(),
'propopsal_consulta' => $propopsal_consulta,
'client_consulta' => $client_consulta,
'suppliers_consulta' => $suppliers_consulta));
// return $this->render('todo/add-todo.html.twig', array('form' => $form->createView()));
}
private function createToDoForm(ToDo $entity)
{
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
if (empty($entity->getBossToDo())) {
//Si llega vacio el campo del boss se le asigna el usuario logeado
$entity->setBossToDo($user_id);
}
if (empty($entity->getFolowerToDo()) and empty($entity->getOwnerToDo())){
//Si se recibe solo el creador de la tarea, la tarea se le asigna al creador para evitar problemas de NULL
$entity->setOwnerToDo($user_id);
}
$actualTime = new \Datetime();
$form = $this->createForm(ToDoType::class, $entity, array(
'action' => $this->generateUrl('todo_create'),
'method' => 'POST'
));
return $form;
}
/**
* @Route("/todo/create", name="todo_create")
*/
public function createAction(Request $request)
{
$todo = new ToDo();
$form = $this->createToDoForm($todo);
$form->handleRequest($request);
$em = $this->getDoctrine()->getManager();
if ($form->isValid()) {
if (empty($todo->getDetails())) {
$todo->setDetails(' ');
}
if (empty($todo->getDetails2())) {
// $todo->setDetails2(' '); //esta nullable true
}
//IdToDoControl vacio o en 0 indica que es una tarea padre(no es hija de otra tarea)
if (empty($todo->getIdToDoControl())) {
$todo->setIdToDoControl('0');
}
if (empty($todo->getTitle())) {
$todo->setTitle(' ');
}
if (!(empty($todo->getCreatedAt()))) {
$todo->setCreatedAtValue($todo->getCreatedAt());
}
//Obtengo de los objetos el id del creador(boss), encargado(owner) y seguidor(folower) de la tarea
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
$ownerToDo = $form->get('ownerToDo')->getData();
$todo->setOwnerToDo($ownerToDo->getId());
} else {
$todo->setOwnerToDo(0); //"0" es el item: "Select a person"
}
if (!(empty($todo->getFolowerToDo()))) { //Puede no haber un seguidor de la tarea
$folowerToDo = $form->get('folowerToDo')->getData();
$todo->setFolowerToDo($folowerToDo->getId());
} else {
$todo->setFolowerToDo(0); //"0" es el item: "Select a person"
}
if (!(empty($todo->getBossToDo()))) { //El creador de la tarea puede venir vacio
$bossToDo = $form->get('bossToDo')->getData();
// d($todo, $bossToDo);
$todo->setBossToDo($bossToDo->getId());
} else {
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$todo->setBossToDo($user_id);
}
$actualTime = new \Datetime();
if (($todo->getEndAt() < $actualTime) || (empty($todo->getEndAt()))) {
//La fecha de finalizacion es anterior a la fecha actual
$todo->setEndAt($actualTime);
}
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
$todo->settypeTime('Para luego . . .');
}
if (!(empty($todo->getidToDoClient()))) {
$todo->setidToDoClient($todo->getidToDoClient());
}
$todo->setIdToDoControl($request->request->all()['data']['proposal']);
$todo->setidToDoClient($request->request->all()['data']['client']);
$todo->setidToDoSupplier($request->request->all()['data']['supplier']);
$em->persist($todo);
$em->flush();
$event = 'The task has been created.';
$successMessage = $this->translator->trans($event);
$this->addFlash('mensajetodo', $successMessage);
//Se ha creado la tarea, se deben crear las notificaciones correspondientes
$datalog = array();
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
$ownerToDoLogs = 1;
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$user = $em->getRepository(User::class)->findOneById($user_id);
$datalog[] = array(
'title' => $todo->getTitle(),
'message' => $user->getUsername()." ha creado la tarea",
'ownerToDoLog' => $todo->getOwnerToDo(),
// 'createdAt' => $todo->getCreatedAt(),
'todoId' => $todo->getId(),
'readed' => true,
'createdid' => $user_id
);
} else {
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
$ownerToDoLogs = 3;
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$user = $em->getRepository(User::class)->findOneById($user_id);
$datalog[0] = array(
'title' => $todo->getTitle(),
// 'message' => "Se ha creado la tarea",
'message' => $user->getUsername()." ha creado la tarea",
'ownerToDoLog' => $todo->getOwnerToDo(),
// 'createdAt' => $todo->getCreatedAt(),
'todoId' => $todo->getId(),
'readed' => true,
'createdid' => $user_id
);
$datalog[1] = array(
'title' => $todo->getTitle(),
// 'message' => "Se ha creado la tarea",
'message' => $user->getUsername()." ha creado la tarea",
'ownerToDoLog' => $todo->getBossToDo(),
// 'createdAt' => $todo->getCreatedAt(),
'todoId' => $todo->getId(),
'readed' => true,
'createdid' => $user_id
);
$datalog[2] = array(
'title' => $todo->getTitle(),
// 'message' => "Se ha creado la tarea",
'message' => $user->getUsername()." ha creado la tarea",
'ownerToDoLog' => $todo->getFolowerToDo(),
// 'createdAt' => $todo->getCreatedAt(),
'todoId' => $todo->getId(),
'readed' => true,
'createdid' => $user_id
);
} else { //Se crearan 2 mensajes ya que se repite unb rol, el Boss siempre debe existir ya que es quien asigna el ToDo
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$user = $em->getRepository(User::class)->findOneById($user_id);
$ownerToDoLogs = 2;
$datalog[0] = array(
'title' => $todo->getTitle(),
// 'message' => "Se ha creado la tarea",
'message' => $user->getUsername()." ha creado la tarea",
'ownerToDoLog' => $todo->getBossToDo(),
// 'createdAt' => $todo->getCreatedAt(),
'todoId' => $todo->getId(),
'readed' => true,
'createdid' => $user_id
);
//Buscas el rol repetido
if ($todo->getOwnerToDo() != $todo->getBossToDo()) {
$ownerRol = $todo->getOwnerToDo();
} else {
$ownerRol = $todo->getFolowerToDo();
}
$datalog[1] = array(
'title' => $todo->getTitle(),
// 'message' => "Se ha creado la tarea",
'message' => $user->getUsername()." ha creado la tarea",
'ownerToDoLog' => $ownerRol,
// 'createdAt' => $todo->getCreatedAt(),
'todoId' => $todo->getId(),
'readed' => true,
'createdid' => $user_id
);
}
}
foreach ($datalog as $datalogData) {
if ($datalogData != 0) { //0 no es un usuario
$todolog = new ToDoLogs();
$todolog->setTitle($datalogData['title']);
$todolog->setMessage($datalogData['message']);
$todolog->setOwnerToDoLog($datalogData['ownerToDoLog']);
// $todolog->setTodoId($datalogData['todoId']);
$todolog->setCreatedAt(new \Datetime());
$todolog->setCreatedId($user_id);
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') ) {
$todolog->setReaded(true); //Por indicacion de Rafael Guerrero solo se reportan los mensajes
} else {
if ($datalogData != $user_id){
$todolog->setReaded(false);
}
else {$todolog->setReaded(true);}
}
$todolog->setTodoId($todo->getId());
$em->persist($todolog);
}
}
$em->flush();
}
// $em = $this->getDoctrine()->getManager();
// $todos = $em->getRepository(ToDo::class)->findAll();
// $data = array();
// $user_logueado = $this->get('security.token_storage')->getToken()->getUser();
// $user_id = $user_logueado->getId();
//
// foreach($todos as $todo) {
//
// if ((($todo->getOwnerToDo()==$user_id) || ($todo->getBossToDo()==$user_id) || ($todo->getFolowerToDo()==$user_id)) && !($todo->getState())){
// //Se buscan relacionadas con el usuario logeado y que no se estén finalizadas
// $data[] = array(
// 'id' => $todo->getId(),
// 'title' => $todo->getTitle(),
// 'idToDoControl' => $todo->getIdToDoControl(),
// 'ownerToDo' => $todo->getOwnerToDo(),
// 'folowerTodo' => $todo->getFolowerToDo(),
// 'bossToDo' => $todo->getBossToDo(),
// 'endAt' => $todo->getEndAt(),
// 'typeTime' => $todo->getTypeTime(),
// 'createdAt' => $todo->getCreatedAt(),
//// 'createdId' => $todo->getUpdatedId(),
//// 'updatedAt' => $todo->getUpdatedAt(),
//// 'updatedId' => $todo->getCreatedId(),
// 'description' => $todo->getDescription(),
// 'details' => $todo->getDetails(),
// 'details2' => $todo->getDetails2(),
// 'state' => $todo->getState()
// );
// }
// }
return $this->redirectToRoute('todo_log');
}
/**
* @Route("/todo/list", name="todo_index")
*/
public function listIndexAction(Request $request)
{
$em = $this->getDoctrine()->getManager();
$todos = $em->getRepository(ToDo::class)->findBy(array(),array('endAt' => 'DESC'));
$data = array();
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
foreach ($todos as $todo) {
// d($todo->getEndAt());
if ((($todo->getOwnerToDo() == $user_id) || ($todo->getBossToDo() == $user_id) || ($todo->getFolowerToDo() == $user_id)) && !($todo->getState())) {
//Se buscan relacionadas con el usuario logeado y que no se estén finalizadas
$data[] = array(
'id' => $todo->getId(),
'title' => $todo->getTitle(),
'idToDoControl' => $todo->getIdToDoControl(),
'ownerToDo' => $todo->getOwnerToDo(),
'folowerTodo' => $todo->getFolowerToDo(),
'bossToDo' => $todo->getBossToDo(),
'endAt' => $todo->getEndAt(),
'typeTime' => $todo->getTypeTime(),
'createdAt' => $todo->getCreatedAt(),
// 'createdId' => $todo->getUpdatedId(),
// 'updatedAt' => $todo->getUpdatedAt(),
// 'updatedId' => $todo->getCreatedId(),
'description' => $todo->getDescription(),
'details' => $todo->getDetails(),
'details2' => $todo->getDetails2(),
'state' => $todo->getState()
);
}
}
return $this->redirectToRoute('todo_log');
// return $this->render('todo/list-todo.html.twig', array(
// 'todos' => $data
//
// ));
}
/**
* @Route("/todo/edit/{id}", name="todo_edit")
*/
public function editAction($id)
{
$em = $this->getDoctrine()->getManager();
/*CONTROL GENERAL*/
$todo = $em->getRepository(ToDo::class)->findOneById($id);
$datasuptodo = array();
if (!(is_null($todo->getidToDoClient()))) {
$client = $em->getRepository(Client::class)->findById($todo->getidToDoClient());
} else {
$client = 0;
}
if (!(is_null($todo->getidToDoSupplier()))) {
$suppliers = $em->getRepository(Supplier::class)->findAll();
$a = $todo->getidToDoSupplier();
$todosupids = explode(',', $a);
foreach ($suppliers as $supptodo) {
if (in_array($supptodo->getId(), $todosupids)) {
$datasuptodo[] = $supptodo;
}
}
}
if (!(is_null($todo->getIdToDoControl()))) {
$idProp = $todo->getIdToDoControl();
$proposal = $em->getRepository(Proposal::class)->findOneById($idProp);
} else {
$proposal = 0;
}
$bossToDo = $em->getRepository(User::class)->findOneById($todo->getBossToDo());
$folowerToDo = $em->getRepository(User::class)->findOneById($todo->getFolowerToDo());
$ownerToDo = $em->getRepository(User::class)->findOneById($todo->getOwnerToDo());
$todo->setBossToDo($bossToDo);
$todo->setFolowerToDo($folowerToDo);
$todo->setOwnerToDo($ownerToDo);
$form = $this->createEditToDoForm($todo, $id);
$propopsal_consulta = $em->getRepository(Proposal::class)->findAll();
$client_consulta = $em->getRepository(Client::class)->findAll();
$suppliers_consulta = $em->getRepository(Supplier::class)->findAll();
return $this->render('todo/edit-todo.html.twig',
array(
'id' => $id,
'ids' => '',
'todo' => $todo,
'client' => $client,
'suppliers' => $datasuptodo,
'proposal' => $proposal,
'propopsal_consulta' => $propopsal_consulta,
'client_consulta' => $client_consulta,
'suppliers_consulta' => $suppliers_consulta,
'form' => $form->createView()
)
);
}
private function createEditToDoForm(ToDo $entity, $id)
{
$form = $this->createForm(ToDoType::class, $entity,
array(
'action' => $this->generateUrl('todo_update',
array(
'id' => $id
)
), 'method' => 'PUT'));
return $form;
}
/**
* @Route("/todo/update/{id}", name="todo_update", methods={"POST","PUT"})
*/
public function updateAction($id, Request $request, LoggerInterface $logger)
{
/*PARA MAYUSCULAS*/
$title = $request->request->get('ToDo')['title'];
if (!empty($request->request->get('data')['proposalid'])){
$proposalid = $request->request->get('data')['proposalid'];
}else{
$proposalid = null;
}
if (!empty($request->request->get('data')['client'])){
$client = $request->request->get('data')['client'];
}else{
$client = null;
}
if (!empty($request->request->get('data')['supplierid'])){
$supplierid = $request->request->get('data')['supplierid'];
}else{
$supplierid = null;
}
$em = $this->getDoctrine()->getManager();
/*CONTROL GENERAL*/
$todo = $em->getRepository(ToDo::class)->findOneById($id);
$form = $this->createEditToDoForm($todo, $id);
$form->handleRequest($request);
$details = $todo->getDetails();
$details2 = $todo->getDetails2();
$bossToDo = $em->getRepository(User::class)->findOneById($todo->getBossToDo());
$folowerToDo = $em->getRepository(User::class)->findOneById($todo->getFolowerToDo());
$ownerToDo = $em->getRepository(User::class)->findOneById($todo->getOwnerToDo());
$typeTime = $todo->getTypeTime();
$bossToDo = $bossToDo->getId(); //El creador de la tarea no se puede modificar
if (!empty($todo->getFolowerToDo())) {
$folowerToDo = $folowerToDo->getId();
}
if (!empty($todo->getOwnerToDo())) {
$ownerToDo = $ownerToDo->getId();
}
/* Obtengo usuario logueado */
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
if (!empty($title)) {
$todo->setTitle(strtoupper($title));
}
if (!empty($endat)) {
$todo->setEndAt($endat);
}
if (!empty($details2)) {
$todo->setDetails2($details2);
}
if (!empty($typeTime)) {
$todo->setTypeTime($typeTime);
}
if (!empty($bossToDo)) {
$todo->setBossToDo($bossToDo);
}
if (!empty($folowerToDo)) {
$todo->setFolowerToDo($folowerToDo);
}
if (!empty($ownerToDo)) {
$todo->setOwnerToDo($ownerToDo);
}
if ($form->isSubmitted() && $form->isValid()) {
/* Gestión de eventos en Log */
$user_lastname = $user_logueado->getLastname();
$user_name = $user_logueado->getName();
$user_email = $user_logueado->getEmail();
$user_rol = $user_logueado->getRoles();
$event_url = $request->getPathInfo();
$event_complete = $user_name . ' ' . $user_lastname . ' - ' . $user_email . ' - ' . $user_rol[0] . ' | ' . $event_url;
try {
$todo->setIdToDoControl($proposalid);
$todo->setIdToDoClient($client);
$todo->setIdToDoSupplier($supplierid);
$em->persist($todo);
$em->flush();
$event = 'The task has been modified.';
$successMessage = $this->translator->trans($event);
$this->addFlash('mensajesupplier', $successMessage);
$logger->info($event_complete . ' | ' . $event);
// Se ha modificado el ToDo se debe crear la notificacion
$a = array(); //Arreglo con los indices de los usuarios a notificar
$a[0] = $todo->getBossToDo(); //Se asume que el Boss siempre existirá
$i = 1;
if (!empty($todo->getOwnerToDo())) {
$a[$i] = $todo->getOwnerToDo();
$i++;
}
if (!empty($todo->getFolowerToDo())) {
$a[$i] = $todo->getFolowerToDo();
}
$data = array_unique($a);
foreach ($data as $datalogData) {
if ($datalogData != 0) { //0 no es un usuario
$todolog = new ToDoLogs();
$todolog->setTitle($todo->getTitle());
$todolog->setMessage(($em->getRepository(User::class)->findOneById($user_id))->getUsername() . ' ha modificado la tarea');
$todolog->setOwnerToDoLog($datalogData);
$todolog->setCreatedAt(new \Datetime());
$todolog->setReaded(true); //Se guarda el registro pero no se notifica (Por solicitud de Rafael Guerrero)
$todolog->setTodoId($todo->getId());
$em->persist($todolog);
$em->flush();
}
}
} catch (\Exception $e) {
$event = 'An error occurred: ' . $e->getMessage() . ' | transport';
/* Para el log */
$logger->error($event_complete . ' | ' . $event);
/* Para el usuario */
$errorMessage = $this->translator->trans($event);
$this->addFlash('mensajesuppliererror', $errorMessage);
}
/* Fin Gestión de eventos en Log */
$successMessage = $this->translator->trans('The task has been modified.');
$this->addFlash('mensajesupplier', $successMessage);
return $this->redirectToRoute('todo_log');
}
return $this->redirectToRoute('todo_log');
// return $this->render('todo/list-todo.html.twig',
// array(
// 'id' => $id,
// //'ids' =>$ids,
// 'todo' => $todo,
// 'form' => $form->createView()
// )
// );
}
/**
* @Route("/todo/view/{id}", name="todo_view")
*/
public function viewAction($id)
{
$em = $this->getDoctrine()->getManager();
/*CONTROL GENERAL*/
$todo = $em->getRepository(ToDo::class)->findOneById($id);
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$bossToDo = $em->getRepository(User::class)->findOneById($todo->getBossToDo());
$folowerToDo = $em->getRepository(User::class)->findOneById($todo->getFolowerToDo());
$ownerToDo = $em->getRepository(User::class)->findOneById($todo->getOwnerToDo());
$todo->setBossToDo($bossToDo);
$todo->setFolowerToDo($folowerToDo);
$todo->setOwnerToDo($ownerToDo);
$idtodo = $todo->getId();
$comments = $em->getRepository('App:ToDoComments')->findByidtodo($idtodo);
$arrayComments = array();
$commentsform = new ToDoComments();
$i = 0;
foreach ($comments as $commentsform) {
$commentsform->setIdtodo($comments[$i]->getId());
$commentsform->setCreatedAt($comments[$i]->getCreatedAt());
$commentsform->setUpdatedAt($comments[$i]->getUpdatedAt());
$commentsform->setTextComment($comments[$i]->getTextComment());
$commentsform->setUpdatedId($comments[$i]->getUpdatedId());
$commentsform->setCreatedId($comments[$i]->getCreatedId());
$arrayComments[$i] = $commentsform;
$i++;
}
$form1 = $this->createView1ToDoForm($todo, $id);
$form3 = $this->createView3ToDoForm($commentsform, $id);
return $this->render('todo/view-todo.html.twig',
array(
'id' => $id,
'ids' => '',
'todo' => $todo,
'user' => $user_id,
'arrayComments' => $arrayComments,
'form1' => $form1->createView(),
'form3' => $form3->createView()
)
);
}
/**
* @Route("/todo/addcomment/{comm}/{id}", name="todo_addcomment")
*/
public function addCommentAction($comm, $id, Request $request)
{
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$em = $this->getDoctrine()->getManager();
$user = $em->getRepository(User::class)->findOneById($user_id);
$user_name = $user->getUsername();
$comment = new ToDoComments();
$comment->setIdtodo($id);
$comment->setTextComment($comm);
$comment->setCreatedId($user_id);
$comment->setUpdatedId($user_id);
try {
$em->persist($comment);
$em->flush();
$todo = $em->getRepository(ToDo::class)->findOneById($id);
// Se ha creado un comentario en el ToDo se debe crear la notificacion
$a = array(); //Arreglo con los indices de los usuarios a notificar
$i = 0;
// if ($todo->getBossToDo() != $user_id) { //No se debe recibir notificacion de los mensajes emitidos por el propio usuario
if (!empty($todo->getBossToDo())){
$a[0] = $todo->getBossToDo(); //Se asume que el Boss siempre existirá
} else { $a[$i] = 0; }
$i++;
if (!empty($todo->getOwnerToDo())) {
// if ($todo->getOwnerToDo() != $user_id) { //No se debe recibir notificacion de los mensajes emitidos por el propio usuario
$a[$i] = $todo->getOwnerToDo();
} else { $a[$i] = 0; }
// }
$i++;
if (!empty($todo->getFolowerToDo())) {
// if ($todo->getFolowerToDo() != $user_id) { //No se debe recibir notificacion de los mensajes emitidos por el propio usuario
$a[$i] = $todo->getFolowerToDo(); } else { $a[$i] = 0; }
// }
$data = array_unique($a);
foreach ($data as $datalogData) {
if ($datalogData != 0) { //0 no es un usuario
$todolog = new ToDoLogs();
$todolog->setTitle($todo->getTitle());
$todolog->setMessage($user_name . " : " . $comm);
$todolog->setOwnerToDoLog($datalogData);
$todolog->setCreatedAt(new \Datetime());
$todolog->setReaded(false); //Estamos agregando un comentario se debe notificar
$todolog->setTodoId($todo->getId());
$em->persist($todolog);
$em->flush();
}
}
} catch (\ErrorException $e) {
d($e->getMessage());
}
return $this->redirectToRoute('todo_log',
array(
'id' => $id
)
);
}
private function createView1ToDoForm(ToDo $entity, $id)
{
$form1 = $this->createForm(ToDoType::class, $entity,
array(
'action' => $this->generateUrl('todo_view',
array(
'id' => $id
)
), 'method' => 'PUT'));
return $form1;
}
private function createView3ToDoForm(ToDoComments $entity, $id)
{
$form3 = $this->createForm(ToDoCommentsType::class, $entity,
array(
'action' => $this->generateUrl('todo_view',
array(
'id' => $id
)
), 'method' => 'PUT'));
return $form3;
}
/**
* @Route("/todo/end/{id}", name="todo_end")
*/
public function endToDoAction($id)
{
$em = $this->getDoctrine()->getManager();
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$todo = $em->getRepository(ToDo::class)->findOneById($id);
$status = true;
$todo->setState($status);
// 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
$finished = $em->getRepository(ToDoLogs::class)->findBy(
array(
'todoId' => $id,
'ownerToDoLog' => $user_id,
)
);
foreach ($finished as $end){
$end->setReaded(true);
$end->setFinished(true);
$em->persist($end);
$em->flush();
}
//Se debe generar las notificaciones de la finalizacion de la tarea
$usrSender = ($em->getRepository(User::class)->findOneById($user_id))->getUsername(); //Emisor del mensaje
// Log para el OwnerTodo
$todolog = new ToDoLogs();
$todolog->setTitle($todo->getTitle());
$todolog->setMessage($usrSender. ', ha finalizado la tarea.');
// Se detecta un error si viene null
if (is_null($todo->getOwnerToDo()) or ($todo->getOwnerToDo() == 0)){ $todolog->setOwnerToDoLog(0);} else { $todolog->setOwnerToDoLog($todo->getOwnerToDo()); }
$todolog->setCreatedAt(new \Datetime());
$todolog->setCreatedId($user_id);
$todolog->setTodoId($todo->getId());
$todolog->setCreatedId($user_id);
$todolog->setFinished(true);
// El mensaje debe ponerse en leido para el usuario que lo finaliza
if ($todo->getOwnerTodo() == $user_id){ $todolog->setReaded(true); } else { $todolog->setReaded(false); }
try {
$em->persist($todolog);
$em->flush();} catch (\ErrorException $e) { d($e->getMessage()); }
// Log para el BossTodo
$todolog = new ToDoLogs();
$todolog->setTitle($todo->getTitle());
$todolog->setMessage($usrSender. ', ha finalizado la tarea.');
// Se detecta un error si viene null
if (is_null($todo->getBossToDo()) or ($todo->getBossToDo() == 0)){ $todolog->setOwnerToDoLog(0);} else { $todolog->setOwnerToDoLog($todo->getBossToDo()); }
$todolog->setCreatedAt(new \Datetime());
$todolog->setCreatedId($user_id);
$todolog->setTodoId($todo->getId());
$todolog->setCreatedId($user_id);
$todolog->setFinished(true);
// El mensaje debe ponerse en leido para el usuario que lo finaliza
if ($todo->getBossToDo() == $user_id){ $todolog->setReaded(true); } else { $todolog->setReaded(false); }
try {
$em->persist($todolog);
$em->flush();} catch (\ErrorException $e) { d($e->getMessage()); }
// Log para el FolowerTodo
$todolog = new ToDoLogs();
$todolog->setTitle($todo->getTitle());
$todolog->setMessage($usrSender. ', ha finalizado la tarea.');
// Se detecta un error si viene null
if (is_null($todo->getFolowerToDo()) or ($todo->getFolowerToDo() == 0)){ $todolog->setOwnerToDoLog(0);} else { $todolog->setOwnerToDoLog($todo->getFolowerToDo()); }
$todolog->setCreatedAt(new \Datetime());
$todolog->setCreatedId($user_id);
$todolog->setTodoId($todo->getId());
$todolog->setCreatedId($user_id);
$todolog->setFinished(true);
// El mensaje debe ponerse en leido para el usuario que lo finaliza
if ($todo->getFolowerToDo() == $user_id){ $todolog->setReaded(true); } else { $todolog->setReaded(false); }
try {
$em->persist($todolog);
$em->flush();} catch (\ErrorException $e) { d($e->getMessage()); }
return $this->redirectToRoute('todo_log');
}
/**
* @Route("/todo/events", name="get_todos")
*/
public function todosSelectAction(Request $request, EntityManagerInterface $em)
{
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$fechaInicio = new \DateTime();
$fechaInicio->setDate($fechaInicio->format('Y') - 1, 1, 1);
$fechaInicio->setTime(0, 0, 0); //Para buscar desde el primer minuto del año
$queryBuilder = $em->getRepository(ToDo::class)->createQueryBuilder('todo');
$queryBuilder->where('todo.state = :state')
->andWhere('todo.ownerToDo = :userId OR todo.bossToDo = :userId OR todo.folowerToDo = :userId')
->andWhere('todo.createdAt >= :fechaInicio') // Añadir esta lÃnea para filtrar por fecha
->setParameters([
'state' => false,
'userId' => $user_id,
'fechaInicio' => $fechaInicio,
]);
$todos = $queryBuilder->getQuery()->getResult();
$datos = array();
if (!empty($todos)) {
foreach ($todos as $todo) {
if (($todo->getOwnerToDo() == $user_id)) {
//Si no esta finalizado y eres el responsable del ToDo
// $color = "#Red";
//Se establece la intensidad del color según la priridad de la tarea
if (($todo->gettypeTime() == 'Hoy . . .')) {
// $color = "#ba0000"; // $color = "#Red";
$color = "#455293";
} else {
if (($todo->gettypeTime() == 'Durante esta semana . . .')) {
// $color = "#ff3d3d"; // $color = "#Red";
$color = "#455293";
} else {
// $color = "#ff9191"; // $color = "#Red"; //Para Luego . . .
$color = "#455293";
}
}
} else {
if (($todo->getBossToDo() == $user_id)) {
//Si no esta finalizado y eres el Supervisor del ToDo
// $color = "#Blue";
//Se establece la intensidad del color según la priridad de la tarea
if (($todo->gettypeTime() == 'Hoy . . .')) {
$color = "#455293"; // "#000f5e";
} else {
if (($todo->gettypeTime() == 'Durante esta semana . . .')) {
$color = "#455293";
} else {
$color = "#455293"; //"#babaff"; //Para Luego . . .
}
}
} else {
if (($todo->getFolowerToDo() == $user_id)) {
//Si no esta finalizado y eres el Seguidor del ToDo
$color = "#BDBDBD";
// $color = "#Blue";
//Se establece la intensidad del color según la priridad de la tarea
if (($todo->gettypeTime() == 'Hoy . . .')) {
// $color = "#60005a"; //purple
$color = "#455293";
} else {
if (($todo->gettypeTime() == 'Durante esta semana . . .')) {
// $color = "#af2fa7"; //purple
$color = "#455293";
} else {
// $color = "#db7fd5"; //Para Luego . . . //purple
$color = "#455293";
}
}
}
}
}
if (is_null($todo->getEndAt())) {
$end = new \Datetime('now');
$color = "#bc0000";
} else {
$end = $todo->getEndAt();
$todayPlustwo = new \Datetime('+ 2 days');
if (($end==$todayPlustwo) or ($todayPlustwo>$end)){$color = "#bc0000";} //La tarea se finaliza en dos dias o menos
}
$datos[] = array(
"id" => $todo->getId(),
"title" => $todo->getTitle(),
"tooltip" => $todo->getTitle() . "<br>" . $todo->getDescription(),
"start" => $todo->getCreatedAt(), //.format(moment.ISO_8601),
"end" => $end,
"color" => $color,
"url" => "/todo/log",
);
}
} else {
$datos = [];
}
$return = array(
'todos' => $datos,
);
$response = new JsonResponse($return);
return $response;
}
/**
* @Route("/todo/refresh", name="todo_refresh")
*/
public function refreshAction(Request $request)
{
$today = new \DateTime('now');
$todayPlusWeek = new \Datetime('+ 7 days'); //Al dia actual se le suma una semana
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$em = $this->getDoctrine()->getManager();
// Los Owners
$todos = $em->getRepository(ToDo::class)->findByOwnerToDo($user_id);
foreach ($todos as $todo) {
if (!($todo->getState())) {
//Si no se está finalizada
$timechange = false;
if ($todo->getTypeTime() == 'Para luego . . .') {
if (!($todo->getEndAt() > $todayPlusWeek)) {
$todo->settypeTime('Durante esta semana . . .');
$timechange = true;
}
}
if ($todo->getTypeTime() == 'Durante esta semana . . .') {
if (!($todo->getEndAt() > $today)) {
$todo->settypeTime('Hoy . . .');
$timechange = true;
}
}
if ($todo->getTypeTime() == 'Hoy . . .') {
if (!($todo->getEndAt() > $today)) {
$todo->setEndAt($today);
$timechange = true;
}
}
if ($timechange) {
try {
$em->persist($todo);
$em->flush();
// Se ha modificado la prioridad del ToDo se debe crear la notificacion
$a = array(); //Arreglo con los indices de los usuarios a notificar
$a[0] = $todo->getBossToDo(); //Se asume que el Boss siempre existirá
$i = 1;
if (!empty($todo->getOwnerToDo())) {
$a[$i] = $todo->getOwnerToDo();
$i++;
} else {
$a[$i] = 0;
$i++; }
if (!empty($todo->getFolowerToDo())) {
$a[$i] = $todo->getFolowerToDo();
} else {
$a[$i] = 0; }
$data = array_unique($a);
foreach ($data as $datalogData) {
if ($datalogData != 0) { //0 no es un usuario
$todolog = new ToDoLogs();
$todolog->setTitle($todo->getTitle());
$todolog->setMessage('Se ha modificado de forma automatica la prioridad de la tarea');
$todolog->setOwnerToDoLog($datalogData);
$todolog->setCreatedAt(new \Datetime());
$todolog->setReaded(true); //Se guarda el registro pero no se notifica (Por solicitud de Rafael Guerrero)
$todolog->setTodoId($todo->getId());
$em->persist($todolog);
$em->flush();
}
}
//
} catch (\Exception $e) {
$event = 'An error occurred: ' . $e->getMessage();
}
}
}
}
// Los Boss
$todos = $em->getRepository(ToDo::class)->findByBossToDo($user_id);
foreach ($todos as $todo) {
if (!($todo->getState())) {
//Si no se está finalizada
$timechange = false;
if (($todo->getTypeTime()) == 'Para luego . . .') {
if (!($todo->getEndAt() > $todayPlusWeek)) {
//Si la tarea ha pasado al grupo de actividades para esta semana -*-*-* NOTIFICAR
$todo->settypeTime('Durante esta semana . . .');
$timechange = true;
}
}
if ($todo->getTypeTime() == 'Durante esta semana . . .') {
if (!($todo->getEndAt() > $today)) {
//Si la tarea ha pasado al grupo de actividades de hoy -*-*-* NOTIFICAR
$todo->settypeTime('Hoy . . .');
$timechange = true;
}
}
if ($todo->getTypeTime() == 'Hoy . . .') {
if (!($todo->getEndAt() > $today)) {
//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
$todo->setEndAt($today);
$timechange = true;
}
}
if ($timechange) {
try {
$em->persist($todo);
$em->flush();
} catch (\Exception $e) {
$event = 'An error occurred: ' . $e->getMessage();
}
}
}
}
// Los Followers
$todos = $em->getRepository(ToDo::class)->findByFolowerToDo($user_id);
foreach ($todos as $todo) {
if (!($todo->getState())) {
//Si no se está finalizada
$timechange = false;
if (($todo->getTypeTime()) == 'Para luego . . .') {
if (!($todo->getEndAt() > $todayPlusWeek)) {
//Si la tarea ha pasado al grupo de actividades para esta semana -*-*-* NOTIFICAR
$todo->settypeTime('Durante esta semana . . .');
$timechange = true;
}
}
if ($todo->getTypeTime() == 'Durante esta semana . . .') {
if (!($todo->getEndAt() > $today)) {
//Si la tarea ha pasado al grupo de actividades de hoy -*-*-* NOTIFICAR
$todo->settypeTime('Hoy . . .');
$timechange = true;
}
}
if ($todo->getTypeTime() == 'Hoy . . .') {
if (!($todo->getEndAt() > $today)) {
//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
$todo->setEndAt($today);
$timechange = true;
}
}
if ($timechange) {
try {
$em->persist($todo);
$em->flush();
//
} catch (\Exception $e) {
$event = 'An error occurred: ' . $e->getMessage();
}
}
}
}
return $this->redirectToRoute('todo_index');
}
/**
* @Route("/todo/log", name="todo_log")
* @param Request $request
* @return Response
*/
public function logToDoAction(Request $request)
{
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$em = $this->getDoctrine()->getManager();
//Me quito los logs con ownertodo = 0, le quito la relacion con los T O D O
$todos_Log0 = $em->getRepository(ToDoLogs::class)->findByOwnerToDoLog(0);
foreach ($todos_Log0 as $tdl_0){
$tdl_0->setTodoId(0);
try {
$em->persist($tdl_0);
$em->flush();
} catch (\ErrorException $e) {
d($e->getMessage());
}
}
// Se buscan los Logs no leidos del usuario
$arrayMiniChat = array();
$countIdToDo = 0; // Si mas de un comentario esta como no leido se repetira la data por eso usamos este contador
// $arrayTodo =$em->getRepository(ToDo::class)->findAll();
$toDoPendiente = $em->getRepository(ToDoLogs::class)->findBy(
array(
'ownerToDoLog' => $user_id,
)
);
$arrayTodo =array();
$mensaje=array();
$i=0;
foreach ($toDoPendiente as $pending){
if($pending->getFinished() === 0){
$mensaje[$pending->getTodoId()][$i] = $pending;
}elseif($pending->getCreatedId() !== $user_id ){
$mensaje[$pending->getTodoId()][$i] = $pending;
}
$i++;
}
//Volteo el arreglo para que queden ordenados los mensajes por fecha descendiente
// $mensaje_inv = array_reverse($mensaje);
// $todo_log_usr = $em->getRepository(ToDoLogs::class)->findByOwnerToDoLog($user_id); //falla porque lista los finalizados
// $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
$todo_log_usr = $em->getRepository(ToDoLogs::class)->findBy( array('ownerToDoLog' => $user_id, 'finished' => 0));
// foreach ($todo_log_usr as $tdl_us0){
////funciona pero no muestra el T o d o cuando otro lo ha finalizado, al subir parece estar correcto, debo revisarlo con detenimiento
// }
// $mensaje_inv = array_reverse($mensaje);
$mensaje_inv = array_reverse($todo_log_usr);
//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
$array_contador = array();
foreach ($mensaje_inv as $mi){
$array_contador[] = $mi->getTodoId();
}
//elimino repeticiones
$array_contador = array_unique($array_contador);
//cuento el numero de tareas
$countlog = count($array_contador);
//----
//Agrupa los mensajes por T O D O debo recorrer el arreglo _inv
$array_mix = array(); //Contendra el T O D O y los LOGS
$todo_all= array();
foreach ($mensaje_inv as $men_inv){
//Traigo todos los mnensajes del T O D O, me vi forzado a entrar al arreglo porque desconozco el valor del indice
$todo_all = $em->getRepository(ToDo::class)->findById($men_inv->getTodoId());
if(count($todo_all)>0){
// Si la tarea no esta finalizada
if(!($todo_all[0]->getState())){
// $todo_logs = $em->getRepository(ToDoLogs::class)->findByTodoId($men_inv0->getTodoId());
$todo_logs = $em->getRepository(ToDoLogs::class)->findBy( array('todoId' => $men_inv->getTodoId(), 'ownerToDoLog' => $user_id));
// d($todo_logs); exit();
// Para evitar repeticiones solo lo meto en el arreglo definito si no he metido la tarea actual
if (in_array($todo_all[0]->getId(), $array_contador, true)){
$array_mix[] = array(
'todo' => $todo_all[0],
'todo_logs' => $todo_logs,
);
// Lo saco del arreglo para evitar repeticiones
foreach (array_keys($array_contador, $todo_all[0]->getId()) as $key) {
unset($array_contador[$key]);
}
}
} else {
// Si esta finalizada verificar si la finalizo otro que no sea el user_id
// Si hemos vaciado el contador de los T O D O ya no debo considerar mas mensajes
if ((count($array_contador)) != 0 ) {
// 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
$todo_logs = $em->getRepository(ToDoLogs::class)->findBy( array('todoId' => $men_inv->getTodoId(),
'message' => 'Se ha finalizado la tarea',
'createdId' => $user_id,
));
if(count($todo_logs) == 0){ // Debo pintar ya que la finalizo otro usuario
$todo_logs = $em->getRepository(ToDoLogs::class)->findBy( array('todoId' => $men_inv->getTodoId()));
$array_mix[] = array(
'todo' => $todo_all[0],
'todo_logs' => $todo_logs,
);
foreach (array_keys($array_contador, $todo_all[0]->getId()) as $key) {
unset($array_contador[$key]);
}
}
}
}
}
}
$arrayTodo = array();
foreach($mensaje as $men){
foreach($men as $m1){
$arrayMen =$em->getRepository(ToDo::class)->findOneById($m1->getTodoId());
$arrayTodo[] = array(
'todo' => $arrayMen,
'mensaje' => $men,
);
}
}
// d($arrayTodo);
// $arrayTodo =array();
// foreach($mensaje as $men){
//
// foreach($men as $m1){
// d($men);exit;
// $arrayMen =$em->getRepository(ToDo::class)->findById($m1->getTodoId());
// $arrayTodo[] = array(
// '0' => $arrayMen,
// '1' => $men,
// );
// }
//
//
// }
return $this->render('todo/log-todo.html.twig', array(
'arrayComm' => $mensaje,
'countlog' => $countlog,
// 'arrayTodo' => $arrayTodo,
'arrayTodo' => $array_mix,
'arrayMiniChat' => $arrayMiniChat
));
/*
foreach($todos_Log0 as $tdlgUnreaded){
// $todos_master = $em->getRepository(ToDo::class)->findBy(
// array(
// 'state' => '0',
// 'id' => $tdlgUnreaded->getTodoId(),
// )
// );
//
// if (!empty($todos_master)){
// d($todos_master);
$log_all_readed = true;
foreach($todos_Log as $tdlgUn) {
// Si hay un log de tarea finalizada y el el log no ha sido leido debe pasar de resto no
// Verifico que haya al menos un log de la tarea sin leer
$a1 = $em->getRepository(ToDo::class)->findById($tdlgUn->getTodoId());
foreach($a1 as $a){
$a2 = $a->getState();
$atdid = $a->getId();
}
if ($a2){ //Si esta finalizado veo si lo hizo el usuario actual
$b = ($em->getRepository(ToDoLogs::class)->findBy( array('ownerToDoLog' => $user_id, 'todoId' => $atdid, 'createdId' => $user_id)));
if (count($b) != 0){
$log_all_readed = ($log_all_readed and true);
} else{
$log_all_readed = ($log_all_readed and false);}
// d('false');
} else {
$log_all_readed = ($log_all_readed and false);
// d('false');
}
//d($log_all_readed, $tdlgUnreaded->getTodoId());
if(!$log_all_readed) {
if (!($tdlgUnreaded->getReaded())){
// Busco todos los mensajes relacionados con el IdToDo
$msgTDs = $em->getRepository('App:ToDoComments')->findByidtodo($tdlgUnreaded->getTodoId());
// $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
foreach ($msgTDs as $msgTD){
$usrSender = ($em->getRepository(User::class)->findOneById($msgTD->getCreatedId()))->getUsername(); //Emisor del mensaje
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
$countIdToDo = ($msgTD->getIdtodo());
$arrayMiniChat[$msgTD->getIdtodo()][] = array(
'idTodo' => $msgTD->getIdtodo(),
'msgCreatedAt' => $msgTD->getCreatedAt(),
'msgCreatedAtSP' => ($msgTD->getCreatedAt())->format('H:i d/m/Y'),
'userSender' => $usrSender,
'textComment' => $msgTD->getTextComment(),
'idComment' => $msgTD->getId(),
'idUserCreated' => $msgTD->getCreatedId(),
'idUserLoged' => $user_id
);
}
}
}
$srtTdolog = $em->getRepository(ToDoLogs::class)->findByOwnerToDoLog($user_id);
$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
// quiero obtener el id de los todossin repeticiones de $srtTdolog
$newarray = $srtTdolog;
foreach($srtTdolog as $sti){
foreach($newarray as $newar){
if (($sti->getTodoId() == $newar->getTodoId()) and ($sti->getId() != $newar->getId())) {
$newar->setTodoId('0'); // Se implementa un pseudo UNSET de los valores repetidos
}
}
}
// Los que tenian un 0 en el IdToDo eran repeticiones y se eliminaran
$pseudoUnset = array();
foreach ($newarray as $newar){
if ($newar->getTodoId() != 0){
$pseudoUnset[] = $newar;
}
}
$arrayComm = array();
// Se buscan los logs
foreach ($pseudoUnset as $ps){
$td = $em->getRepository(ToDo::class)->findById($ps->getTodoId()); //Busco toda la informacion del todo
// $td = $em->getRepository(ToDo::class)->findBy(
// array(
// 'state' => '0',
// 'id' => $ps->getTodoId(),
// )
// ); //Busco toda la informacion del todo
// $lg = $em->getRepository(ToDoLogs::class)->findByTodoId($ps->getTodoId()); //Busco los mensajes del todo
$lg_0 = $em->getRepository(ToDoLogs::class)->findByTodoId($ps->getTodoId()); //Busco los mensajes del todo
$lg_1 = $em->getRepository(ToDoLogs::class)->findByTodoId($ps->getTodoId());
// Elimino repeticiones de Logs
$lg = array();
foreach ($lg_0 as $lg0){
//Verifico numero de repeticiones del elemento en el arreglo
$contador =1;
foreach ($lg_1 as $lg1){
if(($lg1->getMessage() == $lg0->getMessage()) and ($lg1->getOwnerToDoLog() != $lg0->getOwnerToDoLog())) {
$contador ++;
}
}
//Verifico si ya lo he metido en el arreglo
if ($contador>1){
$log =true;
foreach ($lg as $lgDef) {
// Si encuentras que el mensaje ya esta en el arreglo pones el logico en falso
if (($lgDef->getMessage() == $lg0->getMessage())) {
$log = false;
}
}
// Si no estaba el mensaje en el arreglo de salida se agrega
if ($log){
$lg[] = $lg0;
}
} else {
$lg[] = $lg0;
}
}
$arrayComm[] = array($td,$lg);
}
}
}
}
// }
//d($arrayComm);*/
// }
}
/**
* @Route("/todolog/update/", name="todolog_update")
*/
public function updateToDoLogAction(Request $request)
{
$id_todo = $request->request->all()['text_reply']['id_todo'];
$todo_reply = $request->request->all()['text'];
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$em = $this->getDoctrine()->getManager();
$usrSender = ($em->getRepository(User::class)->findOneById($user_id))->getUsername();
$todologs = $em->getRepository(ToDoLogs::class)-> findBy( array('ownerToDoLog' => $user_id, 'todoId' => $id_todo ));
$stateTodo = ($em->getRepository(ToDo::class)->findOneById($id_todo))->getState();
foreach($todologs as $todolog){
$todolog->setReaded(true);
$todolog->setFinished($stateTodo);
try {
$em->persist($todolog);
$em->flush();
} catch (\ErrorException $e) {
d($e->getMessage());
}
}
// if (!(is_null($todo_reply))) { //estaba generando mensaje en vacio solo con el nombre del user
if (strlen($todo_reply)>0) {
//Se debe crear un comentario de respuesta desde log_todo se debe redirigir de vuelta al log_todo
$id = $id_todo;
$comm = $todo_reply;
$comment = new ToDoComments();
$comment->setIdtodo($id);
$usrSender = ($em->getRepository(User::class)->findOneById($user_id))->getUsername();
$creatMsg = (new \Datetime())->format('H:i d/m/Y');
$comment->setTextComment($usrSender. ' : '.$comm);
$comment->setCreatedId($user_id);
$comment->setUpdatedId($user_id);
try {
$em->persist($comment);
$em->flush();
$todo = $em->getRepository(ToDo::class)->findOneById($id);
$a = array(); //Arreglo con los indices de los usuarios a notificar
$i = 0;
// if ($todo->getBossToDo() != $user_id) { //No se debe recibir notificacion de los mensajes emitidos por el propio usuario - Se cambio la logica
$a[0] = $todo->getBossToDo(); //Se asume que el Boss siempre existirá
$i++;
if (!empty($todo->getOwnerToDo())) {
// if ($todo->getOwnerToDo() != $user_id) { //No se debe recibir notificacion de los mensajes emitidos por el propio usuario
$a[$i] = $todo->getOwnerToDo();
$i++;
// }
}
if (!empty($todo->getFolowerToDo())) {
// if ($todo->getFolowerToDo() != $user_id) { //No se debe recibir notificacion de los mensajes emitidos por el propio usuario
$a[$i] = $todo->getFolowerToDo();
// }
}
$data = array_unique($a);
foreach ($data as $datalogData) {
if ($datalogData != 0) { //0 no es un usuario
$todolog = new ToDoLogs();
$todolog->setTitle($todo->getTitle());
$todolog->setMessage($comm);
$todolog->setOwnerToDoLog($datalogData);
$todolog->setCreatedAt(new \Datetime());
$todolog->setCreatedId($user_id);
$todolog->setReaded(true); //Comente el if que va a continuacion
// if (($comm == 'Se ha modificado la tarea') or ($comm == 'La tarea se ha marcado como no finalizada') or ($comm == 'Se ha finalizado la tarea')) {
// $todolog->setReaded(true); //Por indicacion de Rafael Guerrero solo se reportan los mensajes
// } else {
// if ($datalogData != $user_id){
// $todolog->setReaded(false);
// }
// else {$todolog->setReaded(true);}
// }
$todolog->setMessage($usrSender . ': '.$comm);
$todolog->setTodoId($todo->getId());
$em->persist($todolog);
$em->flush();
}
}
} catch (\ErrorException $e) {
d($e->getMessage());
}
}
return $this->redirectToRoute('todo_log');
}
/**
* @Route("/todo/gotodo/{id}/{title}/{agentId}/{clientId}", name="todo_gotodo")
*/
public function goToDoAction($id, $title, $agentId, $clientId, Request $request)
{
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$em = $this->getDoctrine()->getManager();
$todo = $em->getRepository(ToDo::class)->findOneByIdToDoControl($id);
if (is_null($todo)) {
return $this->redirectToRoute('todo_add', //Se le manda por el request la información que se copia automaticamente
array(
'id' => $id,
'title' => $title,
'agentId' => $agentId,
'clientId' => $clientId
)
);
} else {
$id = $todo->getId(); //El Id que teniamos previamente era el del Proposal, es necesario pasar el Id del Todo
return $this->redirectToRoute('todo_edit',
array(
'id' => $id
)
);
}
}
/**
* @Route("/todo/gochattodo/{id}/{title}/{agentId}/{clientId}", name="todo_gochattodo")
*/
public function goChatToDoAction($id, $title, $agentId, $clientId, Request $request)
{
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$em = $this->getDoctrine()->getManager();
$todo = $em->getRepository(ToDo::class)->findOneByIdToDoControl($id);
if (is_null($todo)) {
return $this->redirectToRoute('todo_add', //Se le manda por el request la información que se copia automaticamente
array(
'id' => $id,
'title' => $title,
'agentId' => $agentId,
'clientId' => $clientId
)
);
} else {
$id = $todo->getId(); //El Id que teniamos previamente era el del Proposal, es necesario pasar el Id del Todo
return $this->redirectToRoute('todo_log',
array(
'id' => $id
)
);
}
}
/**
* @Route("/todo/historic", name="todo_historic")
*/
public function listHistoricAction(Request $request)
{
$em = $this->getDoctrine()->getManager();
$todos = $em->getRepository(ToDo::class)->findAll();
$data = array();
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
foreach ($todos as $todo) {
if ((($todo->getOwnerToDo() == $user_id) || ($todo->getBossToDo() == $user_id) || ($todo->getFolowerToDo() == $user_id)) && ($todo->getState())) {
//Se buscan relacionadas con el usuario logeado y que no se estén finalizadas
$data[] = array(
'id' => $todo->getId(),
'title' => $todo->getTitle(),
'idToDoControl' => $todo->getIdToDoControl(),
'ownerToDo' => $todo->getOwnerToDo(),
'folowerTodo' => $todo->getFolowerToDo(),
'bossToDo' => $todo->getBossToDo(),
'endAt' => $todo->getEndAt(),
'typeTime' => $todo->getTypeTime(),
'createdAt' => $todo->getCreatedAt(),
// 'createdId' => $todo->getUpdatedId(),
// 'updatedAt' => $todo->getUpdatedAt(),
// 'updatedId' => $todo->getCreatedId(),
'description' => $todo->getDescription(),
'details' => $todo->getDetails(),
'details2' => $todo->getDetails2(),
'state' => $todo->getState()
);
}
}
return $this->render('todo/hist-todo.html.twig', array(
'todos' => $data
));
}
/**
* @Route("/todo/unfinish/{id}", name="todo_unfinish")
*/
public function unfinishToDoAction($id)
{
$em = $this->getDoctrine()->getManager();
$todo = $em->getRepository(ToDo::class)->findOneById($id);
$status = false;
$todo->setState($status);
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
try {
$em->persist($todo);
$em->flush();
$todo = $em->getRepository(ToDo::class)->findOneById($id);
// Se ha marcado como no finalizado el ToDo se debe crear la notificacion
$a = array(); //Arreglo con los indices de los usuarios a notificar
$a[0] = $todo->getBossToDo(); //Se asume que el Boss siempre existirá
$i = 1;
if (!empty($todo->getOwnerToDo())) {
$a[$i] = $todo->getOwnerToDo();
$i++;
} else {$a[$i] = 0; $i++;}
if (!empty($todo->getFolowerToDo())) {
$a[$i] = $todo->getFolowerToDo();
} else {$a[$i] = 0; $i++;}
$data = array_unique($a);
foreach ($data as $datalogData) {
if ($datalogData != 0) { //0 no es un usuario
$todolog = new ToDoLogs();
$todolog->setTitle($todo->getTitle());
$todolog->setMessage('La tarea se ha marcado como no finalizada');
$todolog->setOwnerToDoLog($datalogData);
$todolog->setCreatedAt(new \Datetime());
$todolog->setReaded(true); //Se guarda el registro pero no se notifica (Por solicitud de Rafael Guerrero)
$todolog->setTodoId($todo->getId());
$em->persist($todolog);
$em->flush();
}
}
} catch (\ErrorException $e) {
d($e->getMessage());
}
$em = $this->getDoctrine()->getManager();
$todos = $em->getRepository(ToDo::class)->findAll();
$data = array();
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
foreach ($todos as $todo) {
if (($todo->getOwnerToDo() == $user_id) && !($todo->getState())) {
//Se buscan las tareas del usuario logeado y que no se estén finalizadas
$data[] = array(
'id' => $todo->getId(),
'title' => $todo->getTitle(),
'idToDoControl' => $todo->getIdToDoControl(),
'ownerToDo' => $todo->getOwnerToDo(),
'folowerTodo' => $todo->getFolowerToDo(),
'bossToDo' => $todo->getBossToDo(),
'endAt' => $todo->getEndAt(),
'typeTime' => $todo->getTypeTime(),
'createdAt' => $todo->getCreatedAt(),
// 'createdId' => $todo->getUpdatedId(),
// 'updatedAt' => $todo->getUpdatedAt(),
// 'updatedId' => $todo->getCreatedId(),
'description' => $todo->getDescription(),
'details' => $todo->getDetails(),
'details2' => $todo->getDetails2(),
'state' => $todo->getState()
);
}
}
return $this->redirectToRoute('todo_index');
}
/**
* @Route("/todo/clientlist/{id}", name="todo_clientlist")
*/
public function todoClientListAction($id, Request $request)
{
$em = $this->getDoctrine()->getManager();
/* ALL LO QUE HAY */
$dql = 'SELECT cl, c.country, p.region, r.city
FROM App:Client cl
INNER JOIN App:Country c WITH c.id = cl.country
INNER JOIN App:Regions p WITH p.id = cl.province
INNER JOIN App:Cities r WITH r.id = cl.population';
$query = $em->createQuery($dql);
$clients = $query->getResult();
foreach ($clients as $client) {
$group = $em->getRepository(Group::class)->findOneById($client[0]->getGroupId());
$parameters = array(
'clientId' => $client[0]->getId()
);
$dqlc = 'SELECT cc, u.name, u.lastname
FROM App:ClientContact cc
INNER JOIN App\Entity\User u WITH u.id = cc.assignedAgent
WHERE cc.clientId = :clientId ';
$queryc = $em->createQuery($dqlc)->setParameters($parameters);
$contacts = $queryc->getResult();
$data_clients[] = array(
'client' => $client,
'group' => $group,
'contacts' => $contacts,
);
}
return $this->render('todo/clients-todo-list.html.twig',
array(
'datosclientes' => $data_clients,
'idToDo' => $id
)
);
}
/**
* @Route("/todo/client/add/{id}/{idToDo}", name="todo_addclient")
*/
public function addToDoClientAction($id, $idToDo, Request $request)
{
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$em = $this->getDoctrine()->getManager();
$todo = $em->getRepository(ToDo::class)->findOneById($idToDo);
$todo->setidToDoClient($id);
try {
$em->persist($todo);
$em->flush();
} catch (\ErrorException $e) {
d($e->getMessage());
}
return $this->redirectToRoute('todo_edit',
array(
'id' => $idToDo
)
);
}
/**
* @Route("/todo/client/remove/{id}/{idToDo}", name="todo_removeclient")
*/
public function removeToDoClientAction($id, $idToDo, Request $request)
{
$em = $this->getDoctrine()->getManager();
$todo = $em->getRepository(ToDo::class)->findOneById($idToDo);
$todo->setidToDoClient("");
try {
$em->persist($todo);
$em->flush();
} catch (\ErrorException $e) {
d($e->getMessage());
}
return $this->redirectToRoute('todo_edit',
array(
'id' => $idToDo
)
);
}
/**
* @Route("/todo/supplierlist/{id}", name="todo_supplierlist")
*/
public function todoSupplierListAction($id, Request $request)
{
$em = $this->getDoctrine()->getManager();
$name = $request->request->get('settingstype')['name'];
$suppliersettingstypefrom = new SupplierSettingsType();
if (!empty($name)) {
$suppliersettingstype = $em->getRepository(SupplierSettingsType::class)->findAll();
$suppliersettingstypefrom->setName($suppliersettingstype);
}
$suppliers = $em->getRepository(Supplier::class)->findAll();
/* evitar errores por no tener nada */
$data_supplier = array();
foreach ($suppliers as $supplier) {
$country = $em->getRepository(Country::class)->findOneById($supplier->getCountry());
$supplier->setCountry($country->getCountry());
$regions = $em->getRepository(Regions::class)->findOneById($supplier->getRegion());
$supplier->setRegion($regions->getRegion());
$province = $em->getRepository(Provinces::class)->findOneById($supplier->getProvince());
$supplier->setProvince($province->getName());
$cities = $em->getRepository(Cities::class)->findOneById($supplier->getPopulation());
$supplier->setPopulation($cities->getCity());
$contacts = $em->getRepository(SupplierContact::class)->findBy(
array('supplierId' => $supplier->getId())
);
$supplierIdeaServicesControl = $em->getRepository(SupplierIdeaServicesControl::class)->findOneBySupplierId($supplier->getId());
if (!empty($supplierIdeaServicesControl)) { //Gustavo Ayala: agregué este condicional para para que si viene vacio el getId no genere un error
$data_supplier[] = array(
'controlGid' => $supplierIdeaServicesControl->getId(),
'supplier' => $supplier,
'contacts' => $contacts
);
}
}
return $this->render('todo/supplier-todo-list.html.twig', array(
// 'groups' => $group,
'supplier' => $data_supplier,
'id' => $id
// 'form' => $form->createView()
));
}
/**
* @Route("/todo/supplier/add/{id}/{idToDo}", name="todo_addsupplier")
*/
public function addToDoSupplierAction($id, $idToDo, Request $request)
{
$em = $this->getDoctrine()->getManager();
$todo = $em->getRepository(ToDo::class)->findOneById($idToDo);
$suppliers = $em->getRepository(Supplier::class)->findAll();
if (is_null($todo->getidToDoSupplier())) {
$todo->setidToDoSupplier($id);
} else {
$a = $todo->getidToDoSupplier();
$a = $a . "," . $id;
$todo->setidToDoSupplier($a);
}
try {
$em->persist($todo);
$em->flush();
} catch (\ErrorException $e) {
d($e->getMessage());
}
return $this->redirectToRoute('todo_edit',
array(
'id' => $idToDo
)
);
}
/**
* @Route("/todo/supplier/remove/{id}/{idToDo}", name="todo_removeclient")
*/
public function removeToDoSupplierAction($id, $idToDo, Request $request)
{
$em = $this->getDoctrine()->getManager();
$todo = $em->getRepository(ToDo::class)->findOneById($idToDo);
$a = $todo->getidToDoSupplier();
$c = explode(',', $a);
$b = array_diff($c, array($id));
$newsuplist = implode(',', $b);
$todo->setidToDoSupplier($newsuplist);
try {
$em->persist($todo);
$em->flush();
} catch (\ErrorException $e) {
d($e->getMessage());
}
return $this->redirectToRoute('todo_edit',
array(
'id' => $idToDo
)
);
}
/**
* @Route("/todo/proposal/{id}", name="todo_proposal")
*/
public function proposalToDoListAction($id, Request $request)
{
$em = $this->getDoctrine()->getManager();
//La busqueda de fechas no la limito a un rango de fechas
//$desde = $request->request->get('buscarFecha')['desde'];
$desde = new \DateTime();
$desde -> setDate(1900,1,1);
//$hasta = $request->request->get('buscarFecha')['hasta'];
$hasta = new \DateTime();
$hasta -> setDate(2078,1,1);
$todo = $em->getRepository(ToDo::class)->findOneById($id);
$cliente = $todo->getidToDoClient();
// $cliente = $request->request->get('buscarFecha')['clientid'];
/* Consulta con fechas desde y hasta con id cliente */
if(!empty($cliente)){
$parameters = array(
'desde' => $desde,
'hasta' => $hasta,
'cliente' => $cliente
);
$dql = 'SELECT p
FROM EventsBundle:Proposal p
WHERE p.dateProposedAt >= :desde AND p.dateProposedAt <= :hasta AND p.clientId = :cliente
ORDER BY p.id DESC';
} else {
/* Consulta con fechas desde y hasta sin id cliente */
$parameters = array(
'desde' => $desde,
'hasta' => $hasta
);
$dql = 'SELECT p
FROM EventsBundle:Proposal p
WHERE p.dateProposedAt >= :desde AND p.dateProposedAt <= :hasta
ORDER BY p.id DESC';
}
$query = $em->createQuery($dql)->setParameters($parameters);
$proposals = $query->getResult();
$datos_proposal = array();
foreach($proposals as $proposal){
/*
* Estado, date create, id, Nombre, Cliente, Comercial, Equipo, Usuario, Inicio, Fin
* */
switch ($proposal->getStatus()) {
case "Pending":
$iconstatus ='<i class="icon-bell3 text-danger parpadea"></i>';
break;
case "Sent":
$iconstatus ='<i class="icon-paperplane text-orange"></i>';
break;
case "Confirmed":
$iconstatus ='<i class="icon-unlocked text-success"></i>';
break;
case "Invoiced":
$iconstatus ='<i class="icon-lock2 text-green"></i>';
break;
case "Cancel":
$iconstatus ='<i class=" icon-blocked text-grey"></i>';
break;
}
if ($proposal->getSent() == "Yes"){
$iconsent ='<i class="icon-paperplane text-orange"></i>';
if ($proposal->getStatus() == "Pending"){
$iconstatus ='<i class="icon-bell3 text-danger"></i>';
}
}else{
$iconsent ='';
}
/* Consultas */
$client = $em->getRepository(Client::class)->findOneByid($proposal->getClientId());
$contact = $em->getRepository(ClientContact::class)->findOneById($proposal->getContactId());
$commercial = $em->getRepository(User::class)->findOneById($proposal->getAgencommercialId());
if(empty($commercial)){$comercial="";}else{$comercial = $commercial->getName();}
$teams = $em->getRepository(SettingsTeam::class)->findOneById($proposal->getTeamId());
if(empty($teams)){$team="";}else{$team = $teams->getTeam();}
$agente = $em->getRepository(User::class)->findOneById($proposal->getAgentId());
if(empty($agente)){$agent="";}else{$agent = $agente->getName();}
/* Visto por ultima ves por parte del cliente o atraves del Access Key */
if ($proposal->getViewedAt() == $proposal->getCreatedAt()){
//no Visto
$novisto = $this->translator->trans('Not seen');
}else{
//visto
$novisto = $this->translator->trans('Seen by Client');
}
$datos_proposal[] = array(
'status' => $this->translator->trans($proposal->getStatus()),
'iconstatus' => $iconstatus,
'iconsent' => $iconsent,
'viewedAt' => $proposal->getViewedAt()->format('d/m/Y H:i:s'),
'novisto' => $novisto,
'create' => $proposal->getDateProposedAt()->format('d/m/Y'),
'id' => $proposal->getId(),
'token' => $proposal->getAccessKey(),
'mcp' => $proposal->getMcp(),
'name' => $proposal->getName(),
'client' => $client->getName(),
'client_id' => $client->getId(),
'contact' => $contact->getName().' '.$contact->getLastname(),
'contactdepartment' => $contact->getDepartment(),
'contactphone' => $contact->getPhone(),
'contactmovil' => $contact->getMobile(),
'contactmail' => $contact->getEmail(),
'commercial' => $comercial,
'team' => $team,
'agent' => $agent,
'event_star' => $proposal->getDateEventStarAt()->format('d/m/Y'),
'event_end' => $proposal->getDateEventEndAt()->format('d/m/Y'),
'list_client' => 'si'
);
}
return $this->render('todo/proposal-todo-list.html.twig', array(
'proposals' => $datos_proposal,
'idTodo' => $id
));
}
/**
* @Route("/todo/proposal/add/{id}/{idToDo}", name="todo_addproposal")
*/
public function addToDoProposalAction($id, $idToDo, Request $request)
{
$em = $this->getDoctrine()->getManager();
$todo = $em->getRepository(ToDo::class)->findOneById($idToDo);
// if (is_null($todo->getIdToDoControl()) or ($todo->getIdToDoControl()=='0') ) {
$todo->setIdToDoControl($id);
// } else {
// $a = $todo->getIdToDoControl();
//// $a = $a . "," . $id; //Futuro desarrollo: multiples eventos relacionados con una tarea
// $todo->setIdToDoControl($a);
// }
try {
$em->persist($todo);
$em->flush();
} catch (\ErrorException $e) {
d($e->getMessage());
}
return $this->redirectToRoute('todo_edit',
array(
'id' => $idToDo
)
);
}
/**
* @Route("/todo/proposal/remove/{id}/{idToDo}", name="todo_removeproposal")
*/
public function removeToDoProposalAction($id, $idToDo, Request $request)
{
$em = $this->getDoctrine()->getManager();
$todo = $em->getRepository(ToDo::class)->findOneById($idToDo);
$todo->setIdToDoControl("0");
try {
$em->persist($todo);
$em->flush();
} catch (\ErrorException $e) {
d($e->getMessage());
}
return $this->redirectToRoute('todo_edit',
array(
'id' => $idToDo
)
);
}
/**
* @Route("/todo/ssupdate", name="todo_ssupdate")
*/
public function todoSessionUpdate(Request $request)
{ //Actualizador de la sesion, desde la la base (base.html) se llama al javascript (base-ssupdate) que levanta este controlador
$em = $this->getDoctrine()->getManager();
// En idusr tenemos el arreglo de los usuarios que debemos refrescar la sesion
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
/* ALL LO QUE HAY -- ALERTAS DE ToDo */
$parametersB = array(
'user_id' => $user_id,
);
$dqlB = 'SELECT COUNT (tdl.id)
FROM App:ToDoLogs tdl
WHERE tdl.readed = FALSE AND tdl.ownerToDoLog = :user_id';
$query = $em->createQuery($dqlB)->setParameters($parametersB);;
$alertTodo = $query->getResult()[0][1];
$request->getSession()->set('_todoalert', $alertTodo);
$return = "Actualizado!";
$response = new JsonResponse($return);
return $response;
}
/**
* @Route("/todo/gomultitodo/{id}/{title}/{agentId}/{clientId}", name="todo_gomultitodo")
*/
public function goMultiToDoAction($id, $title, $agentId, $clientId, Request $request)
{
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$em = $this->getDoctrine()->getManager();
$multitodo = $em->getRepository(ToDo::class)->findByIdToDoControl($id);
if (count($multitodo)==0) {
return $this->redirectToRoute('todo_add', //Se le manda por el request la información del proposal que se copia automaticamente
array(
'id' => $id,
'title' => $title,
'agentId' => $agentId,
'clientId' => $clientId
)
);
} else {
if (count($multitodo)==1){
$id = $multitodo[0]->getId(); //El Id que teniamos previamente era el del Proposal, es necesario pasar el Id del Todo
return $this->redirectToRoute('todo_edit',
array(
'id' => $id
)
);
} else {
// return $this->render('todo/list-todo.html.twig', array(
// 'todos' => $multitodo
//
// ));
return $this->redirectToRoute('todo_log');
}
}
}
/**
* @Route("/todo/gomultichattodo/{id}/{title}/{agentId}/{clientId}", name="todo_gomultichattodo")
*/
public function goMultiChatToDoAction($id, $title, $agentId, $clientId, Request $request)
{
$user_logueado = $this->get('security.token_storage')->getToken()->getUser();
$user_id = $user_logueado->getId();
$em = $this->getDoctrine()->getManager();
$multitodo = $em->getRepository(ToDo::class)->findByIdToDoControl($id);
if (count($multitodo)==0) {
return $this->redirectToRoute('todo_add', //Se le manda por el request la información que se copia automaticamente
array(
'id' => $id,
'title' => $title,
'agentId' => $agentId,
'clientId' => $clientId
)
);
} else {
if (count($multitodo)==1){
$id = $multitodo[0]->getId(); //El Id que teniamos previamente era el del Proposal, es necesario pasar el Id del Todo
return $this->redirectToRoute('todo_log',
array(
'id' => $id
)
);
} else {
// return $this->render('todo/list-todo.html.twig', array(
// 'todos' => $multitodo
// ));
return $this->redirectToRoute('todo_log');
}
}
}
/**
* @Route("/todo/proposalnewadd/{idPrp}", name="todo_proposal_newadd")
*/
public function proposalToDoNewAddListAction($id, Request $request)
{
$em = $this->getDoctrine()->getManager();
//La busqueda de fechas no la limito a un rango de fechas
//$desde = $request->request->get('buscarFecha')['desde'];
$desde = new \DateTime();
$desde -> setDate(1900,1,1);
//$hasta = $request->request->get('buscarFecha')['hasta'];
$hasta = new \DateTime();
$hasta -> setDate(2078,1,1);
$todo = $em->getRepository(ToDo::class)->findOneById($id);
$cliente = $todo->getidToDoClient();
// $cliente = $request->request->get('buscarFecha')['clientid'];
/* Consulta con fechas desde y hasta con id cliente */
if(!empty($cliente)){
$parameters = array(
'desde' => $desde,
'hasta' => $hasta,
'cliente' => $cliente
);
$dql = 'SELECT p
FROM EventsBundle:Proposal p
WHERE p.dateProposedAt >= :desde AND p.dateProposedAt <= :hasta AND p.clientId = :cliente
ORDER BY p.id DESC';
} else {
/* Consulta con fechas desde y hasta sin id cliente */
$parameters = array(
'desde' => $desde,
'hasta' => $hasta
);
$dql = 'SELECT p
FROM EventsBundle:Proposal p
WHERE p.dateProposedAt >= :desde AND p.dateProposedAt <= :hasta
ORDER BY p.id DESC';
}
$query = $em->createQuery($dql)->setParameters($parameters);
$proposals = $query->getResult();
$datos_proposal = array();
foreach($proposals as $proposal){
/*
* Estado, date create, id, Nombre, Cliente, Comercial, Equipo, Usuario, Inicio, Fin
* */
switch ($proposal->getStatus()) {
case "Pending":
$iconstatus ='<i class="icon-bell3 text-danger parpadea"></i>';
break;
case "Sent":
$iconstatus ='<i class="icon-paperplane text-orange"></i>';
break;
case "Confirmed":
$iconstatus ='<i class="icon-unlocked text-success"></i>';
break;
case "Invoiced":
$iconstatus ='<i class="icon-lock2 text-green"></i>';
break;
case "Cancel":
$iconstatus ='<i class=" icon-blocked text-grey"></i>';
break;
}
if ($proposal->getSent() == "Yes"){
$iconsent ='<i class="icon-paperplane text-orange"></i>';
if ($proposal->getStatus() == "Pending"){
$iconstatus ='<i class="icon-bell3 text-danger"></i>';
}
}else{
$iconsent ='';
}
/* Consultas */
$client = $em->getRepository(Client::class)->findOneByid($proposal->getClientId());
$contact = $em->getRepository(ClientContact::class)->findOneById($proposal->getContactId());
$commercial = $em->getRepository(User::class)->findOneById($proposal->getAgencommercialId());
if(empty($commercial)){$comercial="";}else{$comercial = $commercial->getName();}
$teams = $em->getRepository(SettingsTeam::class)->findOneById($proposal->getTeamId());
if(empty($teams)){$team="";}else{$team = $teams->getTeam();}
$agente = $em->getRepository(User::class)->findOneById($proposal->getAgentId());
if(empty($agente)){$agent="";}else{$agent = $agente->getName();}
/* Visto por ultima ves por parte del cliente o atraves del Access Key */
if ($proposal->getViewedAt() == $proposal->getCreatedAt()){
//no Visto
$novisto = $this->translator->trans('Not seen');
}else{
//visto
$novisto = $this->translator->trans('Seen by Client');
}
$datos_proposal[] = array(
'status' => $this->translator->trans($proposal->getStatus()),
'iconstatus' => $iconstatus,
'iconsent' => $iconsent,
'viewedAt' => $proposal->getViewedAt()->format('d/m/Y H:i:s'),
'novisto' => $novisto,
'create' => $proposal->getDateProposedAt()->format('d/m/Y'),
'id' => $proposal->getId(),
'token' => $proposal->getAccessKey(),
'mcp' => $proposal->getMcp(),
'name' => $proposal->getName(),
'client' => $client->getName(),
'client_id' => $client->getId(),
'contact' => $contact->getName().' '.$contact->getLastname(),
'contactdepartment' => $contact->getDepartment(),
'contactphone' => $contact->getPhone(),
'contactmovil' => $contact->getMobile(),
'contactmail' => $contact->getEmail(),
'commercial' => $comercial,
'team' => $team,
'agent' => $agent,
'event_star' => $proposal->getDateEventStarAt()->format('d/m/Y'),
'event_end' => $proposal->getDateEventEndAt()->format('d/m/Y'),
'list_client' => 'si'
);
}
return $this->render('todo/proposal-todo-list.html.twig', array(
'proposals' => $datos_proposal,
'idTodo' => $id
));
}
/**
* @Route("/todo/adminGlobalList", name="admin_global_list")
*/
public function adminGlobalListAction(Request $request)
{
$em = $this->getDoctrine()->getManager();
// -- Buscamos las tareas que no se hayan finalizado
$tareasActivas = $em->getRepository(ToDo::class)->findBy(
array(
'state' => 0,
)
);
// -- fin-- Buscamos las tareas que no se hayan finalizado
// Se buscan los Logs no leidos del usuario
$arrayMiniChat = array();
$countIdToDo = 0; // Si mas de un comentario esta como no leido se repetira la data por eso usamos este contador
$toDoPendiente = $em->getRepository(ToDoLogs::class)->findAll();
$arrayTodo =array();
$mensaje=array();
$i=0;
foreach ($toDoPendiente as $pending){
if($pending->getFinished() === 0){
$mensaje[$pending->getTodoId()][$i] = $pending;
}
$i++;
}
//Volteo el arreglo para que queden ordenados los mensajes por fecha descendiente
$todo_log_usr = $em->getRepository(ToDoLogs::class)->findBy( array('finished' => 0));
$mensaje_inv = array_reverse($todo_log_usr);
//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
$array_contador = array();
foreach ($mensaje_inv as $mi){
$array_contador[] = $mi->getTodoId();
}
//elimino repeticiones
$array_contador = array_unique($array_contador);
//cuento el numero de tareas
$countlog = count($array_contador);
//Agrupa los mensajes por T O D O debo recorrer el arreglo _inv
$array_mix = array(); //Contendra el T O D O y los LOGS
$todo_all= array();
foreach ($mensaje_inv as $men_inv){
//Traigo todos los mnensajes del T O D O, me vi forzado a entrar al arreglo porque desconozco el valor del indice
$todo_all = $em->getRepository(ToDo::class)->findById($men_inv->getTodoId());
if(count($todo_all)>0){
// Si la tarea no esta finalizada
if(!($todo_all[0]->getState())){
$todo_logs = $em->getRepository(ToDoLogs::class)->findBy( array('todoId' => $men_inv->getTodoId()));
// Para evitar repeticiones solo lo meto en el arreglo definito si no he metido la tarea actual
if (in_array($todo_all[0]->getId(), $array_contador, true)){
$array_mix[] = array(
'todo' => $todo_all[0],
'todo_logs' => $todo_logs,
);
// Lo saco del arreglo para evitar repeticiones
foreach (array_keys($array_contador, $todo_all[0]->getId()) as $key) {
unset($array_contador[$key]);
}
}
} else {
// Si esta finalizada verificar si la finalizo otro que no sea el user_id
// Si hemos vaciado el contador de los T O D O ya no debo considerar mas mensajes
if ((count($array_contador)) != 0 ) {
// 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
$todo_logs = $em->getRepository(ToDoLogs::class)->findBy( array('todoId' => $men_inv->getTodoId(),
'message' => 'Se ha finalizado la tarea'
));
if(count($todo_logs) == 0){ // Debo pintar ya que la finalizo otro usuario
$todo_logs = $em->getRepository(ToDoLogs::class)->findBy( array('todoId' => $men_inv->getTodoId()));
$array_mix[] = array(
'todo' => $todo_all[0],
'todo_logs' => $todo_logs,
);
foreach (array_keys($array_contador, $todo_all[0]->getId()) as $key) {
unset($array_contador[$key]);
}
}
}
}
}
}
$arrayTodo = array();
foreach($mensaje as $men){
foreach($men as $m1){
$arrayMen =$em->getRepository(ToDo::class)->findOneById($m1->getTodoId());
$arrayTodo[] = array(
'todo' => $arrayMen,
'mensaje' => $men,
);
}
}
// --**
return $this->render('todo/adminTodoList.html.twig', array(
'todos' => $tareasActivas,
'arrayComm' => $mensaje,
'countlog' => $countlog,
'arrayTodo' => $array_mix,
'arrayMiniChat' => $arrayMiniChat
));
}
/**
* @Route("/todo/adminDetailTodo/{ind}", name="adminDetailTodo")
*/
public function adminDetailTodoAction($ind, Request $request)
{
return $this->render('todo/adminDetailTodo.html.twig',
array(
// 'ind' => $ind,
// 'suppliers_consulta' => $suppliers_consulta,
// 'form' => $form->createView()
)
);
}
}