示例#1
0
        public mdl_TransferRequests CollectTransferRequestInsert(DataSet ds, string prj, string vre, string rt,
                                                                 string rq, string rqn, string rv, DateTime rd, string rvn)
        {
            int rtID = ds.Tables["tlkTransferRequestTypes"].AsEnumerable()
                       .Where(x => x.Field <string>("RequestTypeLabel") == rt)
                       .Select(x => x.Field <int>("RequestTypeID")).ToList().FirstOrDefault();

            int rqID = ds.Tables["tblUser"].AsEnumerable()
                       .Where(x => rq == x.Field <string>("LastName") + ", " + x.Field <string>("FirstName"))
                       .Select(x => x.Field <int>("UserNumber")).ToList().Distinct().FirstOrDefault();

            int rvID = ds.Tables["tblUser"].AsEnumerable()
                       .Where(x => rv == x.Field <string>("LastName") + ", " + x.Field <string>("FirstName"))
                       .Select(x => x.Field <int>("UserNumber")).ToList().Distinct().FirstOrDefault();

            mdl_TransferRequests tr = new mdl_TransferRequests
            {
                Project        = prj,
                VreNumber      = vre,
                RequestType    = rtID,
                RequestedBy    = rqID,
                RequesterNotes = rqn,
                ReviewedBy     = rvID,
                ReviewDate     = rd,
                ReviewNotes    = rvn
            };

            return(tr);
        }
示例#2
0
        public bool PutTransferRecords(DataSet ds, string prj, string vre, string rt, string rq, string rqn,
                                       string rv, DateTime rd, string rvn,
                                       DataGridView assets, DataGridView files, string vreDir, string repoDir,
                                       string tm, string tf, string tt, string dsa, DataGridView rej)
        {
            bool[] success = new bool[4];

            SqlConnection conn = new SqlConnection();

            conn.ConnectionString = SQL_Stuff.conString;
            conn.Credential       = SQL_Stuff.credential;
            using (conn)
            {
                conn.Open();
                SqlTransaction trans = conn.BeginTransaction();
                try
                {
                    // tblTransferRequests insert
                    mdl_TransferRequests tr = CollectTransferRequestInsert(ds, prj, vre, rt, rq, rqn, rv, rd, rvn);
                    string trQry            = @"
                        INSERT INTO dbo.tblTransferRequests (Project, VreNumber, RequestType, RequestedBy, RequesterNotes,
                                                             ReviewedBy, ReviewDate, ReviewNotes)
                        OUTPUT INSERTED.RequestID
                        VALUES (@Project, @VreNumber, @RequestType, @RequestedBy, @RequesterNotes, @ReviewedBy, 
                                @ReviewDate, @ReviewNotes)";
                    using (SqlCommand cmd = new SqlCommand(cmdText: trQry, connection: conn, transaction: trans))
                    {
                        cmd.Parameters.Add("@Project", SqlDbType.VarChar, 5).Value   = tr.Project;
                        cmd.Parameters.Add("@VreNumber", SqlDbType.VarChar, 5).Value = tr.VreNumber;
                        cmd.Parameters.Add("@RequestType", SqlDbType.Int).Value      = tr.RequestType;
                        cmd.Parameters.Add("@RequestedBy", SqlDbType.Int).Value      = tr.RequestedBy;
                        cmd.Parameters.Add("@RequesterNotes", SqlDbType.VarChar, int.MaxValue).Value = tr?.RequesterNotes ?? (object)DBNull.Value;
                        cmd.Parameters.Add("@ReviewedBy", SqlDbType.Int).Value      = tr.ReviewedBy;
                        cmd.Parameters.Add("@ReviewDate", SqlDbType.DateTime).Value =
                            tr.ReviewDate.HasValue ? tr.ReviewDate.Value.Date : (object)DBNull.Value;
                        cmd.Parameters.Add("@ReviewNotes", SqlDbType.VarChar, int.MaxValue).Value = tr?.ReviewNotes ?? (object)DBNull.Value;
                        // Execute insert and get the newly created ID
                        tr.RequestID = (int)cmd.ExecuteScalar();
                    }
                    success[0] = tr.RequestID > 0;

                    // tblAssetGroups insert
                    List <mdl_AssetGroups> ag = CollectAssetGroupsInsert(ds, prj, assets);
                    if (ag.Any())
                    {
                        int agRows = SQL_Stuff.insertBulk(ag.ToDataTable(), "dbo.tblAssetGroups", conn, trans);
                        success[1] = agRows == ag.Count();
                        // Query tblAssetGroups again to get all new IDs for use in further inserts
                        GetAssetGroups(ds, conn, trans);
                    }
                    else
                    {
                        success[1] = true;
                    }

                    // tblAssetsRegister insert
                    List <mdl_AssetsRegister> ar = CollectAssetsRegisterInsert(prj, files, vreDir, repoDir);
                    // If there are any assets, join asset ID to ar before doing bulk insert
                    if (ag.Any())
                    {
                        // Join asset IDs to the assets DGV
                        var assetsWithID = from a1 in assets.Rows.OfType <DataGridViewRow>()
                                           join a2 in ds.Tables["tblAssetGroups"].AsEnumerable()
                                           on a1.Cells["AssetName"].Value.ToString() equals a2.Field <string>("AssetName")
                                           select new
                        {
                            FileName  = a1.Cells["FileName"].Value.ToString(),
                            AssetName = a1.Cells["AssetName"].Value.ToString(),
                            AssetID   = a2.Field <int>("AssetID")
                        };
                        // Join assets data to the new assets register records
                        IEnumerable <mdl_AssetsRegister> arTmp =
                            from a1 in ar
                            join a2 in assetsWithID on a1.DataFileName equals a2.FileName into FilesWithAssetInfo
                            from a3 in FilesWithAssetInfo.DefaultIfEmpty()
                            select new mdl_AssetsRegister
                        {
                            Project          = a1.Project,
                            DataFileName     = a1.DataFileName,
                            VreFilePath      = a1.VreFilePath,
                            DataRepoFilePath = a1.DataRepoFilePath,
                            AssetID          = a3?.AssetID
                        };
                        //ar = arTmp.GroupBy(x => x.DataFileName, (key, grp) => grp.First()).ToList();
                        ar = arTmp.ToList();
                    }

                    int arRows = SQL_Stuff.insertBulk(ar.ToDataTable(), "dbo.tblAssetsRegister", conn, trans);
                    success[2] = arRows == ar.Count();
                    // Get new FileIDs by re-querying the tbl
                    GetAssetsRegister(ds, conn, trans);

                    // tblAssetsChangeLog insert
                    List <mdl_AssetsChangeLog> cl = CollectAssetsChangeLogInsert(ds, tr.RequestID, files, rej, tm, tf, tt, dsa);
                    int clRows = SQL_Stuff.insertBulk(cl.ToDataTable(), "dbo.tblAssetsChangeLog", conn, trans);
                    success[3] = clRows == cl.Count();

                    trans.Commit();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(
                        "Failed to add new file transfer record(s):" + ex.GetType() + "\n\n" +
                        ex.Message + "\n\n" +
                        ex.StackTrace
                        );
                    try
                    {
                        trans.Rollback();
                    }
                    catch (Exception ex2)
                    {
                        MessageBox.Show(
                            "Failed to roll back transaction:" + ex2.GetType() + "\n\n" +
                            ex2.Message + "\n\n" +
                            ex2.StackTrace
                            );
                    }
                }
            }

            return(!success.Contains(false));
        }