<?php
require_once('connection.php');



if(!isset($_SESSION)) 
    { 
   session_start();
	}
   //include('wellcome.php');
	if(!empty($_SESSION['Id'])){
?>
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=0">
    <link rel="shortcut icon" type="image/x-icon" href="upload/icon.png">
    <title>Employee Profile</title>
	  <!-- Bootstrap CSS CDN -->
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <!-- Our Custom CSS -->

  <!-- Scrollbar Custom CSS -->
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/malihu-custom-scrollbar-plugin/3.1.5/jquery.mCustomScrollbar.min.css">
  
  


    

    <!-- Bootstrap Core CSS -->
    
	

    <!-- MetisMenu CSS -->
    <link href="css/plugins/metisMenu/metisMenu.min.css" rel="stylesheet">

    <!-- DataTables CSS -->
    <link href="css/plugins/dataTables.bootstrap.css" rel="stylesheet">

    <!-- Custom CSS -->
    <link href="css/sb-admin-2.css" rel="stylesheet">
    <link href="css/custom.css" rel="stylesheet">
    <link href="js/plugins/fullcalender/fullcalendar.css" rel="stylesheet">

     <!-- Datepicker CSS -->
     <link href="css/datepicker.css" rel="stylesheet">

    <!-- Morris Charts CSS -->
    <link href="css/plugins/morris.css" rel="stylesheet">

    <!-- Custom Fonts -->
    <link href="font-awesome-4.1.0/css/font-awesome.min.css" rel="stylesheet" type="text/css">

    <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
        <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
        <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
    <![endif]-->

     <script src="js/jquery-1.11.0.js"></script>
     <script src="js/plugins/metisMenu/metisMenu.js"></script>
	
   
      <link rel="stylesheet" type="text/css" href="assets/css/font-awesome.min.css">
    <link rel="stylesheet" type="text/css" href="assets/css/select2.min.css">
    <link rel="stylesheet" type="text/css" href="assets/css/dataTables.bootstrap4.min.css">
    <link rel="stylesheet" type="text/css" href="assets/css/bootstrap-datetimepicker.min.css">
    <link rel="stylesheet" type="text/css" href="assets/css/style.css">

<style>
.card-box {
    background-color: #fff;
    border-radius: 4px;
    margin-bottom: 30px;
    padding: 0px;
    position: relative;
    box-shadow: 0 1px 2px 0 rgb(0 0 0 / 10%);
}

#myTable tr:nth-child(even) td{
  background-color: #f2f2f2;
}
.doc-prof{
	background-color: green;
}
.nav-item{
	background-color: #07f5aa;
	 border-radius: 10px;
	
}

.page-header{

	text-align: center;
	background-color: #2780e3;
	width: 100%;
	margin-left: 0%;
	}
  .page-title {
    color: #f7f6f5;
    font-size: 50px;
    font-weight: normal;
    margin-bottom: 10px;
}
	.page {
    color: #2780e3;
    font-size: 50px;
    font-weight: normal;
    margin-bottom: 10px;
}
.profile-view .profile-img .avatar {
    font-size: 24px;
    height: 150px;
    line-height: 150px;
    margin: 0;
    width: 150px;
}


/*
@media screen and (min-device-width: 600px) {
  td.hhh, th.hhh {display:none; }
  
  
  }
  	.page-header{

	text-align: center;
	background-color: green;
	width: 100%;
	margin-left: 0%;
	}
  

	

  
    @media screen and (max-width: 600px) {
 tbody.ggg, thead.ggg {
    font-size:2.5vw;
  }
}

@media screen and (max-width: 500px) {
  td.kkk, th.kkk {display:none; }
  tbody.ggg, thead.ggg {
    font-size:2.5vw;
  }
	}
	Max width before this PARTICULAR table gets nasty. This query will take effect for any screen smaller than 760px and also iPads specifically.
	*/
	

	
	@media
	  only screen 
    and (max-width: 400px), (min-device-width: 600px) 
    and (max-device-width: 500px)  {

		/* Force table to not be like tables anymore */
		table, thead, tbody, th, td, tr {
			display: block;
		}

		/* Hide table headers (but not display: none;, for accessibility) */
		thead tr {
			position: absolute;
			top: -9999px;
			left: -9999px;
		}
.content {
    padding: 0 5px;
}
    tr {
      margin: 0 0 1rem 0;
	  
    }
      
    tr:nth-child(odd) {
      background: #ccc;
    }
    
		td {
			/* Behave  like a "row" */
			border: none;
			border-bottom: 1px solid #eee;
			position: relative;
			padding-left: 50%;
			font-size:2.7vw;
			
		}

		td:before {
			/* Now like a table header */
			position: relative;
			/* Top/left values mimic padding */
			top: 0;
			left: 6px;
			width: 45%;
			padding-right: 20px;
			white-space: nowrap;
			font-size:3vw;
			
		}


		/*
		Label the data
    You could also use a data-* attribute and content for this. That way "bloats" the HTML, this way means you need to keep HTML and CSS in sync. Lea Verou has a clever way to handle with text-shadow.
		*/
		td:nth-of-type(1):before { content: "PaymentDate : ";}
		td:nth-of-type(2):before { content: "Salary :"; }
		td:nth-of-type(3):before { content: "PayAmount :"; }
		td:nth-of-type(4):before { content: "ProjectName :"; }
		td:nth-of-type(5):before { content: "Tran_Id :"; }
		td:nth-of-type(6):before { content: "Operation :"; }
		td:nth-of-type(7):before { content: "Operation :"; }
	}
      @import "https://fonts.googleapis.com/css?family=Poppins:300,400,500,600,700";
    body {
      font-family: 'Poppins', sans-serif;
      background: #fafafa;
    }
    
    p {
      font-family: 'Poppins', sans-serif;
      font-size: 1.1em;
      font-weight: 300;
      line-height: 1.7em;
      color: #999;
    }
    
    a,
    a:hover,
    a:focus {
      color: inherit;
      text-decoration: none;
      transition: all 0.3s;
    }
    
    .navbar {
      padding: 15px 10px;
      background: #fff;
      border: none;
      border-radius: 0;
      margin-bottom: 40px;
      box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.1);
    }
    
    .navbar-btn {
      box-shadow: none;
      outline: none !important;
      border: none;
    }
    
    .line {
      width: 100%;
      height: 1px;
      border-bottom: 1px dashed #ddd;
      margin: 40px 0;
    }
    /* ---------------------------------------------------
    SIDEBAR STYLE
----------------------------------------------------- */
    
    #sidebar {
      width: 250px;
      position: fixed;
      top: 0;
      left: 0;
      height: 100vh;
      z-index: 999;
      background: #7386D5;
      color: #fff !important;
      transition: all 0.3s;
    }
    
    #sidebar.active {
      margin-left: -250px;
    }
    
    #sidebar .sidebar-header {
      padding: 5px;
	   width: 250px;
	   height: 80px;
      background: green;
    }
    
    #sidebar ul.components {
      padding: 20px 0;
      border-bottom: 1px solid #47748b;
    }
    
    #sidebar ul p {
      color: #fff;
      padding: 10px;
    }
    
    #sidebar ul li a {
      padding: 10px;
      font-size: 1.1em;
      display: block;
      color:white;
    }
	
	
	   #sidebar ul li i {
  
      color:#008000;
	
    }
    
    #sidebar ul li a:hover {
      color: #7386D5;
      background: #fff;
    }
    
    #sidebar ul li.active>a,
    a[aria-expanded="true"] {
      color: #fff;
      background: #6d7fcc;
    }
    
    a[data-toggle="collapse"] {
      position: relative;
    }
    
    a[aria-expanded="false"]::before,
    a[aria-expanded="true"]::before {
      content: '\e259';
      display: block;
      position: absolute;
      right: 20px;
      font-family: 'Glyphicons Halflings';
      font-size: 0.6em;
    }
    
    a[aria-expanded="true"]::before {
      content: '\e260';
    }
    
    ul ul a {
      font-size: 0.9em !important;
      padding-left: 30px !important;
      background: #6d7fcc;
    }
    
	
	
    ul.CTAs {
      padding: 20px;
    }
    
    ul.CTAs a {
      text-align: center;
      font-size: 0.9em !important;
      display: block;
      border-radius: 5px;
      margin-bottom: 5px;
    }
    
    a.download {
      background: #fff;
      color: #7386D5;
    }
    
    a.article,
    a.article:hover {
      background: #6d7fcc !important;
      color: #fff !important;
    }
    /* ---------------------------------------------------
    CONTENT STYLE
----------------------------------------------------- */
    
    #content {
      width: calc(100% - 250px);
      padding: 30px;
      min-height: 20vh;
      transition: all 0.3s;
      position: absolute;
      top: 0;
      right: 0;
    }

    
    #content.active {
      width: 100%;
    }
    /* ---------------------------------------------------
    MEDIAQUERIES
----------------------------------------------------- */
    
    @media (max-width: 800px) {
      #sidebar {
        margin-left: -250px;
      }
      #sidebar.active {
        margin-left: 0;
      }
      #content {
        width: 100%;
      }
      #content.active {
        width: calc(100% - 250px);
      }
      #sidebarCollapse span {
        display: none;
      }
    }
  
  </style>
  

</head>
<body>




<?php
// connect to the database
    include('connection.php');

if (isset($_POST['editemployee'])){
//if(count($_POST)>0) {
mysqli_query($conn,"UPDATE employee set Id='" . $_SESSION['Id'] . "',
 ProjectName='" . $_POST['ProjectName'] . "',
 ContactName='" . $_POST['ContactName'] . "',
 Address='" . $_POST['Address'] . "' ,
 Email='" . $_POST['Email'] . "',
 PhoneNo='" . $_POST['PhoneNo'] . "'
 FileName='" . $_POST['FileName'] . "'
 WHERE Id='" . $_SESSION['Id'] . "'");
$message = "Record Modified Successfully";
}
$result = mysqli_query($conn,"SELECT * FROM employee WHERE id='" . $_SESSION['Id'] . "'");
$row= mysqli_fetch_array($result);

?>

 <div id="content">
<div class="table-responsive-md">
<div  id="mob" style="margin-top: 40px">

		<div class="">
            <div class="content">
                <div class="row">
                    <div class="col-sm-7 col-6">
                        <h4 class="page-title"><?php echo $row['EmployeeName']; ?></h4>
                    </div>

                    <div class="col-sm-5 col-6 text-right m-b-30">
                        <a href="logout.php" class="btn btn-primary btn-rounded"><i class="fa fa-plus"></i> logout</a>
                    </div>
                </div>
                <div class="card-box profile-header">
                    <div class="row">
                        <div class="col-md-12">
                            <div class="profile-view">
                                <div class="profile-img-wrap">
                                    <div class="profile-img">
                                        <a href="#"><img class="avatar" src='https://emp.powerlinksctg.com/EmployeeImage/<?php echo $row['FileName']; ?>' alt=""></a>
                                    </div>
                                </div>
                                <div class="profile-basic">
                                    <div class="row">
                                        <div class="col-md-5">
                                            <div class="profile-info-left">
                                                <h3 style="padding: 10px; font-weight:bold;" class="user-name m-t-0 mb-0"><?php echo $row['EmployeeName']; ?></h3>
                                                <small class="text-muted"><?php echo $row['JobTitle']; ?></small>
                                                
                                                <div class="doc-prof"><a style="padding: 10px;  font-weight:bold;"  href="Employee_Tran_Print.php?Id=<?php echo $row["Id"]; ?>" target="_blank"  class="btn btn-primary btn-rounded glyphicon glyphicon-print"> Invice Print</a></div>
                                            </div>
                                        </div>
                                        <div class="col-md-7">
                                            <ul class="personal-info">
                                                <li>
                                                    <span class="title">Phone:</span>
                                                    <span class="text"><a href="#"><?php echo $row['PhoneNo']; ?></a></span>
                                                </li>
                                                <li>
                                                    <span class="title">Email:</span>
                                                    <span class="text">N/A</a></span>
                                                </li>
                                                <li>
                                                    <span class="title">Employee ID:</span>
                                                    <span class="text"><?php echo $row['Id']; ?></span>
                                                </li>
                                                <li>
                                                    <span class="title">Address:</span>
                                                    <span class="text"><?php echo $row['Address']; ?></span>
                                                </li>
                                                <li>
                                                    <span class="title">Salary:</span>
                                                    <span class="text"><?php echo $row['Salary']; ?></span>
                                                </li>
                                            </ul>
                                        </div>
                                    </div>
                                </div>
                            </div>                        
                        </div>
                    </div>
                </div>
				<br/>
<hr>
<div class="profile-tabs">
					<ul class="nav nav-tabs">
					
					<li class="nav-item"><a class="nav-link active" href="#home" data-toggle="tab">About Salary</a></li>
				
						<li class="nav-item"><a class="nav-link" href="#menu1" data-toggle="tab">Salary</a></li>
						<li class="nav-item"><a class="nav-link" href="#menu2" data-toggle="tab">Monthly filter</a></li>
						<li class="nav-item"><a class="nav-link" href="#menu3" data-toggle="tab">.......</a></li>
					</ul>

  <div class="tab-content">
    <div id="home" class="tab-pane fade in active">
      <div class="row">
                    <div class="">
                        <div class="card-box">
                            <h3 class="card-title">Salary Informations</h3>
                            <div class="experience-box">
                                <ul class="experience-list">
                                    <li>
                                        <div class="experience-user">
                                            <div class="before-circle"></div>
                                        </div>
                                        <div class="experience-content">
                                            <div class="timeline-content">
                                                <a href="#/" class="name">	<?php
		//sum of amunt filtter project_transations
		$sql = "SELECT  SUM(Salary) from employee_transations WHERE EmployeeName ='" . $_SESSION['Id'] . "'";
		$result = $conn->query($sql);
		//display data on web page
		while($row1 = mysqli_fetch_array($result)){
		echo " Total Salary: ". $row1['SUM(Salary)'];
		echo "<br>";
		}
	?></a>

                                            </div>
                                        </div>
                                    </li>
                                    <li>
                                        <div class="experience-user">
                                            <div class="before-circle"></div>
                                        </div>
                                        <div class="experience-content">
                                            <div class="timeline-content">
                                                <a href="#/" class="name"><?php	
		//sum of amunt filtter PayAmount
		$sql = "SELECT  SUM(PayAmount) from employee_transations WHERE EmployeeName='" . $_SESSION['Id'] . "'";
		$result = $conn->query($sql);
		//display data on web page
		while($row1 = mysqli_fetch_array($result)){
		echo "Pay Amount: ". $row1['SUM(PayAmount)'];
		echo "<br>";
	}
	?></a>

                                            </div>
                                        </div>
                                    </li>
                                    <li>
                                        <div class="experience-user">
                                            <div class="before-circle"></div>
                                        </div>
                                        <div class="experience-content">
                                            <div class="timeline-content">
                                                <a href="#/" class="name">	
		<?php	
		//sum of amunt filtter Salary
		$sql = "SELECT  SUM(Salary-PayAmount) from employee_transations WHERE EmployeeName='" . $_SESSION['Id'] . "'";
		$result = $conn->query($sql);
		//display data on web page
		while($row1 = mysqli_fetch_array($result)){
		echo " Total Blance: ". $row1['SUM(Salary-PayAmount)'];
		echo "<br>";
	}
	?></a>

                                            </div>
                                        </div>
                                    </li>
                                </ul>
                            </div>
                        </div>
						</div>	
                    </div>
    </div>
    <div id="menu1" class="tab-pane fade">
<div class="">
            <div class="content">
			<div class="page-header">
                <div class="row">
                    <div class="col-sm-4 col-3">
                        <h4 class="page-title">Transations List</h4>
                    </div>
					
                    <div class="col-sm-3 col-9 text-right m-b-20">
                       <label class="page-title"><h3>search</h3></label>
<input type="text" id="myInput" onkeyup="myFunction()" placeholder="Search for names.." title="Type in a name">
</div>
<div class="doc-prof"><a style="padding: 10px; font-weight:bold;"  href="Employee_Tran_Print.php?Id=<?php echo $row["Id"]; ?>" target="_blank"  class="btn btn-primary btn-rounded glyphicon glyphicon-print"> Invice Print</a></div>
                    </div>
                    </div>
                </div>
				<div class="row">
					<div class="col-md-12">
						<div class="table-responsive">

						
									<table id="myTable" class="table table-border table-striped custom-table datatable mb-0">
                                    <thead class="ggg">
                                        <tr>
                                            <th>PaymentDate</th>
											<th>Salary</th>
                                            <th>PayAmount</th>
                                            <th class="kkk">ProjectName</th>

                                           
											<th class="text-right">Action</th>
                                        </tr>
                                    </thead>
                                    <tbody class="ggg">
									 <?php 
								// filtter employee_transations
									$sqli=$conn->query("SELECT project.ProjectName, Remarks, PaymentDate, Salary,PayAmount, project.Id, employee_transations.Id from employee_transations JOIN project on employee_transations.ProjectName=project.Id
										WHERE EmployeeName ='" . $_SESSION['Id'] . "'");
									foreach ($sqli as $key => $employee_transations) { 

								?>
                                        <tr>
									<td><?php echo $employee_transations ['PaymentDate'];?></td>
									
									<td><?php echo $employee_transations ['Salary']; ?></td>
									<td><?php echo $employee_transations ['PayAmount']; ?></td>
									<td class="kkk"><?php echo $employee_transations ['ProjectName']; ?></td>

									
                                           
											<td class="text-right">
											<div class="dropdown dropdown-action">
												<a href="#" class="action-icon dropdown-toggle" data-toggle="dropdown" aria-expanded="false"><i class="fa fa-ellipsis-v"></i></a>
												<div class="dropdown-menu dropdown-menu-right">
													<li>
													<a class="dropdown-item" href="employee_tran_edit.php?Id=<?php echo $employee_transations["Id"]; ?>"><i class="btn btn-primary btn-xs glyphicon glyphicon-edit"></i> Edit</a>
													</li>
													<li>
													<a class="dropdown-item" href="employee_tran_display1.php?Id=<?php echo $employee_transations["Id"]; ?>"><i class="btn btn-primary btn-xs glyphicon glyphicon-eye-open"></i> view</a>
													
													</li>
													<li>
													<a class="dropdown-item" href="#" data-toggle="modal" data-target="#delete_patient"><i class="fa fa-trash-o m-r-5"></i> Delete</a>
													</li>
												</div>
											</div>
										</td>
                                        </tr>
                                <?php } ?>        
                                    </tbody>

                                </table>
								</div>
                            </div>
                        </div>
                    </div>
				</div>
				
            <div id="menu2" class="tab-pane fade">
            <h3>Month Filtter</h3>

<div>
    <form method="POST">
        <label>Month: </label>
            <select name="month">
			<option value="<?php echo date('m');?>"><?php echo date("F", strtotime('m'));?></option>
            <?php
 
                for ($i = 1; $i <= 12; $i++)
                {
                    $month = date('F', mktime(0, 0, 0, $i, 1, 2011));
                    ?>
                    <option value="<?php echo $i; ?>"><?php echo $month; ?></option>
                    <?php
                }
 
            ?>
            </select>
 
        <label>Year: </label>
            <select name="year">
			<option value="<?php echo date("Y"); ?>"><?php echo date("Y");?></option>
            <?php
                for($n=2014;$n<=2026;$n++){
                    ?>
					
                    <option value="<?php echo $n; ?>"><?php echo $n; ?></option>
                    <?php
                }
            ?>
            </select>
     
   			<button class="btn btn-primary" type="submit"  name="submit"><span class="glyphicon glyphicon-search"></span> Get Data</button> <a href="displayproject.php" type="button" class="btn btn-success"><span class = "glyphicon glyphicon-refresh"><span></a>
			<a href="Employee_monthly_Print.php?Id=<?php echo $row["Id"]; ?>" target="_blank"  class="btn btn-primary btn-rounded glyphicon glyphicon-print">Print</a>
		</form>
		</div>
	
					<div class="col-md-12">
						<div class="table-responsive">
			
						
					

						
<table id="" class="table table-bordered">
				<thead class="alert-info">
				<th role="columnheader" style="font-weight:bold; text-align: center;"  class="alert-info" colspan="6" >Salary Transations</th>
                                        <tr class="alert-info">
                                            <th>Date</th>
						<th>Salary</th>
						<th>Payment</th>
						<th>Project Name</th>
						<th>Note</th>
                                        </tr>
                                    </thead>
                                    <tbody>
        <?php
            if (isset($_POST['submit'])){
                include('connection.php');
                $month=$_POST['month'];
                $year=$_POST['year'];
		$query=mysqli_query($conn, "SELECT project.ProjectName, Remarks, PaymentDate, Salary,PayAmount, project.Id, employee_transations.Id from employee_transations JOIN project on employee_transations.ProjectName=project.Id WHERE EmployeeName ='" . $_GET['Id'] . "' AND month(PaymentDate)='$month' and year(PaymentDate)='$year'") or die(mysqli_error());
		$row=mysqli_num_rows($query);
		if($row>0){
			while($fetch=mysqli_fetch_array($query)){
?>
	<tr>
		<td><?php echo $fetch['PaymentDate']?></td>
		 
		<td><?php echo $fetch['Salary']?></td>
		<td><?php echo $fetch['PayAmount']?></td>
		<td><?php echo $fetch['ProjectName']?></td>
		<td><?php echo $fetch['Remarks']?></td>
	</tr>
	
<?php
			}
		}else{
			echo'
			<tr>
				<td class="alert-info" colspan = "5"><h3 style="font-weight:bold; text-align: center;"><center ><svg xmlns="http://www.w3.org/2000/svg" width="25" height="25" fill="currentColor" class="bi bi-calendar-x-fill" viewBox="0 0 16 16">
  <path d="M4 .5a.5.5 0 0 0-1 0V1H2a2 2 0 0 0-2 2v1h16V3a2 2 0 0 0-2-2h-1V.5a.5.5 0 0 0-1 0V1H4V.5zM16 14V5H0v9a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2zM6.854 8.146 8 9.293l1.146-1.147a.5.5 0 1 1 .708.708L8.707 10l1.147 1.146a.5.5 0 0 1-.708.708L8 10.707l-1.146 1.147a.5.5 0 0 1-.708-.708L7.293 10 6.146 8.854a.5.5 0 1 1 .708-.708z"/>
</svg> Record Not Found!</center></h3></td>
			</tr>';
		}
	}else{
		
		
		$query=mysqli_query($conn, "SELECT project.ProjectName, Remarks, PaymentDate, Salary,PayAmount, project.Id, employee_transations.Id from employee_transations JOIN project on employee_transations.ProjectName=project.Id WHERE EmployeeName ='" . $_GET['Id'] . "' AND month(PaymentDate)=month(now()) and year(PaymentDate)=YEAR(now())") or die(mysqli_error());
		while($fetch=mysqli_fetch_array($query))
		{
?>

	<tr>
		<td><?php echo $fetch['PaymentDate']?></td>
		<td><?php echo $fetch['Salary']?></td>
		<td><?php echo $fetch['PayAmount']?></td>
		<td><?php echo $fetch['ProjectName']?></td>
		<td><?php echo $fetch['Remarks']?></td>
		
		
</tr>


<?php
		}
	}
        ?>
        </tbody>
<tr class="alert-info">
     			  		  		<th  style="font-weight:bold; text-align: center;">
		<h4>
	 <span class="different-text-color" style="font-weight:bold;">
	Date: Month-<?php if(isset($_POST["submit"])){echo $_POST["month"];}else{}?></br>/Year-<?php if(isset($_POST["submit"])){echo $_POST["year"];}else{}?></span></h4></th>
			  		<th  style="font-weight:bold; text-align: center;">
		<h4>
	 <span class="different-text-color" style="font-weight:bold;">
	<?php 
	if(ISSET($_POST['submit'])){
		
		$sql = "SELECT  SUM(Salary) from employee_transations WHERE EmployeeName ='" . $_GET['Id'] . "' AND month(PaymentDate)='$month' and year(PaymentDate)='$year'";
		$result = $conn->query($sql);
		//display data on web page
		while($row1 = mysqli_fetch_array($result)){
		echo " Total Salary : ". $row1['SUM(Salary)'];
		echo " ";
	}}
	?></span></h4></th>
		  
		  
		  <th  style="font-weight:bold; text-align: center;">
		<h4>
	 <span class="different-text-color" style="font-weight:bold;">
	<?php 
	if(ISSET($_POST['submit'])){
		
		$sql = "SELECT  SUM(PayAmount) from employee_transations WHERE EmployeeName ='" . $_GET['Id'] . "' AND month(PaymentDate)='$month' and year(PaymentDate)='$year'";
		$result = $conn->query($sql);
		//display data on web page
		while($row1 = mysqli_fetch_array($result)){
		echo " PayAmount : ". $row1['SUM(PayAmount)'];
		echo " ";
	}}
	?></span></h4></th>
		  
		  		  		<th  style="font-weight:bold; text-align: center;">
		<h4>
	 <span class="different-text-color" style="font-weight:bold;">
	<?php 
	if(ISSET($_POST['submit'])){
		
		$sql = "SELECT  SUM(Salary-PayAmount) from employee_transations WHERE EmployeeName ='" . $_GET['Id'] . "' AND month(PaymentDate)='$month' and year(PaymentDate)='$year'";
		$result = $conn->query($sql);
		//display data on web page
		while($row1 = mysqli_fetch_array($result)){
		echo " Total Blance : ". $row1['SUM(Salary-PayAmount)'];
		echo " ";
	}}
	?></span></h4></th>
			  		  		<th  style="font-weight:bold; text-align: center;">
		<h4>
	 <span class="different-text-color" style="font-weight:bold;">
	</span></h4></th>
		  
		 
          
       </tr>
                                </table>
								</div>
                            </div>
                     
						
	
	
	
      

    </div>
    
    <div id="menu3" class="tab-pane fade">
      <h3>Menu 3</h3>
      <p>Eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.</p>
    </div>
  </div>
</div>
						

</div>
</div>
</div>
<?php
	}else{
		header("location:index.php");
	}

?> 




    <div class="sidebar-overlay" data-reff=""></div>
	<script src="assets/js/popper.min.js"></script>
    <script src="assets/js/bootstrap.min.js"></script>
    <script src="assets/js/jquery.dataTables.min.js"></script>
    <script src="assets/js/dataTables.bootstrap4.min.js"></script>
    <script src="assets/js/jquery.slimscroll.js"></script>
    <script src="assets/js/app.js"></script>
	
    <script src="assets/js/jquery-3.2.1.min.js"></script>
<script src="jquery/jquery.min.js"></script>
<script src="js/bootstrap.bundle.min.js"></script>
<script>
function myFunction() {
  var input, filter, table, tr, td, i, txtValue;
  input = document.getElementById("myInput");
  filter = input.value.toUpperCase();
  table = document.getElementById("myTable");
  tr = table.getElementsByTagName("tr");
  for (i = 0; i < tr.length; i++) {
    td = tr[i].getElementsByTagName("td")[0];
    if (td) {
      txtValue = td.textContent || td.innerText;
      if (txtValue.toUpperCase().indexOf(filter) > -1) {
        tr[i].style.display = "";
      } else {
        tr[i].style.display = "none";
      }
    }       
  }
}
</script>


<script>
function sortListDir() {
  var list, i, switching, b, shouldSwitch, dir, switchcount = 0;
  list = document.getElementById("id01");
  switching = true;
  // Set the sorting direction to ascending:
  dir = "asc"; 
  // Make a loop that will continue until no switching has been done:
  while (switching) {
    // start by saying: no switching is done:
    switching = false;
    b = list.getElementsByTagName("tr");
    // Loop through all list-items:
    for (i = 0; i < (b.length - 1); i++) {
      //start by saying there should be no switching:
      shouldSwitch = false;
      /* check if the next item should switch place with the current item,
      based on the sorting direction (asc or desc): */
      if (dir == "asc") {
        if (b[i].innerHTML.toLowerCase() > b[i + 1].innerHTML.toLowerCase()) {
          /* if next item is alphabetically lower than current item,
          mark as a switch and break the loop: */
          shouldSwitch = true;
          break;
        }
      } else if (dir == "desc") {
        if (b[i].innerHTML.toLowerCase() < b[i + 1].innerHTML.toLowerCase()) {
          /* if next item is alphabetically higher than current item,
          mark as a switch and break the loop: */
          shouldSwitch= true;
          break;
        }
      }
    }
    if (shouldSwitch) {
      /* If a switch has been marked, make the switch
      and mark that a switch has been done: */
      b[i].parentNode.insertBefore(b[i + 1], b[i]);
      switching = true;
      // Each time a switch is done, increase switchcount by 1:
      switchcount ++;
    } else {
      /* If no switching has been done AND the direction is "asc",
      set the direction to "desc" and run the while loop again. */
      if (switchcount == 0 && dir == "asc") {
        dir = "desc";
        switching = true;
      }
    }
  }
}
</script>
<script>
$(document).ready(function () {
  $('.date').datetimepicker({
    format: 'MM/DD/YYYY',
    locale: 'en'
  });
</script>

  <!-- jQuery CDN -->
  <script src="https://code.jquery.com/jquery-1.12.0.min.js"></script>
  <!-- Bootstrap Js CDN -->
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
  <!-- jQuery Custom Scroller CDN -->
  <script src="https://cdnjs.cloudflare.com/ajax/libs/malihu-custom-scrollbar-plugin/3.1.5/jquery.mCustomScrollbar.concat.min.js"></script>
</body>
</html>




