Skip to content Skip to sidebar Skip to footer

How To Call Json From Multiple Nested If Condition

I am using CodeIgniter. I am working on the small project which is a Batch list. Now If an admin wants to create the batch list then should enter the start date and end date and st

Solution 1:

your entire approach is a bit messy because you find yourself in a ton of redundant code fragments and nobody is able to understand what exactly you want - i gv you some hints here including an example based on your code

  1. Use Exceptions - it's perfect for your case - if something goes wrong - stop it
  2. Try to filter your need to an extent of one single task und try to solve it - and only after that go to the next task
  3. Always - remember always - think about one term - if you find repeatedly the same code in your application - you know something is wrong - and you should refactor it - don't be ashamed about redundancies - they do always happen - but if you find them, you must refactor those code snippets

Now to your example

What are your tasks here ?

  • you can try to ask your database if a batch is already running - you dont need to iterate over the entire table entries
  • Compare both input Dates from Administrator - if start date is in the future of end date, instantely stop the application
  • your intersection isn't really clear to me what you want to achieve here - but i'm really convinced you can ask the database here too (catchword: find_in_set)

Based on that information we can start to develop things now ;) (if i don't have everything just complete the list above and try to implement your task)

Controller:

try
{
    $id = $this->input->post('venue_id');
    $venue_id = implode(',',$id);     
    $activity_list_id = $this->input->post('activity_name');
    $new_batch_start_date = date('Y-m-d',strtotime($this->input->post('start_date')));    
    $new_batch_end_date = date('Y-m-d',strtotime($this->input->post('end_date')));
    $new_batch_start_time = $this->input->post('start_time');
    $new_batch_end_time = $this->input->post('end_time');
    $days = implode(',',$this->input->post('days'));

    $objDateStart = DateTime::createFromFormat('Y-m-d h:i a', $new_batch_start_date.' '.$new_batch_start_time);
    $objDateEnd = DateTime::createFromFormat('Y-m-d h:i a', $new_batch_end_date.' '.$new_batch_end_time);

    if ($objDateEnd < $objDateStart)    thrownewException('End Date Should be Greater than Start Date');

    if ($this->Batch_model->hasBatchesBetweenDates($objDateStart, $objDateEnd)) thrownewException('Other Batch already running On from '.$objDateStart->format('d-m-Y H:i').' to '.$objDateEnd->format('d-m-Y H:i').'. Please Change Time Slot for Start and End Date'); 

    $data = array(      
        'activity_list_id' => $this->input->post('activity_name'),          
        'batch_venue_id'   => $venue_id,      
        'batch_name'       => $this->input->post('batch_name'),     
        'start_date'       => $objDateStart->format('Y-m-d'),     
        'end_date'         => $objDateEnd->format('Y-m-d'),     
        'start_time'       => $objDateStart->format('H:i'),     
        'end_time'         => $objDateEnd->format('H:i'),     
        'total_capacity'   => $this->input->post('total_capecity'),
        'batch_status'     => 1,
        'created_by'       => trim($this->session->userdata['login_data']['user_id']),
        'created_date'     => date('d-m-Y h:i:s A'),
        'batch_days'     => $days
    );

    $this->Batch_model->createBatch($data);
}
catch(Exception$e)
{
    $arrError = [
        'error' => false,
        'msg' => $e->getMessage()
    ];

    echo json_encode($arrError);
}

Model:

publicfunctionhasBatchesBetweenDates(DateTime $objDateStart, DateTime $objDateEnd)
{
    $query = $this->db
    ->from('batch_list')
    ->join('activity_list','activity_list.activity_id = batch_list.activity_list_id')
    ->where('CONCAT(start_date,\' \',start_time)  >=', $objDateStart->format('Y-m-d H:i:s'))
    ->or_group_start()
        ->where('CONCAT(end_date, \' \', end_time) <=', $objDateEnd->format('Y-m-d H:i:s'))
        ->where('CONCAT(end_date, \' \', end_time) >=', $objDateStart->format('Y-m-d H:i:s'))
    ->group_end()
    ->get();

    return ($query->num_rows() > 0);
}

i hope you understand the concepts here - if you've questions - don't hesitate to ask

Post a Comment for "How To Call Json From Multiple Nested If Condition"