Alpha Software Mobile Development Tools:   Alpha Anywhere    |   Alpha TransForm subscribe to our YouTube Channel  Follow Us on LinkedIn  Follow Us on Twitter  Follow Us on Facebook

Announcement

Collapse

The Alpha Software Forum Participation Guidelines

The Alpha Software Forum is a free forum created for Alpha Software Developer Community to ask for help, exchange ideas, and share solutions. Alpha Software strives to create an environment where all members of the community can feel safe to participate. In order to ensure the Alpha Software Forum is a place where all feel welcome, forum participants are expected to behave as follows:
  • Be professional in your conduct
  • Be kind to others
  • Be constructive when giving feedback
  • Be open to new ideas and suggestions
  • Stay on topic


Be sure all comments and threads you post are respectful. Posts that contain any of the following content will be considered a violation of your agreement as a member of the Alpha Software Forum Community and will be moderated:
  • Spam.
  • Vulgar language.
  • Quotes from private conversations without permission, including pricing and other sales related discussions.
  • Personal attacks, insults, or subtle put-downs.
  • Harassment, bullying, threatening, mocking, shaming, or deriding anyone.
  • Sexist, racist, homophobic, transphobic, ableist, or otherwise discriminatory jokes and language.
  • Sexually explicit or violent material, links, or language.
  • Pirated, hacked, or copyright-infringing material.
  • Encouraging of others to engage in the above behaviors.


If a thread or post is found to contain any of the content outlined above, a moderator may choose to take one of the following actions:
  • Remove the Post or Thread - the content is removed from the forum.
  • Place the User in Moderation - all posts and new threads must be approved by a moderator before they are posted.
  • Temporarily Ban the User - user is banned from forum for a period of time.
  • Permanently Ban the User - user is permanently banned from the forum.


Moderators may also rename posts and threads if they are too generic or do not property reflect the content.

Moderators may move threads if they have been posted in the incorrect forum.

Threads/Posts questioning specific moderator decisions or actions (such as "why was a user banned?") are not allowed and will be removed.

The owners of Alpha Software Corporation (Forum Owner) reserve the right to remove, edit, move, or close any thread for any reason; or ban any forum member without notice, reason, or explanation.

Community members are encouraged to click the "Report Post" icon in the lower left of a given post if they feel the post is in violation of the rules. This will alert the Moderators to take a look.

Alpha Software Corporation may amend the guidelines from time to time and may also vary the procedures it sets out where appropriate in a particular case. Your agreement to comply with the guidelines will be deemed agreement to any changes to it.



Bonus TIPS for Successful Posting

Try a Search First
It is highly recommended that a Search be done on your topic before posting, as many questions have been answered in prior posts. As with any search engine, the shorter the search term, the more "hits" will be returned, but the more specific the search term is, the greater the relevance of those "hits". Searching for "table" might well return every message on the board while "tablesum" would greatly restrict the number of messages returned.

When you do post
First, make sure you are posting your question in the correct forum. For example, if you post an issue regarding Desktop applications on the Mobile & Browser Applications board , not only will your question not be seen by the appropriate audience, it may also be removed or relocated.

The more detail you provide about your problem or question, the more likely someone is to understand your request and be able to help. A sample database with a minimum of records (and its support files, zipped together) will make it much easier to diagnose issues with your application. Screen shots of error messages are especially helpful.

When explaining how to reproduce your problem, please be as detailed as possible. Describe every step, click-by-click and keypress-by-keypress. Otherwise when others try to duplicate your problem, they may do something slightly different and end up with different results.

A note about attachments
You may only attach one file to each message. Attachment file size is limited to 2MB. If you need to include several files, you may do so by zipping them into a single archive.

If you forgot to attach your files to your post, please do NOT create a new thread. Instead, reply to your original message and attach the file there.

When attaching screen shots, it is best to attach an image file (.BMP, .JPG, .GIF, .PNG, etc.) or a zip file of several images, as opposed to a Word document containing the screen shots. Because Word documents are prone to viruses, many message board users will not open your Word file, therefore limiting their ability to help you.

Similarly, if you are uploading a zipped archive, you should simply create a .ZIP file and not a self-extracting .EXE as many users will not run your EXE file.
See more
See less

How to freeze past invoices

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    How to freeze past invoices

    I have a standard Invoice--InvLineItems set with its data entry form. I need to freeze past invoices, ei implement the following restrictions:
    for any invoice prior the year end date (say, Dec 31 2007), the user
    - can't delete the invoice
    - can't modify the invoice
    - can't modify any line item
    - can't delete any line item
    - can't add a line item to the invoice

    Any pointer will be appreciated

    #2
    Re: How to freeze past invoices

    Where is the date stored?

    You can code the CanSaveRecord and CanDeleteRecord in a table's field rules.

    if year(somedatefield) < year(date())
    'message box to explain why no changes allowed if desired
    cancel()
    end if

    You could also have the onfetch event for a form check the date of the invoice and set the fields to read only if the date is in the previous year.
    There can be only one.

    Comment


      #3
      Re: How to freeze past invoices

      Originally posted by Stan Mathews View Post
      Where is the date stored?
      The Date is stored in Invoice header

      Comment


        #4
        Re: How to freeze past invoices

        Could someone please review this script that have compiled by combining examples from the user guide. Please don't laugh, i am barely starting to understand Xbasic.
        My form's name is MainForm, the embedded browse is Browse1. I placed the script in the OnFetch event.

        SELECT
        CASE Year(MainForm.Inv_Date) < 2008
        :MainForm.restrict_change=.t.
        :MainForm.restrict_enter=.t.
        :MainForm.restrict_delete=.t.
        browse1.browse.readonly=.t.
        CASE Year(mainform.Inv_Date) = 2008
        :MainForm.restrict_change=.f.
        :MainForm.restrict_enter=.f.
        :MainForm.restrict_delete=.f.
        browse1.browse.readonly=.f.
        END SELECT


        it seems to work..., but need an expert opinion

        Comment


          #5
          Re: How to freeze past invoices

          What's going to happen next year? ;)

          Seriously...

          We use invoices at our shop.

          Each invoice form has a "completed date" field that is normally blank until the invoice is paid.

          Each time you open the form for viewing, it checks to see if the field is not blank.

          If the invoice is completed, you require a password to edit it's contents.


          Works very well and it's not time sensitive.

          --Bob

          Comment


            #6
            Re: How to freeze past invoices

            Hi Bob:
            We are nearly neighbours, i am in Vancouver.
            We are a travel agency; unlike most businesses every invoice has 2 sides: customer side (A/R, which changes only exceptionally) and a vendor side (A/P: commission, GST/commission which change often). These figures become definite when we receive the commission from the vendor and often times the original figures have to be corrected (the vendor decided to send less or more than originally stated, sometimes they never send the commission, especially on hotel bookings), sometimes the commission is sent months after the client has traveled. All this has to be corrected on the 2nd side of the invoice; the corrections are made as we go. However once the accounts have been audited, I need to freeze all past invoices.

            I need someone to review and streamline my script.

            Comment


              #7
              Re: How to freeze past invoices

              Gaby,
              By your script it looks like you want this done automatically....but how can you seeing as how there is no set criteria in which to establish when a "freeze" should occur?? Unless I'm missing something.... :) Maybe the value of when the auditing is done could be used to set a logical field or your restrictions like the following.

              First thought is to have a logical field that can be set (say via a password protected button that would toggle the value or restrictions) whenever you or the Admin deemed appropriate.

              very similar to what Bob proposed--just iterated a bit differently is all.
              Mike
              __________________________________________
              It is only when we forget all our learning that we begin to know.
              It's not what you look at that matters, it's what you see.
              Henry David Thoreau
              __________________________________________



              Comment


                #8
                Re: How to freeze past invoices

                Originally posted by MikeC View Post
                Gaby,
                Maybe the value of when the auditing is done could be used to set a logical field or your restrictions like the following.
                l.
                That's right. It is when the audit is completed and figures are corrected (usually 80-90 days after the year end). Does not need to be done automatically.
                Typical scenario: around March 20-25 2008 when audit is completed and we need to freeze past invoices, I go back to the script and change the year from 2006 to 2007. Do the same thing the following year in March 2009 (manually change year in script from 2007 to 2008), etc...

                My main concern is if my script is programatically correct.

                Comment


                  #9
                  Re: How to freeze past invoices

                  Gaby,
                  The script appears to be fine (not saying I am one of the experts you were hoping to get an answer from!).

                  As a side note-- I started down the road you are using, but soon changed my mind as I ended up wanting my entire database except for reporting to be basically frozen in regard to change.

                  I used a global variable called gvRestrict_Archive set with an autoexec script (Alpha plays this script automatically every time it opens unless set to not do this). I then placed a script on the CanSaveRecord of the field events for all the tables I wanted to enforce this on.
                  Code:
                  if gvRestrict_Archive=.T. then
                     ui_msg_box("Attention!","You cannot Change or Enter data when viewing an Archive file.",UI_ATTENTION_SYMBOL+UI_OK)
                     cancel()
                     end
                  end if
                  When set to True nothing can be saved.

                  It sounds like you could do similar on the CanSave event of a form if you wanted or needed an alternative later on.
                  Mike
                  __________________________________________
                  It is only when we forget all our learning that we begin to know.
                  It's not what you look at that matters, it's what you see.
                  Henry David Thoreau
                  __________________________________________



                  Comment


                    #10
                    Re: How to freeze past invoices

                    Mike: sounds a very good approach. I'll study it and try to implement it. Thanks for sharing

                    Comment


                      #11
                      Re: How to freeze past invoices

                      I think you may have to say CASE Year(MainForm:Inv_Date.value) < 2008

                      when referring to layout objects, you use value
                      when referring to table field values
                      t=table.current()
                      case t.first_name="Martin"

                      first_name.value refers to the current value in the form whether it is saved on still in change mode

                      t.first_name refers to the current saved value in the table, even when the form's unsaved value is different
                      Cole Custom Programming - Terrell, Texas
                      972 524 8714
                      [email protected]

                      ____________________
                      "A young man who is not liberal has no heart, but an old man who is not conservative has no mind." GB Shaw

                      Comment


                        #12
                        Re: How to freeze past invoices

                        Although most times you would be correct Martin, the expression builder disagrees and it should simply be this when it is a field on a form:
                        Code:
                        CASE Year(Inv_Date) < 2008
                        if it is the parent object/field. If a child then the child table should preface it -- if child was say "Chld" then it would be:
                        Code:
                        CASE Year(Chld->Inv_Date) < 2008
                        I would have to think about it some to say why---I usually let Alpha decide such things by letting the expression builder or genies determine it!! :)
                        Mike
                        __________________________________________
                        It is only when we forget all our learning that we begin to know.
                        It's not what you look at that matters, it's what you see.
                        Henry David Thoreau
                        __________________________________________



                        Comment


                          #13
                          Re: How to freeze past invoices

                          However once the accounts have been audited, I need to freeze all past invoices.
                          Gabe:

                          I'd do the same thing as what I said previously...

                          Create a field called: Audit_Date (added to you Invoice_Header table)

                          Normally the field will be empty until you've gone through the audit process, at which time you enter the correct date. (Can be done with a button and script, whenever needed)

                          Once the "Audit_Date" field is filled, the Invoice form is locked with the appropriate code.

                          email me and I'll help you out if req'd.

                          --Bob

                          Comment

                          Working...
                          X