<?php
// connect to the database
    include('connection.php');
	 include('includes/header.php');

	
	if (isset($_POST['project_tran_edit'])){
//if(count($_POST)>0) {
mysqli_query($conn,"UPDATE project_transations set id='" . $_POST['id'] . "',
 PaymentDate='" . $_POST['PaymentDate'] . "',
 ProjectName='" . $_POST['ProjectName'] . "',
 Amount='" . $_POST['Amount'] . "' ,
 paymentmethod='" . $_POST['paymentmethod'] . "',
  Amount='" . $_POST['Amount'] . "' ,
 
 Remarks='" . $_POST['Remarks'] . "',
 ReceivedBy='" . $_POST['ReceivedBy'] . "',
 PaymentBy='" . $_POST['PaymentBy'] . "'
 WHERE Id='" . $_POST['id'] . "'");
$message = "Record Modified Successfully";
}
$result = mysqli_query($conn,"SELECT * FROM project_transations WHERE Id='" . $_GET['Id'] . "'");
$row= mysqli_fetch_array($result);



?>


<style>
form {
  margin-right:100px;
  margin:20px 100px 20px 100px;
  border-radius: 15px;
  background-color: #3c42383d;
  padding: 20px 50px 20px 50px;
}
input[type=text], select {
  width: 100%;
  padding: 12px 20px;
  margin: 8px 0;
  display: inline-block;
  border: 1px solid #ccc;
  border-radius: 4px;
  box-sizing: border-box;
}

input[type=submit] {
  width: 50%;
  background-color: #4CAF50;
  color: white;
  padding: 20px;
  margin: 8px 0;
  border: 1px;
  border-radius: 15px;
  cursor: pointer;
  margin-left: 200px;
}
input[type=number] {
  width: 100%;
  padding: 12px 20px;
  margin: 8px 0;
  display: inline-block;
  border: 1px solid #ccc;
  border-radius: 4px;
  box-sizing: border-box;
}
input[type=cancel] {
  margin-left:150px;
  margin-top:5px;
  border-radius: 15px;
  background-color: #3c42383d;
  padding: 20px 50px 20px 50px;
}

input[type=submit]:hover {
  background-color: #45a049;
}
button {
 margin-left:150px;
  margin-top:5px;
  border-radius: 15px;
  background-color: #3c42383d;
  padding: 20px 50px 20px 50px;
}
button:hover {
  background-color: #45a049;
}
form {
  width: 80%;
  border-collapse: collapse;
  margin: 100px auto;
}

</style>


<html>
<head>
<!-- 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>
</head>
<body>

    <div id="page-wrapper"> 
   
      <div class="row">
        <form action="actionproject.php" method="post" enctype="multipart/form-data" >
		
		
		<th><h1 class="page-header">
		
		
		<p class="btn btn-lg btn-primary" style="font-size:xx-large;padding-left: 0px;padding-right: 0px;"><span class="different-text-color" style="font-weight:bold;"><a href="project_transations.php" class="btn btn-lg btn-danger" style="font-weight:bold;"><i class="fa fa-university "></i>Add New Transations</a>* Update Id <?php echo $row['ProjectName']; ?>  Transation *<a href="project_tran-display.php" class="btn btn-lg btn-danger" style="font-weight:bold;" ><i class="bi bi-arrow-bar-up"></i>Cancel</a></h1>
</th>
		
	
		<label for="fname">ID :</label>
		<input type="hidden" name="id" class="txtField" value="<?php echo $row['id']; ?>">
		<input style="width: 40%;margin-bottom: 20px;" type="text" name="id"  value="<?php echo $row['Id']; ?>">
		
		 <label for="fname">Payment Date :</label>
    <input style="width: 40%;margin-bottom: 20px;" type="date" name="PaymentDate" value="<?php echo $row['PaymentDate']; ?>">
	</br>
	<label for="lname">Project Name</label>

	<select id="project" name="ProjectName" class="form-control">
	
	
	<option value="<?php echo $row['ProjectName']; ?>"><?php echo $row['ProjectName']; ?></option>
			
	<?php
	$sqlQuery = "SELECT ProjectName,Id FROM project";
	$resultSet = mysqli_query($conn, $sqlQuery)
	?>
	
            <?php while($rows = mysqli_fetch_array($resultSet)){
			?>
            <option value="<?php echo $rows['Id'];?>"><?php echo $rows['ProjectName'];?></option>
			
			<?php
			}
			?>
            </select>
	

	
	<label>Amount</label>
    <input style="width: 40%;margin-bottom: 20px;" type="number" name="Amount" class="txtField" value="<?php echo $row['Amount']; ?>">
	
	

	
	<label for="fname">payment Method</label>
   
   <select  style="width: 35%;margin-bottom: 20px;"name="paymentmethod" id="paymentmethod">
		
		<option value="Cash"
		<?php
		if($row["paymentmethod"]=='Cash')
		{
			echo "selected";
		}
		?>
		>Cash</option>
		<option value="Bkash"
		<?php
		if($row["paymentmethod"]=='Bkash')
		{
			echo "selected";
		}
		?>
		>Bkash</option>
		<option value="Chaque"
		<?php
		if($row["paymentmethod"]=='Chaque')
		{
			echo "selected";
		}
		?>
		>Chaque</option>
		<option value="Others"
		<?php
		if($row["paymentmethod"]=='Others')
		{
			echo "selected";
		}
		?>
		>Others</option>
		
    </select>
   
   
	<label for="fname">Remarks</label>
    <input type="text" name="Remarks" value="<?php echo $row['Remarks']; ?>">
	
	<label for="fname">Received By :</label>
    <input style="width: 35%;margin-bottom: 20px;"type="text" name="ReceivedBy" value="<?php echo $row['ReceivedBy']; ?>">

<label for="fname">Payment By :</label>
    <input style="width: 38%;margin-bottom: 20px;" type="text" name="PaymentBy" value="<?php echo $row['PaymentBy']; ?>">
	
          <button type="submit" name="project_tran_edit">Update</button>
		  <button><a href="project_tran-display.php" type="cancel">Cancel</a></button>
		  
        </form>
      </div>
    </div>
	
	<h1 style="width: 50%;margin-left: 300px;" class="page-header"><p style="font-size:xx-large;"><span class="different-text-color" style="font-weight:bold;">Project Transations List</h1>
<?php
// connect to the database
    include('connection.php');
	
$sqlQuery = "SELECT id, PaymentDate, ProjectName, Amount, Remarks FROM project_transations";
$resultSet = mysqli_query($conn, $sqlQuery) or die("database error:". mysqli_error($conn));
?>
<table style="width: 70%;margin-left: 300px;" id="editableTable" class="table table-bordered" style="font-size:2vw;" >
	<thead>
		<tr>
			<th style="width: 75px;">Id</th>
			<th style="width: 125px;">PaymentDate</th>
			<th style="width: 200px;">ProjectName</th>
			<th style="width: 80px;">Amount</th>
			<th style="width: 300px;">Remarks</th>
			
			<th style="width: 100px;" colspan="2" align="center">Operation</th>
		</tr>
	</thead>
	<tbody style="font-weight:bold;">
		<?php while( $row  = mysqli_fetch_assoc($resultSet) ) { ?>
		   <tr id="<?php echo $row ['id']; ?>">
		   <td><?php echo $row ['id']; ?></td>
		   <td class="icon-calendar icon-large"><?php echo $row ['PaymentDate']; ?></td>
		   <td><?php echo $row ['ProjectName']; ?></td>
		   <td ><?php echo $row ['Amount']; ?></td>
		   <td><?php echo $row ['Remarks']; ?></td>
		   
		 
		   <td><a href="project_tran-edit.php?Id=<?php echo $row["id"]; ?>"  class="btn btn-primary btn-xs glyphicon glyphicon-edit">Edit</td>
		   <td><a href="project_tran-display1.php?Id=<?php echo $row["id"]; ?>"  class="btn btn-primary btn-xs glyphicon glyphicon-eye-open">View</td> 				   				   				  
		   </tr>
		<?php } ?>
	</tbody>
</table>
	
  </body>

</html>
<script>
$("#project").select2( {
	placeholder: "Choose A Payment Project",
	allowClear: true
	} );
</script>