Search This Blog

05 January 2023

Laravel Using Task Mangement and Track Time

 Create  Migration and Model 

Table Names:task,track_task

task:

id,title,description,assigned_to,comment,status,created_by,created_at

track_task:

id,task_id,start_time,end_time,user_id,created_by,created_at

Insert Task :

Route::get('/add-task',[TaskController::class,'addTask']);

public function storeTask(Request $request){

$input=$request->all();       

        $title=$input['summary'];
        $description=$input['description'];       
        $users=$input['users'];
        $status=$input['status'];
        $comment=$input['comment'];
        $userid=Auth::user()->id;
      
            $insertArr=array(
            "title"=>$summary,
            "task_description"=>$description,            
            "status"=>$status,
            "comment"=>$comment,
            "assigned_to"=>$users,
            "created_by"=>$userid,
            "updated_by"=>$userid,
        );
        $insert=Task::create($insertArr);

}


public function getTask($id){

     $task=Task::where('id',$id)->first();     
    return view('task.get-task',compact('task'));

  }

  public function startTask(Request $request){

            $task=new Track;

            $input=$request->all();

            $id=$input['id'];

            $userid=Auth::user()->id;

            $time=date('Y-m-d h:i:s');

            $task->task_id=$id;

            $task->user_id=$userid;

            $task->start_time=$time;

            $task->tracker_on="1";

            $task->save();

            DB::select("Update track set tracker_on='0' WHERE id NOT IN($task->id) AND task_id='$id' AND user_id='$userid'");


  }


  public function endTask(Request $request){

    $input=$request->all();

    $id=$input['id'];

    $task=Track::where('task_id',$id)

                    ->Where('tracker_on','1')->first();

    $task->end_time=date('Y-m-d h:i:s');

    $task->tracker_on='0';

    $task->save();

    $tsk=Track::where('id',$task->id)->first();

    if($tsk){

        $start=$tsk->start_time;

        $end=$tsk->end_time;

        $times=DB::select("SELECT SUM(TIMESTAMPDIFF(SECOND, '$start', '$end')) AS difference");

        if($times){

             $time=$this->convertSecondsToHMS($times[0]->difference);

            if (!$this->taskLog($id,"Tracked Time",$time,Auth::user()->id)) {

            }

        }


    }

}


public function convertSecondsToHMS($seconds) {

    if (!is_numeric($seconds)) {

        return "00:00:00";

    }

    $hours = floor($seconds / 3600);

    $minutes = floor(($seconds % 3600) / 60);

    $seconds = $seconds % 60;


    return sprintf("%02d:%02d:%02d", $hours, $minutes, $seconds);

}


View and start,stop Functionality

<table>
                     <thead>
                            <tr>
                                <th >Sno</th>
                                <th >Title</th>
                                <th >Description</th>                               
                                <th >Assigned</th>
                                <th >Status</th>
                                <th >Comments</th>
                                <th >Action</th>
                            </tr>
                        </thead>
 <tbody>
                            <?php if(isset($taskArr)){
                                $sts=array('','Todo','Allocated','Reallocated','WorkInProgress','Hold','Completed');
                                foreach($taskArr as $row){
                                ?>
                                <tr data-id="<?= $row['id'] ?>">
                                <td><?= $row['id']; ?></td>
                                <td><?= $row['title']; ?></td>
                                <td><?= $row['description']; ?></td>
                               
                                <td><?= isset($row['status']) ? $sts[$row['status']]:'' ?></td>
                                <td><?= $row['comment']; ?></td>
                                <td>
                                    <?php if(Auth::user()->id==$row['user']){ ?>
                                    <button id="on<?= $row['id'] ?>"
                                        style="<?php echo ($row['track']==1) ? 'display:none':'display:block'; ?>"
                                        type="button"
                                        onclick="startTask(<?= $row['id'] ?>,'<?= $row['times'] ?>');showbtn1(<?= $row['id'] ?>);"
                                        class="badge badge-success"><i class="fa fa-play"></i></button>
                                    <button id="off<?= $row['id'] ?>"
                                        style="<?php echo ($row['track']==1) ? 'display:block':'display:none'; ?>"
                                        type="button" onclick="endTask(<?= $row['id'] ?>);showbtn2(<?= $row['id'] ?>);"
                                        class="badge badge-danger"><i class="fa fa-stop"></i></button>

                                    <a href="/show-task/<?= $row['id']?>"><button type="button"
                                            onclick="editTask(<?= $row['id'] ?>);" class="badge badge-info"><i
                                                class="fa fa-edit"></i></button></a>
                                    <button type="button" onclick="deleteTask(<?= $row['id'] ?>);"
                                        class="badge badge-danger"><i class="fa fa-trash"></i></button>
                                    <?php } ?>
                                    <span id="tracking-time<?= $row['id'] ?>">
                                        <?php
                                            echo convertSecondsToHMS($row['times']);
                                            ?>
                                    </span>

                                </td>
                            </tr>

                            <?php } } ?>
                        </tbody>
</table>
<script>
function showbtn1(id) {
    $('#on' + id).hide();
    $('#off' + id).show();

}

function showbtn2(id) {
    $('#on' + id).show();
    $('#off' + id).hide();
}

function formatTime(time) {
    return time < 10 ? '0' + time : time;
}
<?php
if(isset($time_track)){
$from=$time_track->start_time;
$to=date('Y-m-d h:i:s');
$datetime1 = new DateTime($from);
$datetime2 = new DateTime($to);
$diff = $datetime2->diff($datetime1);
$seconds = $diff->s + ($diff->i * 60) + ($diff->h * 3600) + ($diff->days * 86400);
$taskid=$time_track->task_id; ?>
startTimer(0, 0, <?= $seconds ?>, <?= $taskid ?>);
$('#tracking-times').addClass("btn btn-success");
<?php }
?>



var timerInterval;

function startTimer(hours, minutes, seconds, id) {
    var tseconds = hours * 3600 + minutes * 60 + seconds;

    timerInterval = setTimeout(function() {
        var hours = formatTime(Math.floor(tseconds / 3600));
        var minutes = formatTime(Math.floor((tseconds % 3600) / 60));
        var seconds = formatTime(tseconds % 60);

        var timeString = hours + ':' + minutes + ':' + seconds;
        tseconds++;
        $('#tracking-times').text(timeString)
        startTimer(Math.floor(tseconds / 3600), Math.floor((tseconds % 3600) / 60), tseconds % 60);
    }, 1000);
}

function startTask(id, time) {
    $.ajax({
        type: "POST",
        url: "{{ route('task.start-task') }}",
        data: {
            id: id,
            _token: '{{csrf_token()}}'
        },
        success: function(data) {
            startTimer(0, 0, 1, id);
            $('#tracking-times').addClass("btn btn-success");
        },
        error: function(data, textStatus, errorThrown) {},
    });

}

function endTask(id) {
    $.ajax({
        type: "POST",
        url: "{{ route('task.end-task') }}",
        data: {
            id: id,
            _token: '{{csrf_token()}}'
        },
        success: function(data) {
            clearTimeout(timerInterval);
        },
        error: function(data, textStatus, errorThrown) {},
    });
}
</script>

  public function viewTask(){
    $time_track=Track::where('tracker_on','1')
                    ->Where('user_id',Auth::user()->id)
                    ->first();
    $task=Task::WHERE('assigned_to',Auth::user()->id)->get();
    $today=date('Y-m-d');
    $taskArr=array();
    foreach($task as $key=>$row){
        $users=DB::select("select GROUP_CONCAT(u.name) as names from users u WHERE id IN($row->assigned_to)");
        $times=DB::select("SELECT SUM(TIMESTAMPDIFF(SECOND, start_time, end_time)) AS difference,tracker_on FROM `track` WHERE task_id='$row->id'  GROUP BY task_id");
        $track=DB::select("SELECT tracker_on FROM `task_track` WHERE tracker_on='1' AND task_id='$row->id'");
        $taskArr[$key]['due_date']=date('d-m-Y',strtotime($row->due_date));
        if($row->due_date < $today && $row->status<4 ){
            $exp=1;
        }else{ $exp=0;}
        $taskArr[$key]['expired']=$exp;
        $taskArr[$key]['due']=$row->due_time;
        $taskArr[$key]['id']=$row->id;
        $taskArr[$key]['summary']=$row->task_summary;
        $taskArr[$key]['description']=$row->task_description;
        $taskArr[$key]['recurring']=$row->recurring;
        $taskArr[$key]['assigned']=isset($users) ? $users:'N/A';
        $taskArr[$key]['recurring_options']=$row->recurring_options;
        $taskArr[$key]['status']=$row->status;
        $taskArr[$key]['date_recurring']=$row->date_recurring;
        $taskArr[$key]['comment']=$row->comment;
        $taskArr[$key]['user']=$row->assigned_to;
        $taskArr[$key]['times']=isset($times[0]->difference) ? $times[0]->difference:"00:00:00";
        $taskArr[$key]['track']=isset($track[0]->tracker_on) ? $track[0]->tracker_on:0;
    }
    
    return view('task.view-task',compact('taskArr','time_track'));
  }

<style>
#track-btn {
    position: fixed;
    height: 38px;
    bottom: 40px;
    right: 218px;
    background-color: #0C9;
    font-weight: 600;
    border-radius: 6pxpx;
    text-align: center;
    box-shadow: 2px 2px 3px #999;
}
</style>






22 October 2021

PHP ARRAY

 GROUP BY ARRAY AND INCLUDE ROW VALUES TO THIS ARRAY

 public function getProducts($id='')

{

$this->db->select("pi.image as image,p.product_name,p.id as productId,p.product_code,p.price,p.product_size,c.c_name as category_name,p.status");
$this->db->from("products as p");
$this->db->join('product_images as pi','pi.product_id=p.id','left');
$this->db->join("category as c", "c.id=p.category_id", "left");
$this->db->where('p.status', 1);
    if(!empty($id)){
        $this->db->where('p.id',$id);
      }
$results = $this->db->get()->result();
$productArray = $imageArray = array();
        foreach($results as $key=> $row)
 
{
                 $productId = $row->productId;
                  if (!isset($productArray[$productId])) {
                 $productArray[$productId] = (array) $row;
                 $productArray[$productId]['images'] = [];
             }
           $productArray[$productId]['images'][] = $row->image;
}
return $productArray;
}


   OutPut :



GROUPBY ARRAY LIKE CATEGORY


foreach($permissions as $row)
{
   
    $name = $row['name'] ?? 'N/A';

    $categoryArray[$name][] = $row;

    if (!isset($
categoryArray[$name])) {
       $
categoryArray[$name] = [];
     }

}

Output : like 

Fruits:
    0->Apple
    1->orange
    2->mango
Flowers:
   0->jasmine
   1->sunflower


 

08 September 2021

Node JS using CRUD with MySql

 

Node JS

 

Node js Using CRUD Operation With Mysql DB

Prerequisites:

1.     Nodejs

2.     Expressjs

3.     Mysql

4.     EJS

5.     Body Parser

Steps:

·        Create Directory Mkdir node_crud

·        Npm init –y  Type this command automatically  Created Package.json

·        Then Install Dependencies

·        Npm install –save express ejs body-parser mysql nodemon

·        Switch root directory create index.js or else whatever you want file name

·        Write some codes in index.js file

 

Index.js:

const express=require('express');

const mysql=require('mysql');

const bodyparser=require('body-parser');

const ejs=require('ejs');

const path=require('path');

const session = require('express-session');

const app = express();


const conn=mysql.createConnection({

    host:'localhost',

    username:'root',

    password:'',

    database:'test'

});


conn.connect(function(error){

if(!error){

console.log("conncetion succesfully");

}else{

    console.log(error);

}

})



app.set('views', path.join(__dirname, 'public'));

app.set('view engine','ejs');

app.use(bodyparser.json());

app.use(bodyparser.urlencoded({ extended: false }));


app.use(session({secret:"Helloworld@123;"}));



app.get("/",(req,res)=>{

    var sql="select * from booking";

   // var cnt=req.session.cnt++;

    var query=conn.query(sql,(err,rows)=>{

        res.render('index',{           

            data:rows,

           //pagecnt:cnt

        });

    });


})


app.get("/signup",(req,res)=>{

    res.render('signup');

    })



app.get("/login",(req,res)=>{

res.render("login");

});


app.post("/authenticate",(req,res)=>{

var name=req.body.title;

var no=req.body.mobile_no;

var sql="select * from booking where Title='"+name+"' and mobile='"+no+"'";

var query=conn.query(sql,(err,result)=>{

    if(result.length > 0 ){

req.session.username=name;        

res.send("Valid Credentials welcome Mr/Ms  "+req.session.username); 

    }else{

        res.send("Not Valid Credentials");

    }

})

});


app.post("/register",(req,res)=>{

var title=req.body.title;

var mobile=req.body.mobile_no;

var start=req.body.start;

var end=req.body.end;

var sql="insert into booking values(NULL,'"+title+"','"+mobile+"','"+start+"','"+end+"')";

var query=conn.query(sql,(err,result)=>{

    res.redirect("/");

})


});





app.post("/update",(req,res)=>{

    var title=req.body.title;

    var mobile=req.body.mobile_no;

    var start=req.body.start;

    var end=req.body.end;

    var id=req.body.id;

    var sql="update booking set Title='"+title+"',mobile='"+mobile+"',Start='"+start+"',End='"+end+"' where Id='"+id+"'"

   

    var query=conn.query(sql,(err,result)=>{

        res.redirect("/");

    })

    

    });


app.get("/edit/:id",(req,res)=>{

var id=req.params.id;

var sql="select * from booking where Id='"+id+"'";

var query=conn.query(sql,(err,records)=>{

    res.render("edit",{

        user_details:records

    })

    //res.send(records);

})

});


app.get("/delete/:id",(req,res)=>{

 var id=req.params.id;

 var sql="delete from booking where Id='"+id+"'";

var query=conn.query(sql,(err,results)=>{


res.redirect("/");

});

});



app.listen(2000,()=>{

    console.log("running");

})

// HTML files

Index.ejs:

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta http-equiv="X-UA-Compatible" content="IE=edge">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>

    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>

    

</head>

<body>


    <div class="container">

        <h2 class="text-center">Crud Using Nodejs</h2>

        <br>

        <br>

        

        <a href="/signup" class="btn btn-success">Register</a>

        <a href="/login" class="btn btn-info">Login</a>

        <table class="table table-responsive table-striped">

          <thead>

            <tr>

              <th>Title</th>

              <th>Mobile</th>

              <th>Start</th>

              <th>End</th>

              <th>Action</th>

              <th>Action</th>

            </tr>

          </thead>

          <tbody>

            <% data.forEach(function(row){%> 

            <tr>

              <td><%= row.Title %></td>

              <td><%= row.mobile %></td>

              <td><%= row.Start %></td>

              <td><%= row.End %></td>

              <td><a href="/edit/<%= row.Id %>" class="btn btn-info">Edit</a></td>

              <td><a href="/delete/<%= row.Id %>" class="btn btn-danger">Delete</a></td>

            </tr>

            <% }); %>

          </tbody>

        </table>

      </div>

      

   

    

        

    

</body>

</html>


Register.ejs:

<!DOCTYPE html>

<html lang="en">

<head>

  <title>Bootstrap Example</title>

  <meta charset="utf-8">

 

</head>

<body>


<div class="container">

  <h2>Signup form </h2>

  <form action="/register" method="post">

    <div class="form-group">

      <label for="email">Title:</label>

      <input type="text" class="form-control" id="email" placeholder="Enter Title" name="title">

    </div>

    <div class="form-group">

      <label for="pwd">Mobile:</label>

      <input type="number" class="form-control" id="pwd" placeholder="Enter Mobile" name="mobile_no">

    </div>

     <div class="form-group">

       <label>Start</label> 

       <input type="date" name="start" class="form-control" />

     </div>

     <div class="form-group">

        <label>End</label> 

        <input type="date" name="end" class="form-control" />

      </div>

    <button type="submit" class="btn btn-primary">Submit</button>

  </form>

</div>


</body>

</html>


Edit.ejs:

<!DOCTYPE html>

<html lang="en">

<head>

  <title>Bootstrap Example</title>

  <meta charset="utf-8">


</head>

<body>


<div class="container">

  <h2>Update form </h2>

  <form action="/update" method="post">

    <div class="form-group">

      <label for="email">Title:</label>

      <input type="hidden" name="id" value="<%= user_details[0]['Id'] %>" />

      <input type="text" value="<%= user_details[0]['Title'] %>" class="form-control" id="email" placeholder="Enter Title" name="title">

    </div>

    <div class="form-group">

      <label for="pwd">Mobile:</label>

      <input type="number" value="<%= user_details[0]['mobile'] %>" class="form-control" id="pwd" placeholder="Enter Mobile" name="mobile_no">

    </div>

     <div class="form-group">

       <label>Start</label> 

       <input type="date" name="start" value="<%= user_details[0]['Start'] %>"  class="form-control" />

     </div>

     <div class="form-group">

        <label>End</label> 

        <input type="date" name="end" value="<%= user_details[0]['End'] %>" class="form-control" />

      </div>

    <button type="submit" class="btn btn-primary">Publish</button>

  </form>

</div>


</body>

</html>



File Directory Structure:
       Root
          Node_modules
          index.js
          package.json
          Public
               edit.ejs
              index.ejs             
              register.ejs
              
Then Run Node index.js

 

 

 

 

 

 

Jquery or Javascript Start Exam Time

 <script> function startTimer() {      var date = "<?php echo $date ?>"; // dynamic date      var time = "<?...