I'm trying to count the number of payroll week that matches the payroll period entered. It returns the correct number but won't add to the database but instead says there's no match in the database. When I make changes I get this error:
Error: Call to a member function setPayrollperiodid() on null.
I have outlined what I have thus far. Can someone tell me where I went wrong.
I have made some updates to the question I no longer get that error but record isn't adding instead it's saying that it doesn't match where did I go wrong in the controller.
Repository
class PayrollweekRepository extends EntityRepository
{
public function findBystartdateAndenddate($startdate, $enddate)
{
$repository = $this->getEntityManager()
->getRepository('comtwclagripayrollBundle:Payrollweek');
$qb = $repository->createQueryBuilder('pw');
$qb->select('pw');
$qb->where('pw.startdate=:startdate');
$qb->Andwhere('pw.enddate=:enddate');
$qb->setParameter('startdate', $startdate);
$qb->setParameter('enddate', $enddate);
$qb->getquery()->getResult();
}
public function countBystartdateAndenddate($startdate, $enddate)
{
$repository = $this->getEntityManager()
->getRepository('comtwclagripayrollBundle:Payrollweek');
$qb = $repository->createQueryBuilder('pw');
$qb->select('count(pw.id)');
$qb->where('pw.startdate=:startdate or pw.enddate=:enddate');
$qb->setParameter('startdate', $startdate);
$qb->setParameter('enddate', $enddate);
$count = $qb->getQuery()->getSingleScalarResult();
var_dump($count);
return $count;
}
}
Controller
public function createAction(Request $request)
{
$entity = new Payrollperiod();
$form = $this->createCreateForm($entity);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$payrollperiod = $em->getRepository('comtwclagripayrollBundle:Payrollperiod')
->findOneBy([
'startdate' => $form->get('startDate')->getData(),
'enddate' => $form->get('endDate')->getData()]
);
$payrollweek = $em->getRepository('comtwclagripayrollBundle:Payrollweek')
->findBystartdateAndenddate($entity->getStartDate() , $entity->getEndDate());
$counter = $em->getRepository('comtwclagripayrollBundle:Payrollweek')
->countBystartdateAndenddate($entity->getStartDate() , $entity->getEndDate());
//If entity exists
if ($payrollperiod){
$this->addFlash('error', 'Error: A payroll period is already present with the same start and end date.');
return $this->redirect($this->generateUrl('payrollperiod'));
}
//If PayrollWeek matches the Payrollperiod entered
elseif ( $counter==2){
$payrollweek->setPayrollperiodid($entity);
}
$em->persist($entity);
$em->flush();
$this->addFlash('success', 'Payroll Period was added.');
$this->addFlash('success', 'Payroll week was updated.');
return $this->redirect($this->generateUrl('payrollperiod'));
//return $this->redirect($this->generateUrl('payrollperiod_show', array('payrollperiodid' => $entity->getpayrollperiodid())));
}
else{
$this->addFlash('error', 'Payroll Period does not match a payroll week.');
return $this->redirect($this->generateUrl('payrollperiod'));
}
//return $this->render('comtwclagripayrollBundle::new.html.twig',array('form' => $form->createView()));
return array(
'entity' => $entity,
'form' => $form->createView(),
);
}
UPDATES
public function countBystartdateAndenddate($startdate, $enddate)
{
$repository = $this->getEntityManager()
->getRepository('comtwclagripayrollBundle:Payrollweek');
$qb = $repository->createQueryBuilder('pw');
$qb->select('count(pw.id)');
$qb->where('pw.startdate=:startdate or pw.enddate=:enddate');
$qb->setParameter('startdate', $startdate);
$qb->setParameter('enddate', $enddate);
$count = $qb->getQuery()->getResult();
var_dump($count);
return $count;
}
public function createAction(Request $request)
{
$entity = new Payrollperiod();
$form = $this->createCreateForm($entity);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$payrollperiod = $em->getRepository('comtwclagripayrollBundle:Payrollperiod')->findOneBy(['startdate'=>$form->get('startDate')->getData(), 'enddate'=>$form->get('endDate')->getData()]);
//$payrollweek = $em->getRepository('comtwclagripayrollBundle:Payrollweek')->findBystartdateAndenddate($form->get('startDate')->getData(), $form->get('endDate')->getData());
$counter = $em->getRepository('comtwclagripayrollBundle:Payrollweek')->countBystartdateAndenddate($form->get('startDate')->getData(), $form->get('endDate')->getData());
//If entity exists
if ($payrollperiod){
$this->addFlash('error', 'Error: A payroll period is already present with the same start and end date.');
return $this->redirect($this->generateUrl('payrollperiod'));
}
//If PayrollWeek matches the Payrollperiod entered
elseif ($counter==2){
foreach ($counter as $pWeek) {
$pWeek->setPayrollperiodid($entity);
}
$em->persist($entity);
$em->flush();
$this->addFlash('success', 'Payroll Period was added.');
$this->addFlash('success', 'Payroll week was updated.');
return $this->redirect($this->generateUrl('payrollperiod'));
//return $this->redirect($this->generateUrl('payrollperiod_show', array('payrollperiodid' => $entity->getpayrollperiodid())));
}
else{
$this->addFlash('error', 'Payroll Period does not match a payroll week.');
return $this->redirect($this->generateUrl('payrollperiod'));
}
}
//return $this->render('comtwclagripayrollBundle::new.html.twig',array('form' => $form->createView()));
return array(
'entity' => $entity,
'form' => $form->createView(),
);
}
Further Updates
public function createAction(Request $request)
{
$entity = new Payrollperiod();
$form = $this->createCreateForm($entity);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$em = $this->getDoctrine()->getManager();
$payrollperiod = $em->getRepository('comtwclagripayrollBundle:Payrollperiod')->findOneBy(['startdate'=>$form->get('startDate')->getData(), 'enddate'=>$form->get('endDate')->getData()]);
$payrollweek = $em->getRepository('comtwclagripayrollBundle:Payrollweek')->findBystartdateAndenddate($form->get('startDate')->getData(), $form->get('endDate')->getData());
//If entity exists
if ($payrollperiod){
$this->addFlash('error', 'Error: A payroll period is already present with the same start and end date.');
return $this->redirect($this->generateUrl('payrollperiod'));
}
//If PayrollWeek matches the Payrollperiod entered
elseif ($payrollweek){
$count = count($payrollweek);
foreach ($payrollweek as $pWeek) {
$pWeek->setPayrollperiodid($entity);
}
$em->persist($entity);
$em->flush();
$this->addFlash('success', 'Payroll Period was added.');
$this->addFlash('success', 'Payroll week was updated.');
return $this->redirect($this->generateUrl('payrollperiod'));
//return $this->redirect($this->generateUrl('payrollperiod_show', array('payrollperiodid' => $entity->getpayrollperiodid())));
}
else{
$this->addFlash('error', 'Payroll Period does not match a payroll week.');
return $this->redirect($this->generateUrl('payrollperiod'));
}
}
//return $this->render('comtwclagripayrollBundle::new.html.twig',array('form' => $form->createView()));
return array(
'entity' => $entity,
'form' => $form->createView(),
);
}