

<?php
// connect to the database
    include('connection.php');
	 include('includes/header.php');
	 

?>


<!DOCTYPE html>
<html>
<head>
   <link rel="stylesheet" href="style.css">
   <!-- Select2 CSS --> 
<link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-beta.1/dist/css/select2.min.css" rel="stylesheet" /> 

<!-- jQuery --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> 

<!-- Select2 JS --> 
<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-beta.1/dist/js/select2.min.js"></script>

<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
* {
  box-sizing: border-box;
}
form-content{
  float: left;
  width: 100%;
  margin-top: 6px;
}


input[type=text], select, textarea {
  width: 100%;
  padding: 12px;
  border: 1px solid #ccc;
  border-radius: 4px;
  resize: vertical;
}
input[type=Amount], select, textarea {
  width: 100%;
  padding: 12px;
  border: 1px solid #ccc;
  border-radius: 6px;
  resize: vertical;
}


label {
  padding: 12px 12px 12px 0;
  display: inline-block;
}

button {
  width: 20%;
  margin-left:10%;
  margin-top:5px;
  border-radius: 15px;
  background-color: red;
  padding: 20px 20px 20px 20px;
}
button:hover {
  background-color: #05ceed;
}
#content {
  border-radius: 0px;
  background-color: #fcfcfc;
  padding: 2%;
  margin-left: 50px;
}
.page-header{
	margin-top: 5px !important;
	text-align: center;
	background-color: red;
	width: 50%;
	 margin-left: 25%;
}
}
.red{
	text-align: center ;
	text-color: green !important;
	width: 50%;
	 margin-left: 25%;
}


.from {
  border-radius: 15px;
  background-color: green;
  padding: 50px;
  margin-left: 10px;
}

.col-25 {
  float: left;
  width: 25%;
  margin-top: 6px;
}

.col-75 {
  float: left;
  width: 75%;
  margin-top: 6px;
}
  .select2 {
   width: 75% !important;
  margin-top: 6px;
}

/* Clear floats after the columns */
.row:after {
  content: "";
  display: table;
  clear: both;
}

/* Responsive layout - when the screen is less than 600px wide, make the two columns stack on top of each other instead of next to each other */
@media screen and (max-width: 700px) {
  .col-25, .col-75, input[type=submit] {
    width: 100%;
    margin-top: 0;
  }
 .select2 {
   width: 100% !important;
   
}
}

</style>


 
</head>
<body>
		<div id="content">
			
			<form class="from" action="EmployeeAction.php" method="post" enctype="multipart/form-data" >
			
				<h1 class="page-header">
					<p style="font-size:xx-large;">
				
					<span style="font-weight:bold;">Add Salary Payment</span>
					</p>
				</h1>


				<div class="row">
					<div class="col-25">
						<label for="fname">PayDate :</label>
					</div>
					<div class="col-75">
						<input type="date" name="PaymentDate" required placeholder="dd-mm-yyyy"/>
					</div>
				</div>
			
				<div class="row">
					<div class="col-25">
						<label for="fname">Employee Name :</label>
					</div>
					<div class="project"> 
						<select name="EmployeeName" id="employee" 
									class="form-control" required placeholder >
							<?php 
									$sql = "SELECT * FROM employee where status=1";
									$query = mysqli_query($conn,$sql);
									while($row = mysqli_fetch_assoc($query)){
							?>
								<option  value="">Choose A Payment Employee</option>
								<option class="red" id="<?php echo $row['Id']; ?>" value="<?php echo $row['Id']; ?>"  class="employee custom-select">
									<?php echo $row['EmployeeName']; ?>  !! Salary = <?php echo $row['Salary']; ?>  !! JobTitle = <?php echo $row['JobTitle']; ?>
								</option>
							<?php  }?>   
						</select>
					</div>
				</div>
			
			
				<div class="row">
					<div class="col-25">
						<label for="lname">Salary :</label>
					</div>
					<div class="col-75">	
						<input type="text"  id="Salary"  name="Salary"/>
					</div>
				</div>
			
				<div class="row">
					<div class="col-25">		
						<label for="lname"> Pay Amount :</label>
					</div>
					<div class="col-75">	
						<input type="text" name="PayAmount" required placeholder="Pay Amount ...."/>
					</div>
				</div>
			
				<div class="row">
					<div class="col-25">	
						<label for="lname">Payment Method :</label>
					</div>
					<div class="col-75">   
						<select type="text" name="Paymentmethod" id="">
							<option value="Cash">Choose A Pay Method</option>
							<option value="Cash">Cash</option>
							<option value="Bkash">Bkash</option>
							<option value="Chaque">Chaque</option>
							<option value="Others">Others</option>
						</select>
					</div>
				</div>
			
				<div class="row">
					<div class="col-25">
						<label for="lname">Working Project :</label>
					</div>
					<div class="project">		
						<select type="text" id="project" name="ProjectName" class="form-control" required placeholder >
						<option  value="">Choose A Worknig Project</option>
											<?php 
												 $sql = "SELECT * FROM project where status=1";
												 $query = mysqli_query($conn,$sql);
												 while($row = mysqli_fetch_assoc($query)){
												 ?>
						<option class="red" value="<?php echo $row['Id'];?>"><?php echo $row['ProjectName'];?>  
							!!   ...ContactName    =     <?php echo $row['ContactName'];?>
						</option>
							<?php
							}
							?>
						</select>
					</div>
				</div>
			
				<div class="row">
					<div class="col-25">
						<label for="text">Remarks :</label>
					</div>
					<div class="col-75">	
						<input type="text" name="Remarks" placeholder="Remarks...." />
					</div>
				</div>
			
				<div class="row">
					<div class="col-25">						
						<label for="lname">Received By :</label>
					</div>
					<div class="col-75">	
						<input type="text" name="ReceivedBy" placeholder="Received By...." />
					</div>
				</div>
			
				<div class="row">
					<div class="col-25">	
						<label  for="lname">Payment By :</label>
					</div>
					<div class="col-75">
						<input type="text" name="PaymentBy" placeholder="Payment By...." />
					</div>
				</div>	
		 
					<button type="submit" name="savetransations">Save</button>
					<button type="reset" name=""  value="Clear Fields">Clear</button>
					<button type="reset"><a href="project_tran-display.php">Cancel</a></button> 
			</form>
		</div>


</body>
</html>



<script>
$("#project").select2( {
	placeholder: "Choose A Worknig Project",
	allowClear: true
	} );
</script>
<script>
$("#employee").select2( {
	placeholder: "Choose A Payment Employee",
	allowClear: true
	} );
</script>


<script>
   $(document).ready(function(){
     $('#employee').change(function() {
      var id = $(this).find(':selected')[0].id;
       $.ajax({
          method:'GET',
          url:'fetch.php',
          data:{id:id},
          dataType:'json',
          success:function(data)
            {
               $('#Salary').val(data.Salary);
 
               //$('#qty').text(data.product_qty);
            }
       });
     });
         });
</script>