static SynchronizeEntity GetUserDoc(SynchronizeEntity syncEntity) { if (syncEntity.Row is InvItemClient) { var userDocClient = new UserDocsClient(); userDocClient.SetMaster(syncEntity.Row); syncEntity.Row = userDocClient; } return(syncEntity); }
async private void liPhoto_ButtonClicked(object sender) { if (editrow != null) { var userDocsClient = new UserDocsClient(); userDocsClient.SetMaster(editrow); userDocsClient._RowId = editrow._Photo; await api.Read(userDocsClient); ViewDocument(TabControls.UserDocsPage3, userDocsClient); } }
private void DataControl_CurrentItemChanged(object sender, DevExpress.Xpf.Grid.CurrentItemChangedEventArgs e) { var oldSelectedItem = e.OldItem as UserDocsClient; var selectedItem = e.NewItem as UserDocsClient; SelectedItem = selectedItem; if (oldSelectedItem != selectedItem && dgDocsGrid._syncEntity != null) { dgDocsGrid._syncEntity.Row = selectedItem; dgDocsGrid._syncEntity.RowChaged(); } }
async private void liInvoiceAttachment_ButtonClicked(object sender) { if (editrow != null) { var userDocsClient = new UserDocsClient(); userDocsClient.SetMaster(editrow); userDocsClient._RowId = editrow._InvoiceAttachment; await api.Read(userDocsClient); ViewDocument(TabControls.UserDocsPage3, userDocsClient, string.Format(Uniconta.ClientTools.Localization.lookup("ViewOBJ"), Uniconta.ClientTools.Localization.lookup("Attachment")), ViewerType.Attachment); } }
static void UpdateDocsBuffer(CrudAPI api, byte[][] buffers, UserDocsClient[] multiDocs, int Cnt) { for (int i = 0; i < Cnt; i++) { var updateDoc = multiDocs[i]; updateDoc._Data = buffers[i]; var org = new UserDocsClient(); org.Copy(updateDoc); org._Data = updateDoc._Data; multiDocs[i] = org; } uploadingDocs = Cnt; UpdateBuffersOne(api, multiDocs, 0); }
private async void ShowViewer(InvItemClient invItem, int rowId, string header) { if (rowId == 0) { return; } var userDocsClient = new UserDocsClient(); userDocsClient.SetMaster(invItem); userDocsClient.RowId = rowId; await api.Read(userDocsClient); #if !SILVERLIGHT var newDocumentViewer = new Uniconta.ClientTools.Controls.DocumentViewerWindow(userDocsClient, api, header); newDocumentViewer.Show(); #endif }
async private void liURL_ButtonClicked(object sender) { if (editrow != null) { var userDocsClient = new UserDocsClient(); userDocsClient.SetMaster(editrow); userDocsClient._RowId = editrow._URL; await api.Read(userDocsClient); #if !SILVERLIGHT if (session.User._UseDefaultBrowser) { Utility.OpenWebSite(userDocsClient.Url); } else #endif ViewDocument(TabControls.UserDocsPage3, userDocsClient); } }
private async void ImageToPdfConverter(UserDocsClient userDocClient) { if (userDocClient._DocumentType != FileextensionsTypes.JPEG || userDocClient._DocumentType != FileextensionsTypes.PNG) { if (UnicontaMessageBox.Show(Uniconta.ClientTools.Localization.lookup("AreYouSureToContinue"), Uniconta.ClientTools.Localization.lookup("Confirmation"), MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.No) { return; } busyIndicator.IsBusy = true; var userDoc = await UtilDisplay.GetUserDocDataOrUrl(userDocClient, api); var pdfBytes = UtilDisplay.ConvertImageSourceToPDF(userDoc._Data); if (pdfBytes == null || pdfBytes.Length == 0) { busyIndicator.IsBusy = false; UnicontaMessageBox.Show(Uniconta.ClientTools.Localization.lookup("PdfStreamfailed"), Uniconta.ClientTools.Localization.lookup("Error")); return; } //To save any information on the editable grid saveGrid(); userDocClient._DocumentType = FileextensionsTypes.PDF; userDocClient._Data = pdfBytes; var result = await api.Update(userDocClient); if (result != ErrorCodes.Succes) { UtilDisplay.ShowErrorCode(result); } else { dgDocsGrid.Filter(null); } } else { UnicontaMessageBox.Show(Uniconta.ClientTools.Localization.lookup("ConversionNotSupport"), Uniconta.ClientTools.Localization.lookup("Warning")); } }
async private void liURL_ButtonClicked(object sender) { if (editrow != null) { var userDocsClient = new UserDocsClient(); userDocsClient.SetMaster(editrow); userDocsClient._RowId = editrow._URL; await api.Read(userDocsClient); #if !SILVERLIGHT if (session.User._UseDefaultBrowser) { Utility.OpenWebSite(userDocsClient.Url); } else #endif ViewDocument(TabControls.UserDocsPage3, userDocsClient, string.Format(Uniconta.ClientTools.Localization.lookup("ViewOBJ"), Uniconta.ClientTools.Localization.lookup("Url")), ViewerType.Url); } }
async private void UpdateJoinedPDFContents(UserDocsClient saveAttachment, UserDocsClient copiedAttachment, byte[] mergedContents, bool isDeleteAttachment) { saveAttachment._Data = mergedContents; busyIndicator.IsBusy = true; if (saveAttachment.RowId > 0) { api.UpdateNoResponse(saveAttachment); } else { await api.Insert(saveAttachment); } if (isDeleteAttachment && copiedAttachment != null) { await api.Delete(copiedAttachment); } await dgDocsGrid.Filter(null); busyIndicator.IsBusy = false; }
private void SetMetaInfo(UserDocsClient userDocsClient) { metaInfoCtrl.SetlValues(userDocClient.Text, userDocClient.Created.ToString("g"), userDocClient.DocumentType.ToString(), userDocClient.UserName); }
async void JoinPDFAttachments() { UserDocsClient attachement1 = null, attachement2 = null; CWJoinPDFDocument cwJoinPdfDoc = null; if (dgDocsGrid.SelectedItems != null) { var attachements = dgDocsGrid.SelectedItems.Cast <UserDocsClient>().ToArray(); if (attachements.Length == 0) { return; } if (attachements.Any(v => v._DocumentType != FileextensionsTypes.PDF)) { UnicontaMessageBox.Show(Uniconta.ClientTools.Localization.lookup("InvalidFileFormat"), Uniconta.ClientTools.Localization.lookup("Error"), MessageBoxButton.OK); return; } if (attachements.Length >= 2) { attachement2 = attachements[1]; } attachement1 = attachements[0]; if (attachement1 != null && attachement1._Data == null) { await api.Read(attachement1); } if (attachement2 != null && attachement2._Data == null) { await api.Read(attachement2); } } //To save any information on the editable grid saveGrid(); if (attachement1 != null && attachement2 != null) { cwJoinPdfDoc = new CWJoinPDFDocument(attachement1._Data, attachement2._Data); } else if (attachement1 != null) { cwJoinPdfDoc = new CWJoinPDFDocument(attachement1._Data); } else if (attachement2 != null) { cwJoinPdfDoc = new CWJoinPDFDocument(null, attachement2._Data); } else { cwJoinPdfDoc = new CWJoinPDFDocument(); } cwJoinPdfDoc.Closed += delegate { if (cwJoinPdfDoc.DialogResult == true) { var mergedContents = cwJoinPdfDoc.MergedPDFContents; var deleteMsg = string.Empty; if (cwJoinPdfDoc.IsLeftPdfDelete) { deleteMsg = string.Format(Uniconta.ClientTools.Localization.lookup("ConfirmDeleteOBJ"), string.Format("{0} {1}", Uniconta.ClientTools.Localization.lookup("Left"), Uniconta.ClientTools.Localization.lookup("Attachment"))); } else if (cwJoinPdfDoc.IsRightPdfDelete) { deleteMsg = string.Format(Uniconta.ClientTools.Localization.lookup("ConfirmDeleteOBJ"), string.Format("{0} {1}", Uniconta.ClientTools.Localization.lookup("Right"), Uniconta.ClientTools.Localization.lookup("Attachment"))); } var deleteAttachment = !string.IsNullOrEmpty(deleteMsg) && attachement1.RowId > 0 && UnicontaMessageBox.Show(deleteMsg, Uniconta.ClientTools.Localization.lookup("Warning"), MessageBoxButton.YesNo) == MessageBoxResult.Yes ? true : false; if (cwJoinPdfDoc.IsLeftJoin) { UpdateJoinedPDFContents(attachement1, attachement2, mergedContents, deleteAttachment); } else { UpdateJoinedPDFContents(attachement2, attachement1, mergedContents, deleteAttachment); } } }; cwJoinPdfDoc.Show(); }
async public override Task <ErrorCodes> SaveData() { SelectedItem = null; /* * Awaiting the save data as we need to have rowid * With row id we would be able to save the buffers seperately * So first we save the records and then update the buffers */ var addedRows = AddedRows; var addedRowCount = addedRows.Count(); if (addedRowCount > 0) { var userDocs = new UserDocsClient[addedRowCount]; var buffers = new byte[addedRowCount][]; int iCtr = 0; foreach (var row in addedRows) { var doc = row.DataItem as UserDocsClient; userDocs[iCtr] = doc; if (doc._Data != null) { #if !SILVERLIGHT if (doc._DocumentType == FileextensionsTypes.JPEG || doc._DocumentType == FileextensionsTypes.BMP || doc._DocumentType == FileextensionsTypes.GIF || doc._DocumentType == FileextensionsTypes.TIFF) { var imageBytes = FileBrowseControl.ImageResize(doc._Data, ".jpg"); if (imageBytes != null) { doc._Data = imageBytes; doc._NoCompression = (doc._DocumentType == FileextensionsTypes.JPEG); doc._DocumentType = FileextensionsTypes.JPEG; } } #endif buffers[iCtr] = doc._Data; doc._Data = null; iCtr++; } } var result = await base.SaveData(); if (result != ErrorCodes.Succes) { return(result); } UpdateDocsBuffer(api, buffers, userDocs, iCtr); this.RefreshData(); return(0); } else { return(await base.SaveData()); } }
static void UpdateBuffersOne(CrudAPI api, UserDocsClient[] multiVouchers, int i) { var vouchersClient = multiVouchers[i]; if (vouchersClient == null) { for (int j = 0; (j < multiVouchers.Length); j++) { if (multiVouchers[j] != null) { UpdateBuffersOne(api, multiVouchers, j); return; } } uploadingDocs = 0; return; } var org = new UserDocsClient(); org.Copy(vouchersClient); int cnt = 0; retry: try { var tsk = api.Update(org, vouchersClient); tsk.ContinueWith((e) => { int next; if (!e.IsFaulted) { multiVouchers[i] = null; next = i + 1; // go to next } else { next = i; } var remaining = multiVouchers.Length - next; if (remaining > 0) { uploadingDocs = remaining; UpdateBuffersOne(api, multiVouchers, next); } else { uploadingDocs = 0; } }, TaskContinuationOptions.None); #if !SILVERLIGHT var tskw = Task.Delay(60000); tskw.ContinueWith((e) => { if (multiVouchers[i] != null) { if ((i + 1) < multiVouchers.Length) { UpdateBuffersOne(api, multiVouchers, i + 1); } Task.Delay(5000).ContinueWith((x) => { UpdateBuffersOne(api, multiVouchers, i); }, TaskContinuationOptions.None); } }, TaskContinuationOptions.None); #endif } catch (Exception ex) { if (++cnt < 3) { goto retry; } throw ex; } }
static void Main(string[] args) { AskCredentials(out username, out password); #region Create session and log in // Create connection var connection = new UnicontaConnection(APITarget.Live); // Create session var session = new Session(connection); // Login user. The guid required here is the partner API key which you will get when you ask for it as a partner. var apiKey = new Guid("00000000-0000-0000-0000-000000000000"); if (apiKey.Equals(Guid.Empty)) { Console.WriteLine("You need to set the API key"); return; } var logged = session.LoginAsync(username, password, Uniconta.Common.User.LoginType.API, apiKey).Result; if (logged != Uniconta.Common.ErrorCodes.Succes) { Console.WriteLine("Login failed"); return; } #endregion #region Selecting a company for the session // Select the company for session, otherwise it will be default company in Uniconta var companies = session.GetCompanies().Result; var company = session.GetCompany(companies[0].CompanyId).Result; // Getting specific company var defaultCompany = session.User._DefaultCompany; // returns an ID of the company session.OpenCompany(defaultCompany, true); // true sets the default company for the session, not as a default company for the user #endregion #region API examples // Set the API you want to use. Query, Crud and other APIs with different functionality var api = new CrudAPI(session, company); var qapi = new QueryAPI(session, company); #endregion #region Create records // Insert example CrmProspectClient prospect = new CrmProspectClient(); prospect.Name = "UC corp."; prospect.CompanyRegNo = "12315151"; prospect.Address1 = "Tree 1, Branch 2"; // Single record insert var error = api.Insert(prospect).Result; Thread.Sleep(500); // This is just to make sure that insert is done before I request data var tempProspects = api.Query <CrmProspectClient>().Result; // This is without any filters and gets all the entities // This is local LINQ query, instead of using for loop or other loops to find correct entity var master = tempProspects.Where(pr => pr.Name == "UC corp.").FirstOrDefault(); var contacts = new List <ContactClient>(); ContactClient contact = new ContactClient(); contact.Name = "Jane Doe"; contact.Email = "*****@*****.**"; contact.SetMaster(master); contacts.Add(contact); contact = new ContactClient(); contact.Name = "John Doe"; contact.Email = "*****@*****.**"; contact.SetMaster(master); contacts.Add(contact); // Bulk insert, warning, dont insert too many records. Try to do it in batches. error = api.Insert(contacts).Result; #endregion #region Read records // Plain no filter query, gets all the records on this entity in session company. var debtorOrders = api.Query <DebtorOrderClient>().Result; // Just to show, what we got foreach (var creditor in debtorOrders) { Console.WriteLine("Order: " + creditor.OrderNumber + " - " + creditor.Account); } // Querying rows that are all related to master record. var orderLines = api.Query <DebtorOrderLineClient>(debtorOrders[0]).Result; // Setting up a filter DateTime fromDate = new DateTime(DateTime.Today.Year, DateTime.Today.Month, 1); DateTime toDate = DateTime.Today; var filter = new List <PropValuePair> { PropValuePair.GenereteWhereElements("Date", typeof(DateTime), $"{fromDate.ToString("d/M-yyyy", CultureInfo.InvariantCulture)}..{toDate.ToString("d/M-yyyy", CultureInfo.InvariantCulture)}"), PropValuePair.GenereteOrderByElement("Account", true) // This is sorting filter. }; var invoices = api.Query <DebtorInvoiceClient>(filter).Result; // Creating SQL filter filter = new List <PropValuePair>(); filter.Add(PropValuePair.GenereteWhere("Account <= '1234' and Name like 'Something'")); var debtorClients = api.Query <DebtorClient>(filter).Result; // Pagination filter var page = 0; var pageSize = 10; filter = new List <PropValuePair>(); filter.Add(PropValuePair.GenereteOrderByElement("RowId", false)); filter.Add(PropValuePair.GenereteSkipN(pageSize * page)); filter.Add(PropValuePair.GenereteTakeN(pageSize * (page + 1))); debtorClients = api.Query <DebtorClient>(filter).Result; #endregion #region Update records // Update example var prospects = api.Query <CrmProspect>().Result; prospects[0]._Address1 = "Tree 2, Branch 3"; error = api.Update(prospects[0]).Result; // Update example using streamingmanager to make sure only fields you updated will be updated prospects = api.Query <CrmProspect>().Result; var updProspect = prospects[0]; var originalProspect = StreamingManager.Clone(updProspect); updProspect._Address1 = "Tree 2, Branch 3"; error = api.Update(originalProspect, updProspect).Result; // And again, you can update in bulk. #endregion #region Delete records // Delete näide prospects = api.Query <CrmProspect>().Result; error = api.Delete(prospects[0]).Result; #endregion #region Additional possibilities // MultiCrud enables you to insert, update and delete at the same time // api.MultiCrud() // NoResponse if no response is required with these operations // api.InsertNoResponse(); // api.UpdateNoResponse(); // api.DeleteNoResponse(); // Cache SQLCache cache = api.CompanyEntity.GetCache(typeof(InvItemClient)); if (cache == null) { cache = api.CompanyEntity.LoadCache(typeof(InvItemClient), api).Result; } var item = cache.Get("1001"); // Gets all records from cache var invEntities = cache.GetRecords as InvItemClient[]; // Get specific items var specItems = invEntities.Where(i => i.KeyName.Contains("old") && i.Available > 3); #endregion #region UserDocuments // Insert UserDocuments var file = File.ReadAllBytes(@"PATH TO FILE"); UserDocsClient newUserDoc = new UserDocsClient { Created = DateTime.Now, DocumentType = FileextensionsTypes.DOCX, Text = "My file name for UC", _Data = file, }; newUserDoc.SetMaster(prospect); ErrorCodes errorCode = api.Insert(newUserDoc).Result; // Read UserDocuments var prospectDocuments = api.Query <UserDocsClient>(prospect).Result; if (prospectDocuments.Length != 0) { var readResult = api.Read(prospectDocuments[0]).Result; var fileBytes = prospectDocuments[0]._Data; if (prospectDocuments[0].DocumentType == FileextensionsTypes.DOCX) { File.WriteAllBytes(@"PATH TO FILE", fileBytes); } } #endregion /*Other APIs: * * GeneralLedger: * • ReportAPI * • BankStatementAPI * • DocumentAPI * • FinancialYearAPI * • PeriodTotalAPI * • PostingAPI * • StandardGLAccountAPI * DebtorCreditor: * • DebtorOrderAPI * • InvoiceAPI * • ReportAPI * • TransactionAPI * Inventory: * • PostingAPI * • ReportAPI * System: * • CompanyAPI * • NumberSerieAPI * • CompanyAccessAPI * • UserAPI * */ // Always try to close your session when done. session.LogOut(); }
////summary //// The Execute method to execute on the basis of parameter passed ////summary ////Params UnicontaBaseEntity master :- To pass the master table ////Params UnicontaBaseEntity currentRow :- To pass the current row ////Params IEnumerable<UnicontaBaseEntity> source :- To pass List of UnicontaBaseEntity ////Params String Command :- pass the command ////Params String args :- pass the argument ////Returns ErrorCodes public ErrorCodes Execute(UnicontaBaseEntity master, UnicontaBaseEntity currentRow, IEnumerable <UnicontaBaseEntity> source, string command, string args) { if (currentRow == null || !(currentRow is DebtorOrderClient)) { MessageBox.Show("ERROR: No row or wrong type"); return(ErrorCodes.Exception); } // Parse currentRow var order = currentRow as DebtorOrderClient; // Parse args var itemList = args.Split(',').Select(x => x.Split(':')).ToList(); if (itemList == null) { MessageBox.Show("No Args"); return(ErrorCodes.Exception); } // Getting Items var itemFilter = ""; itemList.ForEach(item => itemFilter += $"{item[0]};"); var itemFilters = new List <PropValuePair> { PropValuePair.GenereteWhereElements("KeyName", typeof(string), itemFilter) }; var items = crudAPI.Query <InvItemClient>(itemFilters).Result.ToList(); // Creating new order lines var newOrderLines = new List <DebtorOrderLineClient>(); foreach (var item in items) { var itemQty = itemList.FirstOrDefault(x => x[0] == item.KeyName); if (itemQty == null) { continue; } var orderLine = new DebtorOrderLineClient { _Item = item.Item, _Qty = double.Parse(itemQty[1]), _Price = item.SalesPrice1 }; orderLine.SetMaster(order); newOrderLines.Add(orderLine); } // Call insert API var insertError = crudAPI.Insert(newOrderLines).Result; if (insertError != ErrorCodes.Succes) { MessageBox.Show("ERROR: Failed to insert order lines"); return(ErrorCodes.Exception); } // Attacting UserDocument to order. var imageFile = File.ReadAllBytes(@"C:\src\Uniconta\Technical-Training-Cases-master\TrainingData\LIGHT-FLOORPANEL.jpg"); UserDocsClient newUserDoc = new UserDocsClient { Created = DateTime.Now, DocumentType = FileextensionsTypes.JPEG, Text = "LIGHT-FLOORPANEL.jpg", _Data = imageFile, }; newUserDoc.SetMaster(order); // Calling insert API if (crudAPI.Insert(newUserDoc).Result != ErrorCodes.Succes) { MessageBox.Show("ERROR: Failed to insert UserDocument"); return(ErrorCodes.Exception); } // Writes file to disk var orderDocuments = crudAPI.Query <UserDocsClient>(order).Result; if (orderDocuments.Length != 0) { var readResult = crudAPI.Read(orderDocuments[0]).Result; var fileBytes = orderDocuments[0]._Data; if (orderDocuments[0].DocumentType == FileextensionsTypes.JPEG) { File.WriteAllBytes(@"C:\src\Uniconta\Technical-Training-Cases-master\TrainingData\LIGHT-FLOORPANEL-return.jpg", fileBytes); } } // Refresh Grid View if (OnExecute != null) { PluginEventArgs arg = new PluginEventArgs(); arg.EventType = PluginEvent.RefreshGrid; OnExecute(null, arg); } return(ErrorCodes.Succes); }