<?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>User 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-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 :"; }
	}
	
.page-header{
	border-radius: 20px;
	color: #f9f9f9;
	text-align: center;
	background-color: red;
	width: 100%;
	margin-left: 0%;
	font-weight: bold;
	}

</style>
</head>
<body>




<?php 

if (isset($_POST['edituser'])){
//if(count($_POST)>0) {
mysqli_query($conn,"UPDATE user set UserId='" . $_POST['UserId'] . "',
 FirstName='" . $_POST['FirstName'] . "',
 CompanyName='" . $_POST['CompanyName'] . "',
 Address='" . $_POST['Address'] . "' ,
 Email='" . $_POST['Email'] . "',
 PhoneNumber='" . $_POST['PhoneNumber'] . "'
 Image='" . $_POST['Image'] . "'
 UserImage='" . $_POST['UserImage'] . "'
 UserId ='" . $_SESSION['UserId '] . "'
 WHERE UserId='" . $_POST['UserId'] . "'");
$message = "Record Modified Successfully";
}
$result = mysqli_query($conn,"SELECT * FROM user where UserId ='" . $_SESSION['UserId'] . "'");
$row= mysqli_fetch_array($result);

?>

 <div id="content">
<div class="table-responsive-md">
<div  id="mob" style="margin-top: 40px">
    
    
    <div style="font-weight:bold; text-align: center;"  class="alert-info">
				    <?php
				    if(isset($_GET['msg'])) echo $_GET['msg'];
				    ?>
				</div>

    <div class="">
	<img src='userimage/<?php echo $row ['Image']; ?>' height="100" width="100%">

	</div>
   
		<div class="">
            <div class="content">
                <div class="row">
                    <div class="col-sm-7 col-6">
                        <h4 class="page-title"><?php echo $row['CompanyName']; ?></h4>
                    </div>

                    <div class="col-sm-5 col-6 text-right m-b-30">
                        <a href="UserEdit.php?UserId=<?php echo $row["UserId"]; ?>" class="btn btn-primary btn-rounded"><i class="fa fa-plus"></i> Edit Profile</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="userimage/<?php echo $row ['UserImage']; ?>"><img class="avatar" src='userimage/<?php echo $row ['UserImage']; ?>' 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['FirstName']; ?></h3>
                                                <small class="text-muted"><?php echo $row['CompanyName']; ?></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">User ID:</span>
                                                    <span class="text"><?php echo $row['UserId']; ?></span>
                                                </li>
                                                
                                                <li>
                                                    <span class="title">Phone:</span>
                                                    <span class="text"><a href="#"><?php echo $row['PhoneNumber']; ?></a></span>
                                                </li>
                                                <li>
                                                    <span class="title">Email:</span>
                                                    <span class="text"><?php echo $row['Email']; ?></span>
                                                </li>

                                                <li>
                                                    <span class="title">Address:</span>
                                                    <span class="text"><?php echo $row['Address']; ?></span>
                                                </li>
                                                <li>
                                                    <span class="title">Update Time:</span>
                                                    <span class="text"><?php echo $row['UpdateTime']; ?></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">Summary</a>
        </li>
        <li class="nav-item">
            <a href="#sectionB" class="nav-link" data-toggle="tab">Payment</a>
        </li>
        <li class="nav-item">
            <a href="#sectionC" class="nav-link" data-toggle="tab">Image</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">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">
                                                    <span class="title">Update Time:</span>
                                                    <span class="text"><?php echo $row['UpdateTime']; ?></span>
                                                </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">
                                                    <span class="title">Pay Amount:</span>
                                                    <span class="text"><?php echo $row['AmountPay']; ?> Tk Monthly</span>
                                                </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">
                                                <span class="title">Registration Date:</span>
                                                    <span class="text"><?php echo $row['RegistrationDate']; ?></span>
                                                </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</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, 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>Image</h3>

<div>
    <div class="page-header">
   Header Image (Money Recpeit, Project Payment, Pad, Employee Salary Etc) 700x150Pixels
   </div>
				<div class="row doctor-grid">
 <?php $sqli=$conn->query("Select * from user where status=1 and UserId ='" . $_SESSION['UserId'] . "'");
        foreach ($sqli as $key => $project) {
  ?>
                   <div class="col-md-12 col-sm-4  col-lg-4">
                        <div class="profile-widget">
                            <div class="">
                                <img src='userimage/<?php echo $row ['Image']; ?>' height="100%" width="100%">
                            </div>
                            <div class="dropdown profile-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="UserEdit.php?UserId=<?php echo $project["UserId"]; ?>"><i class="btn btn-primary btn-xs glyphicon glyphicon-edit"></i> Edit</a>
									 </li>
													<li>
													<a class="dropdown-item" href="userimage/<?php echo $row ['Image']; ?>"><i class="btn btn-primary btn-xs glyphicon glyphicon-eye-open"></i> view</a>
													
													</li>
                                </div>
                            </div>
                            
                        </div>
                    </div>
					<?php } ?>
				</div>
<div class="page-header">
   Profile Image ....
   </div>
    				<div class="row doctor-grid">
 <?php $sqli=$conn->query("Select * from user where status=1 and UserId ='" . $_SESSION['UserId'] . "'");
        foreach ($sqli as $key => $project) {
  ?>
                   <div class="col-md-12 col-sm-4  col-lg-4">
                        <div class="profile-widget">
                            <div class="">
                                <img src='userimage/<?php echo $row ['UserImage']; ?>' height="100%" width="100%">
                            </div>
                            <div class="dropdown profile-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="UserEdit.php?UserId=<?php echo $project["UserId"]; ?>"><i class="btn btn-primary btn-xs glyphicon glyphicon-edit"></i> Edit</a>
									 </li>
													<li>
													<a class="dropdown-item" href="userimage/<?php echo $row ['UserImage']; ?>"><i class="btn btn-primary btn-xs glyphicon glyphicon-eye-open"></i> view</a>
													
													</li>
                                </div>
                            </div>
                            
                        </div>
                    </div>
					<?php } ?>
				</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>