/// <summary>
 /// Save the objects to SQL
 /// </summary>
 /// <param name="conString"></param>
 /// <param name="timeActivity"></param>
 internal void SavetoDb(string conString, TimeActivitydto timeActivity)
 {
     var employeeObj = ReturnListItem(timeActivity, "emp") as Employee;
     var CustomerObj = ReturnListItem(timeActivity, "cust") as Customer;
     var ItemObj = ReturnListItem(timeActivity, "item") as Item;
     var dateObj = timeActivity.TxnDate;
     var hoursObj = timeActivity.Hours;
     var qboId = timeActivity.QboId;
     string query = "INSERT INTO [TimeActivity] ([RealmId], [Employee], [Customer], [Item], [Date],  [Hours], [QboId])";
     query += " VALUES (@RealmId, @Employee, @Customer, @Item, @Date, @Hours, @QboId)";
     using (SqlCommand myCommand = new SqlCommand(query, new SqlConnection(conString)))
     {
         myCommand.Connection.Open();
         myCommand.Parameters.AddWithValue("@RealmId", timeActivity.CompanyId);
         myCommand.Parameters.AddWithValue("@Employee", string.Format("{0} {1}", employeeObj.GivenName, employeeObj.FamilyName));
         myCommand.Parameters.AddWithValue("@Customer", string.Format("{0} {1}", CustomerObj.GivenName, CustomerObj.FamilyName));
         myCommand.Parameters.AddWithValue("@Item", ItemObj.Name);
         myCommand.Parameters.AddWithValue("@Date", dateObj);
         myCommand.Parameters.AddWithValue("@Hours", hoursObj);
         myCommand.Parameters.AddWithValue("@QboId", qboId);
         myCommand.ExecuteNonQuery();
         myCommand.Connection.Close();
     }
    
 }
 /// <summary>
 /// return the time activity from sql
 /// </summary>
 /// <param name="timeActivitydto"></param>
 /// <returns></returns>
 private List<TimeActivityFill> GetTimeActivityFromDb(TimeActivitydto timeActivitydto)
 {
     List<TimeActivityFill> fillList = new List<TimeActivityFill>();
     using (SqlConnection sqlConnection = new SqlConnection(timeActivitydto.Syncdto.ConnectionString))
     {
         string oString = "Select * from TimeActivity";
         SqlCommand oCmd = new SqlCommand(oString, sqlConnection);
         sqlConnection.Open();
         using (SqlDataReader oReader = oCmd.ExecuteReader())
         {
             while (oReader.Read())
             {
                 TimeActivityFill timeActivityFill = new TimeActivityFill();
                 timeActivityFill.Employee = oReader["Employee"].ToString();
                 timeActivityFill.Customer = oReader["Customer"].ToString();
                 timeActivityFill.Item = oReader["Item"].ToString();
                 timeActivityFill.Date = oReader["Date"].ToString();
                 timeActivityFill.Hours = oReader["Hours"].ToString();
                 timeActivityFill.QboId = oReader["QboId"].ToString();
                 fillList.Add(timeActivityFill);
             }
             sqlConnection.Close();
         }
     }
     return fillList;
 }
        /// <summary>
        /// Load the drop down list
        /// </summary>
        /// <param name="timeActivitydto"></param>
        /// <returns></returns>
        internal TimeActivitydto LoaddropdownList(TimeActivitydto timeActivitydto)
        {
            timeActivitydto.Employee = timeActivitydto.EmployeeList
               .Select(x =>
                       new SelectListItem
                       {
                           Value = x.Id,
                           Text = x.GivenName
                       });

            timeActivitydto.Employee =  new SelectList(timeActivitydto.Employee, "Value", "Text");
            timeActivitydto.Customer = timeActivitydto.CustomerList
              .Select(x =>
                      new SelectListItem
                      {
                          Value = x.Id,
                          Text = x.GivenName
                      });

            timeActivitydto.Customer = new SelectList(timeActivitydto.Customer, "Value", "Text");
            timeActivitydto.Item = timeActivitydto.ItemList
              .Select(x =>
                      new SelectListItem
                      {
                          Value = x.Id,
                          Text = x.Name
                      });

            timeActivitydto.Item = new SelectList(timeActivitydto.Item, "Value", "Text");
            timeActivitydto.FillTime = GetTimeActivityFromDb(timeActivitydto);
            return timeActivitydto;
        }
 /// <summary>
 /// Save the object to dictionary
 /// </summary>
 /// <param name="controller"></param>
 /// <param name="timeActivity"></param>
 /// <returns></returns>
 internal TimeActivitydto Save(object controller, TimeActivitydto timeActivity)
 {
     timeController = controller as Controller;
     Random random = new Random();
     timeActivity.Id = random.Next(1,100);
     timeActivityRepository.Add(timeActivity.Id, timeActivity);
     timeController.TempData["TimeActivity"] = timeActivityRepository;
     timeController.TempData.Keep();
     return timeActivity;
 }
 /// <summary>
 /// Retrieve based on entity type.
 /// </summary>
 /// <param name="timeActivitydto"></param>
 /// <param name="caseString"></param>
 /// <returns></returns>
 private object ReturnListItem(TimeActivitydto timeActivitydto, string caseString)
 {
     switch (caseString)
     {
         case "emp":
             return timeActivitydto.EmployeeList.Where(x => x.Id == timeActivitydto.EmployeeSelected).First();
         case "cust":
             return timeActivitydto.CustomerList.Where(x => x.Id == timeActivitydto.CustomerSelected).First();
         case "item":
             return timeActivitydto.ItemList.Where(x => x.Id == timeActivitydto.ItemSelected).First();
     }
     return null;
 }
 public JsonResult Save(Int64 id, string empSelect, string cusSelect, string itemSelect, string description)
 {
     timeActivity = id > 0 ? new TimeActivityRepository().Get(this, id) : new TimeActivitydto();
     timeActivityService = new TimeActivityService(timeActivity);
     timeActivity.EmployeeSelected = empSelect;
     timeActivity.CustomerSelected = cusSelect;
     timeActivity.ItemSelected = itemSelect;
     timeActivity.Description = description;
     timeActivity = timeActivityService.Save(timeActivity);
     timeActivityRepository = new TimeActivityRepository();
     timeActivity = timeActivityRepository.Save(this, timeActivity);
     return GetJsonObject(timeActivity, timeActivityRepository);
 }
 public ActionResult Load(Int64 id)
 {
     Syncdto syncDetails = id > 0 ? new SyncRepository().Get(this, id) : new Syncdto();
     timeActivity.oAuthTokens = syncDetails.OauthToken;
     timeActivity.Syncdto = syncDetails;
     timeActivity.EmployeeList = syncDetails.EmployeeList;
     timeActivity.CustomerList = syncDetails.CustomerList;
     timeActivity.ItemList = syncDetails.ItemList;
     timeActivityService = new TimeActivityService(timeActivity);
     timeActivity = timeActivityService.LoaddropdownList(timeActivity);
     timeActivity.CompanyId = timeActivity.oAuthTokens.Realmid;
     timeActivityRepository = new TimeActivityRepository();
     timeActivityRepository.Save(this, timeActivity);
     multiplemodels = new Multiplemodels();
     multiplemodels.TimeActivityModel = timeActivity;
     multiplemodels.SyncObjectsModel = syncDetails;
     multiplemodels.IsConnected = syncDetails.OauthToken.IsConnected;
     multiplemodels.IsReadytoInvoice = true;
     return View("TimeActivity", multiplemodels);
 }
 /// <summary>
 /// Retrieve the JSON object to be passed to client.
 /// </summary>
 /// <param name="timeActivity"></param>
 /// <param name="timeActivityRepository"></param>
 /// <returns></returns>
 private JsonResult GetJsonObject(TimeActivitydto timeActivity,TimeActivityRepository timeActivityRepository)
 {
     try
     {
         var employeeObj = ReturnListItem(timeActivity, "emp") as Employee;
         var CustomerObj = ReturnListItem(timeActivity, "cust") as Customer;
         var ItemObj = ReturnListItem(timeActivity, "item") as Item;
         var dateObj = timeActivity.TxnDate.ToShortDateString();
         var hoursObj = timeActivity.Hours;
         var qboId = timeActivity.QboId;
         object data = new {
                ControlId = timeActivity.Id,
                RealmId = timeActivity.oAuthTokens.Realmid,
                AlertMessage = timeActivity.AlertMessage,
                Employee = string.Format("{0} {1}", employeeObj.GivenName,employeeObj.FamilyName),
                Customer = string.Format("{0} {1}",CustomerObj.GivenName,CustomerObj.FamilyName),
                Item = ItemObj.Name ,
                Date=dateObj,
                Hours=hoursObj,
                QboId = qboId};
         timeActivityRepository.SavetoDb(timeActivity.Syncdto.ConnectionString, timeActivity);
         return Json(data,JsonRequestBehavior.AllowGet);
     }
     catch (Exception ex)
     {
         return null;
     }
 }
 /// <summary>
 /// Fire up service context and repository
 /// </summary>
 /// <param name="timeActivity"></param>
 public TimeActivityService(TimeActivitydto timeActivity)
 {
     dataserviceFactory = new DataserviceFactory(timeActivity.oAuthTokens);
     dataService = dataserviceFactory.getDataService();
     timeActivityRepository = new TimeActivityRepository();
 }
        /// <summary>
        /// Push the time activity to QBO
        /// </summary>
        /// <param name="timeActivitydto"></param>
        /// <returns></returns>
        internal TimeActivitydto Save(TimeActivitydto timeActivitydto)
        {
            try
            {
                TimeActivity timeActivity = new TimeActivity();
            timeActivity.TxnDate = timeActivitydto.Date;
            SelectListItem selectedCustom = GetSelectedItem(timeActivitydto.Customer,timeActivitydto.CustomerSelected);
            timeActivity.CustomerRef = new ReferenceType
            {
               
                Value = selectedCustom.Value,
            };
            SelectListItem selectedItem = GetSelectedItem(timeActivitydto.Item, timeActivitydto.ItemSelected);
            timeActivity.ItemRef = new ReferenceType()
            {
               
                Value = selectedItem.Value
            };
            SelectListItem selectedEmp = GetSelectedItem(timeActivitydto.Employee, timeActivitydto.EmployeeSelected);
            timeActivity.NameOf = TimeActivityTypeEnum.Employee;
            timeActivity.NameOfSpecified = true;
            timeActivity.AnyIntuitObject = new ReferenceType()
            {
              
                Value = selectedEmp.Value
            };
            timeActivity.ItemElementName = ItemChoiceType5.EmployeeRef;
           
            timeActivity.BillableStatus = BillableStatusEnum.NotBillable;
            timeActivity.BillableStatusSpecified = true;
            timeActivity.Taxable = false;
            timeActivity.TaxableSpecified = true;
            //Time
            timeActivity.HourlyRate = new Decimal(0.00);
            timeActivity.HourlyRateSpecified = true;
            timeActivity.Hours = 10;

            timeActivity.HoursSpecified = true;
            timeActivity.Minutes = 0;
            timeActivity.Description = timeActivitydto.Description;
            timeActivity.MinutesSpecified = true;
            timeActivity = dataService.Add<TimeActivity>(timeActivity);
            timeActivitydto.QboId = timeActivity.Id;
            timeActivitydto.Hours = timeActivity.Hours;
            timeActivitydto.TxnDate = timeActivity.TxnDate;
            timeActivitydto.AlertMessage = string.Format("Time Activity successfully created and pushed to QBO (QBO ID = {0})", timeActivity.Id);
            return timeActivitydto;
            }
            catch (Intuit.Ipp.Exception.FaultException ex)
            {
                throw ex;
            }
            catch (Intuit.Ipp.Exception.InvalidTokenException ex)
            {
                throw ex;
            }
            catch (Intuit.Ipp.Exception.SdkException ex)
            {
                throw ex;
            }
        }