Hitung Dalam Yii

Mastah-mastah Yii saya mau nanya nih

kalau mau bikin hitung"an di Yii itu kira" kode-nya seperti apa ya?

rumus-nya kira" seperti ini :

**jika kategori A dipilih maka nilai kerja adalah :

bila jumlah mahasiswa 1-40 -> 100% x jumlah sks

bila jumlah mahasiswa 41-80 -> 150% x jumlah sks

bila jumlah mahasiswa 81-120 -> 200% x jumlah sks

dst,

**jika kategori B dipilih maka nilai kerja adalah :

bila 1-25 mhs -> 100% x jumlh sks : jumlah dosen

bila 26-50 mhs -> 150% x jumlah sks : jumlah dosen

dst,

hasil hitungannya nilai kerja langsung masuk ke db,

kalau seperti itu kira" kode-nya seperti apa ya mastah dan tolong kasih tau itu kode-nya diletakkan dimana?please help me :-[

Tergantung struktur tabelnya seperti apa. Kodenya sih ane pikir ditaruh di model, kurang lebih seperti ini (mohon dikoreksi bila ada yang salah):


/**

 * Menghitung nilai kerja

 * Asumsi: jumlah mahasiswa dan SKS > 0 (sudah divalidasi sebelumnya)

 * @param char $kategori Kode kategori

 * @param integer $mhs Jumlah mahasiswa

 * @param integer $sks Jumlah SKS

 * @param integer $dosen Jumlah dosen

*/

public function setNilaiKerja($kategori, $mhs, $sks, $dosen = 0)

{

   switch($kategori)

   {

       case 'A':

         if ($mhs <= 40)

            $this->nilai_kerja = $sks;

         else

            if ($mhs <= 80)

               $this->nilai_kerja = 1.5*$sks;

            else

               if ($mhs <= 120)

                  $this->nilai_kerja = 2*$sks;

         break;

       case 'B':

         if ($mhs <= 25)

            $this->nilai_kerja = $sks/$dosen;

         else

            if ($mhs <= 50)

               $this->nilai_kerja = 1.5*$sks/$dosen;

        break;

   }   

}

Sekali lagi, perhitungannya tergantung struktur tabel dan model agan. Jika kategori merupakan field tabel, maka variabelnya tidak perlu digunakan sebagai parameter lagi (tinggal pakai $this->kategori). Demikian pula untuk field - field yang lain.

Kalau yang ini sih tinggal diset ke modelnya aja:


$model->setNilaiKerja(....);

$model->save();

Sekian saja penjelasan ane. Mudah-mudahan bisa sedikit membantu. ::)

kalau struktuk tabelnya seperti ini?apakah kode-nya kira" sama gan?

tabel penugasan mengajar :

  • nidn

  • kode_makul

  • sk_penugasan

  • kelas

  • kode_kategori

  • semester

  • tahun

  • jumlah_mahasiswa

  • rencana_tatap_muka

  • realisasi_tatap_muka

  • status

  • nilai_kerja

  • nilai_asesor

tabel mata kuliah:

  • kode_mata_kuliah

  • nama_makul

  • sks

  • semester

tabel kategori :

  • kode_kategori

  • nama_kategori

kode itu kira" ditaruh dibagian mana gan?controller?

Wah, kok gak muncul di sini, ya? :huh: Udah keluar nih struktur tabelnya. :) Kalau struktur tabelnya seperti itu ya tinggal dihilangkan saja parameternya (seperti yang ane sudah sebutkan di atas).

Sepertinya di controller. Agan udah bikin aplikasinya sampe mana? Mungkin bisa posting sebagian kodenya di sini?

iya ndak muncul gan gambarnya,tapi itu udah tak jelasin gan gambaran tabelnya

baru mulai buat gan,di controlernya masih kode asli hasil generate gii




class PenugasanmengajarController extends Controller

{

	public $layout='//layouts/column2';


	

	public function filters()

	{

		return array(

			'rights',

			//'accessControl', // perform access control for CRUD operations

			//'postOnly + delete', // we only allow deletion via POST request

		);

	}

	

	public function accessRules()

	{

		return array(

			array('allow',  // allow all users to perform 'index' and 'view' actions

				'actions'=>array('index','view'),

				'users'=>array('*'),

			),

			array('allow', // allow authenticated user to perform 'create' and 'update' actions

				'actions'=>array('create','createdosen','createasesor','update','updatedosen','updateasesor'),

				'users'=>array('@'),

			),

			array('allow', // allow admin user to perform 'admin' and 'delete' actions

				'actions'=>array('admin','delete'),

				'users'=>array('admin'),

			),

			array('deny',  // deny all users

				'users'=>array('*'),

			),

		);

	}

	

	public function actionView($id,$id2,$id3,$id4)

	{

		$this->render('view',array(

			'model'=>$this->loadModel($id,$id2,$id3,$id4),

		));

	}

	

	 public function actionCreate()

	 {

		$model=new Penugasanmengajar;

		

		// Uncomment the following line if AJAX validation is needed

		// $this->performAjaxValidation($model);

		

		if(isset($_POST['Penugasanmengajar']))

		{

			$model->attributes=$_POST['Penugasanmengajar'];

			if($model->save())

			$this->redirect(array('view','id'=>$model->nidn));

		}

		

		$this->render('create',array(

			'model'=>$model,

		));

	}

	

	public function actionCreatedosen()

	 {

		$model=new Penugasanmengajar;

		

		// Uncomment the following line if AJAX validation is needed

		// $this->performAjaxValidation($model);

		

		if(isset($_POST['Penugasanmengajar']))

		{

			$model->attributes=$_POST['Penugasanmengajar'];

			if($model->save())

			$this->redirect(array('view','id'=>$model->nidn));

		}

		

		$this->render('createdosen',array(

			'model'=>$model,

		));

	}

	

	public function actionCreateasesor()

	 {

		$model=new Penugasanmengajar;

		

		// Uncomment the following line if AJAX validation is needed

		// $this->performAjaxValidation($model);

		

		if(isset($_POST['Penugasanmengajar']))

		{

			$model->attributes=$_POST['Penugasanmengajar'];

			if($model->save())

			$this->redirect(array('view','id'=>$model->nidn));

		}

		

		$this->render('createasesor',array(

			'model'=>$model,

		));

	}

	

	 public function actionUpdate($id,$id2,$id3,$id4)

	 {

		$model=$this->loadModel($id,$id2,$id3,$id4);

		

		// Uncomment the following line if AJAX validation is needed

		// $this->performAjaxValidation($model);

		

		if(isset($_POST['Penugasanmengajar']))

		{

			$model->attributes=$_POST['Penugasanmengajar'];

			if($model->save())

				$this->redirect(array('view','id'=>$model->nidn,'id2'=>$model->kode_mata_kuliah,'id3'=>$model->sk_penugasan,'id4'=>$model->kelas));

		}

		

		$this->render('update',array(

			'model'=>$model,

		));

	}

	

	public function actionUpdatedosen($id,$id2,$id3,$id4)

	 {

		$model=$this->loadModel($id,$id2,$id3,$id4);

		

		// Uncomment the following line if AJAX validation is needed

		// $this->performAjaxValidation($model);

		

		if(isset($_POST['Penugasanmengajar']))

		{

			$model->attributes=$_POST['Penugasanmengajar'];

			if($model->save())

				$this->redirect(array('view','id'=>$model->nidn,'id2'=>$model->kode_mata_kuliah,'id3'=>$model->sk_penugasan,'id4'=>$model->kelas));

		}

		

		$this->render('updatedosen',array(

			'model'=>$model,

		));

	}

	

	public function actionUpdateasesor($id,$id2,$id3,$id4)

	 {

		$model=$this->loadModel($id,$id2,$id3,$id4);

		

		// Uncomment the following line if AJAX validation is needed

		// $this->performAjaxValidation($model);

		

		if(isset($_POST['Penugasanmengajar']))

		{

			$model->attributes=$_POST['Penugasanmengajar'];

			if($model->save())

				$this->redirect(array('view','id'=>$model->nidn,'id2'=>$model->kode_mata_kuliah,'id3'=>$model->sk_penugasan,'id4'=>$model->kelas));

		}

		

		$this->render('updateasesor',array(

			'model'=>$model,

		));

	}

	

	 public function actionDelete($id,$id2,$id3,$id4)

	 { 

		if (Yii::app()->request->isPostRequest){

			$this->loadModel($id,$id2,$id3,$id4)->delete();

			// if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser

			if(!isset($_GET['ajax']))

				$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));

		}

		else

			throw new CHttpException(400, 'Invalid request. Please do not repeat this request again.');

	}

	

	 public function actionIndex()

	 {

		$dataProvider=new CActiveDataProvider('Penugasanmengajar');

		$this->render('index',array(

			'dataProvider'=>$dataProvider,

		));

	}

	


	 public function actionAdmin()

	 {

		$model=new Penugasanmengajar('search');

		$model->unsetAttributes(); //clear any default values

		if(isset($_GET['Penugasanmengajar']))

			$model->attributes=$_GET['Penugasanmengajar'];

			

		$this->render('admin',array(

			'model'=>$model,

		));

	}


	 public function loadModel($id,$id2,$id3,$id4)

	 {

		$model=Penugasanmengajar::model()->findByAttributes(array('nidn'=>$id,'kode_mata_kuliah'=>$id2,'sk_penugasan'=>$id3,'kelas'=>$id4));

		if($model===null)

			throw new CHttpException(404,'The requested page does not exist.');

		return $model;

	}


	 protected function performAjaxValidation($model)

	 {

		if(isset($_POST['ajax']) && $_POST['ajax']==='penugasan-mengajar-form')

		{

			echo CActiveForm::validate($model);

			Yii::app()->end();

		}

	}

	

}



Maaf ane lupa tambahin kalau nilai kerjanya udah ada di tabel ya tinggal langsung diset aja nilainya. Kodenya sudah diedit. Silakan dicek lagi, gan. :)

gan saya kok masih belum bisa ya manggil function set nilai kerjanya

biar kalau klik button cretae nilai_kerja langsung masuk ke db itu kira" kode-nya gimana gan?

kode saya seperti ini tapi gak bisa




public function actionCreate()

	 {

		$model=new Penugasanmengajar;

		

		// Uncomment the following line if AJAX validation is needed

		// $this->performAjaxValidation($model);

		

		if(isset($_POST['Penugasanmengajar']))

		{

			$model->attributes=$_POST['Penugasanmengajar'];

			$model->setNilaiKerja($kode_pengajaran,$jumlah_mahasiswa,$sks,$jumlah_dosen = 0);

			$model->save();

			if($model->save())

			$this->redirect(array('admin','id'=>$model->nidn));

		}

		

		$this->render('create',array(

			'model'=>$model,

		));

	}



Variabel kode_pengajaran, jumlah_mahasiswa, sks, dan jumlah_dosen itu diset di mana, gan? Kalau variabel-variabelnya sudah ada di model ya tidak usah dimasukkan ke parameter lagi waktu manggil fungsinya. Tinggal dimodifikasi aja fungsi setNilaiKerja-nya.

Trus manggil fungsi savenya sekali aja, gan. :)




$model->setNilaiKerja(...);

if($model->save())

   ...



sudah bisa masuk data base gan,kode-nya seperti ini:


  

public function actionCreate()

	 {

		$model=new Penugasanmengajar;

		

		// Uncomment the following line if AJAX validation is needed

		// $this->performAjaxValidation($model);

		

		if(isset($_POST['Penugasanmengajar']))

		{

			//$model->setNilaiKerja($kode_pengajaran, $jumlah_mahasiswa, $sks, $jumlah_dosen);

			$model->attributes=$_POST['Penugasanmengajar'];

			$model->setNilaiKerja($model->kode_pengajaran,$model->jumlah_mahasiswa,$model->sks,$model->jumlah_dosen);

			if($model->save())

			$this->redirect(array('admin','id'=>$model->nidn));

		}

		

		$this->render('create',array(

			'model'=>$model,

		));

	}



tapi hasil hitungannya 0 gan,padahal harusnya 3…

itu kira" kenapa ya gan?

apa gara-gara sks saya berada di tabel lain?

Kalau field SKS ada di tabel lain ya tinggal dipanggil lewat relasinya, gan:


$model->(nama relasi dengan tabel kuliah)->sks

Ngomong2, setelah melihat kode agan, menurut ane sebaiknya (just saran :) ):

  1. Fungsi setNilaiKerja gak perlu pake parameter lagi karena semua parameter sudah ada di model (tinggal langsung dipanggil dari modelnya).

  2. Fungsi setNilaiKerja dipanggil di model aja, mungkin di event beforeSave()?

makasih gan atas pencerahannya, ane juga mau bikin kayak gitu mirip-mirip sih

Ini dah solved gan? ikut nyimak

sudah gan ::)