public void SaveControlSample(int idtemplate_method_aa, long idbatch)
        {
            CTemplate_method    template_method     = new CTemplate_methodFactory().GetByPrimaryKey(new CTemplate_methodKeys(idtemplate_method_aa));
            CCorrelative        correlative         = new CCorrelativeFactory().GetByPrimaryKey(new CCorrelativeKeys(template_method.Cod_type_sample));
            CTemplate_method_aa templaate_method_aa = new CTemplate_method_aaFactory().GetByPrimaryKey(new CTemplate_method_aaKeys(idtemplate_method_aa));

            control_sample.Idtemplate_method = templaate_method_aa.Idtemplate_method;
            //control_sample.Idrecep_sample = idrecep_sample;
            //control_sample.Idrecep_sample_detail = idrecep_sample_detail;
            //control_sample.Idrecep_sample_detail_elem = idrecep_sample_detail_elem;
            control_sample.Weight1  = templaate_method_aa.Weight;
            control_sample.Weight2  = templaate_method_aa.Weight;
            control_sample.Volumen1 = templaate_method_aa.Volumen;
            control_sample.Volumen2 = templaate_method_aa.Volumen;
            control_sample.Dilu2    = templaate_method_aa.Dilution2;
            control_sample.Dilu3    = templaate_method_aa.Dilution3;

            control_sample.Flag_dilu2 = false;
            control_sample.Flag_dilu3 = false;

            control_sample.Flag_mri                 = 1;
            control_sample.Fum                      = methods.GetFactorConvertionUM(templaate_method_aa.Idtemplate_method);
            control_sample.Qaqc_blk                 = 3;
            control_sample.Qaqc_par                 = 3;
            control_sample.Qaqc_mr                  = 3;
            control_sample.Qaqc_error               = 0;
            control_sample.Qaqc_approve             = false;
            control_sample.Qaqc_review              = false;
            control_sample.Qaqc_has_retest          = 0;
            control_sample.Qaqc_tmp_retest          = 0;
            control_sample.Qaqc_tmp_retest_idmethod = 0;
            control_sample.Qaqc_approve_text        = "";
            control_sample.Qaqc_review_text         = "";

            // --- insert mri
            CBatch oBatch          = new CBatchFactory().GetByPrimaryKey(new CBatchKeys(idbatch));
            int    num_free_places = GetNumFreePlacesInBatch(idbatch, templaate_method_aa.Idtemplate_method);

            if (num_free_places >= 1)
            {
                if (!Convert.ToBoolean(oBatch.Has_sample_control)) // batch no tiene mri
                {
                    long index_mri = GetIndexMriPosition(idbatch);
                    if (index_mri > 0)
                    {
                        // --- insert mri
                        control_sample.Cod_interno = index_mri;
                        control_sample.Idbatch     = idbatch;
                        control_sample.Cod_sample  = Comun.FormatCorrelativeCode(correlative.Prefix + correlative.Cod_serie, index_mri, Convert.ToInt32(correlative.Num_digits));
                        if (faBatch_detail_aa_twofold.Insert(control_sample))
                        {
                            oBatch.Has_sample_control = true;
                            new CBatchFactory().Update(oBatch);
                        }
                    }
                }
            }
        }
        private void SaveInBatch(CBatch_detail_aa_twofold oBatch_detail_aa_twofold, string user)
        {
            // --- get batch
            int idtemplate_method = Convert.ToInt32(oBatch_detail_aa_twofold.Idtemplate_method);

            long origin_batch = -1;

            if (Enabled_retest)
            {
                origin_batch = Convert.ToInt64(oRetest.Origin_batch);
            }

            long idbatch = Convert.ToInt64(GetBatchAvailable(idtemplate_method, user, origin_batch));

            CBatch oBatch = new CBatchFactory().GetByPrimaryKey(new CBatchKeys(idbatch));

            int num_free_places = GetNumFreePlacesInBatch(idbatch, idtemplate_method);

            if (num_free_places >= 1)
            {
                if (!Convert.ToBoolean(oBatch.Has_sample_control)) // batch no tiene mri
                {
                    long index_mri = GetIndexMriPredecessor(idbatch, Convert.ToInt64(oBatch_detail_aa_twofold.Cod_interno));

                    if (index_mri > 0)// --- el batch no tiene mri y en sus predecesores debe existir uno
                    {
                        if (num_free_places >= 2)
                        {
                            // --- insert mri
                            control_sample.Cod_interno = index_mri;
                            control_sample.Idbatch     = idbatch;
                            control_sample.Cod_sample  = Comun.FormatCorrelativeCode(Correlative.Prefix + Correlative.Cod_serie, index_mri, Convert.ToInt32(Correlative.Num_digits));
                            if (faBatch_detail_aa_twofold.Insert(control_sample))
                            {
                                oBatch.Has_sample_control = true;
                                new CBatchFactory().Update(oBatch);
                            }

                            // --- insert sample
                            CBatch_detail_aa_twofoldFactory faBatch_detail_aa_towfold = new CBatch_detail_aa_twofoldFactory();
                            oBatch_detail_aa_twofold.Idbatch = idbatch;
                            faBatch_detail_aa_towfold.Insert(oBatch_detail_aa_twofold);
                            SaveRetest(idbatch);
                        }
                        if (num_free_places == 1)
                        {
                            // --- insert mri
                            control_sample.Cod_interno = index_mri;
                            control_sample.Idbatch     = idbatch;
                            control_sample.Cod_sample  = Comun.FormatCorrelativeCode(Correlative.Prefix + Correlative.Cod_serie, index_mri, Convert.ToInt32(Correlative.Num_digits));
                            if (faBatch_detail_aa_twofold.Insert(control_sample))
                            {
                                oBatch.Has_sample_control = true;
                                new CBatchFactory().Update(oBatch);
                            }

                            // --- search batch to sample
                            SaveInBatch(oBatch_detail_aa_twofold, user);
                        }
                    }
                    else // --- index_mri = 0; entonces la bandeja no lleva mri
                    {
                        oBatch_detail_aa_twofold.Idbatch = idbatch;
                        faBatch_detail_aa_twofold.Insert(oBatch_detail_aa_twofold);
                        SaveRetest(idbatch);
                    }
                }
                else
                {
                    oBatch_detail_aa_twofold.Idbatch = idbatch;
                    faBatch_detail_aa_twofold.Insert(oBatch_detail_aa_twofold);
                    SaveRetest(idbatch);
                }
            }
        }