src/Controller/Admin/DashboardController.php line 111

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Admin;
  3. use App\Entity\Color;
  4. use App\Entity\Commission;
  5. use App\Entity\Coupon;
  6. use App\Entity\Discount;
  7. use App\Entity\DiscountName;
  8. use App\Entity\DiscountType;
  9. use App\Entity\Mailing;
  10. use App\Entity\MailingList;
  11. use App\Entity\MailingLog;
  12. use App\Entity\Orden;
  13. use App\Entity\PaymentMethod;
  14. use App\Entity\Payout;
  15. use App\Entity\PercentOff;
  16. use App\Entity\PlatformFee;
  17. use App\Entity\Product;
  18. use App\Entity\Programa;
  19. use App\Entity\ProgramaType;
  20. use App\Entity\PromoCode;
  21. use App\Entity\PromoCodeUsage;
  22. use App\Entity\Provider;
  23. use App\Entity\ProviderType;
  24. use App\Entity\Rate;
  25. use App\Entity\Restriction;
  26. use App\Entity\SendgridJob;
  27. use App\Entity\Solicitud;
  28. use App\Entity\SolicitudPublica;
  29. use App\Entity\Subscription;
  30. use App\Entity\SubscriptionStatus;
  31. use App\Entity\Tax;
  32. use App\Entity\TaxRecord;
  33. use App\Entity\Transaction;
  34. use App\Entity\User;
  35. use Doctrine\ORM\EntityManagerInterface;
  36. use EasyCorp\Bundle\EasyAdminBundle\Config\Actions;
  37. use EasyCorp\Bundle\EasyAdminBundle\Config\Assets;
  38. use EasyCorp\Bundle\EasyAdminBundle\Config\Crud;
  39. use EasyCorp\Bundle\EasyAdminBundle\Config\Dashboard;
  40. use EasyCorp\Bundle\EasyAdminBundle\Config\MenuItem;
  41. use EasyCorp\Bundle\EasyAdminBundle\Config\UserMenu;
  42. use EasyCorp\Bundle\EasyAdminBundle\Controller\AbstractDashboardController;
  43. use EasyCorp\Bundle\EasyAdminBundle\Router\AdminUrlGenerator;
  44. use Symfony\Component\HttpFoundation\Response;
  45. use Symfony\Component\Routing\Annotation\Route;
  46. use Symfony\Component\Security\Core\User\UserInterface;
  47. use Symfony\Component\Serializer\Normalizer\DataUriNormalizer;
  48. use Symfony\Component\Workflow\Registry;
  49. use Symfony\Component\Workflow\WorkflowInterface;
  50. class DashboardController extends AbstractDashboardController
  51. {
  52. private $em;
  53. private $generator;
  54. /**
  55. * @var Registry
  56. */
  57. private $registry;
  58. public function __construct(EntityManagerInterface $em, AdminUrlGenerator $generator, Registry $registry)
  59. {
  60. $this->em = $em;
  61. $this->generator = $generator;
  62. $this->registry = $registry;
  63. }
  64. public function configureAssets(): Assets
  65. {
  66. $r = parent::configureAssets();
  67. // $r->addCssFile('https://cdn.jsdelivr.net/npm/uikit@3.15.19/dist/css/uikit.min.css')
  68. // ->addJsFile('https://cdn.jsdelivr.net/npm/uikit@3.15.19/dist/js/uikit.min.js')
  69. // ->addJsFile('https://cdn.jsdelivr.net/npm/uikit@3.15.19/dist/js/uikit-icons.min.js')
  70. // ;
  71. return $r;
  72. }
  73. public function configureCrud(): Crud
  74. {
  75. $r = parent::configureCrud();
  76. return $r
  77. ->showEntityActionsAsDropdown(false)
  78. ->setPaginatorPageSize(50)
  79. ;
  80. }
  81. public function configureActions(): Actions
  82. {
  83. $r = parent::configureActions();
  84. return $r
  85. ->remove('index', 'delete')
  86. ;
  87. }
  88. public function getCurrentMonth()
  89. {
  90. $f = new \DateTime();
  91. return $f->format('M Y');
  92. }
  93. public function getPreviousMonth()
  94. {
  95. $f = new \DateTime();
  96. $f2 = $f->sub(new \DateInterval('P1M'));
  97. return $f->format('M Y');
  98. }
  99. /**
  100. * @Route("/admin", name="admin")
  101. */
  102. public function index(): Response
  103. {
  104. $r1 = []; $r2 = [];
  105. $pcs = $this->em->getRepository(PromoCode::class)->findAll();
  106. if($pcs){
  107. foreach ($pcs as $pc){
  108. $f = new \DateTime();
  109. $f1 = $f->format('m');
  110. $fa = $f->format('M Y');
  111. $pcus = $this->em->getRepository(PromoCodeUsage::class)->findMonthUsage($pc, $f1);
  112. foreach ($pcus as $pcu){
  113. $var = 0;
  114. $var = $pcu[1] * $pc->getCommission()->getValor();
  115. if($var > 0)$r1[$fa][$pc->getContent()] = ['qty' => $pcu[1], 'comision' => $var];
  116. }
  117. $f2 = $f->sub(new \DateInterval('P1M'));
  118. $fb = $f->format('M Y');
  119. $pcus = $this->em->getRepository(PromoCodeUsage::class)->findMonthUsage($pc, $f2->format('m'));
  120. foreach ($pcus as $pcu){
  121. $var = 0;
  122. $var = $pcu[1] * $pc->getCommission()->getValor();
  123. if($var > 0)$r1[$fa][$pc->getContent()] = ['qty' => $pcu[1], 'comision' => $var];
  124. }
  125. }
  126. }
  127. $rs = [];
  128. for($i = 0; $i <7; $i++){
  129. $f1 = new \DateTime();
  130. $f1->setDate(date('Y'), date('m')-$i, 1);
  131. $r = $this->em->getRepository(Subscription::class)->fetchSubsByDateRange(-$i );
  132. $rs[$f1->format('F Y')] = [count($r), $this->makeSubsLink(SubsDetailCrudController::class, 'int', -$i)];
  133. }
  134. $rs2 = [];
  135. for($i = 0; $i <4; $i++){
  136. $f1 = new \DateTime();
  137. $f1->setDate(date('Y'), date('m')+$i, 1);
  138. $r = $this->em->getRepository(Subscription::class)->fetchSubsByDateRange(+$i );
  139. $rs2[$f1->format('F Y')] = [count($r), $this->makeSubsLink(SubsDetailCrudController::class, 'int', $i)];
  140. }
  141. $ordenes = $this->em->getRepository(Orden::class)->findBy(['currentPlace' => 'Pagada']);
  142. return $this->render('admin/dashboard.html.twig', [
  143. 'venc' => $rs,
  144. 'venc2' => $rs2,
  145. 'vencidas' => [
  146. 'mes1' => $r2,
  147. 'mes2' => $r1,
  148. ],
  149. 'recientes' => [
  150. 'count' => $this->em->getRepository(Subscription::class)->fetchRecientes(true),
  151. 'link' => $this->makeSubsLink(SubscriptionCrudController::class, 'int', 'prox3')
  152. ],
  153. 'ordenes' => [
  154. 'count' => count($ordenes),
  155. 'link' => $this->makeSubsLink(OrdenCrudController::class, 'abiertas', 1)
  156. ],
  157. 'solicitudes' => [
  158. 'count' => count($this->em->getRepository(Solicitud::class)->findAbiertas()),
  159. 'link' => $this->makeSubsLink(SolicitudCrudController::class, 'abierta', 1)
  160. ]
  161. ]);
  162. }
  163. protected function makeSubsLink($class, $key, $value)
  164. {
  165. $link = $this->generator->setAction('index')->setController($class)->set($key, $value);
  166. $r = $link->generateUrl();
  167. $this->generator->unsetAll();
  168. return $r;
  169. }
  170. public function configureUserMenu(UserInterface $user): UserMenu
  171. {
  172. $r = parent::configureUserMenu($user);
  173. $acct = MenuItem::linkToRoute('Mi Cuenta', null, 'app_account');
  174. return $r->addMenuItems([$acct]);
  175. }
  176. public function configureDashboard(): Dashboard
  177. {
  178. return Dashboard::new()
  179. ->disableUrlSignatures()
  180. ->setTitle('Dvpr2022');
  181. }
  182. public function configureMenuItems(): iterable
  183. {
  184. $url = $this->generator->unsetAll()->set('url','https://dvpr.computechapps.com');
  185. yield MenuItem::linkToDashboard('Dashboard', 'fa fa-home');
  186. yield MenuItem::linkToCrud('Solicitudes de Reservación', 'fa fa-home', Solicitud::class)
  187. ->setQueryParameter('abierta', 1)
  188. ->setController(SolicitudCrudController::class);
  189. yield MenuItem::linkToCrud('Solicitudes Socios', 'fa fa-home', SolicitudPublica::class)
  190. ->setController(SolicitudPublicaSocioCrudController::class);
  191. yield MenuItem::linkToCrud('Solicitudes no Socios', 'fa fa-home', SolicitudPublica::class)
  192. ->setController(SolicitudPublicaCrudController::class);
  193. // yield MenuItem::linkToCrud('Solicitudes no Socios', 'fa fa-home', Solicitud::class)
  194. // ->setQueryParameter('shi', 1)
  195. // ->setController(SolicitudNoSocioCrudController::class);
  196. yield MenuItem::subMenu('Users', 'fa fa-user')
  197. ->setSubItems([
  198. MenuItem::linkToCrud('Users', '', User::class)
  199. ->setQueryParameter('usertype', 'user'),
  200. MenuItem::linkToCrud('Users Activos', '', User::class)
  201. ->setQueryParameter('status', 'Activo'),
  202. MenuItem::linkToCrud('Users Activos 15d', '', User::class)
  203. ->setQueryParameter('status', 'Activo 15d'),
  204. MenuItem::linkToCrud('Users Vencidos', '', User::class)
  205. ->setQueryParameter('status', 'Vencido'),
  206. MenuItem::linkToCrud('Users Vencidos 180d', '', User::class)
  207. ->setQueryParameter('status', 'Vencido 180d'),
  208. MenuItem::linkToCrud('Admin Users', '', User::class)
  209. ->setQueryParameter('usertype', 'admin')
  210. ]);
  211. yield MenuItem::subMenu('Subscriptions', 'fa fa-copy')
  212. ->setSubItems([
  213. MenuItem::linkToCrud('General', 'fa fa-home', Subscription::class),
  214. MenuItem::linkToCrud('Activas', 'fa fa-home', Subscription::class)
  215. ->setQueryParameter('status', 1),
  216. // MenuItem::linkToCrud('Activas 15d', 'fa fa-home', Subscription::class)
  217. // ->setQueryParameter('place', 'Activa 15d'),
  218. MenuItem::linkToCrud('Vencidas', 'fa fa-home', Subscription::class)
  219. ->setQueryParameter('status', 2),
  220. // MenuItem::linkToCrud('Vencidas 180d', 'fa fa-home', Subscription::class)
  221. // ->setQueryParameter('place', 'Vencida 180d'),
  222. MenuItem::linkToCrud('Archivadas', 'fa fa-home', Subscription::class)
  223. ->setQueryParameter('status', 3),
  224. // MenuItem::linkToCrud('Recientes', 'fa fa-home', Subscription::class)
  225. // ->setQueryParameter('int', 'prox3'),
  226. ]);
  227. // yield MenuItem::linkToCrud('Mailing', 'fa fa-envelope', Mailing::class);
  228. yield MenuItem::subMenu('Promo Codes', 'fa fa-copy')
  229. ->setSubItems([
  230. MenuItem::linkToCrud('Individuos', 'fa fa-code', PromoCode::class)
  231. ->setQueryParameter('sendgrid', 0),
  232. MenuItem::linkToCrud('Sendgrid', 'fa fa-code', PromoCode::class)
  233. ->setQueryParameter('sendgrid', 1),
  234. ]);
  235. yield MenuItem::section('');
  236. yield MenuItem::subMenu('Mailing', 'fa fa-copy')
  237. ->setSubItems([
  238. MenuItem::linkToRoute('Mailing Dashboard', 'fa fa-envelope', 'app_mailing'),
  239. MenuItem::linkToCrud('Mailing Lists', 'fa fa-list', MailingList::class),
  240. MenuItem::linkToCrud('Users SendGrid', '', User::class)
  241. ->setQueryParameter('sendgrid', 1),
  242. MenuItem::linkToCrud('Users SendGrid Pending', '', User::class)
  243. ->setQueryParameter('sendgrid', 4),
  244. MenuItem::linkToCrud('Users SendGrid Renovados', '', User::class)
  245. ->setQueryParameter('sendgrid', 5),
  246. MenuItem::linkToCrud('Users no SendGrid', '', User::class)
  247. ->setQueryParameter('sendgrid', 0),
  248. MenuItem::linkToCrud('Users no SendGrid Pending', '', User::class)
  249. ->setQueryParameter('sendgrid', 3),
  250. MenuItem::linkToCrud('Uploading SendGrid', '', User::class)
  251. ->setQueryParameter('sendgrid', 2),
  252. MenuItem::linkToCrud('SendGrid Jobs', '', SendgridJob::class),
  253. ]);
  254. yield MenuItem::section('Admin');
  255. yield MenuItem::linkToCrud('Ordenes', 'fa fa-money', Orden::class);
  256. yield MenuItem::linkToCrud('Transacciones', 'fa fa-money', Transaction::class);
  257. yield MenuItem::linkToCrud('Programas', 'fa fa-home', Programa::class)
  258. ->setQueryParameter('activa', 1);
  259. yield MenuItem::linkToCrud('Productos', 'fa fa-home', Product::class)
  260. ->setQueryParameter('activa', 1);
  261. yield MenuItem::linkToCrud('Provider', 'fa fa-home', Provider::class)
  262. ->setQueryParameter('activa', 1);
  263. yield MenuItem::linkToCrud('Mailing Log', 'fa fa-money', MailingLog::class);
  264. // yield MenuItem::linkToCrud('Promo Code Usage', 'fa fa-home', PromoCodeUsage::class);
  265. yield MenuItem::linkToCrud('Payouts Pendientes', 'fa fa-home', Payout::class)
  266. ->setQueryParameter('currentPlace', 'unpaid');
  267. yield MenuItem::subMenu('Archivo' , 'fa fa-folder-open')
  268. ->setSubItems([
  269. MenuItem::linkToCrud('Payouts Pagados', 'fa fa-home', Payout::class)
  270. ->setQueryParameter('currentPlace', 'paid'),
  271. MenuItem::linkToCrud('Programas', 'fa fa-home', Programa::class)
  272. ->setQueryParameter('activa', 0),
  273. MenuItem::linkToCrud('Subscripciones', 'fa fa-home', Subscription::class)
  274. ->setQueryParameter('place', 'Archivada'),
  275. MenuItem::linkToCrud('Productos', 'fa fa-home', Product::class)
  276. ->setQueryParameter('activa', 0),
  277. MenuItem::linkToCrud('Provider', 'fa fa-home', Provider::class)
  278. ->setQueryParameter('activa', 0),
  279. MenuItem::linkToCrud('Tax Record' , 'fa fa-cog', TaxRecord::class),
  280. MenuItem::linkToCrud('Solicitudes de Reservación', 'fa fa-home', Solicitud::class)
  281. ->setQueryParameter('abierta', 0)
  282. ->setController(SolicitudCrudController::class)
  283. ]);
  284. yield MenuItem::subMenu('Promo Code Usage')
  285. ->setSubItems([
  286. MenuItem::linkToCrud( $this->getCurrentMonth(), 'fa fa-calendar', PromoCodeUsage::class)
  287. ->setQueryParameter('month', 'current'),
  288. MenuItem::linkToCrud( $this->getPreviousMonth(), 'fa fa-calendar', PromoCodeUsage::class)
  289. ->setQueryParameter('month', 'previous')
  290. ]);
  291. yield MenuItem::subMenu('Settings', 'fa fa-cogs')
  292. ->setSubItems([
  293. MenuItem::linkToCrud('Taxes', 'fa fa-cog', Tax::class),
  294. MenuItem::linkToCrud('Payment Methods', 'fa fa-cog', PaymentMethod::class),
  295. MenuItem::linkToCrud('Platform Fees', 'fa fa-cog', PlatformFee::class),
  296. MenuItem::linkToCrud('ProgramaTypes', 'fa fa-cog', ProgramaType::class),
  297. MenuItem::linkToCrud('Provider Types', 'fa fa-cog', ProviderType::class),
  298. MenuItem::linkToCrud('Rates', 'fa fa-cog', Rate::class),
  299. MenuItem::linkToCrud('Discount', 'fa fa-cog', Discount::class),
  300. MenuItem::linkToCrud('Discount Names', 'fa fa-cog', DiscountName::class),
  301. MenuItem::linkToCrud('Discount Types', 'fa fa-cog', DiscountType::class),
  302. MenuItem::linkToCrud('Restrictions', 'fa fa-cog', Restriction::class),
  303. MenuItem::linkToCrud('Colors', 'fa fa-cog', Color::class),
  304. MenuItem::linkToCrud('Commissions', 'fa fa-cog', Commission::class),
  305. MenuItem::linkToCrud('Percents Off', 'fa fa-cog', PercentOff::class),
  306. MenuItem::linkToCrud('Sendgrid Jobs', 'fa fa-cog', SendgridJob::class),
  307. ]);
  308. }
  309. //filters[fechaDeUso][comparison]=between
  310. //&filters[fechaDeUso][value][month]=9
  311. //&filters[fechaDeUso][value][day]=1
  312. //&filters[fechaDeUso][value][year]=2022
  313. //&filters[fechaDeUso][value2][month]=9
  314. //&filters[fechaDeUso][value2][day]=30
  315. //&filters[fechaDeUso][value2][year]=2022
  316. }