public override Int64 Set(string parametersArr) { try { new CustomDAO().GenerateAdjustmentBuild(); List <Foodics.NetSuite.Shared.Model.AdjustmentBuild> ColLstAll = new CustomDAO().SelectAdjustmentLocation(); var ColLst = ColLstAll.DistinctBy(x => new { x.Location_Id, x.Netsuite_Id }).Select(x => new AdjustmentBuild { Location_Id = x.Location_Id, Subsidiary_Id = x.Subsidiary_Id, }).Distinct().ToList(); if (ColLst.Count <= 0) { return(0); } com.netsuite.webservices.InventoryAdjustment[] AdjustArr = new com.netsuite.webservices.InventoryAdjustment[ColLst.Count]; for (int i = 0; i < ColLst.Count; i++) { com.netsuite.webservices.InventoryAdjustment AdjustBuildObject; Foodics.NetSuite.Shared.Model.AdjustmentBuild Obj_info; try { Obj_info = ColLst[i]; //Netsuite invoice type AdjustBuildObject = new com.netsuite.webservices.InventoryAdjustment(); Setting objSetting = new GenericeDAO <Setting>().GetWhere("Subsidiary_Netsuite_Id=" + Obj_info.Subsidiary_Id).FirstOrDefault(); AdjustBuildObject.tranDateSpecified = true; //AdjustBuildObject.tranDate = TimeZoneInfo.ConvertTimeToUtc(DateTime.Now, TimeZoneInfo.Local); AdjustBuildObject.tranDate = TimeZoneInfo.ConvertTimeToUtc(Utility.ConvertToDateTime(ConfigurationManager.AppSettings["InvoiceDate"]), TimeZoneInfo.Local); // adjustment account RecordRef adjustment_account = new RecordRef(); adjustment_account.type = RecordType.account; adjustment_account.typeSpecified = true; adjustment_account.internalId = objSetting.AdjustmentAccount_Netsuite_Id.ToString();//"122"; AdjustBuildObject.account = adjustment_account; // adjustment location RecordRef adjustment_location = new RecordRef(); adjustment_location.type = RecordType.location; adjustment_location.typeSpecified = true; adjustment_location.internalId = Obj_info.Location_Id.ToString(); AdjustBuildObject.location = adjustment_location; AdjustBuildObject.adjLocation = adjustment_location; // subsidiary RecordRef adjustment_subsidiary = new RecordRef(); adjustment_subsidiary.type = RecordType.subsidiary; adjustment_subsidiary.typeSpecified = true; adjustment_subsidiary.internalId = Obj_info.Subsidiary_Id.ToString(); AdjustBuildObject.subsidiary = adjustment_subsidiary; List <Foodics.NetSuite.Shared.Model.AdjustmentBuild> adjustment_items = ColLstAll.Where(x => x.Subsidiary_Id == Obj_info.Subsidiary_Id && x.Location_Id == Obj_info.Location_Id).ToList(); InventoryAdjustmentInventory[] invadjustmentItemArray = new InventoryAdjustmentInventory[adjustment_items.Count()]; for (int x = 0; x < adjustment_items.Count(); x++) { RecordRef item = new RecordRef(); item.internalId = adjustment_items[x].Item_Id.ToString(); invadjustmentItemArray[x] = new InventoryAdjustmentInventory(); invadjustmentItemArray[x].item = item; invadjustmentItemArray[x].location = adjustment_location; invadjustmentItemArray[x].adjustQtyBy = (adjustment_items[x].Quantity * -1); invadjustmentItemArray[x].adjustQtyBySpecified = true; } InventoryAdjustmentInventoryList invList = new InventoryAdjustmentInventoryList(); invList.inventory = invadjustmentItemArray; AdjustBuildObject.inventoryList = invList; AdjustArr[i] = AdjustBuildObject; } catch (Exception ex) { ColLst.RemoveAt(i); LogDAO.Integration_Exception(LogIntegrationType.Error, this.GetType().FullName + "." + System.Reflection.MethodBase.GetCurrentMethod().Name, "Error " + ex.Message); } } WriteResponseList wr = Service(true).addList(AdjustArr); bool result = wr.status.isSuccess; if (result) { //Update database with returned Netsuite ids Updatedlst(ColLst, wr); } } catch (Exception ex) { LogDAO.Integration_Exception(LogIntegrationType.Error, this.GetType().FullName + "." + System.Reflection.MethodBase.GetCurrentMethod().Name, "Error " + ex.Message); } return(0); }
public ActionResult InventoryAdjustment() { List <int> summmary = SummaryOfCurrentCount(); if (summmary[2] != 0 || !AdminEmails.Contains(this.email)) // If there are items left to count, return them to the home page { return(RedirectToAction("Index")); } NetSuiteService service = this.service; // Create the adjustment object InventoryAdjustment adjustment = new InventoryAdjustment(); adjustment.account = new RecordRef(RecordType.account, 147); // Set the adjustment account (147 is NetSuite ID) adjustment.adjLocation = new RecordRef(RecordType.location, 1); // Set adjustment location of South Burlington (1 is NetSuite ID) // All items var items = from m in db.Items select m; // Determine the Week for the count // Take the one code that is greater than 39 (Class C items) and determine the week by subtracting 39 from that code int[] CycleCodes = items.Select(x => x.CycleCountCode).Distinct().ToArray(); int week = 0; foreach (int cyclecode in CycleCodes) { if (cyclecode > 39) { week = cyclecode - 39; } } if (this.NonWeeklyCount != true) { adjustment.memo = "cycle count " + week.ToString() + "--" + DateTime.Now.Year; // Set the adjustment memo } else { adjustment.memo = "entire column count " + DateTime.Now.Year; } // List of items that have been changed var itemsChanged = items.ToList().Where(x => x.OnHand != x.NewOnHand); // We only care about items that have different qty for Adjustments // List of items with bin location changes var binLocationChanged = items.ToList().Where(x => x.NewBinLocation != x.BinLocation); // Create a List of InventoryAdjustmentInventory InventoryAdjustmentInventoryList inventoryList = new InventoryAdjustmentInventoryList(); // Required for Adjustment inventoryList.inventory = new InventoryAdjustmentInventory[itemsChanged.Count()]; // An array of items to be changed int currentIndex = 0; // Keep track of the index // Change the Bin Location for items that have different Bins foreach (var item in binLocationChanged) { var id = item.ID.ToString(); InventoryItem ii = new InventoryItem(); ii.internalId = id; ii.xSetCustomField("custitem_bin_location", item.NewBinLocation.ToString()); service.xUpdate(ii); } if (itemsChanged == null && binLocationChanged != null) { ViewBag.BinOnly = "You have only adjusted the Bin Location, no Inventory adjustment has been created."; } // Create Inventory adjustment for items that have different quantities if (itemsChanged.Count() != 0) { foreach (var item in itemsChanged) // Set the required fields for the Adjustment { InventoryAdjustmentInventory iai = new InventoryAdjustmentInventory(); iai.item = new RecordRef((item.ID).ToString()); iai.location = new RecordRef("1"); iai.xSetAdjustQtyBy(item.NewOnHand - item.OnHand); iai.memo = item.CounterInitials + ": " + item.Notes; inventoryList.inventory[currentIndex] = iai; // Add to array currentIndex++; // Update the Index } adjustment.inventoryList = inventoryList; // Required for adjustment var sumAdjusted = adjustment.inventoryList.inventory.Sum(x => x.adjustQtyBy); // Check to make sure that the local count and NetSuite count match WriteResponse adjustmentAdded = service.xAdd(adjustment); // Push to Netsuite if (adjustmentAdded.status.isSuccess) // Checks to make sure that the adjustment push was successfull { // Create a copy Adjustment to check against the local copy var id = adjustment.internalId; var CountItemsChanged = itemsChanged.Count(); InventoryAdjustment ia = service.xGetRecord <InventoryAdjustment>(id); var sumAdjustedCheck = ia.inventoryList.inventory.Sum(x => x.adjustQtyBy); if (sumAdjusted == sumAdjustedCheck) // Makes sure the quantity changes are the same { ViewBag.adjustmentID = id; return(View(adjustmentAdded)); // We are good to delete the count } else // The quantities are different { ViewBag.ErrorMessage("Something went wrong. Please check NetSuite and make sure everything is EXACTLY as you have entered in this software."); return(View(adjustmentAdded));// Need to check NetSuite, something went wrong } } else // The NetSuite push was not successfull { ViewBag.ErrorMessage = adjustmentAdded.status.statusDetail[0].message.ToString(); return(View(adjustmentAdded)); } } // The user only changed the notes ViewBag.NotesOnly = "You did not change the quantity or bin location of any item in the count. Nothing has changed in NetSuite."; return(View()); }