Captar datos de otro modelo y asignarlo a un modelo

Saludos a todos agradeciendo por adelantado mis agredecimiento, esto tratando en un maestro detalle cargar los datos del detalle de un modelo previo, que tiene los mismo datos, para no tener que captar de nuevo los datos del detalle.
Tengo las tablas

  1. facturas con estos campos: (tabla principal del maestro detalle)
    Id int autoincremental
    Idn int
    nfactura (PK)
    pedidos varchar campo donde capto el pedido echo anteriormente
  2. detallesfacturas con los campos
    nfactura relacionada con facturas uno a varios con nfactura de la tabla factura
    Codprod codigo del producto facturado

    aqui las dos tablas de otro maestro detalle echo anteriormente
    pedidos con los campos
    npedidos (PK)

    4)detallesdepidos con los campos
    npedidos relacionado uno a muchos con npedidos (PK) de la tabla pedido, la cual es la principal de ese maestro detalle.
    Codprod codigo del producto captado previamente

    Como dije lo que quiero es captar de la tabla detallesdepidos los datos que debe tener detallesfacturas para no tener que volver a captarlos.
    En el controlador de la tabla facturas hago lo siguiente:
public function actionCreate() {

        $model = new Facturas;
        $Detallesfacturas = new Detallesfacturas;
        $this->performAjaxValidation(array($model, $Detallesfacturas));
    if (isset($_POST['Facturas'])) {// && ($firma->IdEstado = 1)
            $model->attributes = $_POST['Facturas'];
            $valid = true;
            $valid = $model->validate() && $valid;
            if (!$valid) {
                echo CHtml::errorSummary($model);
            }
 $sql = "select Idn as n from facturas order by Idn DESC limit 1;";
        $connection = Yii::app()->db;
        $command = $connection->createCommand($sql);
        $row = $command->queryRow();
        $idn = $row['n'];
        if ($idn === \NULL) {
            $model->Idn = 1;
        } elseif ($idn <> \NULL) {
            $model->Idn = $idn + 1;
        }
         if ($valid) {
                if ($model->save()) {
                    $clie = $model->CodCliente;
//aqui formo el numero de facturas
                    $fecha = date("y");
                    $cadena2 = "/";
                    $cadena3 = "$model->Idn"; //                   
                    $cadena4 = "0";
                    $cadena5 = "00";
                    $cadena6 = "000";
                    $cadena7 = "0000";
                    $criteria = new CDbCriteria;
                    $criteria->addCondition('Idn = :Idn');
                    $criteria->params = array(':Idn' => $model->Idn);
                    $model = Facturas::model()->find($criteria);
                    if ($model->Idn <= 9) {
                        $model->nfactura = $cadena7 . $cadena3 . $cadena2 . $fecha;
                    } elseif ($model->Idn >= 10 & $model->Idn <= 99) {
                        $model->nfactura = $cadena6 . $cadena3 . $cadena2 . $fecha;
                    } elseif ($model->Idn >= 100 & $model->Idn <= 999) {
                        $model->nfactura = $cadena5 . $cadena3 . $cadena2 . $fecha;
                    } elseif ($model->Idn >= 1000 & $model->Idn <= 9999) {
                        $model->nfactura = $cadena4 . $cadena3 . $cadena2 . $fecha;
                    } elseif ($model->Idn >= 10000) {
                        $model->nfactura = $cadena3 . $cadena2 . $cadena1 . $fecha;
                    }
                    $model->save();
                    $ped = $model->pedidos;
                    $pedidos = Pedidos::model()->find('npedidos = :npedidos', array(':npedidos' => $model->pedidos));
 $detaped = Detallespedidos::model()->find('npedidos = :npedidos', array(':npedidos' => $model->pedidos));
                    $produ = TblProductos::model()->find('Codprod = :Codprod', array(':Codprod' => $detaped->Codprod));
                    $ped = $model->pedidos;
                    $array = array($detaped->npedidos);
                    $sql = "SELECT Codprod AS o, npedidos AS p, cantidad AS c FROM detallespedidos WHERE npedidos ='$ped';";
                    $connection = Yii::app()->db;
                    $command = $connection->createCommand($sql);
                    $row = $command->queryRow();                 
                    $idped = $row['p']++;
                    $idcod = $row['o']++;
                    $idcan = $row['c']++; //importemn 
                    Detallesfacturas::model()->deleteAll('nfactura=:nfactura', array(':nfactura' => $model->nfactura));
                    foreach ($detaped as $item) {
                        foreach ($_POST['Facturas'] as $item) {
                            //Lo que se guarda en tabla Detallesfacturas
                            $Detallesfacturas = new Detallesfacturas;
                            $Detallesfacturas->nfactura = $model->nfactura;
                            // for ($i = 1, $j = 0; $i <= 10; $j += $i, print $i, $i++);

                            $Detallesfacturas->Codprod = $idcod; //
                            $Detallesfacturas->cantidad = $idcan; //

                            $Detallesfacturas->premn = $produ->PreMN; // 
                            $Detallesfacturas->precuc = $produ->PreCUC;
                            $sql1 = "select TasaDes AS t, TasaImp AS i, TasaDesn as im from tbl_turcad;";
                            $connection = Yii::app()->db;
                            $command = $connection->createCommand($sql1);
                            $row1 = $command->queryRow();
                            $idd = $row1['t'];
                            $idi = $row1['i'];
                            $idim = $row1['im'];
                            $sql = "select conversiono AS c, conversion as cc from tbl_conversion;";
                            $connection = Yii::app()->db;
                            $command = $connection->createCommand($sql);
                            $row = $command->queryRow();
                            $idc = $row['c'];
                            $idcc = $row['cc']; //importemn
                            $Detallesfacturas->importemn = $Detallesfacturas->premn * $Detallesfacturas->cantidad;
                            $Detallesfacturas->importecuc = $Detallesfacturas->precuc * $Detallesfacturas->cantidad;
                            $Detallesfacturas->impuesto = $Detallesfacturas->importemn + $Detallesfacturas->importecuc * $idc * $idim;
//recargo comercial
                            if ($model->Idrecargo <> 1) {
                                $Detallesfacturas->recargo = $Detallesfacturas->cantidad * $produ->recargo;
                                $Detallesfacturas->recargoc = $Detallesfacturas->cantidad * $produ->recargoc;
                            }
                            $Detallesfacturas->importetotal = ($Detallesfacturas->importemn + $Detallesfacturas->importecuc * $idc) + ($Detallesfacturas->recargo + $Detallesfacturas->recargoc * $idc);
//descuento comercial con formula: ($Detallesfacturas->precuc * $Detallesfacturas->cantidad) * $turcad->Coddes  $Detallesfacturas
                            if ($model->Iddescuento <> 1) {
                                $Detallesfacturas->descuento = $Detallesfacturas->importecuc + $Detallesfacturas->importemn * $idd;
                            }
//sumar detalles
                            $importeTotal += $Detallesfacturas->importemn;
                            $importeTotalc += $Detallesfacturas->importecuc;
                            $imventas += $Detallesfacturas->impuesto;
                            $imrecargo += $Detallesfacturas->recargo;
                            $imrecargoc += $Detallesfacturas->recargoc;
                            $imdescuento += $Detallesfacturas->descuento;
                            $Importetotalmn += $Detallesfacturas->importetotal;
                            $Detallesfacturas->save();

El problema es que solo se capta el primer producto de pedidosy la tabla Detallespedidos puede tener varios productos y quiero que los capte todos y realice las operaciones pedidas

Espero ahora esplicarme mejor, lo que pasa con eso es que al captar los detalles del pedido, en este caso productos:

$Detallesfacturas->Codprod = $idcod; 
 $Detallesfacturas->cantidad = $idcan; 

solo toma el primer detalle del pedido y se lo pone a todos los detalles de la factura.
Ademas quiero hacer un XDetailView o DetailView o algo similar para mostrar en el _form los detalles del pedido de donde voy a captar los detalles de la factura, pero solo me muestra tambien el primero, los demas no los muestra.

                 $this->widget('application.components.XDetailView', array(
                          'data' => $detaped,
                          'ItemColumns' => 3,
                          'attributes' => array(
                          'npedidos',
                          'Codprod',
                          'cantidad',                    
                          ),
                          )); 

Por favor necesito ayuda me urge esto

Saludos después de varios intentos aún sigo con el problema, ahora lo tengo asi:

 $Detallespedidos = Detallespedidos::model()->find('npedidos = :npedidos', array(':npedidos' => $model->pedidos));
                foreach ($Detallespedidos As $items) {
                    $Detallesfacturas->attributes = $Detallespedidos->attributes; //aqui para que tome los valores iguales de las dos modelos Detallespedidos y Detallesfacturas
                    $produ = TblProductos::model()->find('Codprod = :Codprod', array(':Codprod' => $Detallespedidos->Codprod));
                    $Detallesfacturas->nfactura = $model->nfactura;
aqui sigo poniendo los demás elementos del detalle de la factura

pero me sigue solo cargando el primer elemento de detallespedidos, o sea, si tiene varias filas solo toma el primero. Espero ayuda

al find debe agregale all() para que traiga todos los registros

Saludos Jonathan, segui tu consejo, pero al poner

$Detallespedidos = Detallespedidos::model()->findAll('npedidos = :npedidos', array(':npedidos' => $model->pedidos));

me da error de Trying to get property of non-object en:

   $Detallesfacturas->attributes = $Detallespedidos->attributes;

Yo se que el $Detallesfacturas->attributes = $Detallespedidos->attributes; es para traer todos los campos iguales de los dos modelos, ahora al array de $Detallespedidos tengo que pasarle mas condiciones o es suficiente que me traiga los detalles de la tabla detallespedidos, donde esten contenidos al pedido tomado en el modelo $ped = $model->pedidos;, ya que este contiene los detallespedidos por ser un maestro detalle.
espero o traves