<?php
namespace App\Service\Loader\Legacy;
use App\CIC\Service\Legacy\Transformer\SinfoStudentTransformer;
use App\Entity\School\Student\StudentProfile;
use App\Service\CsscHelperService;
use CIC\CSSC\SINFO;
use CIC\DB\envLoader\db;
use Doctrine\DBAL\Platforms\Keywords\DB2Keywords;
use Doctrine\ORM\EntityManagerInterface;
class StudentWriterService
{
private EntityManagerInterface $em;
private db $db;
private SINFO $sinfo;
private SinfoStudentTransformer $transformer;
public function __construct()
{
// $this->em = $em;
// $this->db = $db;
// $this->sinfo=$cssc->getSinfo();
//
// $this->transformer = $transformer;
}
function create(StudentProfile $student)
{
// $sinfo = $this->transformer->revert($student);
// //lets check if the student exists
// if(!$this->getStudentRow($student->getStudentNumber())) {
// $this->createLegacyRecord('SINFO',$sinfo);
// // $this->createLegacyRecord('SINFO_XTRA',['IDNUM'=>$student->getStudentNumber()]); //cic_cron handles this right now....
// }
}
function update(StudentProfile $student) {
//find record.
//
// $sinfo = $this->transformer->revert($student);
//// updateLegacyRecord(string $table,array $data,string $where,array $criteria) {
//// return $this->db->update(
//// $table,
//// $data,
//// $where,
//// $criteria,
//// );
//
}
function legacy_update(StudentProfile $student) {
// $this->sinfo->refresh($student->getStudentNumber());
// $sinfo=$this->getSinfo($student);
// $changes=$this->getChanges($student,$sinfo);
// $data=array_diff_assoc($changes,$sinfo);
// if(count($data) > 0) {
// $this->db->update('SINFO',$data,'IDNUM=?',$student->getStudentNumber());
// $this->sinfo->refresh($student->getStudentNumber());
// }
}
function legacy_create(StudentProfile $student) {
// $this->sinfo->refresh($student->getStudentNumber());
// $data=$this->getMap($student);
// $data['IDNUM']=$student->getStudentNumber();
// if(count($data) > 0) {
// $this->db->insert('SINFO',$data);
// $this->sinfo->refresh($student->getStudentNumber());
// }
}
function findByStudentNumber($idnum) {
}
function findByUuid($uuid) {
}
private function getSinfo(StudentProfile $student) {
//because cssc/sinfo does NOT have uuid lookup (yet) do it ourselves
$this->db->query(
"SELECT IDNUM from SINFO WHERE uuid=?",
[$student->getUuid()]
);
if($this->db->returned_rows>0){
//got a record
$result=$this->db->fetch_obj();
return $this->sinfo->get($result->IDNUM);
}
return $this->sinfo->get($student->getStudentNumber());
}
private function getChanges(StudentProfile $student, array $sinfo) {
$map=$this->getMap($student);
foreach($map as $key=>$value) {
$sinfo=$this->change($sinfo,$key,$value);
}
return $sinfo;
}
private function change($array,$key,$value) {
if(array_key_exists($key, $array)) {
if($array[$key]!=$value) {
$array[$key]=$value;
}
}
return $array;
}
private function getMap(StudentProfile $student) {
$map=[
// 'IDNUM'=>$student->getStudentNumber(),
'FIRSTN'=>$student->getGivenName(),
'LASTN'=>$student->getLastName(),
'DBIRTH'=>$student->getDateOfBirth()->format("Y-m-d"),
'MOTHER'=>implode(" ",[$student->getParent1()->getGivenName(),$student->getParent1()->getSurName()]),
'FATHER'=>implode(" ",[$student->getParent2()->getGivenName(),$student->getParent2()->getSurName()]),
];
return $map;
}
/************************/
function getStudentRow($idnum) {
$q="SELECT * FROM SINFO WHERE IDNUM=?";
$this->db->query($q,[$idnum]);
if($this->db->returned_rows<1)
return;
/******************************/
$SINFO=$this->db->fetch_assoc();
$q="SELECT * FROM SINFO_XTRA WHERE IDNUM=?";
$this->db->query($q,[$idnum]);
$SINFO_XTRA=$this->db->fetch_assoc();
return [
'SINFO'=>$SINFO,
'SINFO_XTRA'=>$SINFO_XTRA,
];
}
private function updateLegacyRecord(string $table,array $data,string $where,array $criteria) {
return $this->db->update(
$table,
$data,
$where,
$criteria,
);
}
private function createLegacyRecord(string $table,array $data) {
return $this->db->insert(
$table,
$data
);
}
}