示例#1
0
 function _valida($do)
 {
     $this->rapyd->load('dataobject');
     $obr = $do->get('obr');
     $obra = new Dataobject('obra');
     $obra->load($obr);
     $rr = $this->ivaplica2();
     $ivaa = $do->get('ivaa');
     $ivag = $do->get('ivag');
     $ivar = $do->get('ivar');
     $exento = $do->get('exento');
     $subtotal = $do->get('subtotal');
     $cod_prov = $do->get('cod_prov');
     $otrasrete = $do->get('otrasrete');
     $ivag = $ivag != 0 ? $subtotal * $rr['tasa'] / 100 : 0;
     $ivar = $ivar != 0 ? $subtotal * $rr['redutasa'] / 100 : 0;
     $ivaa = $ivaa != 0 ? $subtotal * $rr['sobretasa'] / 100 : 0;
     $do->set('ivaa', $ivaa);
     $do->set('ivag', $ivag);
     $do->set('ivar', $ivar);
     $iva = $ivag + $ivar + $ivaa;
     //$cod_prov     = $obra->get('cod_prov'  );
     $porcent = $obra->get('porcent');
     $tipo = $obra->get('tipo');
     $do->set('estadmin', $obra->get('codigoadm'));
     $do->set('fondo', $obra->get('fondo'));
     $creten = $do->get('creten');
     $reteiva_prov = $this->datasis->dameval("SELECT reteiva FROM sprv WHERE proveed = '{$cod_prov}'");
     if ($tipo == 'Compra') {
         $do->set('creten', '');
         $do->set('reten', 0);
     }
     $rete = $this->datasis->damerow("SELECT base1,tari1,pama1 FROM rete WHERE codigo='{$creten}'");
     if ($reteiva_prov != 75) {
         $reteiva_prov = 100;
     }
     $error = '';
     $reteiva = $mivag = $mivar = $mivaa = 0;
     $reten = 0;
     if (!empty($cod_prov)) {
         $reteiva = $iva * $reteiva_prov / 100;
         if ($rete) {
             if (substr($creten, 0, 1) == '1') {
                 $reten = round($subtotal * $rete['base1'] * $rete['tari1'] / 10000, 2);
             } else {
                 $reten = round(($subtotal - $rete['pama1']) * $rete['base1'] * $rete['tari1'] / 10000, 2);
             }
             if ($reten < 0) {
                 $reten = 0;
             }
             $do->set('reten', $reten);
         }
     } else {
         $reteiva = 0;
     }
     $impt = $impm = 0;
     $pimpm = $this->datasis->traevalor('IMPMUNICIPAL');
     $pimpt = $this->datasis->traevalor('IMPTIMBRE');
     $pcrs = $this->datasis->traevalor('CRS');
     if ($do->get('imptimbre') != 0) {
         $impt = $subtotal * $pimpt / 100;
     }
     if ($do->get('impmunicipal') != 0) {
         $impm = $subtotal * $pimpm / 100;
     }
     $crs = 0;
     if ($do->get('crs') != 0) {
         $crs = $obra->get('monto') * $pcrs / 100;
     }
     $total2 = $iva + $subtotal;
     $amortiza = $do->get('amortiza');
     //if($do->get('amortiza')!=0)
     //	$amortiza = $total2 * $porcent / 100;
     $total = $total2 - $reteiva - $reten - $amortiza - $otrasrete - $impt - $impm - $crs;
     //echo "</br>".$total2;
     //echo "</br>".$amortiza;
     //echo "</br>".$reten;
     //echo "</br>".$reteiva;
     //echo "</br>".$impt;
     //echo "</br>".$impm;
     //echo "</br>".$crs;
     //echo "</br>".$total;
     //exit();
     $do->set('impmunicipal', $impm);
     $do->set('imptimbre', $impt);
     $do->set('crs', $crs);
     $do->set('pimpmunicipal', $pimpm);
     $do->set('pimptimbre', $pimpt);
     $do->set('pcrs', $pcrs);
     $do->set('iva', $iva);
     $do->set('tivag', $rr['tasa']);
     $do->set('tivar', $rr['redutasa']);
     $do->set('tivaa', $rr['sobretasa']);
     $do->set('mivag', $ivag > 0 ? $ivag * 100 / $rr['tasa'] : 0);
     $do->set('mivar', $ivar > 0 ? $ivar * 100 / $rr['redutasa'] : 0);
     $do->set('mivaa', $ivaa > 0 ? $ivaa * 100 / $rr['sobretasa'] : 0);
     //$do->set('subtotal'      , $subtotal            );
     $do->set('exento', $exento);
     $do->set('reteiva', $reteiva);
     $do->set('total', $total);
     $do->set('total2', $total2);
     $do->set('status', 'O1');
     $do->set('cod_prov', $cod_prov);
     $do->set('breten', $rete['tari1']);
     $do->set('amortiza', $amortiza);
     $do->set('porcent', $porcent);
     $do->set('multiple', 'N');
     if (empty($error)) {
         if (empty($do->loaded)) {
             $nodirect = $this->datasis->fprox_numero('nodirect');
             $do->set('numero', $nodirect);
             $do->pk = array('numero' => $nodirect);
         }
     }
     if (!empty($error)) {
         $do->error_message_ar['pre_ins'] = $error;
         $do->error_message_ar['pre_upd'] = $error;
         return false;
     }
 }