<?php
require('includes/header.php');

   include('connection.php');
 
?>
<!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>
	
   
      <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/style1.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;
}



/*
@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 :"; }
	}

</style>
</head>
<body>




<?php

if (isset($_POST['editemployee'])){
//if(count($_POST)>0) {
mysqli_query($conn,"UPDATE employee set Id='" . $_POST['id'] . "',
 ProjectName='" . $_POST['ProjectName'] . "',
 ContactName='" . $_POST['ContactName'] . "',
 Address='" . $_POST['Address'] . "' ,
 Email='" . $_POST['Email'] . "',
 PhoneNo='" . $_POST['PhoneNo'] . "'
 FileName='" . $_POST['FileName'] . "'
 EUserId ='" . $_SESSION['UserId '] . "'
 WHERE Id='" . $_POST['id'] . "'");
$message = "Record Modified Successfully";
}
$result = mysqli_query($conn,"SELECT * FROM employee WHERE id ='" . $_GET['Id'] . "'AND EUserId ='" . $_SESSION['UserId'] . "'");
$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="EmployeeEdit.php?Id=<?php echo $row["Id"]; ?>" class="btn btn-primary btn-rounded"><i class="fa fa-plus"></i> Edit Employee</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='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="staff-msg"><a href="chat.html" class="btn btn-primary">Send Message</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">Emp 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" id="myTab">
        <li class="nav-item">
            <a href="#sectionA" class="nav-link active" data-toggle="tab">Abuot Salary</br>বেতন দেওয়া পাওনা  </a>
        </li>
        <li class="nav-item">
            <a href="#sectionB" class="nav-link" data-toggle="tab">Salary</br>বেতন তালিকা </a>
        </li>
        <li class="nav-item">
            <a href="#sectionC" class="nav-link" data-toggle="tab">Monthly filter</br>মাসিক খোঁজ </a>
        </li>
    </ul>
    <div class="tab-content">
        <div id="sectionA" class="tab-pane fade in active">
            <div class="row">
                    <div class="">
                        <div class="card-box">
                            <h3 class="card-title">Salary Informations</br> বেতন তথ্য</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 ='" . $_GET['Id'] . "'AND TUserId ='" . $_SESSION['UserId'] . "'";
		$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 ='" . $_GET['Id'] . "'AND TUserId ='" . $_SESSION['UserId'] . "'";
		$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 ='" . $_GET['Id'] . "'AND TUserId ='" . $_SESSION['UserId'] . "'";
		$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="sectionB" 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</br>তারিখ </th>
											<th>Salary</br>বেতন </th>
                                            <th>PayAmount</br>দেওয়া </th>
                                           
                                            <th class="kkk">ProjectName</br>কাজের স্থান</th>

                                           
											<th class="text-right">Action</br>সংশোধণ</th>
                                        </tr>
                                    </thead>
                                    <tbody class="ggg">
									 <?php 
								// filtter employee_transations
									$sqli=$conn->query("SELECT project.ProjectName, TUserId, PaymentDate, Salary,PayAmount, project.Id, employee_transations.Id from employee_transations JOIN project on employee_transations.ProjectName=project.Id
										WHERE EmployeeName ='" . $_GET['Id'] . "'AND TUserId ='" . $_SESSION['UserId'] . "'");
									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="sectionC" 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>
			<button class="btn btn-primary glyphicon glyphicon-print" onclick="window.print()">  Print</button>
		</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 TUserId ='" . $_SESSION['UserId'] . "' 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 TUserId ='" . $_SESSION['UserId'] . "' 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 TUserId ='" . $_SESSION['UserId'] . "' 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 TUserId ='" . $_SESSION['UserId'] . "' 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 TUserId ='" . $_SESSION['UserId'] . "' 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>
</div>
						

</div>
</div>
</div>
</div>
</div>




    <div class="sidebar-overlay" data-reff=""></div>
    <script src="assets/js/jquery-3.2.1.min.js"></script>
	<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="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>
<br/>

</body>
</html>
