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);
        }
Beispiel #6
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;
            }
        }
Beispiel #15
0
        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);
        }